<?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>121749</bug_id>
          
          <creation_ts>2013-09-21 12:14:24 -0700</creation_ts>
          <short_desc>Move DFG inline caching logic into jit/</short_desc>
          <delta_ts>2013-09-30 06:15:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>121641</blocked>
    
    <blocked>122102</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jonlee</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>931799</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-21 12:14:24 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931812</commentid>
    <comment_count>1</comment_count>
      <attachid>212281</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-21 13:16:06 -0700</bug_when>
    <thetext>Created attachment 212281
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931813</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-21 13:17:24 -0700</bug_when>
    <thetext>Attachment 212281 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/CallLinkInfo.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/StructureStubInfo.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGRegisterSet.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGRepatch.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGRepatch.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGScratchRegisterAllocator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGThunks.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGThunks.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/jit/AssemblyHelpers.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITCall.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITCall32_64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOperationWrappers.h&apos;, u&apos;Source/JavaScriptCore/jit/JITOperations.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOperations.h&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.h&apos;, u&apos;Source/JavaScriptCore/jit/Repatch.cpp&apos;, u&apos;Source/JavaScriptCore/jit/Repatch.h&apos;, u&apos;Source/JavaScriptCore/jit/ScratchRegisterAllocator.h&apos;, u&apos;Source/JavaScriptCore/jit/ThunkGenerators.cpp&apos;, u&apos;Source/JavaScriptCore/jit/ThunkGenerators.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/jit/Repatch.cpp:274:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/Repatch.cpp:560:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/Repatch.cpp:561:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/Repatch.cpp:722:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/jit/Repatch.cpp:759:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/jit/Repatch.cpp:796:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/jit/Repatch.cpp:880:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/CodeBlock.cpp:53:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:81:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:94:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:117:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:130:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:145:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:156:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:177:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:188:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/jit/Repatch.h:26:  #ifndef header guard has wrong style, please use: Repatch_h  [build/header_guard] [5]
Total errors found: 17 in 33 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>931819</commentid>
    <comment_count>3</comment_count>
      <attachid>212281</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-21 13:42:02 -0700</bug_when>
    <thetext>Comment on attachment 212281
the patch

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

&gt; Source/JavaScriptCore/jit/JITCall.cpp:135
&gt;  void JIT::compileCallEval(Instruction* instruction)
&gt;  {
&gt; +    
&gt;      JITStubCall stubCall(this, cti_op_call_eval); // Initializes ScopeChain; ReturnPC; CodeBlock.

You didn&apos;t mean to add this line.

&gt; Source/JavaScriptCore/jit/Repatch.h:27
&gt; +#define DFGRepatch_h

You should fix the header guard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931820</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-21 13:42:13 -0700</bug_when>
    <thetext>rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931822</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-21 13:45:57 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 212281 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=212281&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITCall.cpp:135
&gt; &gt;  void JIT::compileCallEval(Instruction* instruction)
&gt; &gt;  {
&gt; &gt; +    
&gt; &gt;      JITStubCall stubCall(this, cti_op_call_eval); // Initializes ScopeChain; ReturnPC; CodeBlock.
&gt; 
&gt; You didn&apos;t mean to add this line.

Word.

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/Repatch.h:27
&gt; &gt; +#define DFGRepatch_h
&gt; 
&gt; You should fix the header guard.

Yeah.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931835</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-21 16:10:31 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/156235</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931839</commentid>
    <comment_count>7</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2013-09-21 16:54:33 -0700</bug_when>
    <thetext>This broke the Windows port:
http://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/52505</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931840</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-21 17:05:27 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; This broke the Windows port:
&gt; http://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/52505

Fixing...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931843</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-21 17:19:53 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; This broke the Windows port:
&gt; &gt; http://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/52505
&gt; 
&gt; Fixing...

Actually, I will revert.  There&apos;s no way to fix Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931844</commentid>
    <comment_count>10</comment_count>
      <attachid>212289</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-21 17:57:28 -0700</bug_when>
    <thetext>Created attachment 212289
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931845</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-21 17:57:50 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931846</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-21 18:00:35 -0700</bug_when>
    <thetext>Attachment 212289 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/CallLinkInfo.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/StructureStubInfo.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompiler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGRegisterSet.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGRepatch.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGRepatch.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGScratchRegisterAllocator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGThunks.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGThunks.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSRExitCompiler.h&apos;, u&apos;Source/JavaScriptCore/jit/AssemblyHelpers.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITCall.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITCall32_64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOperationWrappers.h&apos;, u&apos;Source/JavaScriptCore/jit/JITOperations.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOperations.h&apos;, u&apos;Source/JavaScriptCore/jit/RegisterSet.h&apos;, u&apos;Source/JavaScriptCore/jit/Repatch.cpp&apos;, u&apos;Source/JavaScriptCore/jit/Repatch.h&apos;, u&apos;Source/JavaScriptCore/jit/ScratchRegisterAllocator.h&apos;, u&apos;Source/JavaScriptCore/jit/ThunkGenerators.cpp&apos;, u&apos;Source/JavaScriptCore/jit/ThunkGenerators.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/jit/Repatch.cpp:274:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/Repatch.cpp:560:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/Repatch.cpp:561:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/Repatch.cpp:722:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/jit/Repatch.cpp:759:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/jit/Repatch.cpp:796:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/jit/Repatch.cpp:880:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/CodeBlock.cpp:53:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:88:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:101:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:124:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:137:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:152:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:163:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:184:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/jit/JITOperationWrappers.h:195:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 16 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>933335</commentid>
    <comment_count>13</comment_count>
      <attachid>212656</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-25 20:16:17 -0700</bug_when>
    <thetext>Created attachment 212656
revised patch: rebased to latest revision, and attempted fixes for Windows build. 

Uploading this patch so that we can try this on a Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933337</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-25 20:22:35 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Created an attachment (id=212656) [details]
&gt; revised patch: rebased to latest revision, and attempted fixes for Windows build. 
&gt; 
&gt; Uploading this patch so that we can try this on a Windows build.

Patch 3 is still failing to build on Windows.  Investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933350</commentid>
    <comment_count>15</comment_count>
      <attachid>212660</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-25 21:21:41 -0700</bug_when>
    <thetext>Created attachment 212660
patch 4: more Windows build fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933366</commentid>
    <comment_count>16</comment_count>
      <attachid>212665</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-25 22:20:21 -0700</bug_when>
    <thetext>Created attachment 212665
patch 5: one more Windows build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933371</commentid>
    <comment_count>17</comment_count>
      <attachid>212665</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-25 22:40:48 -0700</bug_when>
    <thetext>Comment on attachment 212665
patch 5: one more Windows build fix.

Patch 5 builds jsc properly although I encountered other build issues in WebCore that are unrelated to this patch.  That said, I think this patch should be reviewed before I land it.  The changes that I made in addition to the original patch from http://trac.webkit.org/changeset/156235 are:

1. Rebase up to the latest svn revision.
2. Added FUNCTION_WRAPPER_WITH_RETURN_ADDRESS macros for COMPILER(MSVC) &amp;&amp; CPU(X86).
3. Moved implementations of getHostCallReturnValue and getHostCallReturnValueWithExecState to JITOperations.cpp from DFGOperations.cpp.  These pieces of code needs to be built even if the DFG is not enabled for build.  Hence, they don&apos;t belong in DFGOperations.cpp.
4. I added an implementation of getHostCallReturnValue for COMPILER(MSVC) &amp;&amp; CPU(X86).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933513</commentid>
    <comment_count>18</comment_count>
      <attachid>212665</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-26 08:20:47 -0700</bug_when>
    <thetext>Comment on attachment 212665
patch 5: one more Windows build fix.

r=me, assuming it builds and passes tests.

Can you do a pass with the EWS bot before landing? It looks like this version of the patch didn&apos;t apply cleanly on the EWS bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933598</commentid>
    <comment_count>19</comment_count>
      <attachid>212726</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-26 11:04:44 -0700</bug_when>
    <thetext>Created attachment 212726
patch 6: svn up&apos;ed to see if that fixes the merge issue on the EWS bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933619</commentid>
    <comment_count>20</comment_count>
      <attachid>212729</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-26 11:35:46 -0700</bug_when>
    <thetext>Created attachment 212729
patch 7: one more after rollout of r156474 which broke the 32-bt build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933632</commentid>
    <comment_count>21</comment_count>
      <attachid>212735</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-26 12:13:27 -0700</bug_when>
    <thetext>Created attachment 212735
patch 8: one more time since the EWS bots seems to be working again now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933646</commentid>
    <comment_count>22</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-26 12:40:51 -0700</bug_when>
    <thetext>It looks like the EWS patching system is unable to deal with the file deletions and additions that this patch has.  I&apos;ve already tries many times, and it doesn&apos;t seem to make any difference no matter how many times I svn up to the latest.

The patch builds and runs jsc.exe properly on Windows.  I was not able to run testapi.exe as it crashes due to some pre-existing bug.

I&apos;m not able to build all of WebKit because of a pre-existing build failure in WebCore/platform/graphics/cg/GraphicsContextCG.cpp even without this patch.

I&apos;ll proceed with landing this patch and deal with any fallout if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933653</commentid>
    <comment_count>23</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-26 13:15:27 -0700</bug_when>
    <thetext>&gt; I was not able to run testapi.exe as it crashes due to some pre-existing bug.

Do we have a bug filed for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933655</commentid>
    <comment_count>24</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-26 13:20:21 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; &gt; I was not able to run testapi.exe as it crashes due to some pre-existing bug.
&gt; 
&gt; Do we have a bug filed for this?

I will file a bug.

Just ran run-javascriptcore-tests on Windows with testapi omitted, and it passed.  However, it only ran the Mozilla suite.  It didn&apos;t run the LayoutTests and stress test suites as it would have done on Mac.  This is without me making any changes to omit those other tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933664</commentid>
    <comment_count>25</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-26 13:38:40 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r156490: &lt;http://trac.webkit.org/r156490&gt;.

FYI, bug for the testapi crash: https://bugs.webkit.org/show_bug.cgi?id=121972.
Bug for the WebCore build errors: https://bugs.webkit.org/show_bug.cgi?id=121974.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212281</attachid>
            <date>2013-09-21 13:16:06 -0700</date>
            <delta_ts>2013-09-21 17:57:28 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>464165</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2MjM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MCBA
QAorMjAxMy0wOS0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IE1vdmUgREZHIGlubGluZSBjYWNoaW5nIGxvZ2ljIGludG8gaml0LworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzQ5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXZSB3YW50IHRvIGdldCBy
aWQgb2YgdGhlIGJhc2VsaW5lIEpJVCdzIGlubGluZSBjYWNoaW5nIG1hY2hpbmVyeSBhbmQgaGF2
ZSBpdCB1c2UgdGhlCisgICAgICAgIERGRydzIGluc3RlYWQuIEJ1dCBiZWZvcmUgd2UgZG8gdGhh
dCB3ZSBuZWVkIHRvIG1vdmUgdGhlIERGRydzIGlubGluZSBjYWNoaW5nIG1hY2hpbmUKKyAgICAg
ICAgb3V0IGZyb20gYmVoaW5kIGl0cyBFTkFCTEUoREZHX0pJVCkgZ3VhcmRzIGFuZCBtYWtlIGl0
IGF2YWlsYWJsZSB0byB0aGUgd2hvbGUgc3lzdGVtLgorICAgICAgICBUaGlzIHBhdGNoIGRvZXMg
dGhhdDoKKyAgICAgICAgCisgICAgICAgIC0gZGZnL0RGR1JlcGF0Y2ggYmVjb21lcyBqaXQvUmVw
YXRjaC4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIHRodW5rcyB1c2VkIGJ5IHRoZSBERkcgSUMg
Z28gaW50byBqaXQvVGh1bmtHZW5lcmF0b3JzLCBpbnN0ZWFkIG9mIGRmZy9ERkdUaHVua3MuCisg
ICAgICAgIAorICAgICAgICAtIFRoZSBvcGVyYXRpb25zIHVzZWQgYnkgdGhlIERGRyBJQyBnbyBp
bnRvIGppdC9KSVRPcGVyYXRpb25zLCBpbnN0ZWFkIG9mCisgICAgICAgICAgZGZnL0RGR09wZXJh
dGlvbnMuCisgICAgICAgIAorICAgICAgICAtIFRoZSBvbGQgSklUJ3MgdGh1bmsgZ2VuZXJhdG9y
cyBmb3IgY2FsbHMgYXJlIHJlbmFtZWQgdG8gcmVkdWNlIGNvbmZ1c2lvbi4gUHJldmlvdXNseQor
ICAgICAgICAgIGl0IHdhcyBlYXN5IHRvIGtub3cgd2hpY2ggZ2VuZXJhdG9ycyBiZWxvbmcgdG8g
d2hpY2ggSklUIGJlY2F1c2UgdGhlIG9sZCBKSVQgdXNlZAorICAgICAgICAgIEpTQzo6dmlydHVh
bENhbGxCbGFoIGFuZCB0aGUgREZHIHVzZWQgSlNDOjpERkc6OnZpcnR1YWxDYWxsQmxhaCwgYnV0
IHRoYXQncyBub3QgdGhlCisgICAgICAgICAgY2FzZSBhbnltb3JlLiBOb3RlIHRoYXQgdGhlIG9s
ZCBKSVQncyB0aHVuayBnZW5lcmF0b3JzIHdpbGwgZGllIGluIGEgZnV0dXJlIHBhdGNoLgorICAg
ICAgICAKKyAgICAgICAgTm8gZnVuY3Rpb25hbCBjaGFuZ2VzIGJleW9uZCB0aG9zZSBtb3Zlcy4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8u
Y3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnVubGluayk6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXNldFN0dWJJ
bnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAg
ICAgKiBkZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvcjo6Q2FsbEFy
cmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxB
cnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcjo6Q2FsbEFycmF5
QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKiBk
ZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmg6
CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9w
ZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6
CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlw
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1
bWVudEZvclR5cGUpOgorICAgICAgICAqIGRmZy9ERkdSZWdpc3RlclNldC5oOiBSZW1vdmVkLgor
ICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZH
UmVwYXRjaC5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmUp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFu
Y2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wYXJlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRC
eUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQ
ZWVwaG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29tcGFyZUFuZEJveEJvb2xlYW5T
bG93UGF0aEdlbmVyYXRvcjo6Q29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVl
cGhvbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaCk6CisgICAgICAg
IChKU0M6OkRGRzo6Q29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcjo6Q29tcGFy
ZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1Ro
dW5rcy5jcHA6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGZ0bC9GVExJ
bnRyaW5zaWNSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNhbGxPckNvbnN0
cnVjdCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OndyaXRlQmFycmllcik6CisgICAgICAgICogaml0L0pJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6bGlua0Zvcik6CisgICAgICAgIChKU0M6OkpJVDo6bGlua1Nsb3dD
YWxsKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZUNhbGxFdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklU
Q2FsbDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklU
T3BlcmF0aW9uV3JhcHBlcnMuaDogQWRkZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOiBBZGRlZC4KKyAgICAg
ICAgKiBqaXQvUmVnaXN0ZXJTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpSZWdpc3RlclNldCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojphc1BPRCk6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojpjb3B5SW5mbyk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVy
U2V0OjpzZXQpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6c2V0R1BSQnlJbmRleCk6Cisg
ICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpjbGVhcik6CisgICAgICAgIChKU0M6OlJlZ2lzdGVy
U2V0OjpnZXQpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6Z2V0R1BSQnlJbmRleCk6Cisg
ICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpnZXRGcmVlR1BSKToKKyAgICAgICAgKEpTQzo6UmVn
aXN0ZXJTZXQ6OnNldEZQUkJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6Z2V0
RlBSQnlJbmRleCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpzZXRCeUluZGV4KToKKyAg
ICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmdldEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpSZWdp
c3RlclNldDo6bnVtYmVyT2ZTZXRHUFJzKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om51
bWJlck9mU2V0RlBScyk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpudW1iZXJPZlNldFJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpzZXRCaXQpOgorICAgICAgICAo
SlNDOjpSZWdpc3RlclNldDo6Y2xlYXJCaXQpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6
Z2V0Qml0KToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpyZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hCeUlkU2VsZkFjY2Vzcyk6Cisg
ICAgICAgIChKU0M6OmFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayk6CisgICAgICAgIChKU0M6
OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6OmVtaXRSZXN0b3JlU2NyYXRjaCk6Cisg
ICAgICAgIChKU0M6OmxpbmtSZXN0b3JlU2NyYXRjaCk6CisgICAgICAgIChKU0M6OmdlbmVyYXRl
UHJvdG9DaGFpbkFjY2Vzc1N0dWIpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgor
ICAgICAgICAoSlNDOjpyZXBhdGNoR2V0QnlJRCk6CisgICAgICAgIChKU0M6OmdldFBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdCk6CisgICAgICAgIChKU0M6OnBhdGNoSnVtcFRvR2V0QnlJZFN0dWIp
OgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKEpTQzo6YnVp
bGRHZXRCeUlETGlzdCk6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRG
dW5jdGlvbik6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1
bmN0aW9uKToKKyAgICAgICAgKEpTQzo6ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpT
Qzo6ZW1pdFB1dFRyYW5zaXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlE
KToKKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlCdWls
ZFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKEpTQzo6YnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAg
IChKU0M6OnRyeVJlcGF0Y2hJbik6CisgICAgICAgIChKU0M6OnJlcGF0Y2hJbik6CisgICAgICAg
IChKU0M6OmxpbmtTbG93Rm9yKToKKyAgICAgICAgKEpTQzo6bGlua0Zvcik6CisgICAgICAgIChK
U0M6OmxpbmtDbG9zdXJlQ2FsbCk6CisgICAgICAgIChKU0M6OnJlc2V0R2V0QnlJRCk6CisgICAg
ICAgIChKU0M6OnJlc2V0UHV0QnlJRCk6CisgICAgICAgIChKU0M6OnJlc2V0SW4pOgorICAgICAg
ICAqIGppdC9SZXBhdGNoLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpyZXNldEdldEJ5SUQpOgor
ICAgICAgICAoSlNDOjpyZXNldFB1dEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXNldEluKToKKyAg
ICAgICAgKiBqaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcik6
CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayk6CisgICAgICAg
IChKU0M6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6YWxsb2NhdGVTY3JhdGNoKToKKyAgICAg
ICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjphbGxvY2F0ZVNjcmF0Y2hHUFIpOgor
ICAgICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRjaEZQ
Uik6CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6ZGlkUmV1c2VSZWdp
c3RlcnMpOgorICAgICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZl
UmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKToKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpyZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKToKKyAgICAgICAgKEpT
Qzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpkZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemUpOgor
ICAgICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlVXNlZFJlZ2lz
dGVyc1RvU2NyYXRjaEJ1ZmZlcik6CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6cmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlcik6CisgICAgICAgICog
aml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6Om9sZFN0eWxlR2VuZXJhdGVT
bG93Q2FzZUZvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlTGlua0ZvckdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6Om9sZFN0eWxlTGlua0NhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpv
bGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpvbGRTdHlsZUxp
bmtDbG9zdXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlVmlydHVhbEZv
ckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpvbGRTdHlsZVZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjplbWl0UG9pbnRlclZhbGlkYXRpb24pOgorICAgICAgICAoSlNDOjp0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzbG93UGF0
aEZvcik6CisgICAgICAgIChKU0M6OmxpbmtGb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OmxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ29uc3RydWN0
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OnZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjp2aXJ0dWFs
Q29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMu
aDoKKwogMjAxMy0wOS0yMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgog
CiAgICAgICAgIEZpeCB0aGUgbm9uLURGRyBidWlsZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1NjIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw2IEBAIHNldChK
YXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1BsYW4uY3BwCiAgICAgZGZnL0RGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKICAgICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCi0gICAgZGZnL0RGR1JlcGF0Y2guY3BwCiAgICAgZGZnL0RGR1NTQUNvbnZl
cnNpb25QaGFzZS5jcHAKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCiAgICAgZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0yMjQsNiArMjIzLDcgQEAgc2V0KEphdmFTY3Jp
cHRDb3JlX1NPVVJDRVMKICAgICBqaXQvSklURXhjZXB0aW9ucy5jcHAKICAgICBqaXQvSklUT3Bj
b2Rlcy5jcHAKICAgICBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorICAgIGppdC9KSVRPcGVyYXRp
b25zLmNwcAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKICAgICBqaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAKICAgICBqaXQvSklUU3R1YlJvdXRpbmUuY3BwCkBAIC0yMzEsNiAr
MjMxLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBqaXQvSklUVGh1bmtzLmNw
cAogICAgIGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKICAgICBq
aXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAKKyAgICBqaXQvUmVwYXRjaC5jcHAKICAg
ICBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAogCiAgICAgcGFyc2VyL0xleGVyLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1NjIw
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzcsMTMgKzMzNyw5IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJCYW5rLmgg
XAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJTZXQuaCBcCi0JU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcCBcCi0JU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhbmVTdHJpbmdH
ZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2NvcmVCb2FyZC5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW4uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93
UGF0aEdlbmVyYXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwIFwKQEAgLTYzMCw2ICs2MjYsOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbldyYXBwZXJzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViQ2FsbC5oIFwKQEAgLTY1Miw2
ICs2NTEsOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pTSW50ZXJmYWNlSklULmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBc
CisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3IuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQkocmV2aXNpb24gMTU2MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw3ICsxODIsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBk
ZmcvREZHUGxhbi5jcHAgXAogICAgIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAgXAogICAgIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIFwKLSAgICBkZmcv
REZHUmVwYXRjaC5jcHAgXAogICAgIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwIFwKICAg
ICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIFwKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAgXApAQCAtMjIxLDYgKzIyMCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGppdC9KSVRF
eGNlcHRpb25zLmNwcCBcCiAgICAgaml0L0pJVE9wY29kZXMuY3BwIFwKICAgICBqaXQvSklUT3Bj
b2RlczMyXzY0LmNwcCBcCisgICAgaml0L0pJVE9wZXJhdGlvbnMuY3BwIFwKICAgICBqaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwIFwKICAgICBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAg
XAogICAgIGppdC9KSVRTdHViUm91dGluZS5jcHAgXApAQCAtMjI4LDYgKzIyOCw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIGppdC9KSVRUaHVua3MuY3BwIFwKICAgICBqaXQvSklUVG9ERkdEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIFwKICAgICBqaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hw
b2ludC5jcHAgXAorICAgIGppdC9SZXBhdGNoLmNwcCBcCiAgICAgaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAgXAogICAgIGxsaW50L0xMSW50Q0xvb3AuY3BwIFwKICAgICBsbGludC9MTEludERhdGEu
Y3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNp
b24gMTU2MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc3LDYgKzM3Nyw3
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklURXhjZXB0aW9ucy5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVE9wY29kZXMuY3BwIiAvPg0KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGNvZGVzMzJfNjQuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRpb25zLmNwcCIgLz4NCiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUUHJvcGVydHlBY2Nlc3MuY3BwIiAvPg0KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YlJvdXRpbmUuY3BwIiAv
Pg0KQEAgLTM4NCw2ICszODUsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJ
VFRodW5rcy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxqaXRcSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAiIC8+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caml0XFJlcGF0Y2guY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRvcnMuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGxsaW50XExMSW50Q0xvb3AuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGxsaW50XExMSW50RGF0YS5jcHAiIC8+DQpAQCAtNzY3LDYgKzc2OSw4IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklURGlzYXNzZW1ibGVyLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVEV4Y2VwdGlvbnMuaCIgLz4NCiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUSW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRpb25XcmFwcGVycy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRpb25zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caml0XEpJVFN0dWJDYWxsLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caml0XEpJVFN0dWJSb3V0aW5lLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aml0XEpJVFN0dWJzLmgiIC8+DQpAQCAtNzc4LDYgKzc4Miw5IEBACiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcSklUV3JpdGVCYXJyaWVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caml0XEpTSW50ZXJmYWNlSklULmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caml0XEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxqaXRcUmVnaXN0ZXJTZXQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxqaXRcUmVwYXRjaC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGpp
dFxTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxqaXRcU3BlY2lhbGl6ZWRUaHVua0pJVC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRvci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGppdFxUaHVua0dlbmVyYXRvcnMuaCIgLz4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTU2MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCw2ICsxMTgsMTMgQEAKIAkJMEYyNEU1NDIxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVy
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1
M0QxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjRFNTQzMTdFQTlGNTkwMEFCQjIxNyAv
KiBGUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjI0RTUzRTE3RUE5RjU5MDBBQkIyMTcgLyogRlBSSW5mby5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjRFNTQ0MTdFQTlGNTkwMEFCQjIx
NyAvKiBHUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjRFNTRDMTdFRTI3NDkwMEFC
QjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25z
LmNwcCAqLzsgfTsKKwkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ2
MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggKi87IH07CisJCTBGMjRFNTRFMTdF
RTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25XcmFwcGVycy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NDcxN0VFMjc0OTAwQUJCMjE3IC8q
IEpJVE9wZXJhdGlvbldyYXBwZXJzLmggKi87IH07CisJCTBGMjRFNTRGMTdFRTI3NDkwMEFCQjIx
NyAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyNEU1NDgxN0VFMjc0OTAwQUJCMjE3IC8qIFJlZ2lzdGVyU2V0LmggKi87IH07
CisJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIx
NyAvKiBSZXBhdGNoLmNwcCAqLzsgfTsKKwkJMEYyNEU1NTExN0VFMjc0OTAwQUJCMjE3IC8qIFJl
cGF0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi87IH07CisJCTBGMjRFNTUyMTdF
RTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTRCMTdFRTI3NDkwMEFCQjIx
NyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLzsgfTsKIAkJMEYyNTZDMzYxNjI3QjBB
RDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2MjdC
MEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZB
QzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0QwMEE3QUUz
RiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29t
aW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMjY0LDggKzI3MSw2IEBACiAJCTBGNzY2RDM1MTVBRTI1M0IwMDhGMzYzRSAvKiBK
dW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQzMzE1QUUyNTM1MDA4RjM2M0UgLyogSnVtcFJlcGxhY2Vt
ZW50V2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNzY2RDM2MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDM3MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMEY3NjZENDQxNUIyQTNDMDAwOEYzNjNFIC8qIERGR1JlZ2lzdGVy
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2
NkQ0MjE1QjJBM0JEMDA4RjM2M0UgLyogREZHUmVnaXN0ZXJTZXQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjc2NkQ0NjE1QjM3MDFGMDA4RjM2
M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQ0NTE1QjM3MDFEMDA4RjM2M0UgLyogREZH
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5n
Q291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsgfTsK
IAkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUYxNDE3MkMyRjAw
MTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21t
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5
NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzI5LDggKzczNCw2IEBACiAJCTg2QUU2NEFB
MTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QUU2NEE3MTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRB
c3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk4NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCNTgyMkUxNEQyMzczQjAw
QTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLzsgfTsKIAkJODZCNTgyNjkxNEQyNzk3MDAwQTlD
MzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODYwM0NFRjIxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcu
Y3BwICovOyB9OwotCQk4NkJCMDlDMDEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkJCMDlCRTEz
OEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5jcHAgKi87IH07Ci0JCTg2QkIwOUMxMTM4RTM4
MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NkJCMDlCRjEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2QzM2
RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5IC8q
IE1hY3JvQXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyQVJN
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QzU2
OEREMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgKi87IH07CiAJCTg2
QzU2OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QzU2OERFMTFBMjEzRUUwMDA3
RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTMxOCw2ICsxMzIxLDEzIEBACiAJCTBGMjRFNTNEMTdF
QTlGNTkwMEFCQjIxNyAvKiBDQ2FsbEhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ0NhbGxIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MjRFNTNFMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZQUkluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
NEU1M0YxN0VBOUY1OTAwQUJCMjE3IC8qIEdQUkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gR1BSSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI0
RTU0NTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyNEU1NDYxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUT3BlcmF0aW9ucy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI0RTU0NzE3RUUyNzQ5MDBBQkIyMTcgLyogSklU
T3BlcmF0aW9uV3JhcHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklU
T3BlcmF0aW9uV3JhcHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNEU1
NDgxN0VFMjc0OTAwQUJCMjE3IC8qIFJlZ2lzdGVyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlZ2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjU2QzM0MTYyN0IwQUEw
MDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0
aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2Vu
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE4MTdCNkI1M0Qw
MEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29t
aW5nUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBOTE3
QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTQ2Myw4ICsxNDczLDYgQEAKIAkJMEY3NjZEMzMxNUFFMjUzNTAwOEYzNjNF
IC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjc2NkQzNjE1QUU0QTFBMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY3NjZEMzcxNUFFNEExQTAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
Rjc2NkQ0MjE1QjJBM0JEMDA4RjM2M0UgLyogREZHUmVnaXN0ZXJTZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUmVnaXN0ZXJTZXQuaDsgcGF0aCA9IGRmZy9ERkdSZWdp
c3RlclNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjc2NkQ0NTE1QjM3MDFE
MDA4RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oOyBwYXRoID0g
ZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxp
bmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBs
aW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODAyM0U5MTYx
MzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTIzLDgg
KzE5MzEsNiBAQAogCQk4NkI1ODIyRTE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZVByb2ZpbGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI1ODIyRjE0RDIzNzNCMDBBOUMzMDYgLyog
Q29kZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2Zp
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCNTgyNkExNEQzNUQ1MTAwQTlD
MzA2IC8qIFRpZXJlZE1NYXBBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUaWVyZWRNTWFwQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODZCQjA5
QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHUmVwYXRjaC5jcHA7IHBhdGggPSBkZmcvREZHUmVwYXRjaC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2QkIwOUJGMTM4RTM4MUIwMDU2NzAy
RiAvKiBERkdSZXBhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Jl
cGF0Y2guaDsgcGF0aCA9IGRmZy9ERkdSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2QkY2NDJBMTQ4REIyQjUwMDRERTM2QSAvKiBJbnRyaW5zaWMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50cmluc2ljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2QzM2RUU5MEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NkM1NjhERDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9B
c3NlbWJsZXJBUk0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFj
cm9Bc3NlbWJsZXJBUk0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjcwNywx
NiArMjcxMywxNiBAQAogCQkJCTBGMjRFNTNCMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhl
bHBlcnMuY3BwICovLAogCQkJCTBGMjRFNTNDMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhl
bHBlcnMuaCAqLywKIAkJCQkwRjI0RTUzRDE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJz
LmggKi8sCi0JCQkJMEYyNEU1M0UxN0VBOUY1OTAwQUJCMjE3IC8qIEZQUkluZm8uaCAqLywKLQkJ
CQkwRjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oICovLAogCQkJCTBGNzNEN0FC
MTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLywKIAkJCQkw
RjczRDdBQzE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oICovLAog
CQkJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovLAog
CQkJCUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAq
LywKIAkJCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5o
ICovLAogCQkJCTg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9y
Rml4ZWRWTVBvb2wuY3BwICovLAorCQkJCTBGMjRFNTNFMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJ
bmZvLmggKi8sCiAJCQkJMEY3NjZEMkQxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHVi
Um91dGluZS5jcHAgKi8sCiAJCQkJMEY3NjZEMkUxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVK
SVRTdHViUm91dGluZS5oICovLAorCQkJCTBGMjRFNTNGMTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJ
bmZvLmggKi8sCiAJCQkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJu
VmFsdWUuY3BwICovLAogCQkJCTBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJl
dHVyblZhbHVlLmggKi8sCiAJCQkJMTQyOUQ5MkQwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5jcHAg
Ki8sCkBAIC0yNzM1LDYgKzI3NDEsOSBAQAogCQkJCTg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAv
KiBKSVRJbmxpbmVzLmggKi8sCiAJCQkJQkNERDUxRTkwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9w
Y29kZXMuY3BwICovLAogCQkJCUE3MTIzNkU0MTE5NUYzM0MwMEJEMjE3NCAvKiBKSVRPcGNvZGVz
MzJfNjQuY3BwICovLAorCQkJCTBGMjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRp
b25zLmNwcCAqLywKKwkJCQkwRjI0RTU0NjE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9u
cy5oICovLAorCQkJCTBGMjRFNTQ3MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25XcmFw
cGVycy5oICovLAogCQkJCTg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAgKi8sCiAJCQkJQTdDMUU4QzgxMTJFNzAxQzAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwICovLAogCQkJCTk2MDYyNjk1MEZCOEVDMDIwMDk3OThBQiAvKiBKSVRT
dHViQ2FsbC5oICovLApAQCAtMjc1Nyw2ICsyNzY2LDEwIEBACiAJCQkJQTc2QzUxNzQxMTgyNzQ4
RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8sCiAJCQkJMEY3NjZEMzIxNUFFMjUzNTAw
OEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwICovLAogCQkJCTBGNzY2RDMz
MTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggKi8sCisJCQkJ
MEYyNEU1NDgxN0VFMjc0OTAwQUJCMjE3IC8qIFJlZ2lzdGVyU2V0LmggKi8sCisJCQkJMEYyNEU1
NDkxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwICovLAorCQkJCTBGMjRFNTRBMTdFRTI3
NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi8sCisJCQkJMEYyNEU1NEIxN0VFMjc0OTAwQUJCMjE3
IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oICovLAogCQkJCUE3MDlGMkVGMTdBMEFDMDQw
MDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCAqLywKIAkJCQlBNzM4NjU1MTExODY5N0I0MDA1NDAy
NzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oICovLAogCQkJCTBGNTcyRDREMTY4NzlGREIwMEU1
N0ZCRCAvKiBUaHVua0dlbmVyYXRvci5oICovLApAQCAtMzYxNCwxMyArMzYyNyw5IEBACiAJCQkJ
MEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhERjgyMDAyQjJBRDcgLyogREZH
UmVnaXN0ZXJCYW5rLmggKi8sCi0JCQkJMEY3NjZENDIxNUIyQTNCRDAwOEYzNjNFIC8qIERGR1Jl
Z2lzdGVyU2V0LmggKi8sCi0JCQkJODZCQjA5QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0
Y2guY3BwICovLAotCQkJCTg2QkIwOUJGMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmgg
Ki8sCiAJCQkJQTc3QTQyM0MxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCAq
LywKIAkJCQlBNzQxMDE3RTE3OURBRjgwMDAyRUI4QkEgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFs
U2xvd1BhdGhHZW5lcmF0b3IuaCAqLywKIAkJCQk4NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcgLyog
REZHU2NvcmVCb2FyZC5oICovLAotCQkJCTBGNzY2RDQ1MTVCMzcwMUQwMDhGMzYzRSAvKiBERkdT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0
NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovLAogCQkJCTBGMUUzQTUwMTUzN0My
Q0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovLAogCQkJCTg2RUM5REMyMTMy
OERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAgKi8sCkBAIC0zOTQ2LDYgKzM5
NTUsNyBAQAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1NUE1REIgLyogREZHQWxs
b2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM3ODEwQzE3OTlFQTJFMDA4MTc1MzMgLyog
REZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjRFNTRFMTdFRTI3NDkwMEFCQjIx
NyAvKiBKSVRPcGVyYXRpb25XcmFwcGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDYx
NTM0Q0JBRjAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMTYwMTVFMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyog
REZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTU2LDYg
KzM5NjYsNyBAQAogCQkJCTBGRkI5MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2Nr
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwQjA4MzMxN0EwQjc5QjAwREFGMTRCIC8q
IERGR0JpbmFyeVN3aXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI0
RTU1MjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZH
Qnl0ZUNvZGVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjU2QzM2MTYyN0IwQUQwMDdG
Mjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCkBAIC00MDMwLDE0ICs0MDQxLDExIEBACiAJCQkJMEZCRTBGNzUxNkMxREIwQjAwODJD
NUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVn
aXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjc2NkQ0NDE1QjJBM0MwMDA4RjM2M0Ug
LyogREZHUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2QkIwOUMxMTM4RTM4MUIw
MDU2NzAyRiAvKiBERkdSZXBhdGNoLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUQ4OTMyQjE3RTM4
NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzdBNDI0MzE3QTBCQkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZh
bFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVB
MDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMTQx
N0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY3
NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJl
Z2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1
QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlE
RDMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggaW4gSGVhZGVycyAqLywK
QEAgLTQxNzIsNiArNDE4MCw3IEBACiAJCQkJQTdBNEFFMTAxNzk3M0I0RDAwNTYxMkIxIC8qIEpJ
VFN0dWJzWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAz
RTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4Nzkz
MDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVC
YXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdG
MDEgLyogSlNBUElWYWx1ZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNDQ2Niw2ICs0NDc1
LDggQEAKIAkJCQkwRkY0Mjc0MjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2V4dGVybi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDQxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9pbnB1
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDgxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4
Nl9zeW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBS
ZXBhdGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI0RTU0RjE3RUUyNzQ5MDBBQkIyMTcgLyog
UmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ5MTU4RUJFOTEwMDRDQjlG
RiAvKiB1ZGlzODZfdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM5MTc5OUU0QjIw
MEQyODMzRCAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThB
RjQxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC00
OTM1LDYgKzQ5NDYsNyBAQAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0Y3MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdGbHVzaEZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGOTE3QTBCOEND
MDA3NzNBRDggLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEYyNEU1NEMxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDREOTA1MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEzMzE3MEQ0MEJG
MDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ5NjUsNyArNDk3
Nyw2IEBACiAJCQkJQTc4QTk3N0ExNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZCRTBGNzQxNkMxREIwOTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25J
bmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1RDE0RUY5MEIzMDBD
NzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJODZCQjA5QzAxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODZFQzlERDIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklU
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjREMTQzNTNC
MjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NTIzMCw2ICs1MjQxLDcgQEAKIAkJCQk5MzM1RjI0RDEyRTY3NjVCMDAyQjU1NTMgLyogU3RyaW5n
UmVjdXJzaW9uQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0RFM0I0MzBFNkM4MzJE
MDAxNDUzQTcgLyogU3RydWN0dXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFNEVFNzBGMEVC
QjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjI0RTU1MDE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlDMkYwRjJEMTE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRjBEMEMwRUYwQjhB
NTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDE1NjIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAgdm9pZCBDYWxsTGlu
a0luZm86OnVubGluayhWTSYgdm0sIFJlcGF0YwogICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJy
YW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoaG90UGF0aEJlZ2luKSwgc3RhdGljX2Nhc3Q8TWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KGNhbGxlZUdQUiksIDApOwogICAgIGlmIChpc0RGRykg
ewogI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxs
UmV0dXJuTG9jYXRpb24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKERG
Rzo6bGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKSA6IHZtLmdldENUSVN0dWIoREZHOjpsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoY2FsbFJldHVybkxvY2F0aW9uLCAoY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gdm0uZ2V0Q1RJ
U3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpIDogdm0uZ2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKSkuY29kZSgpKTsKICNlbHNlCiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKICAgICB9IGVsc2UKLSAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5n
ZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IHZtLmdldENUSVN0dWIo
bGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gdm0uZ2V0Q1RJU3R1
YihvbGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IHZtLmdldENUSVN0dWIo
b2xkU3R5bGVMaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICBoYXNTZWVuU2hvdWxkUmVw
YXRjaCA9IGZhbHNlOwogICAgIGNhbGxlZS5jbGVhcigpOwogICAgIHN0dWIuY2xlYXIoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAxNTYyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKLSNpbmNs
dWRlICJERkdSZXBhdGNoLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJE
ZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC01MSw2ICs1MCw3IEBACiAj
aW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgogI2luY2x1ZGUgIlJlZHVjZVdoaXRl
c3BhY2UuaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCisjaW5jbHVkZSAiUmVwYXRjaC5o
IgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAj
aW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgpAQCAtMjM4MiwxMiArMjM4MiwxMiBAQCB2b2lk
IENvZGVCbG9jazo6cmVzZXRTdHViSW50ZXJuYWwoUmVwYXRjCiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSklUQ29kZTo6REZHSklUOgogICAgICAgICBpZiAoaXNHZXRCeUlkQWNjZXNzKGFjY2Vz
c1R5cGUpKQotICAgICAgICAgICAgREZHOjpyZXNldEdldEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1
YkluZm8pOworICAgICAgICAgICAgcmVzZXRHZXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZv
KTsKICAgICAgICAgZWxzZSBpZiAoaXNQdXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKQotICAgICAg
ICAgICAgREZHOjpyZXNldFB1dEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOworICAgICAg
ICAgICAgcmVzZXRQdXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0luQWNjZXNzKGFjY2Vzc1R5cGUpKTsK
LSAgICAgICAgICAgIERGRzo6cmVzZXRJbihyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7CisgICAg
ICAgICAgICByZXNldEluKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE1NjIwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTIgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVk
ZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1ZGUgIkRGR1JlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAi
SW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtMjMxLDcgKzIzMSw3IEBAIHN0cnVj
dCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgICAgICBpbnQ4X3QgdmFsdWVUYWdHUFI7CiAj
ZW5kaWYKICAgICAgICAgICAgIGludDhfdCB2YWx1ZUdQUjsKLSAgICAgICAgICAgIERGRzo6UmVn
aXN0ZXJTZXRQT0QgdXNlZFJlZ2lzdGVyczsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0UE9EIHVz
ZWRSZWdpc3RlcnM7CiAgICAgICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvRG9uZTsKICAgICAg
ICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9TdG9yYWdlTG9hZDsKICAgICAgICAgICAgIGludDMy
X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRo
R2VuZXJhdG9yLmgJKHJldmlzaW9uIDE1NjIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFz
cyBDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1waW5nU2xv
d1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0PiB7CiBwdWJsaWM6CiAgICAg
Q2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBQX0RGR09wZXJhdGlvbl9F
U3RaIGZ1bmN0aW9uLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZnJvbSwgU3Bl
Y3VsYXRpdmVKSVQqIGppdCwgUF9KSVRPcGVyYXRpb25fRVN0WiBmdW5jdGlvbiwKICAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHN0b3JhZ2VHUFIsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBzaXplX3Qgc2l6ZSkKICAgICAgICAgOiBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0Pihmcm9tLCBqaXQpCiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5j
dGlvbikKQEAgLTY4LDcgKzY4LDcgQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICAKIHByaXZhdGU6
Ci0gICAgUF9ERkdPcGVyYXRpb25fRVN0WiBtX2Z1bmN0aW9uOworICAgIFBfSklUT3BlcmF0aW9u
X0VTdFogbV9mdW5jdGlvbjsKICAgICBHUFJSZWcgbV9yZXN1bHRHUFI7CiAgICAgR1BSUmVnIG1f
c3RvcmFnZUdQUjsKICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOwpAQCAtNzksNyArNzksNyBA
QCBwcml2YXRlOgogY2xhc3MgQ2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQ
YXRoR2VuZXJhdG9yIDogcHVibGljIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Q+IHsKIHB1YmxpYzoKICAgICBDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFy
aWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBQX0RGR09wZXJhdGlvbl9FU3RaIGZ1bmN0
aW9uLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZnJvbSwgU3BlY3VsYXRpdmVK
SVQqIGppdCwgUF9KSVRPcGVyYXRpb25fRVN0WiBmdW5jdGlvbiwKICAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiwgU3RydWN0dXJlKiBjb250aWd1b3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIGFycmF5
U3RvcmFnZVN0cnVjdHVyZSwgR1BSUmVnIHNpemVHUFIpCiAgICAgICAgIDogSnVtcGluZ1Nsb3dQ
YXRoR2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdD4oZnJvbSwgaml0KQogICAgICAg
ICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCkBAIC0xMTIsNyArMTEyLDcgQEAgcHJvdGVjdGVkOgog
ICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgUF9ERkdPcGVyYXRpb25fRVN0WiBtX2Z1bmN0aW9u
OworICAgIFBfSklUT3BlcmF0aW9uX0VTdFogbV9mdW5jdGlvbjsKICAgICBHUFJSZWcgbV9yZXN1
bHRHUFI7CiAgICAgU3RydWN0dXJlKiBtX2NvbnRpZ3VvdXNTdHJ1Y3R1cmU7CiAgICAgU3RydWN0
dXJlKiBtX2FycmF5U3RvcmFnZVN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE1NjIwNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIg
KzM2LDEyIEBACiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRD
b21waWxhdGlvbkluZm8uaCIKICNpbmNsdWRlICJERkdSZWdpc3RlckJhbmsuaCIKLSNpbmNsdWRl
ICJERkdSZWdpc3RlclNldC5oIgogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRlICJHUFJJ
bmZvLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyLmgJKHJldmlzaW9uIDE1NjIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2
LDcgQEAgcHJpdmF0ZToKIH07CiAKIGV4dGVybiAiQyIgewotdm9pZCBERkdfT1BFUkFUSU9OIGNv
bXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElP
TiBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU2MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAog
I2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgog
I2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKLSNpbmNsdWRlICJERkdSZXBhdGNoLmgiCiAjaW5jbHVk
ZSAiREZHVGh1bmtzLmgiCiAjaW5jbHVkZSAiREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suaCIKICNpbmNsdWRlICJERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmgiCkBAIC00NSwyOTUgKzQ0LDIxIEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIu
aCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCisjaW5jbHVk
ZSAiSklUT3BlcmF0aW9uV3JhcHBlcnMuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNp
bmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCiAjaW5jbHVkZSAiTmFtZUlu
c3RhbmNlLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCisjaW5jbHVkZSAiUmVwYXRjaC5oIgogI2luY2x1ZGUgIlN0cmluZ0NvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvSW5s
aW5lQVNNLmg+CiAKICNpZiBFTkFCTEUoSklUKQotCi0jaWYgQ1BVKE1JUFMpCi0jaWYgV1RGX01J
UFNfUElDCi0jZGVmaW5lIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24pIFwKLSAgICAgICAg
Ii5zZXQgbm9yZW9yZGVyIiAiXG4iIFwKLSAgICAgICAgIi5jcGxvYWQgJDI1IiAiXG4iIFwKLSAg
ICAgICAgIi5zZXQgcmVvcmRlciIgIlxuIiBcCi0gICAgICAgICJsYSAkdDksICIgTE9DQUxfUkVG
RVJFTkNFKGZ1bmN0aW9uKSAiXG4iCi0jZWxzZQotI2RlZmluZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5
KGZ1bmN0aW9uKSAiIiAiXG4iCi0jZW5kaWYKLSNlbmRpZgotCiAjaWYgRU5BQkxFKERGR19KSVQp
CiAKLSNpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODZfNjQpCi0KLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByZWdpc3RlcikgXAotICAgIGFz
bSggXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBI
SURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikg
IjoiICJcbiIgXAotICAgICAgICAibW92ICglcnNwKSwgJSIgU1RSSU5HSVpFKHJlZ2lzdGVyKSAi
XG4iIFwKLSAgICAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbiMjV2l0aFJldHVy
bkFkZHJlc3MpICJcbiIgXAotICAgICk7Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1MoZnVuY3Rpb24sIHJzaSkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTUyhmdW5jdGlvbiwgcmN4KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTKGZ1bmN0aW9uLCByY3gpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1MoZnVuY3Rpb24sIHI4KQotCi0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODYpCi0K
LSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCBv
ZmZzZXQpIFwKLSAgICBhc20oIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBT
WU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikg
IlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAi
bW92ICglZXNwKSwgJWVheFxuIiBcCi0gICAgICAgICJtb3YgJWVheCwgIiBTVFJJTkdJWkUob2Zm
c2V0KSAiKCVlc3ApXG4iIFwKLSAgICAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlv
biMjV2l0aFJldHVybkFkZHJlc3MpICJcbiIgXAotICAgICk7Ci0jZGVmaW5lIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDgpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDE2KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAyMCkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMjQpCi0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BV
KEFSTV9USFVNQjIpCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0UoZnVuY3Rpb24pIFwKLSAgICBhc20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAi
LmFsaWduIDIiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
XG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgIi50aHVtYiIgIlxu
IiBcCi0gICAgIi50aHVtYl9mdW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBc
Ci0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAibW92IGEy
LCBsciIgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0
aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAi
LnRleHQiICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJP
TF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4i
IFwKLSAgICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BB
UkFNKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxu
IiBcCi0gICAgICAgICJtb3YgYTQsIGxyIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZF
UkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotLy8g
RW5jb2RlZEpTVmFsdWUgaW4gSlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGludGVnZXIuIFdoZW4g
YmVpbmcgY29tcGlsZWQgaW4gQVJNIEVBQkksIGl0IG11c3QgYmUgYWxpZ25lZCBldmVuLW51bWJl
cmVkIHJlZ2lzdGVyIChyMCwgcjIgb3IgW3NwXSkuCi0vLyBBcyBhIHJlc3VsdCwgcmV0dXJuIGFk
ZHJlc3Mgd2lsbCBiZSBhdCBhIDQtYnl0ZSBmdXJ0aGVyIGxvY2F0aW9uIGluIHRoZSBmb2xsb3dp
bmcgY2FzZXMuCi0jaWYgQ09NUElMRVJfU1VQUE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkKLSNkZWZp
bmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzRd
IgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIs
IFtzcCwgIzhdIgotI2Vsc2UKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJF
U1NfRUpJICJzdHIgbHIsIFtzcCwgIzBdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRV
Uk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzRdIgotI2VuZGlmCi0KLSNkZWZpbmUgRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAotICAgIGFz
bSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1
bmN0aW9uKSAiXG4iIFwKLSAgICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBU
SFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0
aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNT
X0VKSSAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRo
UmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAi
LnRleHQiICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJP
TF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4i
IFwKLSAgICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BB
UkFNKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxu
IiBcCi0gICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgIlxuIiBc
Ci0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJl
c3MiICJcbiIgXAotICAgICk7Ci0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9UUkFE
SVRJT05BTCkKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCi0gICAgSU5MSU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAotICAgIFNZ
TUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgIm1vdiBhMiwgbHIiICJc
biIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5B
ZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLSAgICBhc20gKCBcCi0gICAgIi50ZXh0IiAi
XG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAg
SElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIElOTElORV9BUk1fRlVOQ1RJT04oZnVu
Y3Rpb24pIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAg
ICJtb3YgYTQsIGxyIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rp
b24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotLy8gRW5jb2RlZEpTVmFs
dWUgaW4gSlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGludGVnZXIuIFdoZW4gYmVpbmcgY29tcGls
ZWQgaW4gQVJNIEVBQkksIGl0IG11c3QgYmUgYWxpZ25lZCBldmVuLW51bWJlcmVkIHJlZ2lzdGVy
IChyMCwgcjIgb3IgW3NwXSkuCi0vLyBBcyBhIHJlc3VsdCwgcmV0dXJuIGFkZHJlc3Mgd2lsbCBi
ZSBhdCBhIDQtYnl0ZSBmdXJ0aGVyIGxvY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgY2FzZXMuCi0j
aWYgQ09NUElMRVJfU1VQUE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkKLSNkZWZpbmUgSU5TVFJVQ1RJ
T05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzRdIgotI2RlZmluZSBJ
TlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzhdIgot
I2Vsc2UKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIg
bHIsIFtzcCwgIzBdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19F
SkNJICJzdHIgbHIsIFtzcCwgIzRdIgotI2VuZGlmCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAi
LnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4i
IFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgSU5MSU5FX0FSTV9GVU5D
VElPTihmdW5jdGlvbikgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwK
LSAgICAgICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJcbiIgXAotICAg
ICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAi
XG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FSkNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtICggXAotICAgICIudGV4dCIgIlxuIiBcCi0g
ICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lN
Qk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBJTkxJTkVfQVJNX0ZVTkNUSU9OKGZ1bmN0aW9uKSBc
Ci0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICBJTlNUUlVD
VElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FM
X1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwot
Ci0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShNSVBTKQotCi0jZGVmaW5lIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBcCi0gICAg
Ii50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxu
IiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkco
ZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNX
aXRoUmV0dXJuQWRkcmVzcykgXAotICAgICAgICAibW92ZSAkYTEsICRyYSIgIlxuIiBcCi0gICAg
ICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJc
biIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAg
Ii5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9M
KGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBc
Ci0gICAgTE9BRF9GVU5DVElPTl9UT19UOShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwK
LSAgICAgICAgIm1vdmUgJGEzLCAkcmEiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVS
RU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVm
aW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwK
LSAgICBhc20oIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RS
SU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0g
ICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgIExPQURfRlVOQ1RJT05f
VE9fVDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSBcCi0gICAgICAgICJzdyAkcmEsIDIw
KCRzcCkiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldp
dGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBcCi0gICAg
Ii50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxu
IiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkco
ZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNX
aXRoUmV0dXJuQWRkcmVzcykgXAotICAgICAgICAic3cgJHJhLCAyNCgkc3ApIiAiXG4iIFwKLSAg
ICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIg
IlxuIiBcCi0gICAgKTsKLQotI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoU0g0KQotCi0jZGVm
aW5lIFNINF9TQ1JBVENIX1JFR0lTVEVSICJyMTEiCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKLSAgICBhc20oIFwKLSAgICAiLnRl
eHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwK
LSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5j
dGlvbikgIjoiICJcbiIgXAotICAgICAgICAic3RzIHByLCByNSIgIlxuIiBcCi0gICAgICAgICJi
cmEgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBc
Ci0gICAgICAgICJub3AiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSggXAotICAgICIu
dGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIg
XAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1
bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgICJzdHMgcHIsIHI3IiAiXG4iIFwKLSAgICAgICAg
Im1vdi5sIDJmLCAiIFNINF9TQ1JBVENIX1JFR0lTVEVSICJcbiIgXAotICAgICAgICAiYnJhZiAi
IFNINF9TQ1JBVENIX1JFR0lTVEVSICJcbiIgXAotICAgICAgICAibm9wIiAiXG4iIFwKLSAgICAg
ICAgIjE6IC5iYWxpZ24gNCIgIlxuIiBcCi0gICAgICAgICIyOiAubG9uZyAiIExPQ0FMX1JFRkVS
RU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzLTFiIiAiXG4iIFwKLSAgICApOwotCi0j
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgb2Zm
c2V0LCBzY3JhdGNoKSBcCi0gICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmds
b2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVu
Y3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAg
ICAgICAgInN0cyBwciwgIiBzY3JhdGNoICJcbiIgXAotICAgICAgICAibW92LmwgIiBzY3JhdGNo
ICIsIEAoIiBTVFJJTkdJWkUob2Zmc2V0KSAiLCByMTUpIiAiXG4iIFwKLSAgICAgICAgIm1vdi5s
IDJmLCAiIHNjcmF0Y2ggIlxuIiBcCi0gICAgICAgICJicmFmICIgc2NyYXRjaCAiXG4iIFwKLSAg
ICAgICAgIm5vcCIgIlxuIiBcCi0gICAgICAgICIxOiAuYmFsaWduIDQiICJcbiIgXAotICAgICAg
ICAiMjogLmxvbmcgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVz
cy0xYiIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTKGZ1bmN0aW9uLCAwLCBTSDRfU0NSQVRDSF9SRUdJU1RFUikKLSNkZWZpbmUgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgNCwgU0g0X1NDUkFUQ0hfUkVHSVNU
RVIpCi0KLSNlbmRpZgotCi0jZGVmaW5lIFBfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0UoZnVuY3Rpb24pIFwKLXZvaWQqIERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJP
TV9BU00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRShmdW5jdGlvbikKLQotI2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gZnVu
Y3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwq
LCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAot
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikKLQotI2Rl
ZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24p
IFwKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRy
ZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVz
c1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pCi0KLSNkZWZpbmUgVl9GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotdm9pZCBERkdf
T1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5D
RURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRUpDSShmdW5jdGlvbikKLQogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KQEAgLTM1Nyw3ICs4Miw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBwdXRCeVZhbChFeGVjU3RhdGUqIGUKIH0KIAogdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+
Ci1BTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK0FMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2Us
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNDY2LDcgKzE5MSw3IEBAIGNoYXIqIG5ld1R5cGVk
QXJyYXlXaXRoT25lQXJndW1lbnQoCiAKIGV4dGVybiAiQyIgewogCi1FbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9U
aGlzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwpAQCAtNDc0LDcgKzE5OSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uVG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3ApLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Ub1RoaXNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3ApCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC00ODIsNyArMjA3LDcgQEAgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25UbwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpKTsKIH0K
IAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGludDMyX3QgaW5saW5lQ2FwYWNpdHkpCitKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBjb25zdHJ1Y3RvciwgaW50MzJfdCBpbmxpbmVDYXBhY2l0eSkKIHsKICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKQEAgLTQ5NSw3ICsyMjAsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlVGhpCiAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLT5hbGxvY2F0aW9uUHJvZmlsZShleGVjLCBpbmxpbmVD
YXBhY2l0eSktPnN0cnVjdHVyZSgpKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNTAzLDcgKzIyOCw3IEBA
IEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QKICAgICByZXR1cm4gY29u
c3RydWN0RW1wdHlPYmplY3QoZXhlYywgc3RydWN0dXJlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKQEAgLTUxNCw3ICsyMzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblZhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0FkZChleGVjLCBv
cDEsIG9wMikpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZh
bHVlQWRkTm90TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwpAQCAtNTQ3LDcgKzI3Miw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgZ2V0
QnlWYWwoRXgKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4
ZWMsIGluZGV4KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
R2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CkBAIC01NzgsNyArMzAzLDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVu
dCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFs
Q2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFByb3BlcnR5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZh
bENlbGwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRQcm9wZXJ0eSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTYxOCwxNDAgKzM0MywxNyBAQCBBTFdB
WVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdldEJ5VmFsQ2VsCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKGJhc2UpLmdldChleGVjLCBpbmRleCkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQoRXhlY1N0YXRlKiBl
eGVjLCBKU0FycmF5KiBiYXNlLCBpbnQzMl90IGluZGV4KQorRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJh
eSogYmFzZSwgaW50MzJfdCBpbmRleCkKIHsKICAgICByZXR1cm4gZ2V0QnlWYWxDZWxsSW50KGV4
ZWMsIGJhc2UsIGluZGV4KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeVZhbFN0cmluZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBiYXNlLCBp
bnQzMl90IGluZGV4KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRC
eVZhbFN0cmluZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBiYXNlLCBpbnQzMl90IGlu
ZGV4KQogewogICAgIHJldHVybiBnZXRCeVZhbENlbGxJbnQoZXhlYywgYmFzZSwgaW5kZXgpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7Ci0gICAgCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
YmFzZSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBJZGVudGlmaWVy
IGlkZW50KHZtLCB1aWQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdl
dChleGVjLCBpZGVudCwgc2xvdCkpOwotfQotCi1KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7Ci1FbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAg
SWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAg
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8u
YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShi
YXNlKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7Ci0KLSAgICBpZiAoYWNjZXNz
VHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAg
ICAgICAgYnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHVi
SW5mbyk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0KLUpfRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJh
c2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwotCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8o
cmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFs
dWUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xv
dCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8uYWNjZXNzVHlwZSkpIHsKLSAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAg
ICAgICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHVi
SW5mbyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotSl9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKG9wZXJhdGlvbkluT3B0aW1pemUp
OwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXplV2l0aFJl
dHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIGtl
eSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAg
IAotICAgIGlmICghYmFzZS0+aXNPYmplY3QoKSkgewotICAgICAgICB2bS0+dGhyb3dFeGNlcHRp
b24oZXhlYywgY3JlYXRlSW52YWxpZFBhcmFtZXRlckVycm9yKGV4ZWMsICJpbiIsIGJhc2UpKTsK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCkt
PmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9
IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSWRl
bnRpZmllciBpZGVudCh2bSwga2V5KTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlKTsKLSAg
ICBib29sIHJlc3VsdCA9IGFzT2JqZWN0KGJhc2UpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRl
bnQsIHNsb3QpOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gc3R1Yklu
Zm8uYWNjZXNzVHlwZSk7Ci0gICAgCi0gICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAgICAgIHJl
cGF0Y2hJbihleGVjLCBiYXNlLCBpZGVudCwgcmVzdWx0LCBzbG90LCBzdHViSW5mbyk7Ci0gICAg
ZWxzZQotICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZXN1bHQpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25JbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgU3Ry
aW5nSW1wbCoga2V5KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgaWYgKCFiYXNlLT5pc09iamVj
dCgpKSB7Ci0gICAgICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVJbnZhbGlkUGFy
YW1ldGVyRXJyb3IoZXhlYywgImluIiwgYmFzZSkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIH0KLQotICAgIElkZW50aWZpZXIgaWRlbnQodm0s
IGtleSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNPYmplY3QoYmFz
ZSktPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFz
ZSwgRW5jb2RlZEpTVmFsdWUga2V5KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluKGV4ZWMsIEpTVmFs
dWU6OmRlY29kZShrZXkpLCBiYXNlKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJh
c2UsIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGZ1bmN0aW9uLCBTdHJpbmdJbXBsKiB1aWQp
Ci17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsK
LSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZ1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0
KGJhc2UpLCBpZGVudCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogZ2V0
dGVyU2V0dGVyKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjYWxsR2V0dGVyKGV4ZWMsIGJhc2UsIGdldHRlclNldHRlcikpOwotfQotCi12b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC03NTksNyArMzYxLDcgQEAgdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaQogICAgIG9wZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWw8
dHJ1ZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsK
IH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzY3LDcgKzM2
OSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblMKICAgICBvcGVy
YXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFBy
b3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxDZWxsU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGNlbGwsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzc1LDcgKzM3Nyw3
IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBvcGVyYXRp
b25QdXRCeVZhbEludGVybmFsPHRydWU+KGV4ZWMsIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5j
b2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxs
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxOb25TdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9w
ZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAt
NzgzLDcgKzM4NSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwK
ICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBKU1ZhbHVlOjplbmNv
ZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9u
ZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQz
Ml90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CkBAIC03OTgsNyArNDAwLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
QmV5bwogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCks
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9u
ZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBp
bnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CkBAIC04MTMsNyArNDE1LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
VmFsQmV5bwogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRl
eCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2
YWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFy
cmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90
IGluZGV4LCBkb3VibGUgdmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04MzAsNyArNDMyLDcg
QEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VgogICAgICAgICBhcnJh
eSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIGpzVmFsdWUsIHNsb3QpOwog
fQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJh
eUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJf
dCBpbmRleCwgZG91YmxlIHZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERv
dWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKQEAgLTg0Nyw3ICs0NDksNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91
YmxlQnlWCiAgICAgICAgIGFycmF5LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4
KSwganNWYWx1ZSwgc2xvdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBKU0FycmF5KiBhcnJheSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0FycmF5KiBhcnJheSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTg1Niw3ICs0NTgsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihhcnJheS0+bGVuZ3RoKCkpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiBleGVj
LCBkb3VibGUgdmFsdWUsIEpTQXJyYXkqIGFycmF5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFs
dWUsIEpTQXJyYXkqIGFycmF5KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtODY1LDcgKzQ2Nyw3IEBA
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXIKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGFycmF5LT5sZW5ndGgoKSkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSogZXhlYywgSlNB
cnJheSogYXJyYXkpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5
UG9wKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBA
IC04NzMsNyArNDc1LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25B
cgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7CiB9CiAgICAg
ICAgIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJl
Y292ZXJMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04ODMsNyAr
NDg1LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7CiB9CiAgICAgICAgIAotRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50KQorRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBi
YXNlLCBKU0NlbGwqIGFyZ3VtZW50KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtODk2LDcgKzQ5OCw3
IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGFzUmVnRXhwT2JqZWN0KGJhc2UpLT5leGVjKGV4ZWMsIGlucHV0KSk7
CiB9CiAgICAgICAgIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKK3NpemVfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGJhc2UsIEpTQ2VsbCogYXJndW1lbnQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC05MTEsMjM3ICs1
MTMsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0CiAgICAgcmV0
dXJuIGFzUmVnRXhwT2JqZWN0KGJhc2UpLT50ZXN0KGV4ZWMsIGlucHV0KTsKIH0KICAgICAgICAg
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBs
KiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwg
dWlkKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+
cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2UsIGV4
ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19Ci0KLXZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwq
IHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1
aWQpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+
cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2UsIGV4
ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19Ci0KLXZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0lt
cGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZt
LCB1aWQpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygp
LT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0gICAg
YXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwotfQotCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkp
OwotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0
RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwg
c2xvdCk7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0ko
b3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBs
KiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
LSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRy
ZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKLSAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRl
eHQoKSk7Ci0gICAgCi0gICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3Qp
OwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0
dWJJbmZvLmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHN0dWJJ
bmZvLnNlZW4pCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQs
IHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc3R1YkluZm8u
c2VlbiA9IHRydWU7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VKQ0kob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5m
byhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShi
YXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCkt
PnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQs
IHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIGlmIChzdHViSW5mby5zZWVuKQotICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNl
VmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKLSAgICBlbHNlCi0gICAg
ICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXpl
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVu
dCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2Rl
QmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0K
LSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAg
UHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250
ZXh0KCkpOwotICAgIAotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVj
dChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAg
Ci0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8u
YWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uc2Vl
bikKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJ
bmZvLCBEaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Ci19
Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBT
dHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhy
ZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChm
YWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIEFT
U0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4
ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUg
IT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uc2VlbikKLSAgICAgICAgcmVwYXRjaFB1
dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwotICAgIGVs
c2UKLSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlz
dCk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdFdp
dGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQo
dm0sIHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJs
b2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0g
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpT
VmFsdWUgYmFzZVZhbHVlKGJhc2UpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4
ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICAKLSAgICBiYXNlVmFsdWUu
cHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUg
IT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRl
bnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExp
c3QpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExp
c3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlk
ZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsK
LQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxz
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIGJhc2VW
YWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNz
VHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVl
LCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7Ci19Ci0KLVZfRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dEJ1aWxkTGlzdCk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElk
ZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
ID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFj
Y2Vzc1R5cGUpOwotICAgIAotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxv
Y2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgCi0gICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0
KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZh
bHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJl
Y3QpOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRk
cmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxs
KiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykK
LXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwot
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRT
dHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAg
IAotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0
RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFj
Y2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2Us
IGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKLX0KLQotc2l6ZV90IERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpA
QCAtMTE0OSw3ICs1MjEsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
TGVzCiAgICAgcmV0dXJuIGpzTGVzczx0cnVlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiB9CiAKLXNpemVfdCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CkBAIC0xMTU3LDcgKzUyOSw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkNvbXBhcmVMZXMKICAgICByZXR1cm4ganNMZXNzRXE8dHJ1ZT4oZXhlYywgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQogCi1zaXpl
X3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitz
aXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIp
CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTY1LDcgKzUzNyw3IEBAIHNpemVfdCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBhcmVHcmUKICAgICByZXR1cm4ganNMZXNzPGZhbHNlPihleGVjLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMiksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSk7
CiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJF
cShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTczLDcgKzU0NSw3IEBAIHNp
emVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmUKICAgICByZXR1cm4ganNMZXNz
RXE8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDEpKTsKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29t
cGFyZUVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMikKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmVFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTgyLDkgKzU1NCw5IEBA
IHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcSgKIH0KIAogI2lmIFVTRShK
U1ZBTFVFNjQpCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVT
dHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBsZWZ0LCBKU0NlbGwqIHJpZ2h0KQogI2Vsc2UKLXNpemVfdCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiBy
aWdodCkKICNlbmRpZgogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtMTE5OCw3ICs1
NzAsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyCiAjZW5kaWYK
IH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXFDZWxsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTEyMTIsNyArNTg0LDcg
QEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgogICAgIHJldHVybiBK
U1ZhbHVlOjpzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKGV4ZWMsIG9wMSwgb3AyKTsKIH0KIAot
c2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MikKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMjIzLDE5MyArNTk1LDcgQEAgc2l6ZV90IERG
R19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgogICAgIHJldHVybiBKU1ZhbHVlOjpzdHJp
Y3RFcXVhbChleGVjLCBzcmMxLCBzcmMyKTsKIH0KIAotc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RD
YWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKLXsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxs
ZXJGcmFtZSgpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotCi0gICAgZXhlY0NhbGxlZS0+
c2V0U2NvcGUoZXhlYy0+c2NvcGUoKSk7Ci0gICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDAp
OwotCi0gICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgQ2FsbERhdGEgY2Fs
bERhdGE7Ci0gICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY2FsbGVlLCBj
YWxsRGF0YSk7Ci0gICAgCi0gICAgICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKTsK
LSAgICAKLSAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCkgewotICAgICAgICAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7Ci0gICAgICAg
ICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgICAg
ICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRp
dmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwotICAgICAgICAgICAgaWYgKHZtLT5leGNlcHRpb24o
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLQot
ICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0
dXJuVmFsdWUpOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIEFTU0VSVChjYWxsVHlwZSA9PSBD
YWxsVHlwZU5vbmUpOwotICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxlZSkpOwotICAgICAgICByZXR1cm4gdm0t
PmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoa2luZCA9PSBDb2Rl
Rm9yQ29uc3RydWN0KTsKLSAgICAKLSAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7Ci0g
ICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YShjYWxsZWUs
IGNvbnN0cnVjdERhdGEpOwotICAgIAotICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlICE9IENvbnN0
cnVjdFR5cGVKUyk7Ci0gICAgCi0gICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlw
ZUhvc3QpIHsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0Nh
bGxlZSk7Ci0gICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsK
LSAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3Ry
dWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwotICAgICAgICBpZiAodm0tPmV4
Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
Ci0KLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0
dXJuVmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25z
dHJ1Y3RUeXBlTm9uZSk7Ci0gICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVh
dGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpKTsKLSAgICByZXR1cm4gdm0tPmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKLX0KLQotaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRl
KiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgRXhlY1N0
YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAg
ICAKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVl
KCk7Ci0gICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2Fs
bGVlQXNWYWx1ZSk7Ci0gICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKLSAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNh
bGxlZUFzVmFsdWUsIGtpbmQpKTsKLQotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIGV4ZWNDYWxsZWUtPnNldFNj
b3BlKGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKSk7Ci0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1
dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjb2RlUHRyOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKLSAgICBpZiAoZXhlY3V0
YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdl
bmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBl
cnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVl
LCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAg
ICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhl
YykpOwotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRD
VElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGNvZGVCbG9jayA9IGZ1bmN0
aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpOwotICAgICAgICBpZiAoZXhlY0NhbGxl
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9u
RXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5l
cmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwotICAgIH0KLSAgICBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0lu
Zm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7Ci0gICAgaWYgKCFjYWxsTGlua0luZm8uc2Vlbk9u
Y2UoKSkKLSAgICAgICAgY2FsbExpbmtJbmZvLnNldFNlZW4oKTsKLSAgICBlbHNlCi0gICAgICAg
IGxpbmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29k
ZVB0ciwga2luZCk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGVQdHIu
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci19Ci0KLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQotewotICAgIHJldHVybiBsaW5rRm9yKGV4
ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKLX0KLQotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKLXsKLSAgICByZXR1cm4gbGlu
a0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQotaW5saW5lIGNoYXIqIHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQsIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQotewotICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
Ci0KLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVl
KCk7Ci0gICAgY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFs
dWUpOwotICAgIGlmIChVTkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKQotICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwg
Y2FsbGVlQXNWYWx1ZSwga2luZCkpOwotICAgIAotICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0g
anNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgZXhlY0NhbGxl
ZS0+c2V0U2NvcGUoZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCkpOwotICAgIEV4ZWN1dGFibGVC
YXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKLSAgICBpZiAoVU5MSUtF
TFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7Ci0gICAgICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVj
dXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9u
RXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBmdW5jdGlvbi0+c2Nv
cGUoKSwga2luZCk7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjQ2FsbGVlLCBlcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGV4ZWN1dGFi
bGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKS5leGVjdXRhYmxlQWRk
cmVzcygpKTsKLX0KLQotaW5saW5lIGNoYXIqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgSlNDZWxsKiBjYWxsZWVB
c0Z1bmN0aW9uQ2VsbElnbm9yZWQ7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24o
ZXhlY0NhbGxlZSwga2luZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsKLX0KLQotc3Rh
dGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxs
ZWUsIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvKQotewotICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBKU0Z1bmN0aW9uKiBvbGRDYWxsZWUgPSBjYWxs
TGlua0luZm8uY2FsbGVlLmdldCgpOwotICAgIAotICAgIGlmICghb2xkQ2FsbGVlCi0gICAgICAg
IHx8IG9sZENhbGxlZS0+c3RydWN0dXJlKCkgIT0gY2FsbGVlLT5zdHJ1Y3R1cmUoKQotICAgICAg
ICB8fCBvbGRDYWxsZWUtPmV4ZWN1dGFibGUoKSAhPSBjYWxsZWUtPmV4ZWN1dGFibGUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEFTU0VSVChjYWxsZWUtPmV4ZWN1dGFibGUo
KS0+aGFzSklUQ29kZUZvckNhbGwoKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQ
dHIgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRk
cmVzc0ZvckNhbGwoKTsKLSAgICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKLSAgICBpZiAo
Y2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIGNvZGVCbG9j
ayA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihjYWxsZWUtPmV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvckNhbGwoKTsKLSAg
ICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0
aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgbGlua0Nsb3N1cmVDYWxsKAotICAgICAg
ICBleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVCbG9jaywKLSAgICAgICAgY2FsbGVlLT5z
dHJ1Y3R1cmUoKSwgY2FsbGVlLT5leGVjdXRhYmxlKCksIGNvZGVQdHIpOwotICAgIAotICAgIHJl
dHVybiB0cnVlOwotfQotCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJl
Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCi17Ci0gICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0
aW9uQ2VsbDsKLSAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWND
YWxsZWUsIENvZGVGb3JDYWxsLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8gPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2so
KS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwotCi0gICAgaWYgKCFh
dHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsLCBjYWxsTGlua0luZm8pKQotICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCBjYWxs
TGlua0luZm8sIENvZGVGb3JDYWxsKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlZSkKLXsgICAgCi0gICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNh
bGwpOwotfQotCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3Qo
RXhlY1N0YXRlKiBleGVjQ2FsbGVlKQotewotICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxs
ZWUsIENvZGVGb3JDb25zdHJ1Y3QpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFs
dWUpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBA
IC0xNDE3LDcgKzYwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
VG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkudG9Q
cmltaXRpdmUoZXhlYykpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Fy
cmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgdm9pZCogYnVm
ZmVyLCBzaXplX3Qgc2l6ZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXko
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCB2b2lkKiBidWZmZXIs
IHNpemVfdCBzaXplKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTQyNSw3ICs2MTEsNyBAQCBjaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5KEV4CiAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxjaGFyKj4oY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgYXJyYXlTdHJ1
Y3R1cmUsIHN0YXRpY19jYXN0PEpTVmFsdWUqPihidWZmZXIpLCBzaXplKSk7CiB9CiAKLWNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0VtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlKQog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTQzMyw3ICs2MTksNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0VtcHR5QXJyCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oSlNB
cnJheTo6Y3JlYXRlKCp2bSwgYXJyYXlTdHJ1Y3R1cmUpKTsKIH0KIAotY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJl
KiBhcnJheVN0cnVjdHVyZSwgaW50MzJfdCBzaXplKQorY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0
cnVjdHVyZSwgaW50MzJfdCBzaXplKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTQ0NCwxMjIgKzYz
MCwxMjIgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdAogICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KEpTQXJyYXk6OmNyZWF0ZSgqdm0sIGFycmF5U3RydWN0
dXJlLCBzaXplKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlC
dWZmZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBzaXplX3Qg
c3RhcnQsIHNpemVfdCBzaXplKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJh
eUJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIHNpemVf
dCBzdGFydCwgc2l6ZV90IHNpemUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxjaGFyKj4oY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgYXJyYXlT
dHJ1Y3R1cmUsIGV4ZWMtPmNvZGVCbG9jaygpLT5jb25zdGFudEJ1ZmZlcihzdGFydCksIHNpemUp
KTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoU2l6
ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aFNpemUoCiAg
ICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgp
CiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0ludDhBcnJheT4oZXhlYywg
c3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0ludDhBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3SW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1
cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU0ludDhBcnJheT4oZXhlYywgc3RydWN0
dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0ludDE2QXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50
MTZBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8
SlNJbnQxNkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNJ
bnQxNkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhTaXplKAorY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJu
IG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0ludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVu
Z3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0
aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5
V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRB
cnJheVdpdGhPbmVBcmd1bWVudDxKU0ludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2Rl
ZFZhbHVlKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5
V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRo
U2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90
IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTVWludDhBcnJh
eT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTVWludDhBcnJheT4o
ZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0YXRl
KiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgcmV0
dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU1VpbnQ4Q2xhbXBlZEFycmF5PihleGVjLCBzdHJ1
Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWlu
dDhDbGFtcGVkQXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU1VpbnQ4Q2xhbXBl
ZEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1cm4g
bmV3VHlwZWRBcnJheVdpdGhTaXplPEpTVWludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVu
Z3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdp
dGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJy
YXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdUeXBl
ZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTVWludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5j
b2RlZFZhbHVlKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJB
cnJheVdpdGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJh
eVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGlu
dDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNVaW50
MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNVaW50
MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdpdGhTaXplKAorY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1
cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTRmxvYXQzMkFycmF5PihleGVjLCBzdHJ1Y3R1cmUs
IGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFy
cmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9h
dDMyQXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBu
ZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTRmxvYXQzMkFycmF5PihleGVjLCBzdHJ1Y3R1
cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
RmxvYXQ2NEFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zs
b2F0NjRBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNp
emU8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoT25lQXJndW1lbnQoCitj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhPbmVBcmd1bWVu
dCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJn
dW1lbnQ8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAoRXhlY1N0
YXRlKiBleGVjLCB2b2lkKiByZWdleHBQdHIpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIHJlZ2V4cFB0cikKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKQEAgLTE1NzIsNyArNzU4LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25OZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoUmVnRXhwT2Jq
ZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdleHApKTsKIH0K
IAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0
YXRlKiBleGVjKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRp
b24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTU4MSw3ICs3NjcsNyBA
QCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0CiAgICAgcmV0dXJuIGFj
dGl2YXRpb247CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBcmd1
bWVudHMoRXhlY1N0YXRlKiBleGVjKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNy
ZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNTky
LDcgKzc3OCw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBcmcKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3Jl
YXRlSW5saW5lZEFyZ3VtZW50cygKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVh
dGVJbmxpbmVkQXJndW1lbnRzKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTE2MDQs
NyArNzkwLDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUlubAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2Zm
QXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBhcmd1bWVudHNDZWxsLCBKU0NlbGwq
IGFjdGl2YXRpb25DZWxsKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBcmd1
bWVudHMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGFyZ3VtZW50c0NlbGwsIEpTQ2VsbCogYWN0
aXZhdGlvbkNlbGwpCiB7CiAgICAgQVNTRVJUKGV4ZWMtPmNvZGVCbG9jaygpLT51c2VzQXJndW1l
bnRzKCkpOwogICAgIGlmIChhY3RpdmF0aW9uQ2VsbCkgewpAQCAtMTYxNCwxNCArODAwLDE0IEBA
IHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQXJndW0KICAgICBqc0Nhc3Q8QXJn
dW1lbnRzKj4oYXJndW1lbnRzQ2VsbCktPnRlYXJPZmYoZXhlYyk7CiB9CiAKLXZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cygKK3ZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cygKICAgICBFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogYXJndW1lbnRzQ2VsbCwgSlNDZWxsKiBhY3RpdmF0aW9uQ2VsbCwgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChhY3RpdmF0
aW9uQ2VsbCwgIWFjdGl2YXRpb25DZWxsKTsgLy8gQ3VycmVudGx5LCB3ZSBkb24ndCBpbmxpbmUg
ZnVuY3Rpb25zIHdpdGggYWN0aXZhdGlvbnMuCiAgICAganNDYXN0PEFyZ3VtZW50cyo+KGFyZ3Vt
ZW50c0NlbGwpLT50ZWFyT2ZmKGV4ZWMsIGlubGluZUNhbGxGcmFtZSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlcikKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgaW50
MzJfdCBhcmd1bWVudHNSZWdpc3RlcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE2MzMsNyArODE5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50QnlWYWwo
RXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGFyZ3VtZW50c1JlZ2lzdGVyLCBpbnQzMl90IGluZGV4
KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudEJ5VmFs
KEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlciwgaW50MzJfdCBpbmRl
eCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE2NDgsNyArODM0LDcgQEAgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJn
dW1lbnRzVmFsdWUuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uR2V0SW5saW5lZEFyZ3VtZW50QnlWYWwoCitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFsKAogICAgIEV4
ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlciwgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIGludDMyX3QgaW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKQEAgLTE2NjYsNyArODUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJndW1lbnRzVmFsdWUuZ2V0
KGV4ZWMsIGluZGV4KSk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdG
dW5jdGlvbk5vQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbk5vQ2hlY2soRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKIHsKICAgICBBU1NFUlQo
ZnVuY3Rpb25FeGVjdXRhYmxlLT5pbmhlcml0cyhGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSkp
OwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0xNjc0LDcgKzg2MCw3IEBAIEpTQ2VsbCog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGkKICAgICByZXR1cm4gSlNGdW5jdGlvbjo6
Y3JlYXRlKGV4ZWMsIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhl
Y3V0YWJsZSksIGV4ZWMtPnNjb3BlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlv
bkV4ZWN1dGFibGUpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1
bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUpCiB7CiAg
ICAgQVNTRVJUKGZ1bmN0aW9uRXhlY3V0YWJsZS0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRhYmxl
OjppbmZvKCkpKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtMTY4Miw3ICs4NjgsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5lCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwgZXhlYy0+c2NvcGUoKSkpOwogfQog
Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGVBc0NlbGwpCitKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGVBc0NlbGwpCiB7CiAgICAgQVNTRVJUKGZ1
bmN0aW9uRXhlY3V0YWJsZUFzQ2VsbC0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZv
KCkpKTsKIApAQCAtMTY5NCwzMyArODgwLDIyIEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdGdW5jdGkKICAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGZ1bmN0
aW9uRXhlY3V0YWJsZSwgZXhlYy0+c2NvcGUoKSk7CiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbklzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUp
CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIHJldHVybiBqc0lzT2JqZWN0VHlwZShleGVj
LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbklzRnVuY3Rpb24oRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgcmV0
dXJuIGpzSXNGdW5jdGlvblR5cGUoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLUpTQ2Vs
bCogREZHX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2YoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IHZhbHVlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZihFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogdmFsdWUpCiB7CiAgICAgcmV0dXJuIGpzVHlwZVN0cmluZ0ZvclZhbHVl
KGV4ZWMsIEpTVmFsdWUodmFsdWUpKS5hc0NlbGwoKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotCi0gICAgQVNTRVJU
KHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IGJhc2UtPnN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBBU1NFUlQoIXZtLmhlYXAuc3RvcmFnZUFsbG9jYXRvcigp
LmZhc3RQYXRoU2hvdWxkU3VjY2VlZChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBz
aXplb2YoSlNWYWx1ZSkpKTsKLSAgICBiYXNlLT5zZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3Rv
cmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOwotICAgIGJhc2UtPnB1dERpcmVjdCh2bSwg
b2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKLX0KLQotY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhl
Y1N0YXRlKiBleGVjKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOwpAQCAtMTcyOSw3ICs5MDQsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkFsbG9jYXRlUHJvCiAgICAgICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCh2bSwg
MCwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5LCBmYWxzZSwgMCkpOwogfQogCi1jaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSog
ZXhlYywgc2l6ZV90IG5ld1NpemUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IG5ld1NpemUpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CkBAIC0xNzM4LDcgKzkxMyw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uQWxsb2NhdGVQcm8KICAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVk
KHZtLCAwLCAwLCBuZXdTaXplLCBmYWxzZSwgMCkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5p
dGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3Rv
cmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTc0OSw3ICs5MjQsNyBAQCBjaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHJlc3VsdCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0
ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25S
ZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0x
NzU5LDcgKzkzNCw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIK
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVJbnQzMihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIoRXhlY1N0
YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNzcwLDcgKzk0
NSw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIKICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVuc3VyZUludDMyKHZt
KS5kYXRhKCkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJs
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRW5zdXJlRG91YmxlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOwpAQCAtMTc4MSw3ICs5NTYsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkVuc3VyZURvdWJsCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2Jq
ZWN0KGNlbGwpLT5lbnN1cmVEb3VibGUodm0pLmRhdGEoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
Y2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE3OTIsNyAr
OTY3LDcgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aQogICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJlQ29udGln
dW91cyh2bSkuZGF0YSgpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SYWdl
RW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUmFnZUVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiBleGVj
LCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xODAzLDcgKzk3OCw3IEBAIGNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmFnZUVuc3VyZUMKICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPnJhZ2VFbnN1cmVDb250aWd1b3VzKHZt
KS5kYXRhKCkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5
U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBj
ZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTgxNCw3ICs5ODksNyBAQCBjaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5lbnN1cmVBcnJheVN0b3JhZ2Uodm0pKTsKIH0KIAotU3Ry
aW5nSW1wbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4
ZWMsIEpTU3RyaW5nKiBzdHJpbmcpCitTdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZykKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKQEAgLTE4MjIsNyArOTk3LDcgQEAgU3RyaW5nSW1wbCogREZHX09QRVJBVElPTiBv
cGVyYXRpb25SZXNvbAogICAgIHJldHVybiBzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKTsKIH0K
IAotSlNTdHJpbmcqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBjaGFyYWN0ZXIpCitKU1N0cmluZyogSklUX09QRVJB
VElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBpbnQz
Ml90IGNoYXJhY3RlcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4MzAsNyArMTAwNSw3IEBAIEpT
U3RyaW5nKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUMKICAgICByZXR1cm4ganNTaW5n
bGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgc3RhdGljX2Nhc3Q8VUNoYXI+KGNoYXJhY3RlcikpOwog
fQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNT
dGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNTdHJpbmcqIHN0cmluZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CkBAIC0xODM4LDcgKzEwMTMsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3U3RyaW5nCiAgICAgcmV0dXJuIFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVy
ZSwgc3RyaW5nKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5n
T25DZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQorSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxs
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg0Niw3ICsxMDIxLDcgQEAgSlNDZWxsKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nTwogICAgIHJldHVybiBKU1ZhbHVlKGNlbGwpLnRvU3Ry
aW5nKGV4ZWMpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK0pTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25Ub1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZh
bHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg1NCw3ICsxMDI5LDcgQEAgSlNDZWxsKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKAogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUo
dmFsdWUpLnRvU3RyaW5nKGV4ZWMpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTWFrZVJvcGUyKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGxlZnQsIEpTU3RyaW5nKiBy
aWdodCkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTIoRXhlY1N0YXRl
KiBleGVjLCBKU1N0cmluZyogbGVmdCwgSlNTdHJpbmcqIHJpZ2h0KQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwpAQCAtMTg2Miw3ICsxMDM3LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1h
a2VSb3BlMgogICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgbGVmdCwgcmlnaHQp
OwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzKEV4ZWNTdGF0
ZSogZXhlYywgSlNTdHJpbmcqIGEsIEpTU3RyaW5nKiBiLCBKU1N0cmluZyogYykKK0pTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmlu
ZyogYSwgSlNTdHJpbmcqIGIsIEpTU3RyaW5nKiBjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg3
MCw3ICsxMDQ1LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMwog
ICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgYSwgYiwgYyk7CiB9CiAKLWNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSgKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSgK
ICAgICBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgc2l6ZV90
IHRhYmxlSW5kZXgpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKQEAgLTE4ODQsNyArMTA1OSw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
RmluZFN3aXRjaEkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KHRhYmxlLmN0aURlZmF1
bHQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3Ry
aW5nKiBzdHJpbmcpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyogc3RyaW5nKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOwpAQCAtMTg5Miw1MCArMTA2NywxOSBAQCBjaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblN3aXRjaFN0cmluCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihleGVj
LT5jb2RlQmxvY2soKS0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0aUZvclZh
bHVlKHN0cmluZy0+dmFsdWUoZXhlYykuaW1wbCgpKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKIH0K
IAotZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGlu
dDMyX3QgYikKK2RvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJf
dCBhLCBpbnQzMl90IGIpCiB7CiAgICAgcmV0dXJuIGZtb2QoYSwgYik7CiB9CiAKLUpTQ2VsbCog
REZHX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVj
LCBpbnQzMl90IG9wMSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9t
Q2hhckNvZGUoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IG9wMSkKIHsKICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICByZXR1cm4gSlNDOjpzdHJpbmdGcm9tQ2hhckNvZGUoZXhlYywgb3AxKTsKIH0KIAotREZH
SGFuZGxlckVuY29kZWQgREZHX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNT
dGF0ZSogZXhlYywgdWludDMyX3QgY2FsbEluZGV4KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAg
SlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgIEFTU0VSVChl
eGNlcHRpb25WYWx1ZSk7Ci0gICAgCi0gICAgdW5zaWduZWQgdlBDSW5kZXggPSBleGVjLT5jb2Rl
QmxvY2soKS0+Ynl0ZWNvZGVPZmZzZXRGb3JDYWxsQXRJbmRleChjYWxsSW5kZXgpOwotICAgIEV4
Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlv
blZhbHVlLCB2UENJbmRleCk7Ci0gICAgQVNTRVJUKGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKLSAg
ICByZXR1cm4gZGZnSGFuZGxlckVuY29kZWQoaGFuZGxlci5jYWxsRnJhbWUsIGhhbmRsZXIuY2F0
Y2hSb3V0aW5lKTsKLX0KLQotREZHSGFuZGxlckVuY29kZWQgREZHX09QRVJBVElPTiBsb29rdXBF
eGNlcHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1
ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7Ci0gICAg
Ci0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gc3R1YkluZm8tPmNvZGVPcmlnaW47Ci0gICAg
d2hpbGUgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb2RlT3JpZ2luID0g
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKLSAgICAKLSAgICBFeGNlcHRpb25I
YW5kbGVyIGhhbmRsZXIgPSBnZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSwg
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQoaGFuZGxlci5jYXRjaFJvdXRp
bmUpOwotICAgIHJldHVybiBkZmdIYW5kbGVyRW5jb2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFu
ZGxlci5jYXRjaFJvdXRpbmUpOwotfQotCi1zaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0
SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3Np
emVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMihFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTk0NCw3ICsx
MDg4LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUbwogICAgIHJl
dHVybiBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvVUludDMyKGV4ZWMpOwogfQogCi1zaXplX3Qg
REZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZl
cnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTk1Miw3ICsxMDk2LDcgQEAgc2l6ZV90IERGR19P
UEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUbwogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wKS50b0Jvb2xlYW4oZXhlYyk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBkZWJ1
Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCog
ZGVidWdJbmZvUmF3LCB2b2lkKiBzY3JhdGNoKQordm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVnT3Bl
cmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBkZWJ1
Z0luZm9SYXcsIHZvaWQqIHNjcmF0Y2gpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xOTkwLDcgKzEx
MzQsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwCiAgICAgZGF0
YUxvZygiXG4iKTsKIH0KIAotZXh0ZXJuICJDIiB2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJl
b3B0aW1pemF0aW9uTm93KENvZGVCbG9jayogY29kZUJsb2NrKQorZXh0ZXJuICJDIiB2b2lkIEpJ
VF9PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayogY29kZUJsb2Nr
KQogewogICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hp
bGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKICAgICAvLyByZWFsbHkgYmUg
cHJvZml0YWJsZS4KQEAgLTIwMzQsNyArMTE3OCw3IEBAIGV4dGVybiAiQyIgdm9pZCBERkdfT1BF
UkFUSU9OIHRyaWdnZXJSZW8KIH0KIAogI2lmIEVOQUJMRShGVExfSklUKQotdm9pZCBERkdfT1BF
UkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKiBleGVjKQordm9pZCBKSVRfT1BFUkFU
SU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpA
QCAtMjA5Niw3ICsxMjQwLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3co
RXhlYwogICAgICAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNv
ZGVCbG9jayksIHZtLT5lbnN1cmVXb3JrbGlzdCgpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElP
TiB0cmlnZ2VyT1NSRW50cnlOb3coCitjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRy
eU5vdygKICAgICBFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJf
dCBzdHJlYW1JbmRleCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTIyMTUsNyAr
MTM1OSw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAogCiAvLyBG
SVhNRTogTWFrZSBjYWxscyB3b3JrIHdlbGwuIEN1cnJlbnRseSB0aGV5J3JlIGEgcHVyZSByZWdy
ZXNzaW9uLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYy
MQotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GVExDYWxsKEV4ZWNTdGF0
ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ2FsbChF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRXhlY1N0YXRlKiBjYWxsZXJFeGVjID0gZXhlYy0+Y2Fs
bGVyRnJhbWUoKTsKICAgICAKQEAgLTIyMzUsNyArMTM3OSw3IEBAIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uRlQKIAogLy8gRklYTUU6IE1ha2UgY2FsbHMgd29yayB3ZWxs
LiBDdXJyZW50bHkgdGhleSdyZSBhIHB1cmUgcmVncmVzc2lvbi4KIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uRlRMQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBFeGVjU3RhdGUqIGNhbGxlckV4ZWMgPSBleGVjLT5jYWxsZXJGcmFtZSgpOwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlz
aW9uIDE1NjIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
ICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJQdXRLaW5kLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzcsMjg5ICszOCwx
MjkgQEAgbmFtZXNwYWNlIERGRyB7CiAKIGV4dGVybiAiQyIgewogCi0jaWYgQ0FMTElOR19DT05W
RU5USU9OX0lTX1NURENBTEwKLSNkZWZpbmUgREZHX09QRVJBVElPTiBDREVDTAotI2Vsc2UKLSNk
ZWZpbmUgREZHX09QRVJBVElPTgotI2VuZGlmCi0KLS8vIFRoZXNlIHR5cGVkZWZzIHByb3ZpZGUg
dHlwZWNoZWNraW5nIHdoZW4gZ2VuZXJhdGluZyBjYWxscyBvdXQgdG8gaGVscGVyIHJvdXRpbmVz
OwotLy8gdGhpcyBoZWxwcyBwcmV2ZW50IGNhbGxpbmcgYSBoZWxwZXIgcm91dGluZSB3aXRoIHRo
ZSB3cm9uZyBhcmd1bWVudHMhCi0vKgotICAgIEtleToKLSAgICBWOiB2b2lkCi0gICAgSjogSlNW
YWx1ZQotICAgIFA6IHBvaW50ZXIgKHZvaWQqKQotICAgIEM6IEpTQ2VsbCoKLSAgICBBOiBKU0Fy
cmF5KgotICAgIFM6IHNpemVfdAotICAgIFo6IGludDMyX3QKLSAgICBEOiBkb3VibGUKLSAgICBJ
OiBTdHJpbmdJbXBsKgotKi8KLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAo
KkpfREZHT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUEpKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKTsK
LXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VB
WikoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCop
OwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25f
RUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VDSSkoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgU3RyaW5nSW1wbCopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgq
Sl9ERkdPcGVyYXRpb25fRUNKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7
Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
REEpKEV4ZWNTdGF0ZSosIGRvdWJsZSwgSlNBcnJheSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUkpKEV4ZWNTdGF0ZSosIFN0cmluZ0lt
cGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0
aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSkEpKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBKU0FycmF5Kik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gKCpKX0RGR09wZXJhdGlvbl9FSkkpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJp
bmdJbXBsKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09w
ZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7
Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
SnNzWikoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBpbnQzMl90KTsKLXR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKUCkoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIHZvaWQqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiAoKkpfREZHT3BlcmF0aW9uX0VQKShFeGVjU3RhdGUqLCB2b2lkKik7Ci10eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFApKEV4ZWNTdGF0ZSos
IHZvaWQqLCB2b2lkKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpK
X0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwotdHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVNTKShFeGVjU3Rh
dGUqLCBzaXplX3QsIHNpemVfdCk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gKCpKX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci10eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FWkljZlopKEV4ZWNT
dGF0ZSosIGludDMyX3QsIElubGluZUNhbGxGcmFtZSosIGludDMyX3QpOwotdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVpaKShFeGVjU3RhdGUq
LCBpbnQzMl90LCBpbnQzMl90KTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19E
RkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElP
TiAoKkNfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKLXR5cGVkZWYgSlND
ZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FQ0Mp
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVS
QVRJT04gKCpDX0RGR09wZXJhdGlvbl9FSWNmKShFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUq
KTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUopKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9O
ICgqQ19ERkdPcGVyYXRpb25fRUpzc1N0KShFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVy
ZSopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FSnNz
SnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci10eXBlZGVmIEpTQ2VsbCog
REZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VKc3NKc3NKc3MpKEV4ZWNTdGF0ZSosIEpT
U3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVS
QVRJT04gKCpDX0RGR09wZXJhdGlvbl9FT1opKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJf
dCk7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VTdCko
RXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAo
KkNfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKLXR5cGVkZWYgZG91Ymxl
IERGR19PUEVSQVRJT04gKCpEX0RGR09wZXJhdGlvbl9ERCkoZG91YmxlLCBkb3VibGUpOwotdHlw
ZWRlZiBkb3VibGUgREZHX09QRVJBVElPTiAoKkRfREZHT3BlcmF0aW9uX1paKShpbnQzMl90LCBp
bnQzMl90KTsKLXR5cGVkZWYgZG91YmxlIERGR19PUEVSQVRJT04gKCpEX0RGR09wZXJhdGlvbl9F
SikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBpbnQzMl90IERGR19PUEVS
QVRJT04gKCpaX0RGR09wZXJhdGlvbl9EKShkb3VibGUpOwotdHlwZWRlZiBzaXplX3QgREZHX09Q
RVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxs
Kik7Ci10eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fRUopKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04g
KCpTX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSk7Ci10eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25f
SikoRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09w
ZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9E
RkdPcGVyYXRpb25fRU9aRCkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBkb3VibGUp
OwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FT1pKKShFeGVj
U3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9p
ZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCop
OwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0ljZikoRXhl
Y1N0YXRlKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7Ci10eXBlZGVmIHZvaWQgREZHX09Q
RVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlND
ZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZf
REZHT3BlcmF0aW9uX0VDSkopKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0
aW9uX0VDWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCk7Ci10eXBlZGVmIHZvaWQgREZH
X09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlND
ZWxsKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VKQ0kp
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7Ci10eXBl
ZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VKSkopKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRl
ZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FSlBQKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgdm9pZCosIHZvaWQqKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9O
ICgqVl9ERkdPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMyX3QsIEVuY29k
ZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25f
VykoV2F0Y2hwb2ludFNldCopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdP
cGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQ
X0RGR09wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci10eXBlZGVmIGNoYXIqIERG
R19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FSlMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBzaXplX3QpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRp
b25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJ
T04gKCpQX0RGR09wZXJhdGlvbl9FT1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90KTsK
LXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPWikoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAo
KlBfREZHT3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7Ci10eXBlZGVm
IGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6
ZV90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTSnNz
KShFeGVjU3RhdGUqLCBzaXplX3QsIEpTU3RyaW5nKik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVS
QVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotdHlw
ZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0SikoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFU
SU9OICgqUF9ERkdPcGVyYXRpb25fRVN0UFMpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHZvaWQq
LCBzaXplX3QpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25f
RVN0U1MpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90KTsKLXR5cGVkZWYg
Y2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdFopKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIGludDMyX3QpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdP
cGVyYXRpb25fRVpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsKLXR5cGVkZWYgU3Ry
aW5nSW1wbCogREZHX09QRVJBVElPTiAoKklfREZHT3BlcmF0aW9uX0VKc3MpKEV4ZWNTdGF0ZSos
IEpTU3RyaW5nKik7Ci10eXBlZGVmIEpTU3RyaW5nKiBERkdfT1BFUkFUSU9OICgqSnNzX0RGR09w
ZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSosIGludDMyX3QpICBXVEZfSU5U
RVJOQUw7IAorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29k
ZShFeGVjU3RhdGUqLCBpbnQzMl90KSAgV1RGX0lOVEVSTkFMOyAKIAogLy8gVGhlc2Ugcm91dGlu
ZXMgYXJlIHByb3ZpZGUgY2FsbGJhY2tzIG91dCB0byBDKysgaW1wbGVtZW50YXRpb25zIG9mIG9w
ZXJhdGlvbnMgdG9vIGNvbXBsZXggdG8gSklULgotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld09iamVjdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5URVJOQUw7Ci1KU0Nl
bGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqLCBKU09iamVj
dCogY29uc3RydWN0b3IsIGludDMyX3QgaW5saW5lQ2FwYWNpdHkpIFdURl9JTlRFUk5BTDsKLUVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uVmFsdWVBZGQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlcihFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZf
SU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFs
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkUHJvcGVydHkpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uR2V0QnlWYWxDZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRQcm9wZXJ0eSkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBp
bnQzMl90KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkdldEJ5VmFsU3RyaW5nSW50KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgaW50MzJfdCkgV1RG
X0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlk
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwot
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkluT3B0aW1pemUoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgU3RyaW5nSW1wbCopOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25JbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7Ci1FbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNv
ZGVkSlNWYWx1ZSk7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxD
dXN0b21HZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmMsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RG
X0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1ByaW1p
dGl2ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lk
Kiwgc2l6ZV90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0FycmF5QnVmZmVyKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90KSBXVEZf
SU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3Qp
IFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5
V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhTaXplKEV4ZWNTdGF0
ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwg
aW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJ
bnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRK
U1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1Vp
bnQ4QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5U
RVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25l
QXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRF
Uk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlX
aXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFy
Z3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aFNpemUo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3VWludDMyQXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50
MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9h
dDMyQXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpT
VmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3Rmxv
YXQ2NEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lO
VEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRo
T25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhw
KEV4ZWNTdGF0ZSosIHZvaWQqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBX
VEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3Ry
aWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxC
ZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5k
ZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3Vi
bGVCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50
MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVj
U3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgV1RGX0lOVEVS
TkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVS
TkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3Vi
bGUoRXhlY1N0YXRlKiwgZG91YmxlIHZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqLCBK
U0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhl
YyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsK
LXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikg
V1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJh
c2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBX
VEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxs
KiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5B
TDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0
aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJh
c2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBs
KikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCop
IFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3Qo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGNvbnN0cnVjdG9y
LCBpbnQzMl90IGlubGluZUNhcGFjaXR5KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblRvVGhpc1N0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZh
bHVlQWRkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5
KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEJ5VmFsQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJv
cGVydHkpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2V0QnlWYWxBcnJheUludChFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCkgV1RGX0lO
VEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0
cmluZ0ludChFeGVjU3RhdGUqLCBKU1N0cmluZyosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9QcmltaXRpdmUoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3QXJyYXkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkgV1RG
X0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVfdCkgV1RGX0lOVEVSTkFMOworY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdFbXB0eUFycmF5KEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhTaXplKEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0ludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2Rl
ZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
SW50MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9J
TlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhP
bmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lO
VEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aFNp
emUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aFNpemUoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3VWludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3VWludDMyQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQz
Ml90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQz
MkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0
MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRF
Uk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9u
ZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5U
RVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhT
aXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqLCB2
b2lkKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lO
VEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3RhdGUq
LCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVS
TkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3Vu
ZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5U
RVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRB
cnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIGRv
dWJsZSB2YWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFsdWUpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlKEV4ZWNTdGF0ZSos
IGRvdWJsZSB2YWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9J
TlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BB
bmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogLy8gVGhlc2UgY29tcGFyaXNvbnMgcmV0
dXJuIGEgYm9vbGVhbiB3aXRoaW4gYSBzaXplX3Qgc3VjaCB0aGF0IHRoZSB2YWx1ZSBpcyB6ZXJv
IGV4dGVuZGVkIHRvIGZpbGwgdGhlIHJlZ2lzdGVyLgotc2l6ZV90IERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUmVnRXhwVGVzdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJO
QUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBX
VEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzc0Vx
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwotc2l6ZV90
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsK
K3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJO
QUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDIpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVF
cShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLUVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpT
Q2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEoRXhlY1N0YXRlKiwgSlNDZWxs
KiBsZWZ0LCBKU0NlbGwqIHJpZ2h0KSBXVEZfSU5URVJOQUw7CiAjZWxzZQotc2l6ZV90IERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVm
dCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiBy
aWdodCkgV1RGX0lOVEVSTkFMOwogI2VuZGlmCi1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRp
b25Db21wYXJlU3RyaWN0RXFDZWxsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7
Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSopIFdU
Rl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0
YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xv
c3VyZUNhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5U
RVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbihF
eGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlQXJndW1lbnRzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxpbmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSosIElubGlu
ZUNhbGxGcmFtZSopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25U
ZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5B
TDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cyhF
eGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKSBXVEZfSU5URVJO
QUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xl
bmd0aChFeGVjU3RhdGUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFsKEV4ZWNTdGF0ZSos
IGludDMyX3QsIElubGluZUNhbGxGcmFtZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLUVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRCeVZhbChFeGVjU3Rh
dGUqLCBpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3RnVuY3Rpb25Ob0NoZWNrKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rp
b24oRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uRXhwcmVzc2lvbihFeGVjU3RhdGUqLCBKU0NlbGwqKSBX
VEZfSU5URVJOQUw7Ci1kb3VibGUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGlu
dDMyX3QsIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbklzT2JqZWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1z
aXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Jc0Z1bmN0aW9uKEVuY29kZWRKU1ZhbHVlKSBX
VEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mKEV4ZWNT
dGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIFN0
cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJ
bml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3Qg
bmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFs
bG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShF
eGVjU3RhdGUqLCBKU09iamVjdCopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUludDMyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVEb3VibGUoRXhlY1N0YXRlKiwgSlNDZWxs
Kik7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0
YXRlKiwgSlNDZWxsKik7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJhZ2VFbnN1cmVD
b250aWd1b3VzKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25FbnN1cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1TdHJpbmdJbXBs
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSosIEpTU3RyaW5n
Kik7Ci1KU1N0cmluZyogREZHX09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJp
bmcoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci0KLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25OZXdTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBTdHJ1Y3R1cmUqKTsKLUpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZ09uQ2VsbChFeGVjU3RhdGUqLCBK
U0NlbGwqKTsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZyhFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTWFr
ZVJvcGUyKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKLUpTQ2VsbCogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmlu
ZyosIEpTU3RyaW5nKik7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJ
bW1UYXJnZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCB0YWJs
ZUluZGV4KTsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNT
dGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyopOworc2l6ZV90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Citz
aXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RG
X0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRp
b24oRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBJ
bmxpbmVDYWxsRnJhbWUqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVGVhck9mZkFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5U
RVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZklubGluZWRBcmd1bWVu
dHMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKikgV1RGX0lO
VEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVu
dHNMZW5ndGgoRXhlY1N0YXRlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRJbmxpbmVkQXJndW1lbnRCeVZhbChFeGVjU3Rh
dGUqLCBpbnQzMl90LCBJbmxpbmVDYWxsRnJhbWUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50QnlWYWwoRXhl
Y1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uTm9DaGVjayhFeGVjU3RhdGUqLCBKU0NlbGwqKSBX
VEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1
bmN0aW9uKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbkV4cHJlc3Npb24oRXhlY1N0YXRlKiwgSlNDZWxs
KikgV1RGX0lOVEVSTkFMOworZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50
cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Jc09iamVjdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFM
Oworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1
ZSkgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZihF
eGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3Rh
dGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kikg
V1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0
dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90
IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5z
dXJlSW50MzIoRXhlY1N0YXRlKiwgSlNDZWxsKik7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkVuc3VyZURvdWJsZShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK2NoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmFnZUVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwg
SlNDZWxsKik7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFn
ZShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK1N0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsKK0pTU3RyaW5nKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90
KTsKKworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdChFeGVj
U3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsK
K0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTIoRXhlY1N0YXRlKiwgSlNT
dHJpbmcqLCBKU1N0cmluZyopOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VS
b3BlMyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90IHRhYmxlSW5kZXgpOworY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmcoRXhlY1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5k
ZXgsIEpTU3RyaW5nKik7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIC8vIEZJWE1FOiBNYWtlIGNh
bGxzIHdvcmsgd2VsbC4gQ3VycmVudGx5IHRoZXkncmUgYSBwdXJlIHJlZ3Jlc3Npb24uCiAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIxCi1FbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZUTENhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVS
TkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GVExDb25zdHJ1Y3Qo
RXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25GVExDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRF
Uk5BTDsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAotLy8gVGhpcyBtZXRob2QgaXMgdXNl
ZCB0byBsb29rdXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwg
d2hpY2ggaXMKLS8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91
dCB0byBvbmUgb2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFib3ZlLgotCi0vLyBBY2NvcmRpbmcg
dG8gQysrIHJ1bGVzLCBhIHR5cGUgdXNlZCBmb3IgdGhlIHJldHVybiBzaWduYXR1cmUgb2YgZnVu
Y3Rpb24gd2l0aCBDIGxpbmthZ2UgKGkuZS4KLS8vICdleHRlcm4gIkMiJykgbmVlZHMgdG8gYmUg
UE9EOyBoZW5jZSBwdXR0aW5nIGFueSBjb25zdHJ1Y3RvcnMgaW50byBpdCBjb3VsZCBjYXVzZSBl
aXRoZXIgY29tcGlsZXIKLS8vIHdhcm5pbmdzLCBvciB3b3JzZSwgYSBjaGFuZ2UgaW4gdGhlIEFC
SSB1c2VkIHRvIHJldHVybiB0aGVzZSB0eXBlcy4KLXN0cnVjdCBERkdIYW5kbGVyIHsKLSAgICB1
bmlvbiBVbmlvbiB7Ci0gICAgICAgIHN0cnVjdCBTdHJ1Y3QgewotICAgICAgICAgICAgRXhlY1N0
YXRlKiBleGVjOwotICAgICAgICAgICAgdm9pZCogaGFuZGxlcjsKLSAgICAgICAgfSBzOwotICAg
ICAgICB1aW50NjRfdCBlbmNvZGVkOwotICAgIH0gdTsKLX07Ci0KLWlubGluZSBERkdIYW5kbGVy
IGNyZWF0ZURGR0hhbmRsZXIoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBoYW5kbGVyKQotewotICAg
IERGR0hhbmRsZXIgcmVzdWx0OwotICAgIHJlc3VsdC51LnMuZXhlYyA9IGV4ZWM7Ci0gICAgcmVz
dWx0LnUucy5oYW5kbGVyID0gaGFuZGxlcjsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jaWYg
Q1BVKFg4Nl82NCkKLXR5cGVkZWYgREZHSGFuZGxlciBERkdIYW5kbGVyRW5jb2RlZDsKLWlubGlu
ZSBERkdIYW5kbGVyRW5jb2RlZCBkZmdIYW5kbGVyRW5jb2RlZChFeGVjU3RhdGUqIGV4ZWMsIHZv
aWQqIGhhbmRsZXIpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZURGR0hhbmRsZXIoZXhlYywgaGFuZGxl
cik7Ci19Ci0jZWxzZQotdHlwZWRlZiB1aW50NjRfdCBERkdIYW5kbGVyRW5jb2RlZDsKLWlubGlu
ZSBERkdIYW5kbGVyRW5jb2RlZCBkZmdIYW5kbGVyRW5jb2RlZChFeGVjU3RhdGUqIGV4ZWMsIHZv
aWQqIGhhbmRsZXIpCi17Ci0gICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKERGR0hhbmRsZXI6OlVu
aW9uKSA9PSBzaXplb2YodWludDY0X3QpLCBERkdIYW5kbGVyX1VuaW9uX2lzXzY0Yml0KTsKLSAg
ICByZXR1cm4gY3JlYXRlREZHSGFuZGxlcihleGVjLCBoYW5kbGVyKS51LmVuY29kZWQ7Ci19Ci0j
ZW5kaWYKLURGR0hhbmRsZXJFbmNvZGVkIERGR19PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFu
ZGxlcihFeGVjU3RhdGUqLCB1aW50MzJfdCkgV1RGX0lOVEVSTkFMOwotREZHSGFuZGxlckVuY29k
ZWQgREZHX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZVN0dWJJbmZvKikgV1RGX0lOVEVSTkFMOwotCiAvLyBUaGVzZSBvcGVyYXRpb25z
IGltcGxlbWVudCB0aGUgaW1wbGljaXRseSBjYWxsZWQgVG9JbnQzMiBhbmQgVG9Cb29sZWFuIGNv
bnZlcnNpb25zIGZyb20gRVM1LgogLy8gVGhpcyBjb252ZXJzaW9uIHJldHVybnMgYW4gaW50MzJf
dCB3aXRoaW4gYSBzaXplX3Qgc3VjaCB0aGF0IHRoZSB2YWx1ZSBpcyB6ZXJvIGV4dGVuZGVkIHRv
IGZpbGwgdGhlIHJlZ2lzdGVyLgotc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFs
dWVUb0ludDMyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1zaXpl
X3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gZGZnQ29u
dmVydEpTVmFsdWVUb0ludDMyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7CitzaXplX3QgSklUX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogCi12b2lkIERGR19PUEVSQVRJ
T04gZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqLCB2b2lk
Kiwgdm9pZCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlv
blByaW50U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lkKikgV1RGX0lO
VEVSTkFMOwogCi12b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENv
ZGVCbG9jayopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRp
bWl6YXRpb25Ob3coQ29kZUJsb2NrKikgV1RGX0lOVEVSTkFMOwogCiAjaWYgRU5BQkxFKEZUTF9K
SVQpCi12b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjU3RhdGUqKSBXVEZf
SU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhFeGVjU3Rh
dGUqLCBpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIGludDMyX3Qgc3RyZWFtSW5kZXgpIFdURl9JTlRF
Uk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0ZSopIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KEV4ZWNT
dGF0ZSosIGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBzdHJlYW1JbmRleCkgV1RGX0lO
VEVSTkFMOwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCiB9IC8vIGV4dGVybiAiQyIKIAot
aW5saW5lIFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXpl
Rm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQoraW5saW5lIFBfSklUT3BlcmF0aW9uX0VTdFog
b3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBl
KQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgVHlwZUludDg6CkBAIC0zNDgsNyAr
MTg5LDcgQEAgaW5saW5lIFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uTmV3VAogICAgIHJl
dHVybiAwOwogfQogCi1pbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0SiBvcGVyYXRpb25OZXdUeXBl
ZEFycmF5V2l0aE9uZUFyZ3VtZW50Rm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQoraW5saW5l
IFBfSklUT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVu
dEZvclR5cGUoVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAg
ICBjYXNlIFR5cGVJbnQ4OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdp
c3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVn
aXN0ZXJTZXQuaAkocmV2aXNpb24gMTU2MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxNyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgREZHUmVn
aXN0ZXJTZXRfaAotI2RlZmluZSBERkdSZWdpc3RlclNldF9oCi0KLSNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiRlBSSW5mby5oIgot
I2luY2x1ZGUgIkdQUkluZm8uaCIKLSNpbmNsdWRlIDx3dGYvQml0bWFwLmg+Ci0KLW5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRvdGFsTnVt
YmVyT2ZSZWdpc3RlcnMgPQotICAgIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnM7Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkJ5
dGVzSW5SZWdpc3RlclNldCA9Ci0gICAgKHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMgKyA3KSA+PiAz
OwotCi10eXBlZGVmIHVpbnQ4X3QgUmVnaXN0ZXJTZXRQT0RbbnVtYmVyT2ZCeXRlc0luUmVnaXN0
ZXJTZXRdOwotCi1jbGFzcyBSZWdpc3RlclNldCB7Ci1wdWJsaWM6Ci0gICAgUmVnaXN0ZXJTZXQo
KQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0
ZXJTZXQ7IGktLTspCi0gICAgICAgICAgICBtX3NldFtpXSA9IDA7Ci0gICAgfQotICAgIAotICAg
IFJlZ2lzdGVyU2V0KGNvbnN0IFJlZ2lzdGVyU2V0UE9EJiBvdGhlcikKLSAgICB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0OyBpLS07KQotICAg
ICAgICAgICAgbV9zZXRbaV0gPSBvdGhlcltpXTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgUmVn
aXN0ZXJTZXRQT0QmIGFzUE9EKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KLSAgICAKLSAgICB2
b2lkIGNvcHlJbmZvKFJlZ2lzdGVyU2V0UE9EJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0OyBpLS07KQotICAg
ICAgICAgICAgb3RoZXJbaV0gPSBtX3NldFtpXTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQo
R1BSUmVnIHJlZykKLSAgICB7Ci0gICAgICAgIHNldEJpdChHUFJJbmZvOjp0b0luZGV4KHJlZykp
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldEdQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCi0g
ICAgewotICAgICAgICBBU1NFUlQoaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7
Ci0gICAgICAgIHNldEJpdChpbmRleCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xlYXIoR1BS
UmVnIHJlZykKLSAgICB7Ci0gICAgICAgIGNsZWFyQml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgZ2V0KEdQUlJlZyByZWcpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gZ2V0Qml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAot
ICAgIGJvb2wgZ2V0R1BSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAg
cmV0dXJuIGdldEJpdChpbmRleCk7Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVybiB0aGUgaW5k
ZXgndGggZnJlZSBHUFIuCi0gICAgR1BSUmVnIGdldEZyZWVHUFIodW5zaWduZWQgaW5kZXggPSAw
KSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmICghZ2V0R1BSQnlJbmRleChpKSAm
JiAhaW5kZXgtLSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6dG9SZWdpc3Rlcihp
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBzZXQoRlBSUmVnIHJlZykKLSAgICB7Ci0gICAgICAgIHNldEJpdChHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgc2V0RlBSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpbmRleCA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgc2V0
Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaW5kZXgpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNsZWFyKEZQUlJlZyByZWcpCi0gICAgewotICAgICAgICBjbGVhckJpdChHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAg
IAotICAgIGJvb2wgZ2V0KEZQUlJlZyByZWcpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
Z2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcp
KTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBnZXRGUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnMpOwotICAgICAgICByZXR1cm4gZ2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
ICsgaW5kZXgpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4K
LSAgICB2b2lkIHNldEJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICBzZXQo
QmFua0luZm86OnRvUmVnaXN0ZXIoaW5kZXgpKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgQmFua0luZm8+Ci0gICAgYm9vbCBnZXRCeUluZGV4KHVuc2lnbmVkIGluZGV4KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdldChCYW5rSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOwot
ICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZlNldEdQUnMoKSBjb25zdAotICAgIHsK
LSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmICghZ2V0
Qml0KGkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVzdWx0Kys7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdW5z
aWduZWQgbnVtYmVyT2ZTZXRGUFJzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJl
c3VsdCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAoIWdldEJpdChHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVycyArIGkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
cmVzdWx0Kys7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAg
Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdG90YWxO
dW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFnZXRCaXQoaSkpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXN1bHQrKzsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgdm9p
ZCBzZXRCaXQodW5zaWduZWQgaSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpIDwgdG90YWxOdW1i
ZXJPZlJlZ2lzdGVycyk7Ci0gICAgICAgIG1fc2V0W2kgPj4gM10gfD0gKDEgPDwgKGkgJiA3KSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xlYXJCaXQodW5zaWduZWQgaSkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChpIDwgdG90YWxOdW1iZXJPZlJlZ2lzdGVycyk7Ci0gICAgICAgIG1fc2V0W2kg
Pj4gM10gJj0gfigxIDw8IChpICYgNykpOwotICAgIH0KLSAgICAKLSAgICBib29sIGdldEJpdCh1
bnNpZ25lZCBpKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9m
UmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0dXJuICEhKG1fc2V0W2kgPj4gM10gJiAoMSA8PCAoaSAm
IDcpKSk7Ci0gICAgfQotICAgIAotICAgIFJlZ2lzdGVyU2V0UE9EIG1fc2V0OwotfTsKLQotfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkgLT4gc28g
aWYgREZHIGlzIGRpc2FibGVkCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQot
Ly8gRGVmaW5lIFJlZ2lzdGVyU2V0UE9EIHRvIHNvbWV0aGluZyB0aGF0IGlzIGEgUE9ELCBidXQg
aXMgb3RoZXJ3aXNlIHVzZWxlc3MsCi0vLyB0byBtYWtlIGl0IGVhc2llciB0byByZWZlciB0byB0
aGlzIHR5cGUgaW4gY29kZSB0aGF0IG1heSBiZSBjb21waWxlZCB3aGVuCi0vLyB0aGUgREZHIGlz
IGRpc2FibGVkLgotCi1zdHJ1Y3QgUmVnaXN0ZXJTZXRQT0QgeyB9OwotCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotI2VuZGlmIC8vIERG
R1JlZ2lzdGVyU2V0X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBh
dGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0
Y2guY3BwCShyZXZpc2lvbiAxNTYyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0MTkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZHUmVwYXRjaC5oIgotCi0jaWYgRU5BQkxFKERGR19K
SVQpCi0KLSNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJDYWxsRnJhbWVJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCi0jaW5jbHVk
ZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKLSNpbmNsdWRlICJERkdUaHVua3MuaCIKLSNpbmNsdWRl
ICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIK
LSNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJ
bmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+Ci0KLW5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJs
b2NrKiBjb2RlYmxvY2ssIENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgbmV3Q2Fs
bGVlRnVuY3Rpb24pCi17Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVibG9j
ayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOwot
fQotCi1zdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24s
IGJvb2wgY29tcGFjdCkKLXsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJs
b2NrKTsKLQotICAgIC8vIE9ubHkgb3B0aW1pemUgb25jZSEKLSAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHNsb3dQYXRoRnVuY3Rpb24pOwotCi0g
ICAgLy8gUGF0Y2ggdGhlIHN0cnVjdHVyZSBjaGVjayAmIHRoZSBvZmZzZXQgb2YgdGhlIGxvYWQu
Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNo
ZWNrSW1tVG9DYWxsKSwgc3RydWN0dXJlKTsKLSAgICByZXBhdGNoQnVmZmVyLnNldExvYWRJbnN0
cnVjdGlvbklzQWN0aXZlKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5jb252ZXJ0aWJsZUxv
YWRBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdG9yYWdlTG9hZCksIGlz
T3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGNv
bXBhY3QpCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNl
dCkpOwotICAgIGVsc2UKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9m
ZnNldCkpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBpZiAoY29tcGFjdCkgewotICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRh
dGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdM
b2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRh
TGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9h
ZExvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uo
b2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zm
c2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpOwotICAgIH0KLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uQ2hlY2soCi0gICAgSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2Vz
LCBHUFJSZWcgc2NyYXRjaEdQUikKLXsKLSAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBz
dHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxp
ZCgpKSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3R1Yklu
Zm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSNpZiBERkdfRU5BQkxFKEpJVF9BU1NFUlQp
Ci0gICAgICAgIC8vIElmIHdlIGV4ZWN1dGUgdGhpcyBjb2RlLCB0aGUgb2JqZWN0IG11c3QgaGF2
ZSB0aGUgc3RydWN0dXJlIHdlIGV4cGVjdC4gQXNzZXJ0Ci0gICAgICAgIC8vIHRoaXMgaW4gZGVi
dWcgbW9kZXMuCi0gICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG9iamVjdCksIHNjcmF0Y2hHUFIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9
IGppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSkpOwotICAgICAgICBqaXQuYnJlYWtwb2ludCgpOwotICAgICAgICBvay5saW5r
KCZqaXQpOwotI2VuZGlmCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0g
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZCgKLSAgICAgICAgaml0LmJyYW5jaFB0cigKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOwotfQotCi1z
dGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNWYWx1ZSBwcm90
b3R5cGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
Ci0gICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWls
dXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgp
KTsKLSAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3Rv
dHlwZS5hc0NlbGwoKSwgcHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2Nr
LCBzdHViSW5mbywgaml0LAotICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotfQot
Ci1zdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZl
ciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgdGFyZ2V0KQotewotICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRj
aGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGxh
Y2VXaXRoSnVtcCgKLSAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVC
cmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAg
ICAtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKSksCi0g
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKLSAgICAgICAgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgIHN0dWJJbmZvLnBh
dGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwodGFyZ2V0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlU2NyYXRjaChNYWNyb0Fz
c2VtYmxlciYgc3R1YkppdCwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgR1BSUmVnIHNjcmF0
Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCYgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAgICBp
ZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQ
Uik7Ci0gICAgICAgIAotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAg
IAotICAgICAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgaGVyZSwgc28gd2UgY2FuIHBvcCBzY3Jh
dGNoR1BSLCBhbmQgdGhlbiBqdW1wIGJhY2suCi0gICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZz
dHViSml0KTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAKLSAgICAgICAgZmFpbCA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIAotICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLX0KLQotc3RhdGljIHZv
aWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRU
b1Jlc3RvcmVTY3JhdGNoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzLCBD
b2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNl
QmVnaW4pCi17Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdWNjZXNzTGFiZWwpOwot
ICAgICAgICAKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAKLSAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgZGlyZWN0bHkgYmFjayB0byBub3JtYWwg
cGF0aAotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBzbG93Q2FzZUJlZ2luKTsK
LX0KLQotc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVm
ZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZh
aWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMpCi17Ci0gICAgbGlua1Jl
c3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2Vzcywg
ZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1
YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJl
Q2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0
aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRp
bmUpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlciBz
dHViSml0OwotICAgICAgICAKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJl
Zz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2guZGZnLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7Ci0gICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVy
cykuZ2V0RnJlZUdQUigpOwotICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsK
LSAgICAKLSAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3Jh
dGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICBzY3JhdGNoR1BSID0g
U3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCByZXN1
bHRUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKLSAg
ICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgIAotICAgIGZhaWx1cmVDYXNl
cy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOwotICAgIAotICAgIFN0
cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9
IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAg
ICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JM
b29rdXAoZXhlYykpOwotICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAg
ICAgICAgICBwcm90b09iamVjdCwgcHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpLCBleGVjLT5jb2Rl
QmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNj
cmF0Y2hHUFIpOwotICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOwotICAgIH0KLSAg
ICAKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkgewotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIHN0dWJKaXQubG9hZDY0KHByb3RvT2JqZWN0LT5sb2NhdGlvbkZvck9mZnNldChv
ZmZzZXQpLCByZXN1bHRHUFIpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1
YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0LT5sb2Nh
dGlvbkZvck9mZnNldChvZmZzZXQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgc3R1YkppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAg
ICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1
bHRHUFIpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKHBy
b3RvT2JqZWN0LT5idXR0ZXJmbHlBZGRyZXNzKCksIHJlc3VsdEdQUik7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpLCByZXN1bHRHUFIpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAg
c3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJ
bkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRU
YWdHUFIpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwotI2VuZGlmCi0gICAgfQotCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKLSAgICAKLSAgICBlbWl0UmVzdG9yZVNjcmF0Y2go
c3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWws
IGZhaWx1cmVDYXNlcyk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZz
dHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7Ci0gICAgCi0gICAgbGlua1Jlc3RvcmVTY3JhdGNo
KHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVy
ZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOwotICAgIAotICAgIHN0dWJSb3V0
aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCi0gICAgICAgIHBhdGNoQnVmZmVyLAot
ICAgICAgICAoIkRGRyBwcm90b3R5cGUgY2hhaW4gYWNjZXNzIHN0dWIgZm9yICVzLCByZXR1cm4g
cG9pbnQgJXAiLAotICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0
YSgpLCBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotfQotCi1zdGF0aWMgYm9v
bCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICAvLyBGSVhNRTogV3JpdGUgYSB0ZXN0
IHRoYXQgcHJvdmVzIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lvbiBoZXJlIGp1c3QKLSAg
ICAvLyBsaWtlIHRoZSBpbnRlcnByZXRlciBkb2VzLCB0aGVuIGFkZCBhIGNoZWNrIGZvciByZWN1
cnNpb24uCi0KLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIAotICAgIGlmIChpc0pTQXJyYXkoYmFzZVZh
bHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewot
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2guZGZnLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIEdQUlJlZyBy
ZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1
ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycyku
Z2V0RnJlZUdQUigpOwotICAgICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7
Ci0gICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OwotICAgICAgICAKLSAg
ICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgewotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0
Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgICAgICBzY3JhdGNoR1BS
ID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCBy
ZXN1bHRUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQ
Uik7Ci0gICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7
Ci0gICAgICAgCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7IAotICAg
ICAgICBzdHViSml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0
cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwot
ICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElu
ZGV4aW5nU2hhcGVNYXNrKSkpOwotICAgICAgICAKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMCkpKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQub3I2NChH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0j
ZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwg
cmVzdWx0R1BSKTsKLSAgICAgICAgc3R1YkppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1t
MzIoMHhmZmZmZmZmZiksIHJlc3VsdFRhZ0dQUik7IC8vIEpTVmFsdWU6OkludDMyVGFnCi0jZW5k
aWYKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwotICAgICAg
ICAKLSAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3Jh
dGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAK
LSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBjb2RlQmxvY2sp
OwotICAgICAgICAKLSAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7
Ci0gICAgICAgIAotICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVf
Rk9SX0RGR19TVFVCKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRG
RyBHZXRCeUlkIGFycmF5IGxlbmd0aCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAg
ICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAg
ICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygp
KSk7Ci0gICAgICAgIAotICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJs
b2NrKTsKLSAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBz
dHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7
Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgLy8gRklY
TUU6IHNob3VsZCBzdXBwb3J0IGxlbmd0aCBhY2Nlc3MgZm9yIFN0cmluZy4KLQotICAgIC8vIEZJ
WE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCi0gICAgaWYgKCFiYXNl
VmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU0NlbGwqIGJhc2VD
ZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFz
ZUNlbGwtPnN0cnVjdHVyZSgpOwotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gT3B0aW1pemUgc2Vs
ZiBhY2Nlc3MuCi0gICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKLSAgICAg
ICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQotICAgICAgICAgICAgfHwgIU1hY3JvQXNz
ZW1ibGVyOjppc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2
ZVRvUGF0Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKSB7Ci0gICAgICAgICAgICBy
ZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0
aW9uR2V0QnlJZEJ1aWxkTGlzdCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBz
dHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3Qs
IHRydWUpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBGSVhNRTogb3B0aW1pemUgZ2V0dGVycyBhbmQgc2V0
dGVycwotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNl
dCgpOwotICAgIHNpemVfdCBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5B
Y2Nlc3MoZXhlYywgYmFzZVZhbHVlLCBzbG90LnNsb3RCYXNlKCksIHByb3BlcnR5TmFtZSwgb2Zm
c2V0KTsKLSAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1
Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgIAotICAgIGdlbmVyYXRlUHJvdG9DaGFp
bkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0
LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2Fz
ZSksIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwg
c3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdl
dEJ5SWRCdWlsZExpc3QpOwotICAgIAotICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkQ2hhaW4oKnZt
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWlu
LCBjb3VudCwgdHJ1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgcmVwYXRjaEdldEJ5
SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKLXsKLSAgICBib29sIGNhY2hlZCA9IHRyeUNhY2hlR2V0QnlJRChleGVjLCBi
YXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pOwotICAgIGlmICghY2FjaGVk
KQotICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKLX0KLQotc3RhdGljIGJvb2wgZ2V0UG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KAotICAgIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QqJiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGludCYgbGlzdEluZGV4LAotICAg
IENvZGVMb2NhdGlvbkxhYmVsJiBzbG93Q2FzZSkKLXsKLSAgICBzbG93Q2FzZSA9IHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBh
Y2Nlc3NfdW5zZXQpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0
aW5lKTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCgpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZM
aXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMCwgZmFsc2UpOwotICAgICAgICBsaXN0SW5k
ZXggPSAwOwotICAgIH0gZWxzZSBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX3NlbGYpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0
aW5lKTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIEpJ
VFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoc2xvd0Nhc2UpLCBzdHViSW5m
by51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwotICAgICAg
ICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwg
MSwgdHJ1ZSk7Ci0gICAgICAgIGxpc3RJbmRleCA9IDE7Ci0gICAgfSBlbHNlIGlmIChzdHViSW5m
by5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4pIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoISFzdHViSW5mby5zdHViUm91dGluZSk7Ci0gICAgICAgIHNsb3dDYXNlID0gQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAg
ICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1
YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0
KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpLCB0cnVlKTsKLSAgICAgICAg
c3R1YkluZm8uc3R1YlJvdXRpbmUuY2xlYXIoKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5
SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEsIGZhbHNlKTsKLSAgICAgICAg
bGlzdEluZGV4ID0gMTsKLSAgICB9IGVsc2UgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHVi
SW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0KTsKLSAgICAgICAg
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3Ry
dWN0dXJlTGlzdDsKLSAgICAgICAgbGlzdEluZGV4ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxp
c3QubGlzdFNpemU7Ci0gICAgICAgIHNsb3dDYXNlID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGxpc3RJbmRleCA9PSBQT0xZTU9SUEhJ
Q19MSVNUX0NBQ0hFX1NJWkUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBSRUxF
QVNFX0FTU0VSVChsaXN0SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpJVFN0dWJS
b3V0aW5lKiBzdHViUm91dGluZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nl
c3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0KTsKLSAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICBpZiAoc3R1YkluZm8udS5nZXRCeUlkU2Vs
Zkxpc3QuZGlkU2VsZlBhdGNoaW5nKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAot
ICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAg
ICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayks
Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHJlcGxhY2VXaXRoSnVtcChy
ZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotfQot
Ci1zdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoIWJhc2VWYWx1
ZS5pc0NlbGwoKQotICAgICAgICB8fCAhc2xvdC5pc0NhY2hlYWJsZSgpCi0gICAgICAgIHx8ICFi
YXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVh
YmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgSlND
ZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBpZiAoc2xvdC5zbG90QmFz
ZSgpID09IGJhc2VWYWx1ZSkgewotICAgICAgICBpZiAoIXN0dWJJbmZvLnBhdGNoLmRmZy5yZWdp
c3RlcnNGbHVzaGVkKSB7Ci0gICAgICAgICAgICAvLyBXZSBjYW5ub3QgZG8gYXMgbXVjaCBpbmxp
bmUgY2FjaGluZyBpZiB0aGUgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQgcHJpb3IgdG8gdGhp
cyBHZXRCeUlkLiBJbiBwYXJ0aWN1bGFyLAotICAgICAgICAgICAgLy8gbm9uLVZhbHVlIGNhY2hl
ZCBwcm9wZXJ0aWVzIHJlcXVpcmUgcGxhbnRpbmcgY2FsbHMsIHdoaWNoIHJlcXVpcmVzIHJlZ2lz
dGVycyB0byBoYXZlIGJlZW4gZmx1c2hlZC4gVGh1cywKLSAgICAgICAgICAgIC8vIGlmIHJlZ2lz
dGVycyB3ZXJlIG5vdCBmbHVzaGVkLCBkb24ndCBkbyBub24tVmFsdWUgY2FjaGluZy4KLSAgICAg
ICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwotICAgICAgICBpbnQgbGlzdElu
ZGV4OwotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZTsKLQotICAgICAgICBpZiAo
IWdldFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIHNsb3dDYXNlKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZM
aXN0Lmxpc3RTaXplKys7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCi0gICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJS
ZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZh
bHVlR1BSKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5m
by5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAgICAgICAKLSAgICAg
ICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0cnVjdCA9IHN0dWJKaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSkpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIHN0cmF0ZWd5IHdlIHVzZSBm
b3Igc3R1YnMgaXMgYXMgZm9sbG93czoKLSAgICAgICAgLy8gMSkgQ2FsbCBERkcgaGVscGVyIHRo
YXQgY2FsbHMgdGhlIGdldHRlci4KLSAgICAgICAgLy8gMikgQ2hlY2sgaWYgdGhlcmUgd2FzIGFu
IGV4Y2VwdGlvbiwgYW5kIGlmIHRoZXJlIHdhcywgY2FsbCB5ZXQgYW5vdGhlcgotICAgICAgICAv
LyAgICBoZWxwZXIuCi0gICAgICAgIAotICAgICAgICBib29sIGlzRGlyZWN0ID0gZmFsc2U7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGhhbmRsZXJDYWxsOwotICAgICAgICBGdW5jdGlvblB0ciBvcGVyYXRp
b25GdW5jdGlvbjsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkgfHwgc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpKSB7Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigp
KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VHUFIgIT0gc2NyYXRjaEdQUik7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7Ci0jZW5kaWYKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAg
ICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsK
LSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSwgc2NyYXRjaEdQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRpb25D
YWxsR2V0dGVyOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgYmFzZUdQ
UiwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoRnVu
Y3Rpb25QdHIoc2xvdC5jdXN0b21HZXR0ZXIoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSksCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwo
KSkpOwotICAgICAgICAgICAgICAgIG9wZXJhdGlvbkZ1bmN0aW9uID0gb3BlcmF0aW9uQ2FsbEN1
c3RvbUdldHRlcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
TmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUg
ZnV0dXJlLCB3ZSByZW1lbWJlciB0aGUKLSAgICAgICAgICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFk
ZSBpdCBmcm9tLiBJdCBqdXN0IHNvIGhhcHBlbnMgdG8gYmUgdGhlIHBsYWNlIHRoYXQgd2UgYXJl
IGF0Ci0gICAgICAgICAgICAvLyByaWdodCBub3chCi0gICAgICAgICAgICBzdHViSml0LnN0b3Jl
MzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihleGVjLT5s
b2NhdGlvbkFzUmF3Qml0cygpKSwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0Zv
cihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwo
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgIHN0dWJKaXQu
c2V0dXBSZXN1bHRzKHJlc3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKLSNlbmRpZgotICAgICAgICAg
ICAgc3VjY2VzcyA9IHN0dWJKaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52
ZXJ0ZWRFeGNlcHRpb25DaGVjayk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKCZzdHViSW5mbykpOwotICAgICAgICAgICAgaGFuZGxlckNhbGwg
PSBzdHViSml0LmNhbGwoKTsKLSAgICAgICAgICAgIHN0dWJKaXQuanVtcChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGlzSW5saW5l
T2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7
Ci0jZWxzZQotICAgICAgICAgICAgICAgIGlmIChiYXNlR1BSID09IHJlc3VsdFRhZ0dQUikgewot
ICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCBy
ZXN1bHRHUFIpOwotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9m
ZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
Uiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIp
OwotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkp
LCByZXN1bHRHUFIpOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzdHVi
Sml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAg
ICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9m
ZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAo
KTsKLSAgICAgICAgICAgIGlzRGlyZWN0ID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY29kZUJsb2NrKTsKLSAgICAgICAg
Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsod3JvbmdTdHJ1Y3QsIHNsb3dDYXNlKTsKLSAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAg
ICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0
aW9uQ2FsbCwgb3BlcmF0aW9uRnVuY3Rpb24pOwotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlckluU3R1Yik7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPQot
ICAgICAgICAgICAgY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgICAgICAgICAgICAgRklOQUxJ
WkVfREZHX0NPREUoCi0gICAgICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAg
ICAgICAgICAgICAoIkRGRyBHZXRCeUlkIHBvbHltb3JwaGljIGxpc3QgYWNjZXNzIGZvciAlcywg
cmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+
Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAgICAgICAgICp2bSwK
LSAgICAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAg
ICAgICAgIHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkpOwotICAgICAgICAKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xp
c3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRp
bmUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwotICAgICAgICAKLSAgICAgICAgcGF0Y2hKdW1wVG9H
ZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7Ci0gICAg
ICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7
Ci0gICAgfQotICAgIAotICAgIGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT50
eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8ICFzbG90LmlzQ2FjaGVhYmxl
VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQ
cm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2VWYWx1ZSwgc2xvdC5zbG90QmFz
ZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNo
YWluKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90
eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgIAotICAgIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0Owot
ICAgIGludCBsaXN0SW5kZXg7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2U7Ci0gICAg
aWYgKCFnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qodm0sIGNvZGVCbG9jaywgc3R1YkluZm8s
IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgbGlzdEluZGV4LCBzbG93Q2FzZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3QubGlz
dFNpemUrKzsKLSAgICAKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwot
ICAgIAotICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHBy
b3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0Rv
bmUpLCBzbG93Q2FzZSwgc3R1YlJvdXRpbmUpOwotICAgIAotICAgIHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOwotICAgIAotICAgIHBhdGNoSnVt
cFRvR2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwot
ICAgIAotICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
IC0gMSk7Ci19Ci0KLXZvaWQgYnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGJvb2wg
ZG9udENoYW5nZUNhbGwgPSB0cnlCdWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJv
cGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7Ci0gICAgaWYgKCFkb250Q2hhbmdlQ2FsbCkKLSAg
ICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Ci19Ci0KLXN0YXRpYyBWX0RGR09wZXJhdGlvbl9F
SkNJIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNs
b3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUo
KSkgewotICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCi0gICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3Q7Ci0gICAgfQotICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0gICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3Q7Ci19Ci0KLXN0YXRpYyBWX0RGR09wZXJhdGlvbl9FSkNJIGFw
cHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xv
dCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQotewotICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KSB7Ci0gICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0OwotICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdDsKLSAgICB9Ci0gICAgaWYgKHB1dEtpbmQgPT0g
RGlyZWN0KQotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1
aWxkTGlzdDsKLSAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdDsK
LX0KLQotc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAotICAgIEV4ZWNTdGF0ZSogZXhl
YywKLSAgICBKU1ZhbHVlLAotICAgIGNvbnN0IElkZW50aWZpZXImLAotICAgIGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAg
UHV0S2luZCwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICBDb2RlTG9jYXRpb25MYWJl
bCBmYWlsdXJlTGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUp
Ci17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKLSNpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsK
LSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51
c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRj
aCA9IGZhbHNlOwotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBHUFJS
ZWcgc2NyYXRjaEdQUjI7Ci0gICAgY29uc3QgYm9vbCB3cml0ZUJhcnJpZXJOZWVkZWQgPSB0cnVl
OwotI2Vsc2UKLSAgICBjb25zdCBib29sIHdyaXRlQmFycmllck5lZWRlZCA9IGZhbHNlOwotI2Vu
ZGlmCi0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKLSAgICAKLSAgICBpZiAoc2Ny
YXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnICYmICh3cml0ZUJhcnJpZXJOZWVkZWQgfHwgaXNPdXRP
ZkxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJh
c2VHUFIsIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2
ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOwot
I2VuZGlmCi0gICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAgICAgICAgc3R1
YkppdC5wdXNoKHNjcmF0Y2hHUFIpOwotICAgIH0KLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGJhZFN0cnVjdHVyZSA9IHN0dWJKaXQuYnJhbmNoUHRyKAotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpKTsKLSAgICAKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9G
SUxJTkcpCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzY3JhdGNoR1BSMiA9IFNwZWN1bGF0aXZl
SklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSNl
bHNlCi0gICAgc2NyYXRjaEdQUjIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihi
YXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIsIHNjcmF0Y2hHUFIpOwotI2VuZGlmCi0gICAg
c3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIyKTsKLSAgICBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJy
aWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJp
ZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0gICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUjIpOwotI2Vu
ZGlmCi0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpCi0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0g
ICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5Jbmxp
bmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAg
ICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5s
aW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
cGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFp
bHVyZTsKLSAgICAKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc3R1
YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsK
LSAgICAgICAgCi0gICAgICAgIGJhZFN0cnVjdHVyZS5saW5rKCZzdHViSml0KTsKLSAgICAgICAg
c3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAo
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAg
ICAgIGZhaWx1cmUgPSBiYWRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOwotICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKLSAgICAgICAgICAgIAotICAgIHN0dWJS
b3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCi0gICAgICAgIHBhdGNoQnVmZmVy
LAotICAgICAgICAoIkRGRyBQdXRCeUlkIHJlcGxhY2Ugc3R1YiBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCIsCi0gICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCks
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAotICAgIEV4ZWNT
dGF0ZSogZXhlYywKLSAgICBKU1ZhbHVlLAotICAgIGNvbnN0IElkZW50aWZpZXImLAotICAgIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sCi0gICAgUHV0S2luZCBwdXRLaW5kLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAg
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVD
aGFpbiwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCi0gICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0KLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2guZGZnLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVnIHZhbHVl
VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdH
UFIpOwotI2VuZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihz
dHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOwotICAgIAotICAgIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpOwotICAg
IGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYWxs
b2NhdG9yLmxvY2sodmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgYWxsb2NhdG9yLmxvY2sodmFs
dWVHUFIpOwotICAgIAotICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtKTsKLSAgICAgICAgICAg
IAotICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0
Y2hHUFIxICE9IHZhbHVlR1BSKTsKLSAgICAKLSAgICBib29sIG5lZWRTZWNvbmRTY3JhdGNoID0g
ZmFsc2U7Ci0gICAgYm9vbCBuZWVkVGhpcmRTY3JhdGNoID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdS
SVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIG5lZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsKLSNl
bmRpZgotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCi0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBuZWVkU2Vjb25kU2NyYXRjaCA9IHRydWU7Ci0gICAg
ICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVlOwotICAgIH0KLQotICAgIEdQUlJlZyBzY3JhdGNo
R1BSMjsKLSAgICBpZiAobmVlZFNlY29uZFNjcmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUjIg
PSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNo
R1BSMiAhPSBiYXNlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BS
KTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMzsKLSAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BS
MyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0
Y2hHUFIzICE9IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gdmFsdWVH
UFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjEpOwotICAgICAg
ICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjIpOwotICAgIH0gZWxzZQotICAgICAg
ICBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgICAgICAKLSAgICBhbGxvY2F0
b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7Ci0KLSAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgICAgICAgICAgCi0gICAgQVNT
RVJUKG9sZFN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0
ZWQoKSk7Ci0gICAgCi0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihvbGRTdHJ1Y3R1cmUpKSk7Ci0gICAgCi0gICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNr
KAotICAgICAgICBvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgc2NyYXRjaEdQ
UjEpOwotICAgICAgICAgICAgCi0gICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7Ci0gICAg
ICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhl
YWQoKTsgKml0OyArK2l0KSB7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hl
Y2soCi0gICAgICAgICAgICAgICAgKCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2Rl
QmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgICAgICAg
ICBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiBFTkFCTEUoV1JJVEVfQkFS
UklFUl9QUk9GSUxJTkcpCi0gICAgQVNTRVJUKG5lZWRTZWNvbmRTY3JhdGNoKTsKLSAgICBBU1NF
UlQoc2NyYXRjaEdQUjIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgLy8gTXVzdCBhbHdheXMgZW1p
dCB0aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiBy
ZXF1aXJlcyBpdAotICAgIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFz
ZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFj
Y2Vzcyk7Ci0jZW5kaWYKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1Bh
dGg7Ci0gICAgCi0gICAgYm9vbCBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSBmYWxzZTsKLSAgICAK
LSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgQ29waWVk
QWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0tPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigp
OwotICAgICAgICAKLSAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpIHsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1
cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChzdHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAgICAg
c3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50
UmVtYWluaW5nKTsKLSAgICAgICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAg
ICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3Mo
JmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAg
ICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6
ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgc2l6ZV90IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBz
aXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQ
UjMpOwotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3Vy
cmVudFJlbWFpbmluZywgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5k
KHN0dWJKaXQuYnJhbmNoU3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKSk7Ci0gICAgICAgICAgICBz
dHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRS
ZW1haW5pbmcpOwotICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwotICAg
ICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygm
Y29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOwotICAg
ICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0
Y2hHUFIxID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsIHNjcmF0Y2hH
UFIyID0gYXZhaWxhYmxlCi0gICAgICAgICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBv
ZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9m
KHZvaWQqKSkgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSMywgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXpl
b2Yodm9pZCopKSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgICAgICBzdHViSml0LnN0b3Jl
UHRyKHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLShv
ZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hH
UFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpKTsKLSAgICAgICAgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBzdHViSml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGlmIChpc0lubGluZU9mZnNl
dChzbG90LmNhY2hlZE9mZnNldCgpKSkKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFzY3JhdGNoR1BS
MUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQ
UjEpOwotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0
dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHVi
Sml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFn
ZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1YkppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJm
bHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0
dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpT
VmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50
YWcpKSk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3Vj
Y2VzczsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOwotICAgICAgICAgICAgCi0g
ICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7Ci0gICAgICAgIGFsbG9jYXRv
ci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOwotICAgICAgICBzdWNj
ZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0KLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJK
aXQpOwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhz
dHViSml0KTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0gZWxzZQot
ICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNz
SW5TbG93UGF0aDsKLSAgICAKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzbG93UGF0
aC5saW5rKCZzdHViSml0KTsKLSAgICAgICAgCi0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1
c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOwotICAgICAgICBTY3JhdGNoQnVmZmVyKiBz
Y3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKGFsbG9jYXRvci5kZXNpcmVk
U2NyYXRjaEJ1ZmZlclNpemUoKSk7Ci0gICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdp
c3RlcnNUb1NjcmF0Y2hCdWZmZXIoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEp
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZh
bHVlR1BSKTsKLSNlbHNlCi0gICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BS
LCB2YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQu
Y2FsbCgpOwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRj
aEJ1ZmZlcihzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN1
Y2Nlc3NJblNsb3dQYXRoID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfQotICAgIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOwotICAg
IHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIGlm
IChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwotICAgIGVsc2UKLSAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhmYWlsdXJlQ2FzZXMsIGZhaWx1cmVMYWJlbCk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsK
LSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBvcGVyYXRpb25SZWFsbG9j
YXRlU3RvcmFnZUFuZEZpbmlzaFB1dCk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vz
c0luU2xvd1BhdGgsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICB9Ci0gICAgCi0gICAgc3R1
YlJvdXRpbmUgPQotICAgICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgICAgIEZJ
TkFMSVpFX0RGR19DT0RFKAotICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAg
ICAgICAgICgiREZHIFB1dEJ5SWQgJXN0cmFuc2l0aW9uIHN0dWIgKCVwIC0+ICVwKSBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPyAicmVh
bGxvY2F0aW5nICIgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1
Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkp
LmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5l
eGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICAgICAqdm0sCi0gICAgICAgICAgICBleGVj
LT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LAotICAgICAgICAgICAgc3RydWN0dXJlKTsKLX0KLQotc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRC
eUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
ZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBpZiAo
IWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTQ2VsbCog
YmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsKLSAgICAKLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFi
bGVEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE9wdGltaXpl
IHNlbGYgYWNjZXNzLgotICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKLSAgICAg
ICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKLSAg
ICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6
aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCi0g
ICAgICAgICAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgotICAgICAg
ICAgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgotICAgICAgICAgICAgICAg
ICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkKLSAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBy
ZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKLSAgICAgICAgICAgIC8vIGluZGV4aW5nIHN0
b3JhZ2UuCi0gICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hl
YWRlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKSA9PSBJ
bnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBz
dHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCi0gICAgICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVl
LCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCi0gICAgICAgICAgICAgICAgc3RydWN0
dXJlLCBvbGRTdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAotICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNhbGxUb1Nsb3dDYXNlKSwKLSAgICAgICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGlu
ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOwotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCi0gICAgICAg
ICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sp
LAotICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1
bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1Yklu
Zm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERp
cmVjdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRC
eUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsKLSAgICAgICAgc3R1YkluZm8uaW5p
dFB1dEJ5SWRSZXBsYWNlKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0
dXJlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsK
LSAgICBib29sIGNhY2hlZCA9IHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3Bl
cnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwotICAgIGlmICghY2FjaGVkKQotICAg
ICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkp
OwotfQotCi1zdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtp
bmQgcHV0S2luZCkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9j
aygpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotCi0gICAgaWYgKCFiYXNlVmFsdWUuaXND
ZWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFz
ZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0
cnVjdHVyZSgpOwotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2
aW91c0lEKCk7Ci0gICAgCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4K
LSAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgIFBvbHltb3JwaGlj
UHV0QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJv
dXRpbmU7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlT
bG90OjpOZXdQcm9wZXJ0eSkgewotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9u
YXJ5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxs
b2MsIGlmIHdlIGRvbid0IGhhdmUKLSAgICAgICAgICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8g
bWFrZSBpdCBoYXBwZW4uCi0gICAgICAgICAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMgPCA2Ci0gICAgICAgICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAgICAgICAgICYm
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0
aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcwotICAg
ICAgICAgICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KLSAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1
cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9ybWFsaXplUHJvdG90eXBlQ2hh
aW4oZXhlYywgYmFzZUNlbGwpID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNo
YWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRp
bmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KLSAgICAgICAg
ICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKAotICAgICAgICAgICAgICAg
IHB1dEtpbmQsIHN0dWJJbmZvLAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dD
YXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigK
LSAgICAgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1
YkluZm8sIHB1dEtpbmQsCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUs
IHByb3RvdHlwZUNoYWluLAotICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpc3Qt
PmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKLSAgICAgICAgICAgICAgICBzdHViUm91dGluZSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKLSAgICAgICAgICAg
ICAgICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICAqdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0
cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKLSAgICAgICAgICAgICAgICAgICAg
c3R1YlJvdXRpbmUpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlJ3JlIG5v
dyBjb21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBh
Y2NvcmRpbmdseS4KLSAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpm
cm9tKAotICAgICAgICAgICAgICAgIHB1dEtpbmQsIHN0dWJJbmZvLAotICAgICAgICAgICAgICAg
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGVt
aXRQdXRSZXBsYWNlU3R1YigKLSAgICAgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIHByb3Bl
cnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCi0gICAgICAgICAgICAgICAgc3RydWN0
dXJlLCBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksIHN0
dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKAot
ICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAg
ICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBzdHViUm91dGluZSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxh
YmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
bGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihz
bG90LCBwdXRLaW5kKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIGJvb2wgY2FjaGVkID0gdHJ5QnVpbGRQdXRC
eUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1
dEtpbmQpOwotICAgIGlmICghY2FjaGVkKQotICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2Rl
QmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQ
dXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotfQotCi1zdGF0aWMgYm9vbCB0cnlSZXBh
dGNoSW4oCi0gICAgRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBib29sIHdhc0ZvdW5kLAotICAgIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmICghYmFzZS0+c3RydWN0dXJl
KCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIGlmICh3YXNGb3VuZCkgewotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFi
bGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgpOwotICAg
IAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldElnbm9yZWQ7Ci0gICAgc2l6ZV90IGNvdW50ID0g
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlLCB3YXNGb3Vu
ZCA/IHNsb3Quc2xvdEJhc2UoKSA6IEpTVmFsdWUoKSwgaWRlbnQsIG9mZnNldElnbm9yZWQpOwot
ICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdDsKLSAgICBpbnQgbGlzdEluZGV4OwotICAgIAotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmhvdFBhdGhCZWdpbjsKLSAgICBDb2Rl
TG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsOwotICAgIAotICAgIGlmIChzdHViSW5mby5hY2Nl
c3NUeXBlID09IGFjY2Vzc191bnNldCkgewotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgICAgIHN0dWJJ
bmZvLmluaXRJbkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAwKTsKLSAgICAgICAgc2xv
d0Nhc2VMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAot
ICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAg
ICAgICBsaXN0SW5kZXggPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2luX2xpc3QpOwotICAgICAgICBwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmluTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAg
ICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgc2xv
d0Nhc2VMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+
bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlQ2hh
aW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIAotICAgIHsKLSAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BS
KTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1Yklu
Zm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdp
c3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwot
ICAgICAgICAKLSAgICAgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0pOwotICAgICAgICAKLSAg
ICAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaDsKLSAgICAgICAgaWYgKHNjcmF0Y2hHUFIg
PT0gSW52YWxpZEdQUlJlZykgewotICAgICAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZl
SklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBz
dHViSml0LnB1c2goc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRj
aCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0
Y2ggPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBm
YWlsdXJlQ2FzZXM7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQ
dHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkp
KTsKLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVy
ZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAg
ICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5w
cm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3RvdHlwZSwgcHJvdG90eXBlLT5zdHJ1Y3R1
cmUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LAotICAgICAgICAgICAg
ICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBjdXJyU3RydWN0dXJl
ID0gaXQtPmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4od2FzRm91bmQpKSksIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAg
ICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih3YXNGb3VuZCksIHJl
c3VsdEdQUik7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHN1Y2Nlc3MsIGZhaWw7Ci0gICAgICAgIAotICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1
YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZh
aWx1cmVDYXNlcyk7Ci0gICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKLQotICAgICAgICBsaW5rUmVzdG9yZVNj
cmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBm
YWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgICAgIAotICAg
ICAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RGR19TVFVCKAotICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBJbiAoZm91bmQgPSAlcykgc3R1YiBm
b3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgd2FzRm91bmQgPyAieWVz
IiA6ICJubyIsIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwKLSAgICAgICAg
ICAgICAgICBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIH0KLSAgICAK
LSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVl
KTsKLSAgICBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZSsrOwotICAgIAotICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KHN0dWJJbmZvLmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoMCksIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgCi0gICAgcmV0dXJuIGxpc3RJbmRl
eCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKTsKLX0KLQotdm9pZCByZXBhdGNo
SW4oCi0gICAgRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBib29sIHdhc0ZvdW5kLAotICAgIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmICh0cnlSZXBhdGNoSW4oZXhlYywg
YmFzZSwgaWRlbnQsIHdhc0ZvdW5kLCBzbG90LCBzdHViSW5mbykpCi0gICAgICAgIHJldHVybjsK
LSAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLCBvcGVyYXRpb25Jbik7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFJlcGF0
Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAgICBpZiAoa2luZCA9PSBDb2Rl
Rm9yQ2FsbCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9y
KS5jb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVChraW5kID09IENv
ZGVGb3JDb25zdHJ1Y3QpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dl
bmVyYXRvcikuY29kZSgpKTsKLX0KLQotdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKU0Z1
bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7Ci0g
ICAgCi0gICAgLy8gSWYgeW91J3JlIGJlaW5nIGNhbGwtbGlua2VkIGZyb20gYSBERkcgY2FsbGVy
IHRoZW4geW91IG9idmlvdXNseSBkaWRuJ3QgZ2V0IGlubGluZWQuCi0gICAgaWYgKGNhbGxlZUNv
ZGVCbG9jaykKLSAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOwotICAgIAotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+
Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2Nr
LT52bSgpOwotICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2Rl
QmxvY2spOwotICAgIAotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwotICAg
IGNhbGxMaW5rSW5mby5jYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPnZtKCksIGNhbGxM
aW5rSW5mby5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGNhbGxlZSk7Ci0gICAgY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlLnNldChleGVjLT5jYWxs
ZXJGcmFtZSgpLT52bSgpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxs
ZWUpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIs
IGNvZGVQdHIpOwotICAgIAotICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0gICAgICAgIGNhbGxl
ZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLT5jYWxsZXJGcmFtZSgpLCAmY2FsbExp
bmtJbmZvKTsKLSAgICAKLSAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+
Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3Ry
dWN0KTsKLSAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBD
b2RlRm9yQ29uc3RydWN0KTsKLX0KLQotdm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqIGV4ZWMs
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
Ci17Ci0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgp
LT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7Ci0gICAg
Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7Ci0gICAg
Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywga2luZCk7
Ci19Ci0KLXZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjb2RlUHRyKQotewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIpOwotICAgIAotICAg
IENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJs
b2NrKCk7Ci0gICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIEdQ
UlJlZyBjYWxsZWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KGNhbGxMaW5rSW5mby5jYWxsZWVH
UFIpOwotICAgIAotICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBjYWxsZXJDb2RlQmxvY2sp
OwotICAgIAotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgIHN0dWJKaXQuYnJh
bmNoVGVzdDY0KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBjYWxsZWVHUFIs
IEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotI2Vsc2UKLSAgICAvLyBXZSB3b3VsZCBoYXZl
IGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgotI2VuZGlmCi0gICAg
Ci0gICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICBzdHViSml0LmJyYW5jaFB0cigKLSAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgCi0gICAg
c2xvd1BhdGguYXBwZW5kKAotICAgICAgICBzdHViSml0LmJyYW5jaFB0cigKLSAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCi0gICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpKTsKLSAgICAKLSAg
ICBzdHViSml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVH
UFIsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKLSAgICAgICAgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdHViSml0LnN0b3Jl
NjQoCi0gICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7Ci0jZWxzZQot
ICAgIHN0dWJKaXQuc3RvcmVQdHIoCi0gICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAot
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3Bl
Q2hhaW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSkpOwotICAgIHN0dWJKaXQuc3RvcmUzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbikgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSNlbmRpZgotICAgIAotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7Ci0gICAgSklUQ29t
cGlsZXI6Okp1bXAgZG9uZSA9IHN0dWJKaXQuanVtcCgpOwotICAgIAotICAgIHNsb3dQYXRoLmxp
bmsoJnN0dWJKaXQpOwotICAgIHN0dWJKaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86Om5vbkFy
Z0dQUjApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpub25BcmdHUFIx
KTsKLSNlbmRpZgotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
Y2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMik7Ci0gICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9y
ZVJldHVybihHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93
ID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0s
ICZzdHViSml0LCBjYWxsZXJDb2RlQmxvY2spOwotICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmso
Y2FsbCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFi
ZWwodm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0g
ICAgCi0gICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRv
cHRSZWYobmV3IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCi0gICAgICAgIEZJTkFMSVpFX0RGR19D
T0RFKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBjbG9zdXJl
IGNhbGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0ICVwICglcykiLAotICAg
ICAgICAgICAgICAgIHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5r
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVz
cygpLAotICAgICAgICAgICAgICAgIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgdG9DU3Ry
aW5nKHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jaykpLmRhdGEoKSkpLAotICAgICAgICAqdm0s
IGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgZXhlY3V0YWJs
ZSwgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4pKTsKLSAgICAKLSAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKLSAgICAKLSAgICByZXBhdGNoQnVmZmVyLnJl
cGxhY2VXaXRoSnVtcCgKLSAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldp
dGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbiksCi0gICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgbGlua1Ns
b3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwpOwotICAg
IAotICAgIGNhbGxMaW5rSW5mby5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwotICAgIAot
ICAgIEFTU0VSVCghY2FsbGVlQ29kZUJsb2NrIHx8IGNhbGxlZUNvZGVCbG9jay0+aXNJbmNvbWlu
Z0NhbGxBbHJlYWR5TGlua2VkKCZjYWxsTGlua0luZm8pKTsKLX0KLQotdm9pZCByZXNldEdldEJ5
SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQotewotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0lt
bVRvQ2FsbCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJs
ZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICBS
ZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNz
KHN0cnVjdHVyZUxhYmVsKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAot
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihz
dHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUiksCi0gICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVz
ZWRQb2ludGVyKSk7Ci0gICAgfQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHJ1Y3R1cmVM
YWJlbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOwotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKLSNlbHNlCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNo
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICByZXBh
dGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENv
bXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9y
U3RvcmUpLCAwKTsKLSNlbmRpZgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2Fs
bFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotfQotCi12b2lkIHJl
c2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pCi17Ci0gICAgVl9ERkdPcGVyYXRpb25fRUpDSSB1bm9wdGltaXplZEZ1bmN0
aW9uID0gYml0d2lzZV9jYXN0PFZfREZHT3BlcmF0aW9uX0VKQ0k+KE1hY3JvQXNzZW1ibGVyOjpy
ZWFkQ2FsbFRhcmdldChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwotICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkRnVuY3Rpb247Ci0gICAg
aWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpCi0gICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwot
ICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RC
dWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgIGVsc2Ugewot
ICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdEJ1aWxkTGlzdCk7Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgIH0KLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0
aW9uKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgc3RydWN0dXJlTGFiZWwgPSBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRvQ2FsbCk7Ci0gICAgaWYgKE1hY3JvQXNz
ZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7Ci0g
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFu
Y2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hh
YmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUiks
Ci0gICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7Ci0gICAgfQotICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHJ1Y3R1cmVMYWJlbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4odW51c2VkUG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmVwYXRjaEJ1ZmZl
ci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7Ci0jZWxzZQot
ICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0
YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JT
dG9yZSksIDApOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNlbmRpZgotICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkp
OwotfQotCi12b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJ
bmZvLmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoMCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNl
KSk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2aXNpb24gMTU2MjA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWZuZGVmIERGR1JlcGF0Y2hfaAotI2RlZmluZSBERkdSZXBhdGNoX2gKLQotI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJERkdK
SVRDb21waWxlci5oIgotI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKLQotbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewotCi12b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSosIEpT
VmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVT
dHViSW5mbyYpOwotdm9pZCBidWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
Owotdm9pZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12
b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwot
dm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQp
Owotdm9pZCByZXBhdGNoSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgY29uc3QgSWRlbnRpZmllciYs
IGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7
Ci12b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNG
dW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQpOwotdm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kKTsKLXZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENh
bGxMaW5rSW5mbyYsIENvZGVCbG9jayosIFN0cnVjdHVyZSosIEV4ZWN1dGFibGVCYXNlKiwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKTsKLXZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBT
dHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0
cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVy
ZVN0dWJJbmZvJik7Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2Vsc2UgLy8gRU5B
QkxFKERGR19KSVQpCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKLXN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsK
LQotbmFtZXNwYWNlIERGRyB7Ci0KLWlubGluZSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQg
cmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotaW5saW5lIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0gg
dm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci1pbmxpbmUgTk9fUkVUVVJOIHZvaWQgcmVz
ZXRJbihSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCi0jZW5kaWYgLy8gREZHUmVwYXRjaF9oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDE1NjIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjAyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAotI2RlZmluZSBERkdTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3JfaAotCi0jaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0KLSNpZiBFTkFCTEUo
REZHX0pJVCkKLQotI2luY2x1ZGUgIkRGR1JlZ2lzdGVyU2V0LmgiCi0jaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi0vLyBUaGlz
IGNsYXNzIHByb3ZpZGVzIGEgbG93LWxldmVsIHJlZ2lzdGVyIGFsbG9jYXRvciBmb3IgdXNlIGlu
IHN0dWJzLgotCi1jbGFzcyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgewotcHVibGljOgotICAg
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcihjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cykKLSAgICAgICAgOiBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKLSAgICAgICAgLCBt
X2RpZFJldXNlUmVnaXN0ZXJzKGZhbHNlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGxvY2soVCByZWcpIHsgbV9sb2NrZWRSZWdpc3RlcnMu
c2V0KHJlZyk7IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICB0
eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIGFsbG9jYXRlU2NyYXRjaCgpCi0gICAgewot
ICAgICAgICAvLyBGaXJzdCB0cnkgdG8gYWxsb2NhdGUgYSByZWdpc3RlciB0aGF0IGlzIHRvdGFs
bHkgZnJlZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbmtJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgICAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVn
aXN0ZXJUeXBlIHJlZyA9IEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAgaWYg
KCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVnKQotICAgICAgICAgICAgICAgICYmICFtX3VzZWRS
ZWdpc3RlcnMuZ2V0KHJlZykKLSAgICAgICAgICAgICAgICAmJiAhbV9zY3JhdGNoUmVnaXN0ZXJz
LmdldChyZWcpKSB7Ci0gICAgICAgICAgICAgICAgbV9zY3JhdGNoUmVnaXN0ZXJzLnNldChyZWcp
OwotICAgICAgICAgICAgICAgIHJldHVybiByZWc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIC8vIFNpbmNlIHRoYXQgZmFpbGVkLCB0cnkgdG8gYWxsb2NhdGUg
YSByZWdpc3RlciB0aGF0IGlzIG5vdCB5ZXQKLSAgICAgICAgLy8gbG9ja2VkIG9yIHVzZWQgZm9y
IHNjcmF0Y2guCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICAgICAgdHlwZW5hbWUgQmFua0luZm86OlJl
Z2lzdGVyVHlwZSByZWcgPSBCYW5rSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgICAgIGlm
ICghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlZykgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXQo
cmVnKSkgewotICAgICAgICAgICAgICAgIG1fc2NyYXRjaFJlZ2lzdGVycy5zZXQocmVnKTsKLSAg
ICAgICAgICAgICAgICBtX2RpZFJldXNlUmVnaXN0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcmVnOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICAvLyBXZSBmYWlsZWQuCi0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIC8vIE1ha2Ugc29tZSBz
aWxseSBjb21waWxlcnMgaGFwcHkuCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFt
ZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlPigtMSk7Ci0gICAgfQotICAgIAotICAgIEdQUlJlZyBh
bGxvY2F0ZVNjcmF0Y2hHUFIoKSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8R1BSSW5mbz4oKTsg
fQotICAgIEZQUlJlZyBhbGxvY2F0ZVNjcmF0Y2hGUFIoKSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0
Y2g8RlBSSW5mbz4oKTsgfQotICAgIAotICAgIGJvb2wgZGlkUmV1c2VSZWdpc3RlcnMoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkUmV1c2VSZWdpc3RlcnM7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoTWFjcm9Bc3NlbWJs
ZXImIGppdCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobV9z
Y3JhdGNoUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEZQ
UkJ5SW5kZXgoaSkpIHsKLSAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSks
IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChtX3NjcmF0Y2hSZWdpc3RlcnMu
Z2V0R1BSQnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKLSAg
ICAgICAgICAgICAgICBqaXQucHVzaChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmco
TWFjcm9Bc3NlbWJsZXImIGppdCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9kaWRSZXVzZVJlZ2lz
dGVycykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBp
ZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJz
LmdldEdQUkJ5SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAgaml0LnBvcChHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJl
Z2lzdGVycy5nZXRGUFJCeUluZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4
KGkpKSB7Ci0gICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAgICAg
ICAgICBqaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoOCksIE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkgY29u
c3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgKiBzaXpl
b2YoSlNWYWx1ZSk7IH0KLSAgICAKLSAgICB2b2lkIHByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2Ny
YXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVm
ZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWcpCi0gICAgewotICAgICAgICB1
bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJz
LmdldEdQUkJ5SW5kZXgoaSkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAg
IGppdC5zdG9yZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0PEVuY29kZWRK
U1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSk7Ci0jZWxz
ZQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIHN0
YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSAr
IChjb3VudCsrKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzY3Jh
dGNoR1BSID09IEludmFsaWRHUFJSZWcgJiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5k
ZXgoaSkgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQotICAgICAgICAg
ICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICB9Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7
Ci0gICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKLSAg
ICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0
aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAo
Y291bnQrKykpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUo
RlBSSW5mbzo6dG9SZWdpc3RlcihpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgKiBzaXplb2YoSlNWYWx1ZSkgPT0g
ZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkpOwotICAgICAgICAKLSAgICAgICAgaml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3Ro
UHRyKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4oY291bnQgKiBzaXplb2YoSlNWYWx1
ZSkpKSwgc2NyYXRjaEdQUik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcmVzdG9yZVVzZWRSZWdp
c3RlcnNGcm9tU2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3JhdGNoQnVmZmVy
KiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWcpCi0gICAg
ewotICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAg
ICAvLyBGaW5kIGEgc2NyYXRjaCByZWdpc3Rlci4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgfHwgbV9zY3JhdGNoUmVnaXN0
ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIAotICAgICAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5h
Y3RpdmVMZW5ndGhQdHIoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBqaXQuc3RvcmVQdHIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hHUFIpOwotCi0gICAgICAgIC8v
IFJlc3RvcmUgZG91YmxlIHJlZ2lzdGVycyBmaXJzdC4KLSAgICAgICAgdW5zaWduZWQgY291bnQg
PSBtX3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRHUFJzKCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBp
ZiAobV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKLSAgICAgICAgICAgICAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVk
SlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShzY3JhdGNoR1BSLCBGUFJJ
bmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgY291bnQgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVy
cy5nZXRHUFJCeUluZGV4KGkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAg
ICBqaXQubG9hZDY0KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+
ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Ci0jZWxz
ZQotICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUq
PihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspLCBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IAotcHJpdmF0ZToKLSAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7Ci0gICAgUmVnaXN0
ZXJTZXQgbV9sb2NrZWRSZWdpc3RlcnM7Ci0gICAgUmVnaXN0ZXJTZXQgbV9zY3JhdGNoUmVnaXN0
ZXJzOwotICAgIGJvb2wgbV9kaWRSZXVzZVJlZ2lzdGVyczsKLX07Ci0KLX0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5kaWYgLy8gREZH
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNTYy
MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQXJyYXlQcm90
b3R5cGUuaCIKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkRGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiCisjaW5jbHVk
ZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAj
aW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCkBA
IC0yNjEsNyArMjYyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2Rl
TwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBwYXlsb2FkU3RvcmVXaXRoUGF0Y2ggPSBt
X2ppdC5zdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZVBheWxvYWRHUFIsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKIAogICAgIEpJVENvbXBpbGVyOjpMYWJlbCBk
b25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwotICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgb3B0aW1p
emVkQ2FsbDsKKyAgICBWX0pJVE9wZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7CiAgICAgaWYg
KG1faml0LnN0cmljdE1vZGVGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbikpIHsKICAgICAg
ICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQogICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKQEAgLTQ0MCw3ICs0NDEsNyBAQCBi
b29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNo
KE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSogbm9kZSwg
Tm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewogICAgIEJhc2ljQmxvY2sq
IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOwogICAgIEJhc2ljQmxvY2sqIG5vdFRh
a2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwpAQCAtNTEyLDEzICs1MTMsMTMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBKdW1wVHlwZT4KIGNsYXNzIENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0
b3IKLSAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfREZHT3Bl
cmF0aW9uX0VKSiwgR1BSUmVnPiB7CisgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
PEp1bXBUeXBlLCBTX0pJVE9wZXJhdGlvbl9FSkosIEdQUlJlZz4gewogcHVibGljOgogICAgIENv
bXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIEp1bXBUeXBlIGZy
b20sIFNwZWN1bGF0aXZlSklUKiBqaXQsCi0gICAgICAgIFNfREZHT3BlcmF0aW9uX0VKSiBmdW5j
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwK
KyAgICAgICAgU19KSVRPcGVyYXRpb25fRUpKIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLAogICAgICAgICBHUFJSZWcgYXJnMlRhZywg
R1BSUmVnIGFyZzJQYXlsb2FkKQotICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1w
VHlwZSwgU19ERkdPcGVyYXRpb25fRUpKLCBHUFJSZWc+KAorICAgICAgICA6IENhbGxTbG93UGF0
aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25fRUpKLCBHUFJSZWc+KAogICAgICAg
ICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgTmVlZFRvU3BpbGwsIHJlc3VsdCkKICAgICAgICAg
LCBtX2FyZzFUYWcoYXJnMVRhZykKICAgICAgICAgLCBtX2FyZzFQYXlsb2FkKGFyZzFQYXlsb2Fk
KQpAQCAtNTQ2LDcgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fYXJnMlBheWxvYWQ7
CiB9OwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29t
cGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25k
LCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVy
RnVuY3Rpb24pCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC0z
NjExLDcgKzM2MTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoRmluYWxPYmplY3RUeXBlKSkpOwogICAgICAgICBt
X2ppdC5tb3ZlKHRoaXNWYWx1ZVBheWxvYWRHUFIsIHRlbXBHUFIpOwogICAgICAgICBtX2ppdC5t
b3ZlKHRoaXNWYWx1ZVRhZ0dQUiwgdGVtcFRhZ0dQUik7Ci0gICAgICAgIEpfREZHT3BlcmF0aW9u
X0VKIGZ1bmN0aW9uOworICAgICAgICBKX0pJVE9wZXJhdGlvbl9FSiBmdW5jdGlvbjsKICAgICAg
ICAgaWYgKG1faml0LmdyYXBoKCkuZXhlY3V0YWJsZUZvcihub2RlLT5jb2RlT3JpZ2luKS0+aXNT
dHJpY3RNb2RlKCkpCiAgICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvblRvVGhpc1N0cmlj
dDsKICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTYyMDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJE
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0NhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlu
bGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKQEAgLTI1Myw3ICsyNTQsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAKICAgICBKSVRDb21w
aWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKICAgICAKLSAgICBWX0RGR09w
ZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7CisgICAgVl9KSVRPcGVyYXRpb25fRUpDSSBvcHRp
bWl6ZWRDYWxsOwogICAgIGlmIChtX2ppdC5zdHJpY3RNb2RlRm9yKG1fY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pKSB7CiAgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKICAgICAgICAgICAg
IG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CkBA
IC00MjgsNyArNDI5LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21w
YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fz
c2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVs
cGVyRnVuY3Rpb24pCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikK
IHsKICAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKICAg
ICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKQEAg
LTQ5OCwxMiArNDk5LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGgKIAogdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGU+CiBjbGFzcyBDb21wYXJlQW5kQm94Qm9v
bGVhblNsb3dQYXRoR2VuZXJhdG9yCi0gICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
PEp1bXBUeXBlLCBTX0RGR09wZXJhdGlvbl9FSkosIEdQUlJlZz4geworICAgIDogcHVibGljIENh
bGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25fRUpKLCBHUFJSZWc+
IHsKIHB1YmxpYzoKICAgICBDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yKAog
ICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LAotICAgICAgICBTX0RG
R09wZXJhdGlvbl9FSkogZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMikKLSAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfREZH
T3BlcmF0aW9uX0VKSiwgR1BSUmVnPigKKyAgICAgICAgU19KSVRPcGVyYXRpb25fRUpKIGZ1bmN0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgICAgIDog
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0pJVE9wZXJhdGlvbl9FSkosIEdQUlJl
Zz4oCiAgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBOZWVkVG9TcGlsbCwgcmVzdWx0
KQogICAgICAgICAsIG1fYXJnMShhcmcxKQogICAgICAgICAsIG1fYXJnMihhcmcyKQpAQCAtNTI1
LDcgKzUyNiw3IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fYXJnMjsKIH07CiAKLXZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUqIG5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9u
X0VKSiBoZWxwZXJGdW5jdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVDb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKICAg
ICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKQEAgLTM5MDYsNyArMzkwNyw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEZpbmFsT2JqZWN0VHlwZSkpKTsKICAg
ICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHRlbXBHUFIpOwotICAgICAgICBKX0RGR09w
ZXJhdGlvbl9FSiBmdW5jdGlvbjsKKyAgICAgICAgSl9KSVRPcGVyYXRpb25fRUogZnVuY3Rpb247
CiAgICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLmV4ZWN1dGFibGVGb3Iobm9kZS0+Y29kZU9yaWdp
biktPmlzU3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25Ub1Ro
aXNTdHJpY3Q7CiAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTYyMDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODk1LDIyICs4OTUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbihOb2Rl
KiBuCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoTWFjcm9B
c3NlbWJsZXImIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3Jh
dGNoMiwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQotewotICAgIFVOVVNFRF9QQVJBTShq
aXQpOwotICAgIFVOVVNFRF9QQVJBTShvd25lcik7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gx
KTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5k
KTsKLSAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDEpOwotICAgIEFTU0VSVChvd25lciAhPSBz
Y3JhdGNoMik7Ci0gICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNjcmF0Y2gyKTsKLQotI2lmIEVOQUJM
RShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBKSVRDb21waWxlcjo6ZW1pdENvdW50KGpp
dCwgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwotI2VuZGlm
Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIs
IEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VL
aW5kLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBVTlVTRURfUEFS
QU0ob3duZXJHUFIpOwpAQCAtMTAxNyw3ICsxMDAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUluKE5vZGUqIG5vZAogI2VuZGlmCiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCitib29s
IFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSogbm9kZSwgTWFjcm9B
c3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19KSVRPcGVyYXRpb25fRUpKIGhl
bHBlckZ1bmN0aW9uKQogewogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVj
dFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01B
WCkgewpAQCAtMTQ2NSw3ICsxNDQ5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlSW50MwogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBhcmUgaXMgZnVzZWQg
d2l0aCBhIHN1YnNlcXVlbnQgYnJhbmNoLgotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlQnJhbmNoKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25k
aXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCitib29sIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9u
IGRvdWJsZUNvbmRpdGlvbiwgU19KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbikKIHsKICAgICAv
LyBGdXNlZCBjb21wYXJlICYgYnJhbmNoLgogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9j
ayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CkBAIC0zODQyLDcgKzM4MjYsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2VxdWVudCBicmFuY2guCi1ib29sIFNw
ZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBk
b3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCitib29sIFNwZWN1
bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3Vi
bGVDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCiB7CiAgICAgaWYgKGNv
bXBpbGVQZWVwSG9sZUJyYW5jaChub2RlLCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbiwgb3Bl
cmF0aW9uKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNTYyMDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDEwICszNiwxMSBAQAogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAjaW5jbHVk
ZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCIK
LSNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHU2lsZW50UmVnaXN0ZXJT
YXZlUGxhbi5oIgogI2luY2x1ZGUgIkRGR1ZhbHVlU291cmNlLmgiCisjaW5jbHVkZSAiSklUT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlB1dEtp
bmQuaCIKICNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKQEAgLTMxMSw4ICszMTIsNiBAQCBwdWJsaWM6CiAgICAgICAgIHNwZWN1bGF0
aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jdXJyZW50Tm9kZS0+Y29k
ZU9yaWdpbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKE1hY3JvQXNz
ZW1ibGVyJiwgR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3Jh
dGNoR1BSMiwgV3JpdGVCYXJyaWVyVXNlS2luZCk7Ci0KICAgICB2b2lkIHdyaXRlQmFycmllcihH
UFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJy
aWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNj
cmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVn
IG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2Ny
YXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BS
UmVnKTsKICAgICB2b2lkIHdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVH
UFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BS
MSA9IEludmFsaWRHUFJSZWcpOwpAQCAtNzMyLDkgKzczMSw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKEVkZ2Ugb3BlcmFuZCwgTm9kZSogYnJh
bmNoTm9kZSwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CiAgICAgYm9vbCBub25TcGVjdWxhdGl2ZUNv
bXBhcmVOdWxsKE5vZGUqLCBFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwogICAg
IAotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiwgTm9kZSogYnJh
bmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfREZHT3BlcmF0
aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7Ci0gICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBo
b2xlQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNf
REZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7Ci0gICAgYm9vbCBub25TcGVjdWxhdGl2
ZUNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RG
R09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOworICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQ
ZWVwaG9sZUJyYW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7Cisg
ICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3Nl
bWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5j
dGlvbik7CisgICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rp
b24pOwogICAgIAogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUq
LCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICB2b2lkIG5vblNw
ZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcShOb2RlKiwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7
CkBAIC05MjQsMTY5ICs5MjMsMTY5IEBAIHB1YmxpYzoKICAgICAvLyBtYWNoaW5lIHJlZ2lzdGVy
cywgYW5kIGRlbGVnYXRlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gc3BlY2lmaWMKICAgICAvLyBk
ZWNpc2lvbiBhcyB0byBob3cgdG8gZmlsbCB0aGUgcmVnc2l0ZXJzIHRvIHNldHVwQXJndW1lbnRz
KiBtZXRob2RzLgogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09w
ZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBf
REZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGNlbGwpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FQyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBjZWxsKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGNlbGwpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU8g
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0KQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRU8gb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgb2JqZWN0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKG9iamVjdCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1Mgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBzaXplX3Qgc2l6ZSkKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VPUyBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihz
aXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZH
T3BlcmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIGlu
dDMyX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3Bl
cmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIGludDMy
X3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKSkpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
UF9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9sZCwg
c2l6ZV90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9w
ZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2xkLCBzaXplX3Qg
c2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShv
bGQsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVMgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBzaXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgc2l6
ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU0pzcyBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIHNpemVfdCBpbmRleCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU0pzcyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIHNpemVfdCBpbmRleCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihpbmRleCks
IGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihQX0pJVE9wZXJhdGlvbl9FU3Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0WiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJn
MikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VT
dFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVn
IGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTdFog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGFy
ZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9F
U3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVf
dCBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbTMyKGFyZzIpKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZH
T3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJh
dGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0UFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3RQUyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2lu
dGVyLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIocG9pbnRl
ciksIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0U1Mgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGluZGV4LCBz
aXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3Bl
cmF0aW9uX0VTdFNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHNpemVfdCBpbmRleCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVk
SW1tUHRyKGluZGV4KSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9F
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKENfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0
aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUMgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBKU0NlbGwqIGNlbGwpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpT
Q2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShUcnVzdGVkSW1tUHRyKGNlbGwpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU0NlbGwqIGNlbGwpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoY2Vs
bCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUljZiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUljZiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1l
KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FU3Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENf
SklUT3BlcmF0aW9uX0VTdCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSnNzU3Qgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSnNz
U3Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VKc3NK
c3Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSnNzSnNz
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oQ19ERkdPcGVyYXRpb25fRUpzc0pzc0pzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSnNzSnNzSnNzIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcy
LCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKc3NfREZHT3BlcmF0aW9uX0VaIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKc3NfSklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BS
UmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJh
dGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNJY2Ygb3BlcmF0aW9uLCBHUFJS
ZWcgYXJnMSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0ljZiBvcGVyYXRpb24sIEdQ
UlJlZyBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRy
KGlubGluZUNhbGxGcmFtZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDQ0ljZiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMiwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0NJY2Ygb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIsIFRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ1ogb3BlcmF0aW9u
LCBHUFJSZWcgYXJnMSwgaW50IGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihWX0pJVE9wZXJhdGlvbl9FQ1ogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgaW50IGFyZzIp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwg
VHJ1c3RlZEltbTMyKGFyZzIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0
aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9
CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX1cg
b3BlcmF0aW9uLCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fVyBvcGVyYXRpb24sIFdhdGNocG9p
bnRTZXQqIHdhdGNocG9pbnRTZXQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
cyhUcnVzdGVkSW1tUHRyKHdhdGNocG9pbnRTZXQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGwob3BlcmF0aW9uKTsKQEAgLTExMTgsMjQ0ICsxMTE3LDI0NCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwg
YXJnNSk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RG
R09wZXJhdGlvbl9aWiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfSklUT3BlcmF0
aW9uX1paIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSwgYXJnMik7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlvbl9ERCBv
cGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEZQUlJlZyBhcmcxLCBGUFJSZWcgYXJnMikKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX0REIG9wZXJhdGlv
biwgRlBSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEZQUlJlZyBhcmcyKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihJX0RGR09wZXJhdGlvbl9FSnNzIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihJX0pJVE9wZXJhdGlvbl9FSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVy
YXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0Ug
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgdm9pZCogcG9p
bnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFpfSklUT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcg
YXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzKGFyZzEpOwogICAgICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQuYXBwZW5kQ2FsbChvcGVyYXRpb24pOwog
ICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
cmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cmluZ0ltcGwq
IHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FQVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSnNzWiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKc3NaIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgdm9pZCogcG9pbnRlciwgc2l6ZV90
IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCB2b2lkKiBwb2ludGVyLCBzaXplX3Qgc2l6
ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyKHBvaW50ZXIpLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0
aW9uX0VTUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludCBzdGFydENvbnN0YW50LCBpbnQg
bnVtQ29uc3RhbnRzKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50IHN0YXJ0Q29uc3RhbnQs
IGludCBudW1Db25zdGFudHMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKHN0YXJ0Q29uc3RhbnQpLCBUcnVzdGVkSW1tMzIobnVt
Q29uc3RhbnRzKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FUFAgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU0NlbGwqIGNlbGwp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGNlbGwpKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcx
LCBjb25zdCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0pJVE9wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMSwgY29uc3QgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgU3Ry
aW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIFN0cmlu
Z0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRURBIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRURBIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0RGR09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVogb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0Va
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50MzJfdCBhcmcxKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBpbnQzMl90IGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0Va
WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludDMyX3QgYXJnMSwgR1BSUmVnIGFyZzIpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWlogb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQzMl90IGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihh
cmcxKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBpbnQzMl90IGFyZzEsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBH
UFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VaSWNmWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludDMyX3QgYXJnMSwgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSwg
VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRp
b25fRUpTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHZhbHVlLCBzaXplX3QgaW5k
ZXgpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9F
SlMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIHNpemVfdCBpbmRleCkK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSh2YWx1ZSwg
VHJ1c3RlZEltbVB0cihpbmRleCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3RKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVN0SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRP
cGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNf
REZHT3BlcmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0ogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oU19ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9u
X0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIgaW1tKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIgaW1tKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKGltbS5tX3ZhbHVlKSkpKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VK
SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIg
aW1tLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
SklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihpbW0ubV92YWx1ZSkpKSwgYXJnMik7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwg
YXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0pJVE9wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMikKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIuZ3ByKCkp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FT1pEIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyLCBGUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFZfSklUT3BlcmF0aW9uX0VPWkQgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIs
IEZQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAg
ICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25f
RUpDSSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgU3RyaW5nSW1wbCogdWlk
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpD
SSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgU3RyaW5nSW1wbCogdWlkKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpKSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihWX0pJVE9wZXJhdGlvbl9FSkpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FUFpKIG9wZXJhdGlvbiwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0pKIG9wZXJhdGlv
biwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDSkogb3BlcmF0aW9uLCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fRUogb3Bl
cmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTEzNzksNyArMTM3OCw3IEBAIHB1
YmxpYzoKICNkZWZpbmUgU0g0XzMyQklUX0RVTU1ZX0FSRwogI2VuZGlmCiAKLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFpfSklUT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJn
MSkKICAgICB7CiAgICAgICAgIHByZXBhcmVGb3JFeHRlcm5hbENhbGwoKTsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHMoYXJnMSk7CkBAIC0xMzg3LDIzMyArMTM4NiwyMzMgQEAgcHVibGlj
OgogICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIHZvaWQqIHBv
aW50ZXIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCB2
b2lkKiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJl
c3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3Vs
dFBheWxvYWQsIEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVy
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRh
Zyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFN0
cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxv
YWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9ERkdPcGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcg
cmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCBy
ZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VBWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQVogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpzc1ogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRUpzc1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxv
YWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVn
IHJlc3VsdFBheWxvYWQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIHZvaWQqIHBvaW50ZXIsIHNpemVf
dCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRh
ZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludCBzdGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3Rh
bnRzKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGlu
dCBzdGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3RhbnRzKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihzdGFydENvbnN0YW50KSwg
VHJ1c3RlZEltbTMyKG51bUNvbnN0YW50cykpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3Vs
dFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUpQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIHZvaWQqIHBvaW50ZXIp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSlAg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVn
IGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FS
RyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSlAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5
bG9hZCwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FSlAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFy
ZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFC
SV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzIpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRU
YWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBKU0NlbGwqIGNlbGwpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihjZWxs
KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIGNvbnN0
IFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
SklUT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1Q
dHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkkgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFU
YWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcg
YXJnMVBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwg
YXJnMVRhZywgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1
bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZH
T3BlcmF0aW9uX0VKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBpbnQzMl90IGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgU3RyaW5nSW1wbCog
dWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGlu
dDMyX3QgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBTdHJpbmdJbXBsKiB1aWQpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9E
VU1NWV9BUkcgYXJnMVBheWxvYWQsIFRydXN0ZWRJbW0zMihhcmcxVGFnKSwgVHJ1c3RlZEltbVB0
cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VEQSBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBGUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FREEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzEsIGFyZzIp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJS
ZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywg
R1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQs
IEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBUcnVzdGVkSW1tMzIgYXJnMVRhZywg
R1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRU
YWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBUcnVzdGVkSW1tMzIgYXJnMVRhZywgR1BSUmVnIGFy
ZzFQYXlsb2FkLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRh
ZywgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRh
ZywgR1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcg
cmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RV
TU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVz
dWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRh
Zyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgaW50MzJfdCBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9K
SVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0
UGF5bG9hZCwgaW50MzJfdCBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9h
ZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0RGR09wZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpLCBUcnVzdGVkSW1tUHRyKGlubGluZUNh
bGxGcmFtZSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVpa
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludDMy
X3QgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcg
cmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoYXJnMSksIGFy
ZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogCi0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FSlMgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBKU1ZhbHVlUmVncyB2YWx1ZSwgc2l6ZV90IGluZGV4KQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRUpTIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgdmFsdWUsIHNpemVfdCBpbmRleCkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RV
TU1ZX0FSRyB2YWx1ZS5wYXlsb2FkR1BSKCksIHZhbHVlLnRhZ0dQUigpLCBUcnVzdGVkSW1tUHRy
KGluZGV4KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBf
REZHT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJl
ZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oQ19ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2Fk
LCBhcmcxVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50cyhhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJ
VF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAg
fQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9F
Skogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQ
YXlsb2FkLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFy
ZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJn
MVRhZywgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0
UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJU
YWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJl
ZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJS
ZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2Fk
LCBhcmcxVGFnLCBTSDRfMzJCSVRfRFVNTVlfQVJHIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFy
ZzFQYXlsb2FkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSkKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BS
UmVnIGFyZzFQYXlsb2FkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RV
TU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgU0g0XzMyQklUX0RVTU1ZX0FSRyBpbW0sIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJl
c3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3Vs
dFBheWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJnMlRh
ZywgR1BSUmVnIGFyZzJQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVn
IHJlc3VsdFBheWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tLCBHUFJSZWcg
YXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGltbSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSwgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmcyUGF5bG9hZCwg
YXJnMlRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9CiAKLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzJU
YWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1
bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNKIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3Mg
cmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMikKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLnBheWxvYWRHUFIoKSwg
YXJnMi50YWdHUFIoKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0LnBheWxvYWRHUFIoKSwgcmVzdWx0LnRhZ0dQ
UigpKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRh
ZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KIAotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aRCBvcGVyYXRpb24sIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgRlBSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FT1pEIG9wZXJhdGlvbiwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyLCBGUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJXzMyQklUX0RVTU1ZX0FSRyBh
cmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZH
T3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXls
b2FkLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMVRh
ZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RV
TU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwgVHJ1c3RlZEltbVB0cihwb2ludGVy
KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVy
YXRpb25fRUpDSSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQs
IEdQUlJlZyBhcmcyLCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcs
IEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RV
TU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwgVHJ1c3RlZEltbVB0cih1aWQpKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsK
ICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlv
bl9FQ0pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJn
MlBheWxvYWQsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0pKIG9wZXJhdGlvbiwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQsIEdQUlJlZyBh
cmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMlBheWxvYWQsIGFyZzJUYWcsIGFyZzNQYXls
b2FkLCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfREZHT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FUFpKIG9wZXJhdGlvbiwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIsIEVBQklfMzJCSVRfRFVNTVlfQVJHIFNINF8zMkJJVF9EVU1NWV9BUkcgYXJnM1BheWxvYWQs
IGFyZzNUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhv
cGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Vl9ERkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwg
R1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwg
RUFCSV8zMkJJVF9EVU1NWV9BUkcgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmczUGF5bG9hZCwgYXJn
M1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdP
cGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3Rl
ZEltbTMyIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwg
YXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmczUGF5bG9h
ZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihEX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcx
VGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihEX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFy
ZzFUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC0xOTE2LDggKzE5MTUsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBiZXR0ZXJVc2VTdHJpY3RJbnQ1MihlZGdlLm5vZGUoKSk7CiAgICAgfQog
ICAgIAotICAgIGJvb2wgY29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9u
X0VKSik7Ci0gICAgYm9vbCBjb21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSosIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9u
LCBTX0RGR09wZXJhdGlvbl9FSkopOworICAgIGJvb2wgY29tcGFyZShOb2RlKiwgTWFjcm9Bc3Nl
bWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRp
b24sIFNfSklUT3BlcmF0aW9uX0VKSik7CisgICAgYm9vbCBjb21waWxlUGVlcEhvbGVCcmFuY2go
Tm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkopOwogICAgIHZvaWQgY29tcGls
ZVBlZXBIb2xlSW50MzJCcmFuY2goTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUsIEpJVENvbXBpbGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZUludDUyQnJh
bmNoKE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbik7CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVCb29sZWFuQnJhbmNoKE5vZGUqLCBOb2Rl
KiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAxNTYyMDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkzLDIzOCArOTMsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRp
b25UCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiREZHIE9TUiBleGl0
IGdlbmVyYXRpb24gdGh1bmsiKSk7CiB9CiAKLWlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRh
dGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIpCi17Ci0jaWYgIUFTU0VS
VF9ESVNBQkxFRAotICAgIENDYWxsSGVscGVyczo6SnVtcCBpc05vblplcm8gPSBqaXQuYnJhbmNo
VGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHBvaW50ZXJHUFIpOwotICAgIGppdC5icmVh
a3BvaW50KCk7Ci0gICAgaXNOb25aZXJvLmxpbmsoJmppdCk7Ci0gICAgaml0LnB1c2gocG9pbnRl
ckdQUik7Ci0gICAgaml0LmxvYWQ4KHBvaW50ZXJHUFIsIHBvaW50ZXJHUFIpOwotICAgIGppdC5w
b3AocG9pbnRlckdQUik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShqaXQpOwotICAgIFVOVVNF
RF9QQVJBTShwb2ludGVyR1BSKTsKLSNlbmRpZgotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICBD
Q2FsbEhlbHBlcnMgaml0KHZtKTsKLSAgICAKLSAgICAvLyBXZSB3aWxsIGp1bXAgdG8gaGVyZSBp
ZiB0aGUgSklUIGNvZGUgdGhpbmtzIGl0J3MgbWFraW5nIGEgY2FsbCwgYnV0IHRoZQotICAgIC8v
IGxpbmtpbmcgaGVscGVyIChDKysgY29kZSkgZGVjaWRlZCB0byB0aHJvdyBhbiBleGNlcHRpb24g
aW5zdGVhZC4gV2Ugd2lsbAotICAgIC8vIGhhdmUgc2F2ZWQgdGhlIGNhbGxSZXR1cm5JbmRleCBp
biB0aGUgZmlyc3QgYXJndW1lbnRzIG9mIEpJVFN0YWNrRnJhbWUuCi0gICAgLy8gTm90ZSB0aGF0
IHRoZSByZXR1cm4gYWRkcmVzcyB3aWxsIGJlIG9uIHRoZSBzdGFjayBhdCB0aGlzIHBvaW50LCBz
byB3ZQotICAgIC8vIG5lZWQgdG8gcmVtb3ZlIGl0IGFuZCBkcm9wIGl0IG9uIHRoZSBmbG9vciwg
c2luY2Ugd2UgZG9uJ3QgY2FyZSBhYm91dCBpdC4KLSAgICAvLyBGaW5hbGx5IG5vdGUgdGhhdCB0
aGUgY2FsbCBmcmFtZSByZWdpc3RlciBwb2ludHMgYXQgdGhlIGNhbGxlZSBmcmFtZSwgc28KLSAg
ICAvLyB3ZSBuZWVkIHRvIHBvcCBpdC4KLSAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0
ZXJDYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgaml0LmxvYWRQ
dHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OkNhbGxlckZyYW1lKSwKLSAgICAgICAgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaml0LnBlZWs2
NChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19J
TkRFWCk7Ci0jZWxzZQotICAgIGppdC5wZWVrKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKLSNlbmRpZgotICAgIGppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsK
LSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZv
aWQqPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAg
IGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGpp
dC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihq
aXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIyKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmpp
dCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgKCJERkcgdGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAotICAgIENDYWxsSGVscGVycyYgaml0LCBWTSog
dm0sIFBfREZHT3BlcmF0aW9uX0Ugc2xvd1BhdGhGdW5jdGlvbikKLXsKLSAgICBqaXQucHJlc2Vy
dmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIGVtaXRQ
b2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIGppdC5zdG9y
ZVB0cigKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMiwKLSAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFj
azo6UmV0dXJuUEMpKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5wb2tl
NjQoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1Nf
SU5ERVgpOwotI2Vsc2UKLSAgICBqaXQucG9rZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1
cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7Ci0jZW5kaWYKLSAgICBqaXQuc2V0dXBB
cmd1bWVudHNFeGVjU3RhdGUoKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86Om5v
bkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFy
Z0dQUjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIAotICAgIC8v
IFRoaXMgc2xvdyBjYWxsIHdpbGwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIG9uZSBvZiB0aGUgZm9s
bG93aW5nOgotICAgIC8vIDEpIEV4Y2VwdGlvbiB0aHJvd2luZyB0aHVuay4KLSAgICAvLyAyKSBI
b3N0IGNhbGwgcmV0dXJuIHZhbHVlIHJldHVybmVyIHRoaW5neS4KLSAgICAvLyAzKSBUaGUgZnVu
Y3Rpb24gdG8gY2FsbC4KLSAgICBqaXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6
UmV0dXJuUEMpLAotICAgICAgICBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwot
ICAgIGppdC5zdG9yZVB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDAp
LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQykpOwotICAgIGVtaXRQb2ludGVyVmFs
aWRhdGlvbihqaXQsIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgaml0
LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86Om5vblByZXNlcnZlZE5v
blJldHVybkdQUik7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwotICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLX0K
LQotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yVGh1bmtHZW5lcmF0b3IoCi0g
ICAgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgLy8gVGhlIHJl
dHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjayBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ug
d2lsbCBoZW5jZQotICAgIC8vIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZy
YW1lIHdoaWxlIHdlIG1ha2UgYSBDKysgZnVuY3Rpb24gY2FsbAotICAgIC8vIHRvIHBlcmZvcm0g
bGlua2luZyBhbmQgbGF6eSBjb21waWxhdGlvbiBpZiBuZWNlc3NhcnkuIFdlIGV4cGVjdCB0aGUg
Y2FsbGVlCi0gICAgLy8gdG8gYmUgaW4gbm9uQXJnR1BSMC9ub25BcmdHUFIxIChwYXlsb2FkL3Rh
ZyksIHRoZSBjYWxsIGZyYW1lIHRvIGhhdmUgYWxyZWFkeQotICAgIC8vIGJlZW4gYWRqdXN0ZWQs
IG5vblByZXNlcnZlZE5vblJldHVybkdQUiBob2xkcyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgaW5k
ZXgsCi0gICAgLy8gYW5kIGFsbCBvdGhlciByZWdpc3RlcnMgdG8gYmUgYXZhaWxhYmxlIGZvciB1
c2UuIFdlIHVzZSBKSVRTdGFja0ZyYW1lOjphcmdzCi0gICAgLy8gdG8gc2F2ZSBpbXBvcnRhbnQg
aW5mb3JtYXRpb24gYWNyb3NzIGNhbGxzLgotICAgIAotICAgIENDYWxsSGVscGVycyBqaXQodm0p
OwotICAgIAotICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBv
cGVyYXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOwotICAgIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJERkcg
bGluayAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDog
ImNvbnN0cnVjdCIpKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0s
IENvZGVGb3JDYWxsKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RU
aHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRv
cih2bSwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KLS8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlv
bnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVz
IGZvcgotLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0byBsb3NlIGJp
ZyB0aW1lIGFueXdheS4KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVu
a0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7Ci0gICAgCi0g
ICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKTsKLSAgICAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsK
LSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJERkcgbGluayBjbG9zdXJl
IGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwotfQotCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigKLSAgICBWTSogdm0sIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKLXsKLSAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0
YWNrLCBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQotICAgIC8vIGp1bXAg
dG8gdGhlIGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJh
bWUgd2hpbGUgd2UKLSAgICAvLyBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGFwcHJv
cHJpYXRlIERGRyBvcGVyYXRpb24uCi0KLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKLSAgICAK
LSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOwotCi0gICAgLy8gRklYTUU6IHdl
IHNob3VsZCBoYXZlIGEgc3RvcnkgZm9yIGVsaW1pbmF0aW5nIHRoZXNlIGNoZWNrcy4gSW4gbWFu
eSBjYXNlcywKLSAgICAvLyB0aGUgREZHIGtub3dzIHRoYXQgdGhlIHZhbHVlIGlzIGRlZmluaXRl
bHkgYSBjZWxsLCBvciBkZWZpbml0ZWx5IGEgZnVuY3Rpb24uCi0gICAgCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2hUZXN0NjQoCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotI2Vsc2UKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0g
ICAgICAgIGppdC5icmFuY2gzMigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWws
IEdQUkluZm86Om5vbkFyZ0dQUjEsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotI2VuZGlmCi0gICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0gICAg
ICAgIGppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAot
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIFN0
cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKEpTRnVuY3Rpb246OmluZm8oKSkpKTsKLSAgICAKLSAgICAvLyBOb3cgd2Ug
a25vdyB3ZSBoYXZlIGEgSlNGdW5jdGlvbi4KLSAgICAKLSAgICBqaXQubG9hZFB0cigKLSAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTRnVuY3Rpb246
Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMik7Ci0g
ICAgc2xvd0Nhc2UuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okxlc3NUaGFuLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KAotICAgICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpv
ZmZzZXRPZk51bVBhcmFtZXRlcnNGb3Ioa2luZCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAKLSAgICAvLyBOb3cgd2Uga25vdyB0aGF0IHdlIGhh
dmUgYSBDb2RlQmxvY2ssIGFuZCB3ZSdyZSBjb21taXR0ZWQgdG8gbWFraW5nIGEgZmFzdAotICAg
IC8vIGNhbGwuCi0gICAgCi0gICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hh
aW4oKSksCi0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEpOwotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgaml0LnN0b3JlNjQoCi0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEsCi0gICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0
ZXIpKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKLSNlbHNlCi0gICAgaml0LnN0b3JlUHRyKAot
ICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIxLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAg
IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29w
ZUNoYWluICsKLSAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCi0gICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpT
U3RhY2s6OlNjb3BlQ2hhaW4gKwotICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0jZW5kaWYKLSAgICAKLSAgICBqaXQubG9h
ZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIs
IEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKSks
Ci0gICAgICAgIEdQUkluZm86OnJlZ1QwKTsKLSAgICAKLSAgICAvLyBNYWtlIGEgdGFpbCBjYWxs
LiBUaGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gREZHIGNvZGUuCi0gICAgZW1pdFBvaW50ZXJWYWxp
ZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDApOwotICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1Qw
KTsKLQotICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7Ci0gICAgCi0gICAgLy8gSGVyZSB3ZSBkb24n
dCBrbm93IGFueXRoaW5nLCBzbyByZXZlcnQgdG8gdGhlIGZ1bGwgc2xvdyBwYXRoLgotICAgIAot
ICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25W
aXJ0dWFsQ2FsbCA6IG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QpOwotICAgIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJERkcgdmly
dHVhbCAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDog
ImNvbnN0cnVjdCIpKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0
b3Iodm0sIENvZGVGb3JDYWxsKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxD
b25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JU
aHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCShyZXZpc2lvbiAxNTYyMDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNiArNDAs
NiBAQCBuYW1lc3BhY2UgREZHIHsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5l
cmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSopOwotCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOwotCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLQotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLQogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAko
cmV2aXNpb24gMTU2MjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5z
aWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEyICs0OCwxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8ob3NyRXhpdCwgIndlYmtpdF9vc3Jf
ZXhpdCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgYm9vbGVhbiwgaW50MzIsIFZhcmlhZGljKSkK
IAogI2RlZmluZSBGT1JfRUFDSF9GVU5DVElPTl9UWVBFKG1hY3JvKSBcCi0gICAgbWFjcm8oSV9E
RkdPcGVyYXRpb25fRUpzcywgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIpKSBc
Ci0gICAgbWFjcm8oSl9ERkdPcGVyYXRpb25fRSwgZnVuY3Rpb25UeXBlKGludDY0LCBpbnRQdHIp
KSBcCi0gICAgbWFjcm8oUF9ERkdPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGlu
dFB0ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKFZfREZHT3BlcmF0aW9uX0VPWkQsIGZ1bmN0aW9u
VHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludDMyLCBkb3VibGVUeXBlKSkgXAotICAg
IG1hY3JvKFZfREZHT3BlcmF0aW9uX0VPWkosIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRy
LCBpbnRQdHIsIGludDMyLCBpbnQ2NCkpIFwKLSAgICBtYWNybyhaX0RGR09wZXJhdGlvbl9ELCBm
dW5jdGlvblR5cGUoaW50MzIsIGRvdWJsZVR5cGUpKQorICAgIG1hY3JvKElfSklUT3BlcmF0aW9u
X0VKc3MsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyKSkgXAorICAgIG1hY3Jv
KEpfSklUT3BlcmF0aW9uX0UsIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50UHRyKSkgXAorICAgIG1h
Y3JvKFBfSklUT3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludFB0
cikpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FT1pELCBmdW5jdGlvblR5cGUodm9pZFR5
cGUsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgZG91YmxlVHlwZSkpIFwKKyAgICBtYWNybyhWX0pJ
VE9wZXJhdGlvbl9FT1pKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBp
bnQzMiwgaW50NjQpKSBcCisgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRCwgZnVuY3Rpb25UeXBl
KGludDMyLCBkb3VibGVUeXBlKSkKIAogY2xhc3MgSW50cmluc2ljUmVwb3NpdG9yeSA6IHB1Ymxp
YyBDb21tb25WYWx1ZXMgewogcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1NjIwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTk0LDcgKzE5OTQsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBGSVhNRTogVGhpcyBp
cyB1bmFjY2VwdGFibHkgc2xvdy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMzYyMQogICAgICAgICAKLSAgICAgICAgSl9ERkdPcGVyYXRpb25f
RSBmdW5jdGlvbiA9CisgICAgICAgIEpfSklUT3BlcmF0aW9uX0UgZnVuY3Rpb24gPQogICAgICAg
ICAgICAgbV9ub2RlLT5vcCgpID09IENhbGwgPyBvcGVyYXRpb25GVExDYWxsIDogb3BlcmF0aW9u
RlRMQ29uc3RydWN0OwogICAgICAgICAKICAgICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0g
bV9ub2RlLT5vcCgpID09IENhbGwgPyAwIDogMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTU2MjA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEz
LDYgKzQxMywyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAoY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGlu
Z1RoaXMoMCkpICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB9CiAKKyAgICB2b2lkIHdyaXRlQmFy
cmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyLCBXcml0
ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0ob3du
ZXIpOworICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOworICAgICAgICBVTlVTRURfUEFS
QU0oc2NyYXRjaDIpOworICAgICAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7CisgICAgICAgIEFT
U0VSVChvd25lciAhPSBzY3JhdGNoMSk7CisgICAgICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNo
Mik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoMSAhPSBzY3JhdGNoMik7CisgICAgICAgIAorI2lm
IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICAgICAgZW1pdENvdW50KFdyaXRl
QmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKKyNlbmRpZgorICAgIH0K
KwogICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcEZv
cihDb2RlQmxvY2sqKTsKICAgICAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAJKHJldmlzaW9uIDE1NjIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAwLDIzICs4MDAsMjMgQEAgdm9pZCBKSVQ6Omxp
bmtGb3IoRXhlY1N0YXRlKiBleGVjLCBKU0Z1bgogICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZv
LT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGwKICAgICAgICAgICAgICAgIHx8IGNhbGxM
aW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncyk7CiAgICAgICAg
IGlmIChjYWxsTGlua0luZm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbCkgewotICAg
ICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9j
YXRpb24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsK
KyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVy
bkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRv
cikuY29kZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+
Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRD
VElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwg
dm0tPmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0t
PmdldENUSVN0dWIob2xkU3R5bGVWaXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkpOwog
fQogCiB2b2lkIEpJVDo6bGlua1Nsb3dDYWxsKENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKIAotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxM
aW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBjYWxsZXJDb2RlQmxvY2stPnZtKCktPmdldENU
SVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxlckNvZGVCbG9jay0+
dm0oKS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDE1NjIwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3
IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnUKICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7CiAKICAgICBlbWl0TG9hZChKU1N0YWNrOjpDYWxsZWUsIHJlZ1QxLCByZWdU
MCk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJh
dG9yKS5jb2RlKCkpOworICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihvbGRTdHls
ZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1f
Y29kZUJsb2NrKTsKICAgICAKQEAgLTMwNiw3ICszMDYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbFNsb3dDYXNlKE9wY29kZUlECiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKICAgICAKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxs
KG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0tPmdldENUSVN0dWIobGlua0NvbnN0cnVj
dEdlbmVyYXRvcikuY29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbEdlbmVyYXRvciku
Y29kZSgpKTsKKyAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09
IG9wX2NvbnN0cnVjdCA/IG1fdm0tPmdldENUSVN0dWIob2xkU3R5bGVMaW5rQ29uc3RydWN0R2Vu
ZXJhdG9yKS5jb2RlKCkgOiBtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlTGlua0NhbGxHZW5lcmF0
b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwogICAgIGVt
aXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKQEAgLTMzNSw3ICszMzUsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgCiAgICAgcGF0Y2hCdWZmZXIu
bGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyLmxhYmVs
QXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFi
ZWwobV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKSk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbChtX3ZtLT5nZXRDVElTdHVi
KG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIAogICAgIFJlZlB0
cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5ldyBDbG9z
dXJlQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RFKApAQCAtMzUzLDcgKzM1
Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKENhbGwKICAgICByZXBh
dGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRP
ZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4p
LAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uLCBtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBt
X3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAg
ICAgCiAgICAgY2FsbExpbmtJbmZvLT5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxNTYyMDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzEsNiArMTMxLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJbnN0cnVj
dGlvbgogCiB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
bikKIHsKKyAgICAKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfY2FsbF9l
dmFsKTsgLy8gSW5pdGlhbGl6ZXMgU2NvcGVDaGFpbjsgUmV0dXJuUEM7IENvZGVCbG9jay4KICAg
ICBzdHViQ2FsbC5jYWxsKCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKSk7CkBAIC0xNDYsNyAr
MTQ3LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydQogICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKIAogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoSlNT
dGFjazo6Q2FsbGVlLCByZWdUMCk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHVi
KHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIGVtaXROYWtlZENhbGwobV92bS0+
Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAg
c2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTIzMyw3ICsyMzQsNyBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAKICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7CiAgICAgCi0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNv
ZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RHZW5l
cmF0b3IpLmNvZGUoKSA6IG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxHZW5lcmF0b3IpLmNvZGUo
KSk7CisgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9j
b25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlTGlua0NvbnN0cnVjdEdlbmVyYXRv
cikuY29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDYWxsR2VuZXJhdG9yKS5j
b2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTI2
Myw3ICsyNjQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAg
ICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5m
by0+aG90UGF0aE90aGVyLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvdywgQ29kZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVy
YXRvcikuY29kZSgpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25M
YWJlbChtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUo
KSkpOwogICAgIAogICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGlu
ZSA9IGFkb3B0UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTEla
RV9DT0RFKApAQCAtMjgxLDcgKzI4Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNsb3N1
cmVDYWxsKENhbGwKICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKICAgICAgICAg
UmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExp
bmtJbmZvLT5ob3RQYXRoQmVnaW4pLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5r
SW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2Vu
ZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+
Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxH
ZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgCiAgICAgY2FsbExpbmtJbmZvLT5zdHViID0gc3R1YlJv
dXRpbmUucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25XcmFwcGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9uV3JhcHBlcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9uV3JhcHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDMxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEpJVE9wZXJhdGlvbldyYXBwZXJzX2gKKyNkZWZpbmUgSklUT3BlcmF0aW9uV3Jh
cHBlcnNfaAorCisjaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+CisjaW5jbHVkZSA8d3RmL0lubGlu
ZUFTTS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworI2lmIENQVShNSVBTKQorI2lmIFdURl9NSVBT
X1BJQworI2RlZmluZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uKSBcCisgICAgICAgICIu
c2V0IG5vcmVvcmRlciIgIlxuIiBcCisgICAgICAgICIuY3Bsb2FkICQyNSIgIlxuIiBcCisgICAg
ICAgICIuc2V0IHJlb3JkZXIiICJcbiIgXAorICAgICAgICAibGEgJHQ5LCAiIExPQ0FMX1JFRkVS
RU5DRShmdW5jdGlvbikgIlxuIgorI2Vsc2UKKyNkZWZpbmUgTE9BRF9GVU5DVElPTl9UT19UOShm
dW5jdGlvbikgIiIgIlxuIgorI2VuZGlmCisjZW5kaWYKKworI2lmIENPTVBJTEVSKEdDQykgJiYg
Q1BVKFg4Nl82NCkKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1MoZnVuY3Rpb24sIHJlZ2lzdGVyKSBcCisgICAgYXNtKCBcCisgICAgIi5nbG9ibCAiIFNZTUJP
TF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4i
IFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgICJtb3Yg
KCVyc3ApLCAlIiBTVFJJTkdJWkUocmVnaXN0ZXIpICJcbiIgXAorICAgICAgICAiam1wICIgTE9D
QUxfUkVGRVJFTkNFKGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgIlxuIiBcCisgICAgKTsK
KyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24p
ICAgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcnNpKQor
I2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9u
KSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByY3gpCisj
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24p
ICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKKyNk
ZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24p
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcjgpCisKKyNl
bGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFg4NikKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIG9mZnNldCkgXAorICAgIGFzbSggXAorICAg
ICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJc
biIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5H
KGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgICJtb3YgKCVlc3ApLCAlZWF4XG4iIFwKKyAg
ICAgICAgIm1vdiAlZWF4LCAiIFNUUklOR0laRShvZmZzZXQpICIoJWVzcClcbiIgXAorICAgICAg
ICAiam1wICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgIlxu
IiBcCisgICAgKTsKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0UoZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5j
dGlvbiwgOCkKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VD
SShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlv
biwgMTYpCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkko
ZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24s
IDIwKQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShm
dW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAy
NCkKKworI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoQVJNX1RIVU1CMikKKworI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAorICAgIGFz
bSAoIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1
bmN0aW9uKSAiXG4iIFwKKyAgICAiLnRodW1iIiAiXG4iIFwKKyAgICAiLnRodW1iX2Z1bmMgIiBU
SFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0
aW9uKSAiOiIgIlxuIiBcCisgICAgICAgICJtb3YgYTIsIGxyIiAiXG4iIFwKKyAgICAgICAgImIg
IiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisg
ICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJ
KGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5hbGln
biAyIiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBc
CisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgICIudGh1bWIiICJcbiIgXAor
ICAgICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZnVuY3Rpb24pICJcbiIgXAorICAg
IFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgIm1vdiBhNCwgbHIi
ICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1
cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisvLyBFbmNvZGVkSlNWYWx1ZSBpbiBKU1ZBTFVF
MzJfNjQgaXMgYSA2NC1iaXQgaW50ZWdlci4gV2hlbiBiZWluZyBjb21waWxlZCBpbiBBUk0gRUFC
SSwgaXQgbXVzdCBiZSBhbGlnbmVkIGV2ZW4tbnVtYmVyZWQgcmVnaXN0ZXIgKHIwLCByMiBvciBb
c3BdKS4KKy8vIEFzIGEgcmVzdWx0LCByZXR1cm4gYWRkcmVzcyB3aWxsIGJlIGF0IGEgNC1ieXRl
IGZ1cnRoZXIgbG9jYXRpb24gaW4gdGhlIGZvbGxvd2luZyBjYXNlcy4KKyNpZiBDT01QSUxFUl9T
VVBQT1JUUyhFQUJJKSAmJiBDUFUoQVJNKQorI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRV
Uk5fQUREUkVTU19FSkkgInN0ciBsciwgW3NwLCAjNF0iCisjZGVmaW5lIElOU1RSVUNUSU9OX1NU
T1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgInN0ciBsciwgW3NwLCAjOF0iCisjZWxzZQorI2RlZmlu
ZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgInN0ciBsciwgW3NwLCAjMF0i
CisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgInN0ciBsciwg
W3NwLCAjNF0iCisjZW5kaWYKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAgICIudGV4dCIgIlxuIiBc
CisgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5j
dGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgICIudGh1
bWIiICJcbiIgXAorICAgICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZnVuY3Rpb24p
ICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAg
SU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJcbiIgXAorICAgICAgICAiYiAi
IExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAg
ICApOworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJ
KGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5hbGln
biAyIiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBc
CisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgICIudGh1bWIiICJcbiIgXAor
ICAgICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZnVuY3Rpb24pICJcbiIgXAorICAg
IFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgSU5TVFJVQ1RJT05f
U1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZF
UkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2Vs
aWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKQorCisjZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgYXNtICgg
XAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rp
b24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBJTkxJTkVf
QVJNX0ZVTkNUSU9OKGZ1bmN0aW9uKSBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoi
ICJcbiIgXAorICAgICAgICAibW92IGEyLCBsciIgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxf
UkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisK
KyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlv
bikgXAorICAgIGFzbSAoIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxu
IiBcCisgICAgSU5MSU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAorICAgIFNZTUJPTF9TVFJJ
TkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgIm1vdiBhNCwgbHIiICJcbiIgXAorICAg
ICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAi
XG4iIFwKKyAgICApOworCisvLyBFbmNvZGVkSlNWYWx1ZSBpbiBKU1ZBTFVFMzJfNjQgaXMgYSA2
NC1iaXQgaW50ZWdlci4gV2hlbiBiZWluZyBjb21waWxlZCBpbiBBUk0gRUFCSSwgaXQgbXVzdCBi
ZSBhbGlnbmVkIGV2ZW4tbnVtYmVyZWQgcmVnaXN0ZXIgKHIwLCByMiBvciBbc3BdKS4KKy8vIEFz
IGEgcmVzdWx0LCByZXR1cm4gYWRkcmVzcyB3aWxsIGJlIGF0IGEgNC1ieXRlIGZ1cnRoZXIgbG9j
YXRpb24gaW4gdGhlIGZvbGxvd2luZyBjYXNlcy4KKyNpZiBDT01QSUxFUl9TVVBQT1JUUyhFQUJJ
KSAmJiBDUFUoQVJNKQorI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19F
SkkgInN0ciBsciwgW3NwLCAjNF0iCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9B
RERSRVNTX0VKQ0kgInN0ciBsciwgW3NwLCAjOF0iCisjZWxzZQorI2RlZmluZSBJTlNUUlVDVElP
Tl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgInN0ciBsciwgW3NwLCAjMF0iCisjZGVmaW5lIElO
U1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgInN0ciBsciwgW3NwLCAjNF0iCisj
ZW5kaWYKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJ
KGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9i
bCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0
aW9uKSAiXG4iIFwKKyAgICBJTkxJTkVfQVJNX0ZVTkNUSU9OKGZ1bmN0aW9uKSBcCisgICAgU1lN
Qk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICBJTlNUUlVDVElPTl9TVE9S
RV9SRVRVUk5fQUREUkVTU19FSkkgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNF
KGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNkZWZpbmUg
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKKyAg
ICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklO
RyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAg
IElOTElORV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0
aW9uKSAiOiIgIlxuIiBcCisgICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNT
X0VKQ0kgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0
aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNlbGlmIENPTVBJTEVSKEdDQykgJiYg
Q1BVKE1JUFMpCisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0UoZnVuY3Rpb24pIFwKKyAgICBhc20oIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAg
IExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSBcCisgICAg
ICAgICJtb3ZlICRhMSwgJHJhIiAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0Uo
ZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCisgICAg
YXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhm
dW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIFNZ
TUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5
KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAorICAgICAgICAibW92ZSAkYTMsICRyYSIg
IlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVy
bkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAorICAgIGFzbSggXAorICAgICIudGV4dCIg
IlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAg
IEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9u
KSAiOiIgIlxuIiBcCisgICAgTE9BRF9GVU5DVElPTl9UT19UOShmdW5jdGlvbiMjV2l0aFJldHVy
bkFkZHJlc3MpIFwKKyAgICAgICAgInN3ICRyYSwgMjAoJHNwKSIgIlxuIiBcCisgICAgICAgICJi
ICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAor
ICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
Q0koZnVuY3Rpb24pIFwKKyAgICBhc20oIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAg
IExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSBcCisgICAg
ICAgICJzdyAkcmEsIDI0KCRzcCkiICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5D
RShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZWxpZiBD
T01QSUxFUihHQ0MpICYmIENQVShTSDQpCisKKyNkZWZpbmUgU0g0X1NDUkFUQ0hfUkVHSVNURVIg
InIxMSIKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShm
dW5jdGlvbikgXAorICAgIGFzbSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAi
IFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9u
KSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAg
ICJzdHMgcHIsIHI1IiAiXG4iIFwKKyAgICAgICAgImJyYSAiIExPQ0FMX1JFRkVSRU5DRShmdW5j
dGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICAgICAgIm5vcCIgIlxuIiBcCisg
ICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJ
KGZ1bmN0aW9uKSBcCisgICAgYXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2Js
ICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rp
b24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAg
ICAgInN0cyBwciwgcjciICJcbiIgXAorICAgICAgICAibW92LmwgMmYsICIgU0g0X1NDUkFUQ0hf
UkVHSVNURVIgIlxuIiBcCisgICAgICAgICJicmFmICIgU0g0X1NDUkFUQ0hfUkVHSVNURVIgIlxu
IiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAgICAgICAiMTogLmJhbGlnbiA0IiAiXG4iIFwK
KyAgICAgICAgIjI6IC5sb25nICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVy
bkFkZHJlc3MtMWIiICJcbiIgXAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCBvZmZzZXQsIHNjcmF0Y2gpIFwKKyAgICBhc20o
IFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0
aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICAic3RzIHByLCAiIHNjcmF0Y2gg
IlxuIiBcCisgICAgICAgICJtb3YubCAiIHNjcmF0Y2ggIiwgQCgiIFNUUklOR0laRShvZmZzZXQp
ICIsIHIxNSkiICJcbiIgXAorICAgICAgICAibW92LmwgMmYsICIgc2NyYXRjaCAiXG4iIFwKKyAg
ICAgICAgImJyYWYgIiBzY3JhdGNoICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwKKyAgICAg
ICAgIjE6IC5iYWxpZ24gNCIgIlxuIiBcCisgICAgICAgICIyOiAubG9uZyAiIExPQ0FMX1JFRkVS
RU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzLTFiIiAiXG4iIFwKKyAgICApOworCisj
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24p
ICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDAsIFNINF9T
Q1JBVENIX1JFR0lTVEVSKQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
KGZ1bmN0aW9uLCA0LCBTSDRfU0NSQVRDSF9SRUdJU1RFUikKKworI2VuZGlmCisKKyNkZWZpbmUg
UF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAordm9p
ZCogSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwg
UmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKK0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKQorCisjZGVmaW5l
IEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4
ZWNTdGF0ZSosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVS
TkFMOyBcCitGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikK
KworI2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVu
Y3Rpb24pIFwKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1
cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNz
UHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAorRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikKKworI2RlZmluZSBKX0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNF
RF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKK0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkkoZnVuY3Rpb24pCisKKyNkZWZpbmUgVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAordm9pZCBKSVRfT1BFUkFUSU9OIGZ1bmN0
aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxs
KiwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RG
X0lOVEVSTkFMOyBcCitGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShm
dW5jdGlvbikKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKSVRPcGVyYXRpb25X
cmFwcGVyc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5o
IgorI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFs
dWUuaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25XcmFwcGVycy5oIgorI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKKyNpbmNsdWRlICJSZXBhdGNoLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitleHRl
cm4gIkMiIHsKKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlk
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgU3RyaW5nSW1wbCogdWlkKQor
eworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGJhc2UpOworICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7CisgICAgSWRl
bnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VW
YWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpKTsKK30KKworSl9GVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpJKG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOworRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0V2l0aFJldHVy
bkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBs
KiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
KworICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3Mp
OworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0
dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoYmFzZSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOworCisgICAgaWYg
KGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlw
ZSkpCisgICAgICAgIGJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xv
dCwgc3R1YkluZm8pOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQor
CitKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Cisg
ICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0
dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CisgICAgUHJvcGVydHlTbG90IHNsb3Qo
YmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRl
bnQsIHNsb3QpOworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKSB7CisgICAgICAgIGlmIChzdHViSW5mby5zZWVu
KQorICAgICAgICAgICAgcmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xv
dCwgc3R1YkluZm8pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdHViSW5mby5zZWVuID0g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisK
K0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShvcGVyYXRpb25Jbk9w
dGltaXplKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5PcHRpbWl6
ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBTdHJpbmdJ
bXBsKiBrZXksIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKKyAgICAKKyAgICBpZiAoIWJhc2UtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgdm0tPnRocm93
RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUludmFsaWRQYXJhbWV0ZXJFcnJvcihleGVjLCAiaW4iLCBi
YXNlKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgfQorICAgIAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVC
bG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKwor
ICAgIElkZW50aWZpZXIgaWRlbnQodm0sIGtleSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFz
ZSk7CisgICAgYm9vbCByZXN1bHQgPSBhc09iamVjdChiYXNlKS0+Z2V0UHJvcGVydHlTbG90KGV4
ZWMsIGlkZW50LCBzbG90KTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChhY2Nlc3NUeXBlID09
IHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworICAgIAorICAgIGlmIChzdHViSW5mby5zZWVuKQorICAg
ICAgICByZXBhdGNoSW4oZXhlYywgYmFzZSwgaWRlbnQsIHJlc3VsdCwgc2xvdCwgc3R1YkluZm8p
OworICAgIGVsc2UKKyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7CisgICAgCisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocmVzdWx0KSk7Cit9CisKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW4oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJh
c2UsIFN0cmluZ0ltcGwqIGtleSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIGlmICghYmFzZS0+
aXNPYmplY3QoKSkgeworICAgICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlSW52
YWxpZFBhcmFtZXRlckVycm9yKGV4ZWMsICJpbiIsIGJhc2UpKTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisKKyAgICBJZGVudGlmaWVyIGlk
ZW50KHZtLCBrZXkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGFzT2Jq
ZWN0KGJhc2UpLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCkpKTsKK30KKworRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZW5lcmljSW4oRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGtleSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbihleGVj
LCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSwgYmFzZSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25DYWxsQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBiYXNlLCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBmdW5jdGlvbiwgU3RyaW5nSW1w
bCogdWlkKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0s
IHVpZCk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShmdW5jdGlvbihleGVjLCBh
c09iamVjdChiYXNlKSwgaWRlbnQpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25DYWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0Nl
bGwqIGdldHRlclNldHRlcikKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY2FsbEdldHRlcihleGVjLCBiYXNlLCBnZXR0ZXJTZXR0ZXIpKTsKK30KKwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlk
KQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7
CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5
SWRDb250ZXh0KCkpOworICAgIGJhc2UtPm1ldGhvZFRhYmxlKCktPnB1dChiYXNlLCBleGVjLCBp
ZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworfQorCit2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQp
Cit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsK
KyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5
SWRDb250ZXh0KCkpOworICAgIGJhc2UtPm1ldGhvZFRhYmxlKCktPnB1dChiYXNlLCBleGVjLCBp
ZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworfQorCit2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1
aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlk
KTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0
QnlJZENvbnRleHQoKSk7CisgICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOworICAgIGFzT2Jq
ZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpLCBzbG90KTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgUHV0UHJvcGVydHlT
bG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAg
ICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVj
dChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3Qp
OworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlk
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7
CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7CisgICAgUHV0UHJv
cGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkp
OworICAgIAorICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAg
ICAKKyAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by5hY2Nlc3NUeXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChzdHViSW5mby5z
ZWVuKQorICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90
LCBzdHViSW5mbywgTm90RGlyZWN0KTsKKyAgICBlbHNlCisgICAgICAgIHN0dWJJbmZvLnNlZW4g
PSB0cnVlOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJ
KG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3Ry
aW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0
dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNj
ZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7
CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRC
eUlkQ29udGV4dCgpKTsKKyAgICAKKyAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1
ZSwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNz
VHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBp
ZiAoc3R1YkluZm8uc2VlbikKKyAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZVZhbHVl
LCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7CisgICAgZWxzZQorICAgICAgICBz
dHViSW5mby5zZWVuID0gdHJ1ZTsKK30KKworVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZVdpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0s
IHVpZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2Nr
KCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgp
KTsKKyAgICAKKyAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7CisgICAgYXNPYmplY3QoYmFz
ZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAgIAorICAg
IGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vz
c1R5cGUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisg
ICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywg
RGlyZWN0KTsKKyAgICBlbHNlCisgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOworfQorCitW
X0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5n
SW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJu
QWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNz
VHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2Us
IGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICAKKyAgICBBU1NFUlQo
YmFzZS0+aXNPYmplY3QoKSk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52
bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgIHJlcGF0Y2hQdXRCeUlE
KGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKKyAgICBlbHNlCisg
ICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3RXaXRoUmV0
dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
SlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1
aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygp
LT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUg
PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1ZhbHVl
IGJhc2VWYWx1ZShiYXNlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5j
b2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgCisgICAgYmFzZVZhbHVlLnB1dChl
eGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBz
bG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKK30KKworVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KTsK
K3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0V2l0
aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2
bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxv
Y2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNW
YWx1ZSBiYXNlVmFsdWUoYmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4
ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICAKKyAgICBiYXNlVmFsdWUu
cHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUg
IT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRl
bnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWls
ZExpc3QpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RC
dWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlm
aWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4
ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NU
eXBlKTsKKyAgICAKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCkt
PnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsK
KyAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwg
c2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlw
ZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBidWls
ZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsK
K30KKworVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7Cisg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1Yklu
Zm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNs
b3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICAKKyAg
ICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVj
dChleGVjLT52bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIGlmIChhY2Nlc3NU
eXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlLCBpZGVu
dCwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBF
bmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIEFTU0VSVChzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPiBiYXNlLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSk7CisgICAgQVNTRVJUKCF2bS5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKS5mYXN0
UGF0aFNob3VsZFN1Y2NlZWQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9m
KEpTVmFsdWUpKSk7CisgICAgYmFzZS0+c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJ
Zk5lY2Vzc2FyeSh2bSwgc3RydWN0dXJlKTsKKyAgICBiYXNlLT5wdXREaXJlY3Qodm0sIG9mZnNl
dCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7Cit9CisKK3N0YXRpYyB2b2lkKiBoYW5kbGVIb3N0
Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVlLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCit7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2Fs
bGVyRnJhbWUoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKworICAgIGV4ZWNDYWxsZWUt
PnNldFNjb3BlKGV4ZWMtPnNjb3BlKCkpOworICAgIGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygw
KTsKKworICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CisgICAgICAgIENhbGxEYXRhIGNh
bGxEYXRhOworICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNhbGxlZSwg
Y2FsbERhdGEpOworICAgIAorICAgICAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGVKUyk7
CisgICAgCisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKKyAgICAgICAg
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWNDYWxsZWUpOworICAgICAg
ICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOworICAgICAgICAg
ICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0
aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKKyAgICAgICAgICAgIGlmICh2bS0+ZXhjZXB0aW9u
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisK
KyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0g
Q2FsbFR5cGVOb25lKTsKKyAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBj
cmVhdGVOb3RBRnVuY3Rpb25FcnJvcihleGVjLCBjYWxsZWUpKTsKKyAgICAgICAgcmV0dXJuIHZt
LT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgfQorCisgICAgQVNTRVJUKGtpbmQgPT0gQ29k
ZUZvckNvbnN0cnVjdCk7CisgICAgCisgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwor
ICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERhdGEoY2FsbGVl
LCBjb25zdHJ1Y3REYXRhKTsKKyAgICAKKyAgICBBU1NFUlQoY29uc3RydWN0VHlwZSAhPSBDb25z
dHJ1Y3RUeXBlSlMpOworICAgIAorICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5
cGVIb3N0KSB7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWND
YWxsZWUpOworICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7
CisgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0
cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKKyAgICAgICAgaWYgKHZtLT5l
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OworCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29u
c3RydWN0VHlwZU5vbmUpOworICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3Jl
YXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgY2FsbGVlKSk7CisgICAgcmV0dXJuIHZtLT5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7Cit9CisKK2lubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CisgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgCisgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1
ZSgpOworICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNh
bGxlZUFzVmFsdWUpOworICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBj
YWxsZWVBc1ZhbHVlLCBraW5kKSk7CisKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBleGVjQ2FsbGVlLT5zZXRT
Y29wZShjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCkpOworICAgIEV4ZWN1dGFibGVCYXNlKiBleGVj
dXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY29kZVB0cjsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7CisgICAgaWYgKGV4ZWN1
dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5n
ZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOworICAgIGVsc2Ugewor
ICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19j
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAgICBKU09iamVjdCog
ZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxl
ZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAg
ICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4
ZWMpKTsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgfQorICAgICAgICBjb2RlQmxvY2sgPSBmdW5j
dGlvbkV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKTsKKyAgICAgICAgaWYgKGV4ZWNDYWxs
ZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlv
bkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2Vu
ZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKKyAgICB9CisgICAgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJ
bmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOworICAgIGlmICghY2FsbExpbmtJbmZvLnNlZW5P
bmNlKCkpCisgICAgICAgIGNhbGxMaW5rSW5mby5zZXRTZWVuKCk7CisgICAgZWxzZQorICAgICAg
ICBsaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNv
ZGVQdHIsIGtpbmQpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlUHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkxpbmtDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICByZXR1cm4gbGlua0Zvcihl
eGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCk7Cit9CisKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAgcmV0dXJuIGxp
bmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCk7Cit9CisKK2lubGluZSBjaGFyKiB2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKK3sKKyAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOworICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OworCisgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1
ZSgpOworICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1Zh
bHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUs
IGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKKyAgICAKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIGV4ZWNDYWxs
ZWUtPnNldFNjb3BlKGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpKTsKKyAgICBFeGVjdXRhYmxl
QmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7CisgICAgaWYgKFVOTElL
RUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yKGtpbmQpKSkgeworICAgICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlv
bkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgZnVuY3Rpb24tPnNj
b3BlKCksIGtpbmQpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlY0NhbGxlZSwgZXJyb3IpOworICAgICAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihleGVjdXRh
YmxlLT5nZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7Cit9CisKK2lubGluZSBjaGFyKiB2aXJ0dWFsRm9yKEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIEpTQ2VsbCogY2FsbGVl
QXNGdW5jdGlvbkNlbGxJZ25vcmVkOworICAgIHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9u
KGV4ZWNDYWxsZWUsIGtpbmQsIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCk7Cit9CisKK3N0
YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlLCBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbykKK3sKKyAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24q
PihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgSlNGdW5jdGlvbiogb2xkQ2FsbGVlID0gY2Fs
bExpbmtJbmZvLmNhbGxlZS5nZXQoKTsKKyAgICAKKyAgICBpZiAoIW9sZENhbGxlZQorICAgICAg
ICB8fCBvbGRDYWxsZWUtPnN0cnVjdHVyZSgpICE9IGNhbGxlZS0+c3RydWN0dXJlKCkKKyAgICAg
ICAgfHwgb2xkQ2FsbGVlLT5leGVjdXRhYmxlKCkgIT0gY2FsbGVlLT5leGVjdXRhYmxlKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBBU1NFUlQoY2FsbGVlLT5leGVjdXRhYmxl
KCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2Rl
UHRyID0gY2FsbGVlLT5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFk
ZHJlc3NGb3JDYWxsKCk7CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgaWYg
KGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICBjb2RlQmxv
Y2sgPSAwOworICAgIGVsc2UgeworICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oY2FsbGVlLT5leGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tGb3JDYWxsKCk7Cisg
ICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3Rh
dGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGxpbmtDbG9zdXJlQ2FsbCgKKyAgICAg
ICAgZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssCisgICAgICAgIGNhbGxlZS0+
c3RydWN0dXJlKCksIGNhbGxlZS0+ZXhlY3V0YWJsZSgpLCBjb2RlUHRyKTsKKyAgICAKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3Vy
ZUNhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5j
dGlvbkNlbGw7CisgICAgY2hhciogcmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVj
Q2FsbGVlLCBDb2RlRm9yQ2FsbCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2Nr
KCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsKKworICAgIGlmICgh
YXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc0Z1bmN0aW9u
Q2VsbCwgY2FsbExpbmtJbmZvKSkKKyAgICAgICAgbGlua1Nsb3dGb3IoZXhlY0NhbGxlZSwgY2Fs
bExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqIGV4ZWND
YWxsZWUpCit7ICAgIAorICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JD
YWxsKTsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2Fs
bGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKK30KKworSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJB
VElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgY2Fs
bEluZGV4KQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9
IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7CisgICAgCisg
ICAgdW5zaWduZWQgdlBDSW5kZXggPSBleGVjLT5jb2RlQmxvY2soKS0+Ynl0ZWNvZGVPZmZzZXRG
b3JDYWxsQXRJbmRleChjYWxsSW5kZXgpOworICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9
IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCB2UENJbmRleCk7CisgICAg
QVNTRVJUKGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKKyAgICByZXR1cm4gZGZnSGFuZGxlckVuY29k
ZWQoaGFuZGxlci5jYWxsRnJhbWUsIGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKK30KKworSklUSGFu
ZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQoreworICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworCisgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwor
ICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7CisgICAgCisgICAgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luID0gc3R1YkluZm8tPmNvZGVPcmlnaW47CisgICAgd2hpbGUgKGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKQorICAgICAgICBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUtPmNhbGxlcjsKKyAgICAKKyAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBnZW5lcmlj
VW53aW5kKHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
KTsKKyAgICBBU1NFUlQoaGFuZGxlci5jYXRjaFJvdXRpbmUpOworICAgIHJldHVybiBkZmdIYW5k
bGVyRW5jb2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxlci5jYXRjaFJvdXRpbmUpOworfQor
Cit9IC8vIGV4dGVybiAiQyIKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBKSVRPcGVyYXRpb25zX2gKKyNkZWZpbmUgSklUT3BlcmF0aW9uc19oCisKKyNp
bmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlND
SlNWYWx1ZS5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiUHV0S2lu
ZC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2lu
dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2lmIENBTExJTkdfQ09OVkVOVElPTl9JU19TVERD
QUxMCisjZGVmaW5lIEpJVF9PUEVSQVRJT04gQ0RFQ0wKKyNlbHNlCisjZGVmaW5lIEpJVF9PUEVS
QVRJT04KKyNlbmRpZgorCisvLyBUaGVzZSB0eXBlZGVmcyBwcm92aWRlIHR5cGVjaGVja2luZyB3
aGVuIGdlbmVyYXRpbmcgY2FsbHMgb3V0IHRvIGhlbHBlciByb3V0aW5lczsKKy8vIHRoaXMgaGVs
cHMgcHJldmVudCBjYWxsaW5nIGEgaGVscGVyIHJvdXRpbmUgd2l0aCB0aGUgd3JvbmcgYXJndW1l
bnRzIQorLyoKKyAgICBLZXk6CisgICAgVjogdm9pZAorICAgIEo6IEpTVmFsdWUKKyAgICBQOiBw
b2ludGVyICh2b2lkKikKKyAgICBDOiBKU0NlbGwqCisgICAgQTogSlNBcnJheSoKKyAgICBTOiBz
aXplX3QKKyAgICBaOiBpbnQzMl90CisgICAgRDogZG91YmxlCisgICAgSTogU3RyaW5nSW1wbCoK
KyovCit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlv
bl9FKShFeGVjU3RhdGUqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAo
KkpfSklUT3BlcmF0aW9uX0VBKShFeGVjU3RhdGUqLCBKU0FycmF5Kik7Cit0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQVopKEV4ZWNTdGF0ZSos
IEpTQXJyYXkqLCBpbnQzMl90KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiAoKkpfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgSlNDZWxsKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gKCpKX0pJVE9wZXJhdGlvbl9FQ0kpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwq
KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9u
X0VDSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRURBKShFeGVjU3RhdGUq
LCBkb3VibGUsIEpTQXJyYXkqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiAoKkpfSklUT3BlcmF0aW9uX0VJKShFeGVjU3RhdGUqLCBTdHJpbmdJbXBsKik7Cit0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OICgqSl9KSVRPcGVyYXRpb25fRUpBKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNB
cnJheSopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVy
YXRpb25fRUpJKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopOwordHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpKKShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpzc1opKEV4ZWNTdGF0
ZSosIEpTU3RyaW5nKiwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSlApKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCB2
b2lkKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJh
dGlvbl9FUCkoRXhlY1N0YXRlKiwgdm9pZCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVBQKShFeGVjU3RhdGUqLCB2b2lkKiwgdm9pZCop
OwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25f
RVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VTUykoRXhlY1N0YXRlKiwgc2l6ZV90LCBz
aXplX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVy
YXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVpJY2ZaKShFeGVjU3RhdGUqLCBpbnQzMl90
LCBJbmxpbmVDYWxsRnJhbWUqLCBpbnQzMl90KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50
MzJfdCk7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0Up
KEV4ZWNTdGF0ZSopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJh
dGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJB
VElPTiAoKkNfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYg
SlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBK
U0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRP
cGVyYXRpb25fRUljZikoRXhlY1N0YXRlKiwgSW5saW5lQ2FsbEZyYW1lKik7Cit0eXBlZGVmIEpT
Q2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0
aW9uX0VKc3NTdCkoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBTdHJ1Y3R1cmUqKTsKK3R5cGVkZWYg
SlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpzc0pzcykoRXhlY1N0YXRl
KiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
KCpDX0pJVE9wZXJhdGlvbl9FSnNzSnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3Ry
aW5nKiwgSlNTdHJpbmcqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRP
cGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QpOwordHlwZWRlZiBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlv
bl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Cit0eXBlZGVmIGRvdWJsZSBKSVRfT1BFUkFUSU9O
ICgqRF9KSVRPcGVyYXRpb25fREQpKGRvdWJsZSwgZG91YmxlKTsKK3R5cGVkZWYgZG91YmxlIEpJ
VF9PUEVSQVRJT04gKCpEX0pJVE9wZXJhdGlvbl9aWikoaW50MzJfdCwgaW50MzJfdCk7Cit0eXBl
ZGVmIGRvdWJsZSBKSVRfT1BFUkFUSU9OICgqRF9KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRP
cGVyYXRpb25fRCkoZG91YmxlKTsKK3R5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJ
VE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwordHlwZWRlZiBz
aXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRp
b25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwordHlw
ZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0opKEVuY29kZWRKU1Zh
bHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRSkoRXhl
Y1N0YXRlKik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VP
WkQpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwgZG91YmxlKTsKK3R5cGVkZWYgdm9p
ZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRU9aSikoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElP
TiAoKlZfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgdm9p
ZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNJY2YpKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIElubGluZUNhbGxGcmFtZSopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJ
VE9wZXJhdGlvbl9FQ0NJY2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCosIElubGluZUNh
bGxGcmFtZSopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9F
Q0pKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
OwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ1opKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpW
X0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwordHlwZWRl
ZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSkNJKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwordHlwZWRlZiB2b2lkIEpJVF9P
UEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSkpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BF
UkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUpQUCkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IHZvaWQqLCB2b2lkKik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0
aW9uX0VQWkopKEV4ZWNTdGF0ZSosIHZvaWQqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Cit0
eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX1cpKFdhdGNocG9pbnRT
ZXQqKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0UpKEV4
ZWNTdGF0ZSopOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25f
RUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgq
UF9KSVRPcGVyYXRpb25fRUpTKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90KTsK
K3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VPKShFeGVjU3Rh
dGUqLCBKU09iamVjdCopOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVy
YXRpb25fRU9TKShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIq
IEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FT1opKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgaW50MzJfdCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlv
bl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BF
UkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVMpKEV4ZWNTdGF0ZSosIHNpemVfdCk7Cit0eXBlZGVm
IGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FU0pzcykoRXhlY1N0YXRlKiwg
c2l6ZV90LCBKU1N0cmluZyopOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRP
cGVyYXRpb25fRVN0KShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKK3R5cGVkZWYgY2hhciogSklU
X09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VTdEopKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3Bl
cmF0aW9uX0VTdFBTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KTsKK3R5
cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VTdFNTKShFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVS
QVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FU3RaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQz
Ml90KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VaWiko
RXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCk7Cit0eXBlZGVmIFN0cmluZ0ltcGwqIEpJVF9P
UEVSQVRJT04gKCpJX0pJVE9wZXJhdGlvbl9FSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyopOwor
dHlwZWRlZiBKU1N0cmluZyogSklUX09QRVJBVElPTiAoKkpzc19KSVRPcGVyYXRpb25fRVopKEV4
ZWNTdGF0ZSosIGludDMyX3QpOworCitleHRlcm4gIkMiIHsKKworLy8gVGhpcyBtZXRob2QgaXMg
dXNlZCB0byBsb29rdXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlv
biwgd2hpY2ggaXMKKy8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxz
IG91dCB0byBvbmUgb2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFib3ZlLgorCisvLyBBY2NvcmRp
bmcgdG8gQysrIHJ1bGVzLCBhIHR5cGUgdXNlZCBmb3IgdGhlIHJldHVybiBzaWduYXR1cmUgb2Yg
ZnVuY3Rpb24gd2l0aCBDIGxpbmthZ2UgKGkuZS4KKy8vICdleHRlcm4gIkMiJykgbmVlZHMgdG8g
YmUgUE9EOyBoZW5jZSBwdXR0aW5nIGFueSBjb25zdHJ1Y3RvcnMgaW50byBpdCBjb3VsZCBjYXVz
ZSBlaXRoZXIgY29tcGlsZXIKKy8vIHdhcm5pbmdzLCBvciB3b3JzZSwgYSBjaGFuZ2UgaW4gdGhl
IEFCSSB1c2VkIHRvIHJldHVybiB0aGVzZSB0eXBlcy4KK3N0cnVjdCBKSVRIYW5kbGVyIHsKKyAg
ICB1bmlvbiBVbmlvbiB7CisgICAgICAgIHN0cnVjdCBTdHJ1Y3QgeworICAgICAgICAgICAgRXhl
Y1N0YXRlKiBleGVjOworICAgICAgICAgICAgdm9pZCogaGFuZGxlcjsKKyAgICAgICAgfSBzOwor
ICAgICAgICB1aW50NjRfdCBlbmNvZGVkOworICAgIH0gdTsKK307CisKK2lubGluZSBKSVRIYW5k
bGVyIGNyZWF0ZUpJVEhhbmRsZXIoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBoYW5kbGVyKQorewor
ICAgIEpJVEhhbmRsZXIgcmVzdWx0OworICAgIHJlc3VsdC51LnMuZXhlYyA9IGV4ZWM7CisgICAg
cmVzdWx0LnUucy5oYW5kbGVyID0gaGFuZGxlcjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisj
aWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgSklUSGFuZGxlciBKSVRIYW5kbGVyRW5jb2RlZDsKK2lu
bGluZSBKSVRIYW5kbGVyRW5jb2RlZCBkZmdIYW5kbGVyRW5jb2RlZChFeGVjU3RhdGUqIGV4ZWMs
IHZvaWQqIGhhbmRsZXIpCit7CisgICAgcmV0dXJuIGNyZWF0ZUpJVEhhbmRsZXIoZXhlYywgaGFu
ZGxlcik7Cit9CisjZWxzZQordHlwZWRlZiB1aW50NjRfdCBKSVRIYW5kbGVyRW5jb2RlZDsKK2lu
bGluZSBKSVRIYW5kbGVyRW5jb2RlZCBkZmdIYW5kbGVyRW5jb2RlZChFeGVjU3RhdGUqIGV4ZWMs
IHZvaWQqIGhhbmRsZXIpCit7CisgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEpJVEhhbmRsZXI6
OlVuaW9uKSA9PSBzaXplb2YodWludDY0X3QpLCBKSVRIYW5kbGVyX1VuaW9uX2lzXzY0Yml0KTsK
KyAgICByZXR1cm4gY3JlYXRlSklUSGFuZGxlcihleGVjLCBoYW5kbGVyKS51LmVuY29kZWQ7Cit9
CisjZW5kaWYKK0pJVEhhbmRsZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9u
SGFuZGxlcihFeGVjU3RhdGUqLCB1aW50MzJfdCkgV1RGX0lOVEVSTkFMOworSklUSGFuZGxlckVu
Y29kZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0
ZSosIFN0cnVjdHVyZVN0dWJJbmZvKikgV1RGX0lOVEVSTkFMOworCitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0
cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5n
SW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uSW5PcHRpbWl6ZShFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7CitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0
cmluZ0ltcGwqKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2VuZXJp
Y0luKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEN1c3RvbUdldHRlcihFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYywgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5B
TDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEdldHRlcihFeGVj
U3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lO
VEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Qo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0
cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5U
RVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0
cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RG
X0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0Nl
bGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9J
TlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFu
ZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zm
c2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSopIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVj
dChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworCit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSklUT3BlcmF0aW9uc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBSZWdpc3RlclNldF9oCisjZGVmaW5lIFJlZ2lzdGVyU2V0X2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkZQUkluZm8uaCIK
KyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMg
PQorICAgIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnM7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNl
dCA9CisgICAgKHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMgKyA3KSA+PiAzOworCit0eXBlZGVmIHVp
bnQ4X3QgUmVnaXN0ZXJTZXRQT0RbbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXRdOworCitjbGFz
cyBSZWdpc3RlclNldCB7CitwdWJsaWM6CisgICAgUmVnaXN0ZXJTZXQoKQorICAgIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCisg
ICAgICAgICAgICBtX3NldFtpXSA9IDA7CisgICAgfQorICAgIAorICAgIFJlZ2lzdGVyU2V0KGNv
bnN0IFJlZ2lzdGVyU2V0UE9EJiBvdGhlcikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0OyBpLS07KQorICAgICAgICAgICAgbV9zZXRb
aV0gPSBvdGhlcltpXTsKKyAgICB9CisgICAgCisgICAgY29uc3QgUmVnaXN0ZXJTZXRQT0QmIGFz
UE9EKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KKyAgICAKKyAgICB2b2lkIGNvcHlJbmZvKFJl
Z2lzdGVyU2V0UE9EJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0OyBpLS07KQorICAgICAgICAgICAgb3RoZXJb
aV0gPSBtX3NldFtpXTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoR1BSUmVnIHJlZykKKyAg
ICB7CisgICAgICAgIHNldEJpdChHUFJJbmZvOjp0b0luZGV4KHJlZykpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNldEdQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBB
U1NFUlQoaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgIHNldEJp
dChpbmRleCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoR1BSUmVnIHJlZykKKyAgICB7
CisgICAgICAgIGNsZWFyQml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgZ2V0KEdQUlJlZyByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZ2V0
Qml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgZ2V0R1BS
QnlJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRl
eCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIGdldEJpdChp
bmRleCk7CisgICAgfQorICAgIAorICAgIC8vIFJldHVybiB0aGUgaW5kZXgndGggZnJlZSBHUFIu
CisgICAgR1BSUmVnIGdldEZyZWVHUFIodW5zaWduZWQgaW5kZXggPSAwKSBjb25zdAorICAgIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGkt
LTspIHsKKyAgICAgICAgICAgIGlmICghZ2V0R1BSQnlJbmRleChpKSAmJiAhaW5kZXgtLSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQo
RlBSUmVnIHJlZykKKyAgICB7CisgICAgICAgIHNldEJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVycyArIEZQUkluZm86OnRvSW5kZXgocmVnKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
RlBSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8
IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICAgICAgc2V0Qml0KEdQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzICsgaW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKEZQ
UlJlZyByZWcpCisgICAgeworICAgICAgICBjbGVhckJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVycyArIEZQUkluZm86OnRvSW5kZXgocmVnKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgZ2V0
KEZQUlJlZyByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZ2V0Qml0KEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBnZXRGUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAg
ICByZXR1cm4gZ2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaW5kZXgpOworICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KKyAgICB2b2lkIHNldEJ5
SW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBzZXQoQmFua0luZm86OnRvUmVn
aXN0ZXIoaW5kZXgpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0lu
Zm8+CisgICAgYm9vbCBnZXRCeUluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdldChCYW5rSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOworICAgIH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZlNldEdQUnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWdu
ZWQgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghZ2V0Qml0KGkpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZT
ZXRGUFJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7
CisgICAgICAgICAgICBpZiAoIWdldEJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmVzdWx0Kys7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQg
bnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVz
dWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdG90YWxOdW1iZXJPZlJlZ2lzdGVy
czsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFnZXRCaXQoaSkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRCaXQodW5zaWdu
ZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgdG90YWxOdW1iZXJPZlJlZ2lzdGVycyk7
CisgICAgICAgIG1fc2V0W2kgPj4gM10gfD0gKDEgPDwgKGkgJiA3KSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgY2xlYXJCaXQodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwg
dG90YWxOdW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgIG1fc2V0W2kgPj4gM10gJj0gfigxIDw8
IChpICYgNykpOworICAgIH0KKyAgICAKKyAgICBib29sIGdldEJpdCh1bnNpZ25lZCBpKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsKKyAg
ICAgICAgcmV0dXJuICEhKG1fc2V0W2kgPj4gM10gJiAoMSA8PCAoaSAmIDcpKSk7CisgICAgfQor
ICAgIAorICAgIFJlZ2lzdGVyU2V0UE9EIG1fc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbHNlIC8vIEVOQUJMRShKSVQpIC0+IHNvIGlmIEpJVCBpcyBkaXNhYmxlZAorCituYW1l
c3BhY2UgSlNDIHsKKworLy8gRGVmaW5lIFJlZ2lzdGVyU2V0UE9EIHRvIHNvbWV0aGluZyB0aGF0
IGlzIGEgUE9ELCBidXQgaXMgb3RoZXJ3aXNlIHVzZWxlc3MsCisvLyB0byBtYWtlIGl0IGVhc2ll
ciB0byByZWZlciB0byB0aGlzIHR5cGUgaW4gY29kZSB0aGF0IG1heSBiZSBjb21waWxlZCB3aGVu
CisvLyB0aGUgREZHIGlzIGRpc2FibGVkLgorCitzdHJ1Y3QgUmVnaXN0ZXJTZXRQT0QgeyB9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAv
LyBSZWdpc3RlclNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJSZXBhdGNoLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lSW5saW5lcy5oIgorI2luY2x1ZGUgIkdD
QXdhcmVKSVRTdHViUm91dGluZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRl
ICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgorI2lu
Y2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKKyNpbmNsdWRlICJU
aHVua0dlbmVyYXRvcnMuaCIKKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29k
ZWJsb2NrLCBDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0
aW9uKQoreworICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlYmxvY2spOworICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uKTsKK30KKworc3Rh
dGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRyICZzbG93UGF0aEZ1bmN0aW9uLCBib29sIGNv
bXBhY3QpCit7CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisK
KyAgICAvLyBPbmx5IG9wdGltaXplIG9uY2UhCisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBzbG93UGF0aEZ1bmN0aW9uKTsKKworICAgIC8vIFBh
dGNoIHRoZSBzdHJ1Y3R1cmUgY2hlY2sgJiB0aGUgb2Zmc2V0IG9mIHRoZSBsb2FkLgorICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
UHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRv
Q2FsbCksIHN0cnVjdHVyZSk7CisgICAgcmVwYXRjaEJ1ZmZlci5zZXRMb2FkSW5zdHJ1Y3Rpb25J
c0FjdGl2ZShzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uY29udmVydGlibGVMb2FkQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RvcmFnZUxvYWQpLCBpc091dE9mTGlu
ZU9mZnNldChvZmZzZXQpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGlmIChjb21wYWN0KQor
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9M
b2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpKTsKKyAg
ICBlbHNlCisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9Mb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpKTsK
KyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgaWYgKGNvbXBhY3QpIHsKKyAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxD
b21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3Rv
cmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7CisgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29t
cGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JT
dG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxU
b1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwor
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9h
ZExvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsK
KyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNo
ZWNrKAorICAgIEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBNYWNyb0Fzc2Vt
YmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVn
IHNjcmF0Y2hHUFIpCit7CisgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJl
ICYmIHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkgewor
ICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHN0dWJJbmZvLmFkZFdh
dGNocG9pbnQoY29kZUJsb2NrKSk7CisjaWYgREZHX0VOQUJMRShKSVRfQVNTRVJUKQorICAgICAg
ICAvLyBJZiB3ZSBleGVjdXRlIHRoaXMgY29kZSwgdGhlIG9iamVjdCBtdXN0IGhhdmUgdGhlIHN0
cnVjdHVyZSB3ZSBleHBlY3QuIEFzc2VydAorICAgICAgICAvLyB0aGlzIGluIGRlYnVnIG1vZGVz
LgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3Qp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb2sgPSBqaXQuYnJh
bmNoUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpKTsKKyAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgb2subGluaygmaml0KTsK
KyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOworICAgIGZhaWx1
cmVDYXNlcy5hcHBlbmQoCisgICAgICAgIGppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsKK30KKworc3RhdGljIHZv
aWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgIEpTVmFsdWUgcHJvdG90eXBlLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2Vz
LCBHUFJSZWcgc2NyYXRjaEdQUikKK3sKKyAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJUKHByb3RvdHlwZS5pc0NlbGwoKSk7CisgICAg
CisgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgICAgICBwcm90b3R5cGUuYXND
ZWxsKCksIHByb3RvdHlwZS5hc0NlbGwoKS0+c3RydWN0dXJlKCksIGNvZGVCbG9jaywgc3R1Yklu
Zm8sIGppdCwKKyAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKK30KKworc3RhdGlj
IHZvaWQgcmVwbGFjZVdpdGhKdW1wKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdl
dCkKK3sKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJh
bmNoUHRyV2l0aFBhdGNoKCkpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1
bXAoCisgICAgICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRy
V2l0aFBhdGNoT25BZGRyZXNzKAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgICAgLShpbnRw
dHJfdClzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRvQ2FsbCkpLAorICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCisgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdl
dCkpOworfQorCitzdGF0aWMgdm9pZCBlbWl0UmVzdG9yZVNjcmF0Y2goTWFjcm9Bc3NlbWJsZXIm
IHN0dWJKaXQsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIEdQUlJlZyBzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCYgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGZhaWws
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMpCit7CisgICAgaWYgKG5lZWRU
b1Jlc3RvcmVTY3JhdGNoKSB7CisgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAg
ICAgICAKKyAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICAKKyAgICAg
ICAgLy8gbGluayBmYWlsdXJlIGNhc2VzIGhlcmUsIHNvIHdlIGNhbiBwb3Agc2NyYXRjaEdQUiwg
YW5kIHRoZW4ganVtcCBiYWNrLgorICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmc3R1YkppdCk7
CisgICAgICAgIAorICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgCisg
ICAgICAgIGZhaWwgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmtS
ZXN0b3JlU2NyYXRjaChMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9vbCBuZWVkVG9SZXN0b3Jl
U2NyYXRjaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcywgQ29kZUxvY2F0
aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luKQor
eworICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3VjY2Vzc0xhYmVsKTsKKyAgICAgICAg
CisgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7CisgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsoZmFpbCwgc2xvd0Nhc2VCZWdpbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgLy8gbGluayBmYWlsdXJlIGNhc2VzIGRpcmVjdGx5IGJhY2sgdG8gbm9ybWFsIHBhdGgKKyAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgc2xvd0Nhc2VCZWdpbik7Cit9CisKK3N0
YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9v
bCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzKQoreworICAgIGxpbmtSZXN0b3JlU2Ny
YXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZh
aWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNl
KSk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgc2l6ZV90IGNvdW50LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVs
IHNsb3dDYXNlTGFiZWwsIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQorewor
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworCisgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsK
KyAgICAgICAgCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEdQUlJl
ZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52
YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZy
ZWVHUFIoKTsKKyAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7CisgICAgCisg
ICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgeworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIo
YmFzZUdQUiwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJs
eUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRUYWdH
UFIpOworI2VuZGlmCisgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKKyAgICAgICAg
bmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOworICAgIAorICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOworICAgIAorICAgIFN0cnVjdHVy
ZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiogaXQgPSBjaGFpbi0+aGVhZCgpOworICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKKyAgICAgICAg
cHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAo
ZXhlYykpOworICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgICAgICAg
ICBwcm90b09iamVjdCwgcHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpLCBleGVjLT5jb2RlQmxvY2so
KSwgc3R1YkluZm8sIHN0dWJKaXQsCisgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hH
UFIpOworICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOworICAgIH0KKyAgICAKKyAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgIHN0dWJKaXQubG9hZDY0KHByb3RvT2JqZWN0LT5sb2NhdGlvbkZvck9mZnNldChvZmZzZXQp
LCByZXN1bHRHUFIpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgc3R1YkppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0LT5sb2NhdGlvbkZv
ck9mZnNldChvZmZzZXQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOworICAgICAgICBzdHVi
Sml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIp
OworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2Jq
ZWN0LT5idXR0ZXJmbHlBZGRyZXNzKCksIHJlc3VsdEdQUik7CisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpLCByZXN1bHRHUFIpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgc3R1Ykpp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRl
cmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIp
OworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRH
UFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgc3VjY2VzcywgZmFpbDsKKyAgICAKKyAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1Ykpp
dCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1
cmVDYXNlcyk7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0
LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgCisgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNo
QnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2Vz
LCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOworICAgIAorICAgIHN0dWJSb3V0aW5lID0g
RklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAg
ICAoIkRGRyBwcm90b3R5cGUgY2hhaW4gYWNjZXNzIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLAorICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBz
dWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworfQorCitzdGF0aWMgYm9vbCB0cnlD
YWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICAvLyBGSVhNRTogV3JpdGUgYSB0ZXN0IHRoYXQg
cHJvdmVzIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lvbiBoZXJlIGp1c3QKKyAgICAvLyBs
aWtlIHRoZSBpbnRlcnByZXRlciBkb2VzLCB0aGVuIGFkZCBhIGNoZWNrIGZvciByZWN1cnNpb24u
CisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIAorICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAm
JiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZn
LmJhc2VHUFIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIEdQUlJlZyByZXN1bHRU
YWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQ
Uik7CisjZW5kaWYKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJl
Zz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJl
ZUdQUigpOworICAgICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OworICAgICAgICAKKyAgICAgICAg
aWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgeworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BS
KGJhc2VHUFIsIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFz
c2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIsIHJlc3Vs
dFRhZ0dQUik7CisjZW5kaWYKKyAgICAgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAg
ICAgICAKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsgCisgICAgICAg
IHN0dWJKaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0
dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBmYWlsdXJl
Q2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
Y3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAg
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW5kZXhp
bmdTaGFwZU1hc2spKSk7CisgICAgICAgIAorICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigwKSkpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3R1YkppdC5vcjY0KEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0dWJKaXQubW92ZShzY3JhdGNoR1BSLCByZXN1
bHRHUFIpOworICAgICAgICBzdHViSml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMHhmZmZmZmZmZiksIHJlc3VsdFRhZ0dQUik7IC8vIEpTVmFsdWU6OkludDMyVGFnCisjZW5k
aWYKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOworICAgICAg
ICAKKyAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3Jh
dGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOworICAgICAgICAK
KyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBjb2RlQmxvY2sp
OworICAgICAgICAKKyAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7
CisgICAgICAgIAorICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVf
Rk9SX0RGR19TVFVCKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkRG
RyBHZXRCeUlkIGFycmF5IGxlbmd0aCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKKyAg
ICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICAg
ICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygp
KSk7CisgICAgICAgIAorICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJs
b2NrKTsKKyAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBz
dHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8gRklY
TUU6IHNob3VsZCBzdXBwb3J0IGxlbmd0aCBhY2Nlc3MgZm9yIFN0cmluZy4KKworICAgIC8vIEZJ
WE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCisgICAgaWYgKCFiYXNl
VmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBKU0NlbGwqIGJhc2VD
ZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFz
ZUNlbGwtPnN0cnVjdHVyZSgpOworICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gT3B0aW1pemUgc2Vs
ZiBhY2Nlc3MuCisgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKKyAgICAg
ICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQorICAgICAgICAgICAgfHwgIU1hY3JvQXNz
ZW1ibGVyOjppc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2
ZVRvUGF0Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKSB7CisgICAgICAgICAgICBy
ZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0
aW9uR2V0QnlJZEJ1aWxkTGlzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBz
dHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3Qs
IHRydWUpOworICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBGSVhNRTogb3B0aW1pemUgZ2V0dGVycyBhbmQgc2V0
dGVycworICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNl
dCgpOworICAgIHNpemVfdCBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5B
Y2Nlc3MoZXhlYywgYmFzZVZhbHVlLCBzbG90LnNsb3RCYXNlKCksIHByb3BlcnR5TmFtZSwgb2Zm
c2V0KTsKKyAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1
Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgIAorICAgIGdlbmVyYXRlUHJvdG9DaGFp
bkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0
LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2Fz
ZSksIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwg
c3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdl
dEJ5SWRCdWlsZExpc3QpOworICAgIAorICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkQ2hhaW4oKnZt
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWlu
LCBjb3VudCwgdHJ1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgcmVwYXRjaEdldEJ5
SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3sKKyAgICBib29sIGNhY2hlZCA9IHRyeUNhY2hlR2V0QnlJRChleGVjLCBi
YXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pOworICAgIGlmICghY2FjaGVk
KQorICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKK30KKworc3RhdGljIGJvb2wgZ2V0UG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KAorICAgIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QqJiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGludCYgbGlzdEluZGV4LAorICAg
IENvZGVMb2NhdGlvbkxhYmVsJiBzbG93Q2FzZSkKK3sKKyAgICBzbG93Q2FzZSA9IHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBh
Y2Nlc3NfdW5zZXQpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0
aW5lKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCgpOworICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZM
aXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMCwgZmFsc2UpOworICAgICAgICBsaXN0SW5k
ZXggPSAwOworICAgIH0gZWxzZSBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX3NlbGYpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0
aW5lKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIEpJ
VFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoc2xvd0Nhc2UpLCBzdHViSW5m
by51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOworICAgICAg
ICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwg
MSwgdHJ1ZSk7CisgICAgICAgIGxpc3RJbmRleCA9IDE7CisgICAgfSBlbHNlIGlmIChzdHViSW5m
by5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4pIHsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoISFzdHViSW5mby5zdHViUm91dGluZSk7CisgICAgICAgIHNsb3dDYXNlID0gQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOworICAg
ICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1
YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0
KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpLCB0cnVlKTsKKyAgICAgICAg
c3R1YkluZm8uc3R1YlJvdXRpbmUuY2xlYXIoKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5
SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEsIGZhbHNlKTsKKyAgICAgICAg
bGlzdEluZGV4ID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHVi
SW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0KTsKKyAgICAgICAg
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3Ry
dWN0dXJlTGlzdDsKKyAgICAgICAgbGlzdEluZGV4ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxp
c3QubGlzdFNpemU7CisgICAgICAgIHNsb3dDYXNlID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKGxpc3RJbmRleCA9PSBQT0xZTU9SUEhJ
Q19MSVNUX0NBQ0hFX1NJWkUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVChsaXN0SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpJVFN0dWJS
b3V0aW5lKiBzdHViUm91dGluZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nl
c3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0KTsKKyAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAgICBpZiAoc3R1YkluZm8udS5nZXRCeUlkU2Vs
Zkxpc3QuZGlkU2VsZlBhdGNoaW5nKSB7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAor
ICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKKyAg
ICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayks
CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHJlcGxhY2VXaXRoSnVtcChy
ZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOworfQor
CitzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoIWJhc2VWYWx1
ZS5pc0NlbGwoKQorICAgICAgICB8fCAhc2xvdC5pc0NhY2hlYWJsZSgpCisgICAgICAgIHx8ICFi
YXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVh
YmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgSlND
ZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBpZiAoc2xvdC5zbG90QmFz
ZSgpID09IGJhc2VWYWx1ZSkgeworICAgICAgICBpZiAoIXN0dWJJbmZvLnBhdGNoLmRmZy5yZWdp
c3RlcnNGbHVzaGVkKSB7CisgICAgICAgICAgICAvLyBXZSBjYW5ub3QgZG8gYXMgbXVjaCBpbmxp
bmUgY2FjaGluZyBpZiB0aGUgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQgcHJpb3IgdG8gdGhp
cyBHZXRCeUlkLiBJbiBwYXJ0aWN1bGFyLAorICAgICAgICAgICAgLy8gbm9uLVZhbHVlIGNhY2hl
ZCBwcm9wZXJ0aWVzIHJlcXVpcmUgcGxhbnRpbmcgY2FsbHMsIHdoaWNoIHJlcXVpcmVzIHJlZ2lz
dGVycyB0byBoYXZlIGJlZW4gZmx1c2hlZC4gVGh1cywKKyAgICAgICAgICAgIC8vIGlmIHJlZ2lz
dGVycyB3ZXJlIG5vdCBmbHVzaGVkLCBkb24ndCBkbyBub24tVmFsdWUgY2FjaGluZy4KKyAgICAg
ICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgCisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OworICAgICAgICBpbnQgbGlzdElu
ZGV4OworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZTsKKworICAgICAgICBpZiAo
IWdldFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIHNsb3dDYXNlKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZM
aXN0Lmxpc3RTaXplKys7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOworI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJS
ZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZh
bHVlR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5m
by5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOworICAgICAgICAKKyAgICAg
ICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgIAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0cnVjdCA9IHN0dWJKaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSkpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIHN0cmF0ZWd5IHdlIHVzZSBm
b3Igc3R1YnMgaXMgYXMgZm9sbG93czoKKyAgICAgICAgLy8gMSkgQ2FsbCBERkcgaGVscGVyIHRo
YXQgY2FsbHMgdGhlIGdldHRlci4KKyAgICAgICAgLy8gMikgQ2hlY2sgaWYgdGhlcmUgd2FzIGFu
IGV4Y2VwdGlvbiwgYW5kIGlmIHRoZXJlIHdhcywgY2FsbCB5ZXQgYW5vdGhlcgorICAgICAgICAv
LyAgICBoZWxwZXIuCisgICAgICAgIAorICAgICAgICBib29sIGlzRGlyZWN0ID0gZmFsc2U7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGhhbmRsZXJDYWxsOworICAgICAgICBGdW5jdGlvblB0ciBvcGVyYXRp
b25GdW5jdGlvbjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKKyAgICAg
ICAgCisgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkgfHwgc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigp
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VHUFIgIT0gc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CisjZW5kaWYKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAg
ICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsK
KyNlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSwgc2NyYXRjaEdQUik7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRpb25D
YWxsR2V0dGVyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdHViSml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgYmFzZUdQ
UiwKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoRnVu
Y3Rpb25QdHIoc2xvdC5jdXN0b21HZXR0ZXIoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSksCisgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwo
KSkpOworICAgICAgICAgICAgICAgIG9wZXJhdGlvbkZ1bmN0aW9uID0gb3BlcmF0aW9uQ2FsbEN1
c3RvbUdldHRlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
TmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUg
ZnV0dXJlLCB3ZSByZW1lbWJlciB0aGUKKyAgICAgICAgICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFk
ZSBpdCBmcm9tLiBJdCBqdXN0IHNvIGhhcHBlbnMgdG8gYmUgdGhlIHBsYWNlIHRoYXQgd2UgYXJl
IGF0CisgICAgICAgICAgICAvLyByaWdodCBub3chCisgICAgICAgICAgICBzdHViSml0LnN0b3Jl
MzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihleGVjLT5s
b2NhdGlvbkFzUmF3Qml0cygpKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0Zv
cihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwo
KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgc3R1YkppdC5tb3ZlKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgICAgIHN0dWJKaXQu
c2V0dXBSZXN1bHRzKHJlc3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKKyNlbmRpZgorICAgICAgICAg
ICAgc3VjY2VzcyA9IHN0dWJKaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52
ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0dWJKaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKCZzdHViSW5mbykpOworICAgICAgICAgICAgaGFuZGxlckNhbGwg
PSBzdHViSml0LmNhbGwoKTsKKyAgICAgICAgICAgIHN0dWJKaXQuanVtcChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGlzSW5saW5l
T2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7
CisjZWxzZQorICAgICAgICAgICAgICAgIGlmIChiYXNlR1BSID09IHJlc3VsdFRhZ0dQUikgewor
ICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9m
ZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
Uiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIp
OworICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBzdHVi
Sml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgICAg
ICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9m
ZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Cisj
ZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAo
KTsKKyAgICAgICAgICAgIGlzRGlyZWN0ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY29kZUJsb2NrKTsKKyAgICAgICAg
CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsod3JvbmdTdHJ1Y3QsIHNsb3dDYXNlKTsKKyAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7CisgICAg
ICAgIGlmICghaXNEaXJlY3QpIHsKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0
aW9uQ2FsbCwgb3BlcmF0aW9uRnVuY3Rpb24pOworICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlckluU3R1Yik7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPQor
ICAgICAgICAgICAgY3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgICAgICAgICAgRklOQUxJ
WkVfREZHX0NPREUoCisgICAgICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAg
ICAgICAgICAgICAoIkRGRyBHZXRCeUlkIHBvbHltb3JwaGljIGxpc3QgYWNjZXNzIGZvciAlcywg
cmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+
Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAgICAgICAgICp2bSwK
KyAgICAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICAg
ICAgICAgIHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkpOworICAgICAgICAKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xp
c3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRp
bmUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOworICAgICAgICAKKyAgICAgICAgcGF0Y2hKdW1wVG9H
ZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7CisgICAg
ICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7
CisgICAgfQorICAgIAorICAgIGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT50
eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8ICFzbG90LmlzQ2FjaGVhYmxl
VmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQ
cm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2VWYWx1ZSwgc2xvdC5zbG90QmFz
ZSgpLCBpZGVudCwgb2Zmc2V0KTsKKyAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNo
YWluKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90
eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgIAorICAgIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0Owor
ICAgIGludCBsaXN0SW5kZXg7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2U7CisgICAg
aWYgKCFnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qodm0sIGNvZGVCbG9jaywgc3R1YkluZm8s
IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgbGlzdEluZGV4LCBzbG93Q2FzZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3QubGlz
dFNpemUrKzsKKyAgICAKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwor
ICAgIAorICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHBy
b3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0Rv
bmUpLCBzbG93Q2FzZSwgc3R1YlJvdXRpbmUpOworICAgIAorICAgIHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOworICAgIAorICAgIHBhdGNoSnVt
cFRvR2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwor
ICAgIAorICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
IC0gMSk7Cit9CisKK3ZvaWQgYnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGJvb2wg
ZG9udENoYW5nZUNhbGwgPSB0cnlCdWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJv
cGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7CisgICAgaWYgKCFkb250Q2hhbmdlQ2FsbCkKKyAg
ICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Cit9CisKK3N0YXRpYyBWX0pJVE9wZXJhdGlvbl9F
SkNJIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNs
b3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUo
KSkgeworICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3Q7CisgICAgfQorICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7CisgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3Q7Cit9CisKK3N0YXRpYyBWX0pJVE9wZXJhdGlvbl9FSkNJIGFw
cHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xv
dCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQoreworICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KSB7CisgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0OworICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdDsKKyAgICB9CisgICAgaWYgKHB1dEtpbmQgPT0g
RGlyZWN0KQorICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1
aWxkTGlzdDsKKyAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdDsK
K30KKworc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAorICAgIEV4ZWNTdGF0ZSogZXhl
YywKKyAgICBKU1ZhbHVlLAorICAgIGNvbnN0IElkZW50aWZpZXImLAorICAgIGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCwKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAg
UHV0S2luZCwKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBDb2RlTG9jYXRpb25MYWJl
bCBmYWlsdXJlTGFiZWwsCisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUp
Cit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKKyNpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKKyNlbmRpZgorICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51
c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7CisgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRj
aCA9IGZhbHNlOworI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUjI7CisgICAgY29uc3QgYm9vbCB3cml0ZUJhcnJpZXJOZWVkZWQgPSB0cnVl
OworI2Vsc2UKKyAgICBjb25zdCBib29sIHdyaXRlQmFycmllck5lZWRlZCA9IGZhbHNlOworI2Vu
ZGlmCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKKyAgICAKKyAgICBpZiAoc2Ny
YXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnICYmICh3cml0ZUJhcnJpZXJOZWVkZWQgfHwgaXNPdXRP
ZkxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihi
YXNlR1BSLCB2YWx1ZUdQUik7CisjZWxzZQorICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlI
ZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUik7
CisjZW5kaWYKKyAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOworICAgICAgICBz
dHViSml0LnB1c2goc2NyYXRjaEdQUik7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgYmFkU3RydWN0dXJlID0gc3R1YkppdC5icmFuY2hQdHIoCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSkpOworICAgIAorI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BS
T0ZJTElORykKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHNjcmF0Y2hHUFIyID0gQXNzZW1ibHlI
ZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsK
KyNlbHNlCisgICAgc2NyYXRjaEdQUjIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSLCBzY3JhdGNoR1BSKTsKKyNlbmRpZgor
ICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSMik7CisgICAgQXNzZW1ibHlIZWxwZXJzOjp3cml0
ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIFdyaXRl
QmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKKyAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSMik7
CisjZW5kaWYKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGlmIChpc0lubGluZU9mZnNl
dChzbG90LmNhY2hlZE9mZnNldCgpKSkKKyAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgfQorI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkp
IHsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJ
bklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7
CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0
SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgfQorI2VuZGlmCisgICAgCisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBmYWlsdXJlOworICAgIAorICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgeworICAgICAg
ICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVt
cCgpOworICAgICAgICAKKyAgICAgICAgYmFkU3RydWN0dXJlLmxpbmsoJnN0dWJKaXQpOworICAg
ICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQu
anVtcCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsK
KyAgICAgICAgZmFpbHVyZSA9IGJhZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7CisgICAgcGF0
Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOworICAgICAgICAgICAgCisgICAg
c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKKyAgICAgICAgcGF0Y2hC
dWZmZXIsCisgICAgICAgICgiREZHIFB1dEJ5SWQgcmVwbGFjZSBzdHViIGZvciAlcywgcmV0dXJu
IHBvaW50ICVwIiwKKyAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRh
dGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCisgICAgICAg
ICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOworfQorCitzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCisgICAg
RXhlY1N0YXRlKiBleGVjLAorICAgIEpTVmFsdWUsCisgICAgY29uc3QgSWRlbnRpZmllciYsCisg
ICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywKKyAgICBQdXRLaW5kIHB1dEtpbmQsCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
CisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCisgICAgU3RydWN0dXJlQ2hhaW4qIHByb3Rv
dHlwZUNoYWluLAorICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCwKKyAgICBSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC5kZmcuYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJSZWcg
dmFsdWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1
ZVRhZ0dQUik7CisjZW5kaWYKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJS
ZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7CisgICAgCisgICAgU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycyk7
CisgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICBhbGxvY2F0b3IubG9jayh2YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICBhbGxvY2F0b3IubG9j
ayh2YWx1ZUdQUik7CisgICAgCisgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0pOworICAgICAg
ICAgICAgCisgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRj
aEdQUigpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSBiYXNlR1BSKTsKKyAgICBBU1NFUlQo
c2NyYXRjaEdQUjEgIT0gdmFsdWVHUFIpOworICAgIAorICAgIGJvb2wgbmVlZFNlY29uZFNjcmF0
Y2ggPSBmYWxzZTsKKyAgICBib29sIG5lZWRUaGlyZFNjcmF0Y2ggPSBmYWxzZTsKKyNpZiBFTkFC
TEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgbmVlZFNlY29uZFNjcmF0Y2ggPSB0cnVl
OworI2VuZGlmCisgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgIG5lZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsK
KyAgICAgICAgbmVlZFRoaXJkU2NyYXRjaCA9IHRydWU7CisgICAgfQorCisgICAgR1BSUmVnIHNj
cmF0Y2hHUFIyOworICAgIGlmIChuZWVkU2Vjb25kU2NyYXRjaCkgeworICAgICAgICBzY3JhdGNo
R1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgQVNTRVJUKHNj
cmF0Y2hHUFIyICE9IGJhc2VHUFIpOworICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gdmFs
dWVHUFIpOworICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOworICAg
IH0gZWxzZQorICAgICAgICBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWc7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFIzOworICAgIGlmIChuZWVkVGhpcmRTY3JhdGNoKSB7CisgICAgICAgIHNjcmF0
Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBBU1NFUlQo
c2NyYXRjaEdQUjMgIT0gYmFzZUdQUik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSB2
YWx1ZUdQUik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMSk7Cisg
ICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMik7CisgICAgfSBlbHNlCisg
ICAgICAgIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIAorICAgIGFs
bG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhzdHViSml0KTsKKworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CisgICAgICAgICAgICAKKyAg
ICBBU1NFUlQob2xkU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZh
bGlkYXRlZCgpKTsKKyAgICAKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG9sZFN0cnVjdHVyZSkpKTsKKyAgICAKKyAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9u
Q2hlY2soCisgICAgICAgIG9sZFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNv
ZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLAorICAgICAgICBzY3Jh
dGNoR1BSMSk7CisgICAgICAgICAgICAKKyAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsK
KyAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBwcm90b3R5cGVDaGFp
bi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKKyAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRp
b25DaGVjaygKKyAgICAgICAgICAgICAgICAoKml0KS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMt
PmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLAorICAgICAgICAg
ICAgICAgIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgfQorICAgIH0KKworI2lmIEVOQUJMRShXUklU
RV9CQVJSSUVSX1BST0ZJTElORykKKyAgICBBU1NFUlQobmVlZFNlY29uZFNjcmF0Y2gpOworICAg
IEFTU0VSVChzY3JhdGNoR1BSMiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAvLyBNdXN0IGFsd2F5
cyBlbWl0IHRoaXMgd3JpdGUgYmFycmllciBhcyB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gaXRz
ZWxmIHJlcXVpcmVzIGl0CisgICAgQXNzZW1ibHlIZWxwZXJzOjp3cml0ZUJhcnJpZXIoc3R1Ykpp
dCwgYmFzZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQcm9w
ZXJ0eUFjY2Vzcyk7CisjZW5kaWYKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd1BhdGg7CisgICAgCisgICAgYm9vbCBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSBmYWxzZTsK
KyAgICAKKyAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAg
Q29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0tPmhlYXAuc3RvcmFnZUFsbG9j
YXRvcigpOworICAgICAgICAKKyAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9y
LT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOworICAgICAg
ICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9j
dXJyZW50UmVtYWluaW5nKTsKKyAgICAgICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIx
KTsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFk
ZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIx
KTsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNp
emUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaEdQUjMpOworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3It
Pm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKHN0dWJKaXQuYnJhbmNoU3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKSk7CisgICAgICAg
ICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1
cnJlbnRSZW1haW5pbmcpOworICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEp
OworICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRk
cmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEp
OworICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAvLyBXZSBoYXZl
IHNjcmF0Y2hHUFIxID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsIHNj
cmF0Y2hHUFIyID0gYXZhaWxhYmxlCisgICAgICAgICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQg
PSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQgKz0g
c2l6ZW9mKHZvaWQqKSkgeworICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMywgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkg
KyBzaXplb2Yodm9pZCopKSksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICBzdHViSml0
LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
MSwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNj
cmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gdHJ1ZTsK
KyAgICB9CisKKyAgICBzdHViSml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGlmIChpc0lubGlu
ZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKKyAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFzY3Jh
dGNoR1BSMUhhc1N0b3JhZ2UpCisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaEdQUjEpOworICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgIH0KKyNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CisgICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVT
dG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAg
ICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5l
U3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQorICAgICAgICAgICAgc3R1
YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMy
KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5C
dXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy50YWcpKSk7CisgICAgfQorI2VuZGlmCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc3VjY2VzczsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOworICAgICAgICAg
ICAgCisgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7CisgICAgICAgIGFs
bG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOworICAgICAg
ICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisKKyAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmso
JnN0dWJKaXQpOworICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9w
cGluZyhzdHViSml0KTsKKyAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOworICAgIH0g
ZWxzZQorICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgCisgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBz
dWNjZXNzSW5TbG93UGF0aDsKKyAgICAKKyAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICBz
bG93UGF0aC5saW5rKCZzdHViSml0KTsKKyAgICAgICAgCisgICAgICAgIGFsbG9jYXRvci5yZXN0
b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOworICAgICAgICBTY3JhdGNoQnVm
ZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKGFsbG9jYXRvci5k
ZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemUoKSk7CisgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVz
ZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXIoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRj
aEdQUjEpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQo
KSksIHZhbHVlR1BSKTsKKyNlbHNlCisgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZh
bHVlR1BSLCB2YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0
dWJKaXQuY2FsbCgpOworICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9t
U2NyYXRjaEJ1ZmZlcihzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7CisgICAg
ICAgIHN1Y2Nlc3NJblNsb3dQYXRoID0gc3R1YkppdC5qdW1wKCk7CisgICAgfQorICAgIAorICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkp
OworICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwor
ICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkKKyAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOworICAgIGVsc2UKKyAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIGZhaWx1cmVMYWJlbCk7CisgICAgaWYgKHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpIHsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBvcGVyYXRpb25S
ZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dCk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
c3VjY2Vzc0luU2xvd1BhdGgsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKKyAgICB9CisgICAgCisg
ICAgc3R1YlJvdXRpbmUgPQorICAgICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAg
ICAgIEZJTkFMSVpFX0RGR19DT0RFKAorICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAg
ICAgICAgICAgICAgICgiREZHIFB1dEJ5SWQgJXN0cmFuc2l0aW9uIHN0dWIgKCVwIC0+ICVwKSBm
b3IgJXMsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
PyAicmVhbGxvY2F0aW5nICIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJl
LCBzdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJs
b2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
CisgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9E
b25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAgICAgICAqdm0sCisgICAgICAgICAg
ICBleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLAorICAgICAgICAgICAgc3RydWN0dXJlKTsKK30KKworc3RhdGljIGJvb2wgdHJ5Q2Fj
aGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQoreworICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisKKyAg
ICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpT
Q2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsKKyAgICAKKyAgICBpZiAoIXNsb3QuaXNDYWNo
ZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5j
YWNoZWFibGVEaWN0aW9uYXJ5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE9w
dGltaXplIHNlbGYgYWNjZXNzLgorICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpIHsK
KyAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkp
IHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2tpcCBv
cHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBo
YXZlCisgICAgICAgICAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgor
ICAgICAgICAgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgorICAgICAgICAg
ICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2Ug
bmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKKyAgICAgICAgICAgIC8vIGluZGV4
aW5nIHN0b3JhZ2UuCisgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRl
eGluZ0hlYWRlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxs
KSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hh
aW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCisgICAgICAgICAgICAgICAgZXhlYywgYmFz
ZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCisgICAgICAgICAgICAgICAg
c3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAorICAgICAgICAgICAgICAg
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwKKyAgICAgICAgICAgICAgICBzdHViSW5mby5zdHVi
Um91dGluZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOworICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisg
ICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgK
KyAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0
Q2hlY2spLAorICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0
QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
c3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBwdXRLaW5k
ID09IERpcmVjdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9wcmlhdGVMaXN0QnVpbGRp
bmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsKKyAgICAgICAgc3R1Yklu
Zm8uaW5pdFB1dEJ5SWRSZXBsYWNlKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
c3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBi
YXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2lu
ZCkKK3sKKyAgICBib29sIGNhY2hlZCA9IHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUs
IHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOworICAgIGlmICghY2FjaGVk
KQorICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0
S2luZCkpOworfQorCitzdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNv
ZGVCbG9jaygpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworCisgICAgaWYgKCFiYXNlVmFs
dWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBKU0NlbGwqIGJhc2VDZWxs
ID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNl
bGwtPnN0cnVjdHVyZSgpOworICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJl
LT5wcmV2aW91c0lEKCk7CisgICAgCisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPcHRpbWl6ZSBzZWxmIGFj
Y2Vzcy4KKyAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSB7CisgICAgICAgIFBvbHlt
b3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CisgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4g
c3R1YlJvdXRpbmU7CisgICAgICAgIAorICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJv
cGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgeworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNE
aWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBh
IHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKKyAgICAgICAgICAgIC8vIGVub3VnaCByZWdpc3Rl
cnMgdG8gbWFrZSBpdCBoYXBwZW4uCisgICAgICAgICAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnMgPCA2CisgICAgICAgICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAgICAg
ICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNraXAgb3B0aW1p
emluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhh
cworICAgICAgICAgICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KKyAgICAgICAgICAgIGlmIChvbGRT
dHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9ybWFsaXplUHJvdG90
eXBlQ2hhaW4oZXhlYywgYmFzZUNlbGwpID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cnVj
dHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhl
Yyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8g
Y3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KKyAg
ICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKAorICAgICAgICAg
ICAgICAgIHB1dEtpbmQsIHN0dWJJbmZvLAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxU
b1Nsb3dDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVtaXRQdXRUcmFuc2l0aW9u
U3R1YigKKyAgICAgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xv
dCwgc3R1YkluZm8sIHB1dEtpbmQsCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvbGRTdHJ1
Y3R1cmUsIHByb3RvdHlwZUNoYWluLAorICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
KGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKKyAgICAgICAgICAgICAgICBzdHViUm91
dGluZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKKyAgICAg
ICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKAorICAgICAgICAgICAgICAgICAg
ICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgICAg
IG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAg
ICAgICAgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdl
J3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEt
ZGF0YSBhY2NvcmRpbmdseS4KKyAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0Ojpmcm9tKAorICAgICAgICAgICAgICAgIHB1dEtpbmQsIHN0dWJJbmZvLAorICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGVtaXRQdXRSZXBsYWNlU3R1YigKKyAgICAgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUs
IHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCisgICAgICAgICAgICAgICAg
c3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQo
KSksIHN0dWJSb3V0aW5lKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGlzdC0+YWRkQWNj
ZXNzKAorICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnJlcGxhY2UoCisgICAgICAgICAg
ICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLCBzdHViUm91dGluZSkpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2Nh
dGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgICAgIAorICAgICAg
ICBpZiAobGlzdC0+aXNGdWxsKCkpCisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5j
dGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIGJ1aWxkUHV0QnlJZExpc3Qo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQoreworICAgIGJvb2wgY2FjaGVkID0gdHJ5QnVp
bGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1Yklu
Zm8sIHB1dEtpbmQpOworICAgIGlmICghY2FjaGVkKQorICAgICAgICByZXBhdGNoQ2FsbChleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdl
bmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworfQorCitzdGF0aWMgYm9vbCB0
cnlSZXBhdGNoSW4oCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBib29sIHdhc0ZvdW5kLAorICAgIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmICghYmFzZS0+c3Ry
dWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGlmICh3YXNGb3VuZCkgeworICAgICAgICBpZiAoIXNsb3QuaXND
YWNoZWFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgp
OworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldElnbm9yZWQ7CisgICAgc2l6ZV90IGNv
dW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlLCB3
YXNGb3VuZCA/IHNsb3Quc2xvdEJhc2UoKSA6IEpTVmFsdWUoKSwgaWRlbnQsIG9mZnNldElnbm9y
ZWQpOworICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdDsKKyAgICBpbnQgbGlzdEluZGV4OworICAgIAorICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmhvdFBhdGhCZWdpbjsKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsOworICAgIAorICAgIGlmIChzdHViSW5m
by5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkgeworICAgICAgICBwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCk7CisgICAgICAg
IHN0dWJJbmZvLmluaXRJbkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAwKTsKKyAgICAg
ICAgc2xvd0Nhc2VMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KAorICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2Up
OworICAgICAgICBsaXN0SW5kZXggPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2luX2xpc3QpOworICAgICAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmluTGlzdC5zdHJ1Y3R1cmVMaXN0
OworICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZTsKKyAgICAg
ICAgc2xvd0Nhc2VMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVf
U0laRSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgU3RydWN0
dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworICAgIAorICAgIHsKKyAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5i
YXNlR1BSKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQ
UigpOworICAgICAgICAKKyAgICAgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0pOworICAgICAg
ICAKKyAgICAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaDsKKyAgICAgICAgaWYgKHNjcmF0
Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2Vt
Ymx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbmVlZFRvUmVzdG9y
ZVNjcmF0Y2ggPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZmFpbHVyZUNhc2VzOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQu
YnJhbmNoUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUpKSk7CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7CisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5o
ZWFkKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0
KSB7CisgICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0gYXNPYmplY3QoY3VyclN0cnVj
dHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKKyAgICAgICAgICAgIGFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUsIHByb3RvdHlwZS0+
c3RydWN0dXJlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwKKyAgICAg
ICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY3VyclN0
cnVjdHVyZSA9IGl0LT5nZXQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIpOworI2Vsc2UK
KyAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod2FzRm91
bmQpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBzdWNjZXNzLCBmYWlsOworICAgICAgICAKKyAgICAgICAgZW1pdFJlc3RvcmVTY3Jh
dGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBm
YWlsLCBmYWlsdXJlQ2FzZXMpOworICAgICAgICAKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisKKyAgICAgICAgbGlua1Jl
c3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2Vzcywg
ZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOworICAgICAg
ICAKKyAgICAgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKKyAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJERkcgSW4gKGZvdW5kID0gJXMp
IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgICAgIHdhc0ZvdW5k
ID8gInllcyIgOiAibm8iLCB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksCisg
ICAgICAgICAgICAgICAgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICB9
CisgICAgCisgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0
KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVy
ZSwgdHJ1ZSk7CisgICAgc3R1YkluZm8udS5pbkxpc3QubGlzdFNpemUrKzsKKyAgICAKKyAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhzdHViSW5mby5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KDApLCBDb2RlTG9jYXRp
b25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIAorICAgIHJldHVybiBs
aXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7Cit9CisKK3ZvaWQg
cmVwYXRjaEluKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwgYm9vbCB3YXNGb3VuZCwKKyAgICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAodHJ5UmVwYXRjaElu
KGV4ZWMsIGJhc2UsIGlkZW50LCB3YXNGb3VuZCwgc2xvdCwgc3R1YkluZm8pKQorICAgICAgICBy
ZXR1cm47CisgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uSW4pOworfQorCitzdGF0aWMgdm9pZCBsaW5rU2xvd0Zv
cihSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBWTSogdm0sIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgaWYgKGtpbmQg
PT0gQ29kZUZvckNhbGwpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dl
bmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQoa2lu
ZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlu
a0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7Cit9CisKK3ZvaWQgbGlua0ZvcihFeGVjU3RhdGUqIGV4
ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9j
aywgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0
dWIpOworICAgIAorICAgIC8vIElmIHlvdSdyZSBiZWluZyBjYWxsLWxpbmtlZCBmcm9tIGEgREZH
IGNhbGxlciB0aGVuIHlvdSBvYnZpb3VzbHkgZGlkbid0IGdldCBpbmxpbmVkLgorICAgIGlmIChj
YWxsZWVDb2RlQmxvY2spCisgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bV9zaG91bGRBbHdheXNC
ZUlubGluZWQgPSBmYWxzZTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9
IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9IGNhbGxlckNv
ZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2Fs
bGVyQ29kZUJsb2NrKTsKKyAgICAKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgp
KTsKKyAgICBjYWxsTGlua0luZm8uY2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgp
LCBjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBjYWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5sYXN0U2VlbkNhbGxlZS5zZXQoZXhl
Yy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgY2FsbGVlKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uaG90UGF0
aE90aGVyLCBjb2RlUHRyKTsKKyAgICAKKyAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAg
ICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoZXhlYy0+Y2FsbGVyRnJhbWUoKSwg
JmNhbGxMaW5rSW5mbyk7CisgICAgCisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKKyAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZv
ckNvbnN0cnVjdCk7CisgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5r
SW5mbywgQ29kZUZvckNvbnN0cnVjdCk7Cit9CisKK3ZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0YXRl
KiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQoreworICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVy
RnJhbWUoKS0+Y29kZUJsb2NrKCk7CisgICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgp
OworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2sp
OworICAgIAorICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8s
IGtpbmQpOworfQorCit2b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZVB0cikKK3sKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKTsKKyAg
ICAKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCkt
PmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAK
KyAgICBHUFJSZWcgY2FsbGVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihjYWxsTGlua0luZm8u
Y2FsbGVlR1BSKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgY2FsbGVyQ29k
ZUJsb2NrKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworICAg
IAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc2xvd1BhdGguYXBwZW5kKAorICAgICAgICBzdHVi
Sml0LmJyYW5jaFRlc3Q2NCgKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywgY2Fs
bGVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyNlbHNlCisgICAgLy8gV2Ugd291
bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyNlbmRp
ZgorICAgIAorICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgc3R1YkppdC5icmFuY2hQdHIo
CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOworICAg
IAorICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgc3R1YkppdC5icmFuY2hQdHIoCisgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAor
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUpKSk7Cisg
ICAgCisgICAgc3R1YkppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Y2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksCisgICAgICAgIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc3R1Ykpp
dC5zdG9yZTY0KAorICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSkpOwor
I2Vsc2UKKyAgICBzdHViSml0LnN0b3JlUHRyKAorICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNr
OjpTY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpKTsKKyAgICBzdHViSml0LnN0b3JlMzIoCisgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisjZW5kaWYKKyAg
ICAKKyAgICBBc3NlbWJseUhlbHBlcnM6OkNhbGwgY2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsK
KyAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgZG9uZSA9IHN0dWJKaXQuanVtcCgpOworICAgIAor
ICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOworICAgIHN0dWJKaXQubW92ZShjYWxsZWVHUFIs
IEdQUkluZm86Om5vbkFyZ0dQUjApOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3R1Ykpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJ
bmZvOjpub25BcmdHUFIxKTsKKyNlbmRpZgorICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgc3R1YkppdC5yZXN0b3JlUmV0
dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBBc3NlbWJs
eUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOworICAgIAorICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAKKyAg
ICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDApKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNs
b3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5l
cmF0b3IpLmNvZGUoKSkpOworICAgIAorICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAorICAg
ICAgICBGSU5BTElaRV9ERkdfQ09ERSgKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAg
ICAgICAgKCJERkcgY2xvc3VyZSBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRh
cmdldCAlcCAoJXMpIiwKKyAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9j
aykuZGF0YSgpLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
MCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICBjb2RlUHRyLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIHRvQ1N0cmluZyhwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spKS5kYXRh
KCkpKSwKKyAgICAgICAgKnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHJ1Y3R1cmUsIGV4ZWN1dGFibGUsIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKSk7CisgICAgCisg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CisgICAgCisg
ICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoCisgICAgICAgIFJlcGF0Y2hCdWZmZXI6
OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby5ob3RQYXRo
QmVnaW4pLAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOworICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8s
IENvZGVGb3JDYWxsKTsKKyAgICAKKyAgICBjYWxsTGlua0luZm8uc3R1YiA9IHN0dWJSb3V0aW5l
LnJlbGVhc2UoKTsKKyAgICAKKyAgICBBU1NFUlQoIWNhbGxlZUNvZGVCbG9jayB8fCBjYWxsZWVD
b2RlQmxvY2stPmlzSW5jb21pbmdDYWxsQWxyZWFkeUxpbmtlZCgmY2FsbExpbmtJbmZvKSk7Cit9
CisKK3ZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CisgICAg
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOworICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2Fu
SnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSkgeworICAgICAgICByZXBh
dGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBh
dGNoKAorICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0
cldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpLAorICAgICAgICAg
ICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOworICAgIH0KKyAgICByZXBhdGNoQnVmZmVy
LnJlcGF0Y2goc3RydWN0dXJlTGFiZWwsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBv
aW50ZXIpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7CisjZWxzZQorICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
Q29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0
b3JlKSwgMCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7CisjZW5kaWYKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpKTsKK30KKwordm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZl
ciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZfSklUT3BlcmF0aW9uX0VK
Q0kgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxWX0pJVE9wZXJhdGlvbl9FSkNJ
PihNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBWX0pJVE9wZXJhdGlvbl9FSkNJIG9wdGlt
aXplZEZ1bmN0aW9uOworICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0QnVpbGRMaXN0KQorICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KQorICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICBlbHNlIGlmICh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KQorICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRp
bWl6ZTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QpOworICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsK
KyAgICB9CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIHN0
cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0
T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwp
OworICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQ
dHJXaXRoUGF0Y2goKSkgeworICAgICAgICByZXBhdGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNl
bWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICAgICAgUmVwYXRjaEJ1
ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1
cmVMYWJlbCksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKKyAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8u
cGF0Y2guZGZnLmJhc2VHUFIpLAorICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRl
cikpOworICAgIH0KKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3RydWN0dXJlTGFiZWwsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JT
dG9yZSksIDApOworI2Vsc2UKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2go
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7CisjZW5kaWYKKyAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpKTsKK30KKwordm9pZCByZXNldEluKFJlcGF0Y2hCdWZmZXImIHJl
cGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhzdHViSW5mby5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KDApLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdSZXBhdGNoX2gKKyNkZWZpbmUgREZHUmVwYXRjaF9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBl
cnMuaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2
b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCBidWlsZEdl
dEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCBidWlsZEdldEJ5SURQcm90
b0xpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwordm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4
ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwordm9pZCByZXBhdGNoSW4oRXhlY1N0
YXRlKiwgSlNDZWxsKiwgY29uc3QgSWRlbnRpZmllciYsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFBy
b3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIGxpbmtGb3IoRXhlY1N0YXRl
KiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwordm9pZCBsaW5rU2xvd0Zv
cihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKK3Zv
aWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayos
IFN0cnVjdHVyZSosIEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsKK3Zv
aWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9p
ZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lk
IHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZWxzZSAvLyBFTkFCTEUoSklUKQorCisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFJlcGF0Y2hCdWZmZXI7CitzdHJ1
Y3QgU3RydWN0dXJlU3R1YkluZm87CisKK2lubGluZSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZv
aWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQoraW5saW5lIE5PX1JFVFVSTl9EVUVfVE9fQ1JB
U0ggdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikg
eyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CitpbmxpbmUgTk9fUkVUVVJOIHZvaWQg
cmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
TkFCTEUoSklUKQorI2VuZGlmIC8vIERGR1JlcGF0Y2hfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcl9oCisjZGVmaW5lIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcl9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2Vt
Ymxlci5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgbG93LWxldmVsIHJlZ2lzdGVyIGFsbG9jYXRvciBmb3Ig
dXNlIGluIHN0dWJzLgorCitjbGFzcyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgeworcHVibGlj
OgorICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcihjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycykKKyAgICAgICAgOiBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKKyAgICAg
ICAgLCBtX2RpZFJldXNlUmVnaXN0ZXJzKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGxvY2soVCByZWcpIHsgbV9sb2NrZWRSZWdp
c3RlcnMuc2V0KHJlZyk7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4K
KyAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIGFsbG9jYXRlU2NyYXRjaCgpCisg
ICAgeworICAgICAgICAvLyBGaXJzdCB0cnkgdG8gYWxsb2NhdGUgYSByZWdpc3RlciB0aGF0IGlz
IHRvdGFsbHkgZnJlZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbmtJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgICAgICB0eXBlbmFtZSBCYW5rSW5m
bzo6UmVnaXN0ZXJUeXBlIHJlZyA9IEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICAg
ICAgaWYgKCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVnKQorICAgICAgICAgICAgICAgICYmICFt
X3VzZWRSZWdpc3RlcnMuZ2V0KHJlZykKKyAgICAgICAgICAgICAgICAmJiAhbV9zY3JhdGNoUmVn
aXN0ZXJzLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgbV9zY3JhdGNoUmVnaXN0ZXJzLnNl
dChyZWcpOworICAgICAgICAgICAgICAgIHJldHVybiByZWc7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFNpbmNlIHRoYXQgZmFpbGVkLCB0cnkgdG8gYWxs
b2NhdGUgYSByZWdpc3RlciB0aGF0IGlzIG5vdCB5ZXQKKyAgICAgICAgLy8gbG9ja2VkIG9yIHVz
ZWQgZm9yIHNjcmF0Y2guCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICAgICAgdHlwZW5hbWUgQmFua0lu
Zm86OlJlZ2lzdGVyVHlwZSByZWcgPSBCYW5rSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAg
ICAgIGlmICghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlZykgJiYgIW1fc2NyYXRjaFJlZ2lzdGVy
cy5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgIG1fc2NyYXRjaFJlZ2lzdGVycy5zZXQocmVn
KTsKKyAgICAgICAgICAgICAgICBtX2RpZFJldXNlUmVnaXN0ZXJzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBXZSBmYWlsZWQuCisgICAgICAgIENSQVNIKCk7CisgICAgICAgIC8vIE1ha2Ug
c29tZSBzaWxseSBjb21waWxlcnMgaGFwcHkuCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx0
eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlPigtMSk7CisgICAgfQorICAgIAorICAgIEdQ
UlJlZyBhbGxvY2F0ZVNjcmF0Y2hHUFIoKSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8R1BSSW5m
bz4oKTsgfQorICAgIEZQUlJlZyBhbGxvY2F0ZVNjcmF0Y2hGUFIoKSB7IHJldHVybiBhbGxvY2F0
ZVNjcmF0Y2g8RlBSSW5mbz4oKTsgfQorICAgIAorICAgIGJvb2wgZGlkUmV1c2VSZWdpc3RlcnMo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGlkUmV1c2VSZWdpc3RlcnM7CisgICAg
fQorICAgIAorICAgIHZvaWQgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoTWFjcm9B
c3NlbWJsZXImIGppdCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgICAgICBp
ZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJz
LmdldEZQUkJ5SW5kZXgoaSkpIHsKKyAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0
ZXIoaSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3NjcmF0Y2hSZWdp
c3RlcnMuZ2V0R1BSQnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChp
KSkKKyAgICAgICAgICAgICAgICBqaXQucHVzaChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBv
cHBpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaWRSZXVz
ZVJlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAg
ICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVn
aXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCisgICAgICAgICAgICAgICAgaml0LnBvcChHUFJJbmZv
Ojp0b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBG
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fc2Ny
YXRjaFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJC
eUluZGV4KGkpKSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJs
ZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAg
ICAgICAgICAgICBqaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoOCksIE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkg
KiBzaXplb2YoSlNWYWx1ZSk7IH0KKyAgICAKKyAgICB2b2lkIHByZXNlcnZlVXNlZFJlZ2lzdGVy
c1RvU2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3Jh
dGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWcpCisgICAgeworICAg
ICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV91c2VkUmVn
aXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAg
ICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0PEVu
Y29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSk7
CisjZWxzZQorICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnRvUmVnaXN0ZXIo
aSksIHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZl
cigpKSArIChjb3VudCsrKSk7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcgJiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQ
UkJ5SW5kZXgoaSkgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQorICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAg
ICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBp
LS07KSB7CisgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkp
IHsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIo
KSkgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVE
b3VibGUoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgKiBzaXplb2YoSlNWYWx1
ZSkgPT0gZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkpOworICAgICAgICAKKyAgICAgICAgaml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZl
TGVuZ3RoUHRyKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4oY291bnQgKiBzaXplb2Yo
SlNWYWx1ZSkpKSwgc2NyYXRjaEdQUik7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVzdG9yZVVz
ZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3JhdGNo
QnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWcp
CisgICAgeworICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAg
ICAgICAgICAvLyBGaW5kIGEgc2NyYXRjaCByZWdpc3Rlci4KKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgfHwgbV9zY3JhdGNo
UmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIAor
ICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVm
ZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBqaXQuc3RvcmVQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hHUFIpOworCisgICAg
ICAgIC8vIFJlc3RvcmUgZG91YmxlIHJlZ2lzdGVycyBmaXJzdC4KKyAgICAgICAgdW5zaWduZWQg
Y291bnQgPSBtX3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRHUFJzKCk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAg
ICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKKyAgICAgICAgICAg
ICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxF
bmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShzY3JhdGNoR1BS
LCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgY291bnQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fdXNlZFJl
Z2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
ICAgICAgICBqaXQubG9hZDY0KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1
ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7
CisjZWxzZQorICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpT
VmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspLCBHUFJJbmZv
Ojp0b1JlZ2lzdGVyKGkpKTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CisgICAg
UmVnaXN0ZXJTZXQgbV9sb2NrZWRSZWdpc3RlcnM7CisgICAgUmVnaXN0ZXJTZXQgbV9zY3JhdGNo
UmVnaXN0ZXJzOworICAgIGJvb2wgbV9kaWRSZXVzZVJlZ2lzdGVyczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE1NjIwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIK
ICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiU3BlY2lhbGl6ZWRUaHVua0pJVC5o
IgpAQCAtMzgsNyArMzksNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEpTSW50ZXJm
YWNlSklUOjpDYWxsIGdlbmVyYXRlU2xvd0Nhc2VGb3IoVk0qIHZtLCBKU0ludGVyZmFjZUpJVCYg
aml0KQorc3RhdGljIEpTSW50ZXJmYWNlSklUOjpDYWxsIG9sZFN0eWxlR2VuZXJhdGVTbG93Q2Fz
ZUZvcihWTSogdm0sIEpTSW50ZXJmYWNlSklUJiBqaXQpCiB7CiAgICAgaml0LmVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBKU0ludGVyZmFjZUpJVDo6
cmVnVDIpOwogICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpT
Y29wZUNoYWluLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIsIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7
CkBAIC01OSw3ICs2MCw3IEBAIHN0YXRpYyBKU0ludGVyZmFjZUpJVDo6Q2FsbCBnZW5lcmF0ZVNs
b3cKICAgICByZXR1cm4gY2FsbE5vdEpTRnVuY3Rpb247CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua0ZvckdlbmVyYXRvcihWTSogdm0sIEZ1bmN0aW9uUHRyIGxhenlMaW5r
LCBGdW5jdGlvblB0ciBub3RKU0Z1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lKQorc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZUxpbmtGb3JHZW5lcmF0b3IoVk0qIHZtLCBGdW5j
dGlvblB0ciBsYXp5TGluaywgRnVuY3Rpb25QdHIgbm90SlNGdW5jdGlvbiwgY29uc3QgY2hhciog
bmFtZSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOwogICAgIApAQCAtODgsNyArODks
NyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JHZW5lCiAgICAgaml0Lmp1
bXAoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKICAgICAKICAgICBzbG93Q2FzZS5saW5rKCZqaXQp
OwotICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gZ2VuZXJhdGVT
bG93Q2FzZUZvcih2bSwgaml0KTsKKyAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90SlNG
dW5jdGlvbiA9IG9sZFN0eWxlR2VuZXJhdGVTbG93Q2FzZUZvcih2bSwgaml0KTsKICAgICAKICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxMYXp5TGluaywgbGF6eUxpbmspOwpAQCAtOTcsMjIgKzk4
LDIyIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvckdlbmUKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJsaW5rICVzIHRyYW1wb2xpbmUiLCBuYW1l
KSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbEdlbmVyYXRvcihWTSogdm0p
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVMaW5rQ2FsbEdlbmVyYXRvcihWTSogdm0p
CiB7Ci0gICAgcmV0dXJuIGxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9s
YXp5TGlua0NhbGwpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNh
bGwiKTsKKyAgICByZXR1cm4gb2xkU3R5bGVMaW5rRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0
cihjdGlfdm1fbGF6eUxpbmtDYWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5j
dGlvbiksICJjYWxsIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0
R2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZUxpbmtDb25z
dHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rRm9yR2VuZXJhdG9yKHZt
LCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDb25zdHJ1Y3QpLCBGdW5jdGlvblB0cihjdGlf
b3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KSwgImNvbnN0cnVjdCIpOworICAgIHJldHVybiBv
bGRTdHlsZUxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0Nv
bnN0cnVjdCksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QpLCAi
Y29uc3RydWN0Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxH
ZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9sZFN0eWxlTGlua0Nsb3N1
cmVDYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlua0ZvckdlbmVyYXRvcih2
bSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2xvc3VyZUNhbGwpLCBGdW5jdGlvblB0cihj
dGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNsb3N1cmUgY2FsbCIpOworICAgIHJldHVybiBv
bGRTdHlsZUxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0Ns
b3N1cmVDYWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjbG9z
dXJlIGNhbGwiKTsKIH0KIAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9y
R2VuZXJhdG9yKFZNKiB2bSwgRnVuY3Rpb25QdHIgY29tcGlsZSwgRnVuY3Rpb25QdHIgbm90SlNG
dW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQor
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZVZpcnR1YWxGb3JHZW5lcmF0b3Io
Vk0qIHZtLCBGdW5jdGlvblB0ciBjb21waWxlLCBGdW5jdGlvblB0ciBub3RKU0Z1bmN0aW9uLCBj
b25zdCBjaGFyKiBuYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgSlNJ
bnRlcmZhY2VKSVQgaml0KHZtKTsKICAgICAKQEAgLTE0OCw3ICsxNDksNyBAQCBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JHCiAgICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QwKTsKICAgICAKICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwotICAgIEpTSW50ZXJm
YWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gZ2VuZXJhdGVTbG93Q2FzZUZvcih2bSwg
aml0KTsKKyAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IG9sZFN0
eWxlR2VuZXJhdGVTbG93Q2FzZUZvcih2bSwgaml0KTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGNhbGxDb21waWxlLCBjb21waWxlKTsKQEAgLTE1NywxNCArMTU4LDI0NiBAQCBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JHCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsICgidmlydHVhbCAlcyB0cmFtcG9saW5lIiwgbmFtZSkpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IoVk0qIHZtKQogewot
ICAgIHJldHVybiB2aXJ0dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfb3BfY2Fs
bF9qaXRDb21waWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJj
YWxsIiwgQ29kZUZvckNhbGwpOworICAgIHJldHVybiBvbGRTdHlsZVZpcnR1YWxGb3JHZW5lcmF0
b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2ppdENvbXBpbGUpLCBGdW5jdGlvblB0cihj
dGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNhbGwiLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZVZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IoVk0q
IHZtKQogewotICAgIHJldHVybiB2aXJ0dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihj
dGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0
X05vdEpTQ29uc3RydWN0KSwgImNvbnN0cnVjdCIsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJl
dHVybiBvbGRTdHlsZVZpcnR1YWxGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV9vcF9j
b25zdHJ1Y3Rfaml0Q29tcGlsZSksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlND
b25zdHJ1Y3QpLCAiY29uc3RydWN0IiwgQ29kZUZvckNvbnN0cnVjdCk7Cit9CisKK2lubGluZSB2
b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50
ZXJHUFIpCit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIENDYWxsSGVscGVyczo6SnVtcCBp
c05vblplcm8gPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHBvaW50
ZXJHUFIpOworICAgIGppdC5icmVha3BvaW50KCk7CisgICAgaXNOb25aZXJvLmxpbmsoJmppdCk7
CisgICAgaml0LnB1c2gocG9pbnRlckdQUik7CisgICAgaml0LmxvYWQ4KHBvaW50ZXJHUFIsIHBv
aW50ZXJHUFIpOworICAgIGppdC5wb3AocG9pbnRlckdQUik7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShqaXQpOworICAgIFVOVVNFRF9QQVJBTShwb2ludGVyR1BSKTsKKyNlbmRpZgorfQorCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKFZNKiB2bSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICAKKyAgICAvLyBX
ZSB3aWxsIGp1bXAgdG8gaGVyZSBpZiB0aGUgSklUIGNvZGUgdGhpbmtzIGl0J3MgbWFraW5nIGEg
Y2FsbCwgYnV0IHRoZQorICAgIC8vIGxpbmtpbmcgaGVscGVyIChDKysgY29kZSkgZGVjaWRlZCB0
byB0aHJvdyBhbiBleGNlcHRpb24gaW5zdGVhZC4gV2Ugd2lsbAorICAgIC8vIGhhdmUgc2F2ZWQg
dGhlIGNhbGxSZXR1cm5JbmRleCBpbiB0aGUgZmlyc3QgYXJndW1lbnRzIG9mIEpJVFN0YWNrRnJh
bWUuCisgICAgLy8gTm90ZSB0aGF0IHRoZSByZXR1cm4gYWRkcmVzcyB3aWxsIGJlIG9uIHRoZSBz
dGFjayBhdCB0aGlzIHBvaW50LCBzbyB3ZQorICAgIC8vIG5lZWQgdG8gcmVtb3ZlIGl0IGFuZCBk
cm9wIGl0IG9uIHRoZSBmbG9vciwgc2luY2Ugd2UgZG9uJ3QgY2FyZSBhYm91dCBpdC4KKyAgICAv
LyBGaW5hbGx5IG5vdGUgdGhhdCB0aGUgY2FsbCBmcmFtZSByZWdpc3RlciBwb2ludHMgYXQgdGhl
IGNhbGxlZSBmcmFtZSwgc28KKyAgICAvLyB3ZSBuZWVkIHRvIHBvcCBpdC4KKyAgICBqaXQucHJl
c2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUik7CisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygK
KyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OkNhbGxlckZy
YW1lKSwKKyAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgaml0LnBlZWs2NChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIs
IEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZWxzZQorICAgIGppdC5wZWVrKEdQUkluZm86
Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKKyNl
bmRpZgorICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86
Om5vbkFyZ0dQUjApOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVt
aXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAg
aml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJUaHJvdyBleGNlcHRpb24gZnJvbSBjYWxsIHNsb3cg
cGF0aCB0aHVuayIpKTsKK30KKworc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCisgICAgQ0NhbGxI
ZWxwZXJzJiBqaXQsIFZNKiB2bSwgUF9KSVRPcGVyYXRpb25fRSBzbG93UGF0aEZ1bmN0aW9uKQor
eworICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uQXJn
R1BSMik7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BS
Mik7CisgICAgaml0LnN0b3JlUHRyKAorICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyLAorICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJl
Z2lzdGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQykpOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgaml0LnBva2U2NChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJ
VFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZWxzZQorICAgIGppdC5wb2tlKEdQUkluZm86Om5v
blByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKKyNlbmRp
ZgorICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNsb3dQYXRoRnVuY3Rp
b24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGpp
dCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BS
MCk7CisgICAgCisgICAgLy8gVGhpcyBzbG93IGNhbGwgd2lsbCByZXR1cm4gdGhlIGFkZHJlc3Mg
b2Ygb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gMSkgRXhjZXB0aW9uIHRocm93aW5nIHRo
dW5rLgorICAgIC8vIDIpIEhvc3QgY2FsbCByZXR1cm4gdmFsdWUgcmV0dXJuZXIgdGhpbmd5Lgor
ICAgIC8vIDMpIFRoZSBmdW5jdGlvbiB0byBjYWxsLgorICAgIGppdC5sb2FkUHRyKAorICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lz
dGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQyksCisgICAgICAgIEdQUkluZm86Om5vblByZXNlcnZl
ZE5vblJldHVybkdQUik7CisgICAgaml0LnN0b3JlUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoMCksCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAg
ICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBDKSk7Cisg
ICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSKTsKKyAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5m
bzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24o
aml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworfQorCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JU
aHVua0dlbmVyYXRvcigKKyAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
K3sKKyAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrIG9yIGluIHRoZSBs
aW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCisgICAgLy8gc2F2ZSB0aGUgcmV0dXJuIGFkZHJl
c3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UgbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsCisg
ICAgLy8gdG8gcGVyZm9ybSBsaW5raW5nIGFuZCBsYXp5IGNvbXBpbGF0aW9uIGlmIG5lY2Vzc2Fy
eS4gV2UgZXhwZWN0IHRoZSBjYWxsZWUKKyAgICAvLyB0byBiZSBpbiBub25BcmdHUFIwL25vbkFy
Z0dQUjEgKHBheWxvYWQvdGFnKSwgdGhlIGNhbGwgZnJhbWUgdG8gaGF2ZSBhbHJlYWR5CisgICAg
Ly8gYmVlbiBhZGp1c3RlZCwgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSIGhvbGRzIHRoZSBleGNl
cHRpb24gaGFuZGxlciBpbmRleCwKKyAgICAvLyBhbmQgYWxsIG90aGVyIHJlZ2lzdGVycyB0byBi
ZSBhdmFpbGFibGUgZm9yIHVzZS4gV2UgdXNlIEpJVFN0YWNrRnJhbWU6OmFyZ3MKKyAgICAvLyB0
byBzYXZlIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhY3Jvc3MgY2FsbHMuCisgICAgCisgICAgQ0Nh
bGxIZWxwZXJzIGppdCh2bSk7CisgICAgCisgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwga2luZCA9
PSBDb2RlRm9yQ2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0NvbnN0cnVj
dCk7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9U
SFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCisgICAgICAgIHBhdGNoQnVmZmVy
LAorICAgICAgICAoIkxpbmsgJXMgc2xvdyBwYXRoIHRodW5rIiwga2luZCA9PSBDb2RlRm9yQ2Fs
bCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBs
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICByZXR1cm4gbGlua0ZvclRodW5r
R2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBs
aW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiBsaW5rRm9y
VGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QpOworfQorCisvLyBGb3IgY2xvc3Vy
ZSBvcHRpbWl6YXRpb25zLCB3ZSBvbmx5IGluY2x1ZGUgY2FsbHMsIHNpbmNlIGlmIHlvdSdyZSB1
c2luZyBjbG9zdXJlcyBmb3IKKy8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gdGhlbiB5b3UncmUgZ29p
bmcgdG8gbG9zZSBiaWcgdGltZSBhbnl3YXkuCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Ns
b3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQo
dm0pOworICAgIAorICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDbG9zdXJl
Q2FsbCk7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JB
TF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiTGlu
ayBjbG9zdXJlIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOworfQorCitzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigKKyAgICBWTSogdm0sIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMg
b24gdGhlIHN0YWNrLCBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQorICAg
IC8vIGp1bXAgdG8gdGhlIGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhl
IGNhbGwgZnJhbWUgd2hpbGUgd2UKKyAgICAvLyBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwgdG8g
dGhlIGFwcHJvcHJpYXRlIEpJVCBvcGVyYXRpb24uCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZt
KTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOworCisgICAgLy8g
RklYTUU6IHdlIHNob3VsZCBoYXZlIGEgc3RvcnkgZm9yIGVsaW1pbmF0aW5nIHRoZXNlIGNoZWNr
cy4gSW4gbWFueSBjYXNlcywKKyAgICAvLyB0aGUgREZHIGtub3dzIHRoYXQgdGhlIHZhbHVlIGlz
IGRlZmluaXRlbHkgYSBjZWxsLCBvciBkZWZpbml0ZWx5IGEgZnVuY3Rpb24uCisgICAgCisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBzbG93Q2FzZS5hcHBlbmQoCisgICAgICAgIGppdC5icmFuY2hU
ZXN0NjQoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86Om5vbkFy
Z0dQUjAsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworI2Vsc2UKKyAgICBzbG93Q2FzZS5h
cHBlbmQoCisgICAgICAgIGppdC5icmFuY2gzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIEdQUkluZm86Om5vbkFyZ0dQUjEsCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworI2VuZGlmCisgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBzbG93Q2FzZS5hcHBl
bmQoCisgICAgICAgIGppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFy
Z0dQUjIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAorICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb246OmluZm8oKSkpKTsKKyAgICAKKyAgICAv
LyBOb3cgd2Uga25vdyB3ZSBoYXZlIGEgSlNGdW5jdGlvbi4KKyAgICAKKyAgICBqaXQubG9hZFB0
cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpT
RnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKKyAgICAgICAgR1BSSW5mbzo6bm9uQXJn
R1BSMik7CisgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFi
bGVCYXNlOjpvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3Ioa2luZCkpLAorICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAKKyAgICAvLyBOb3cgd2Uga25vdyB0
aGF0IHdlIGhhdmUgYSBDb2RlQmxvY2ssIGFuZCB3ZSdyZSBjb21taXR0ZWQgdG8gbWFraW5nIGEg
ZmFzdAorICAgIC8vIGNhbGwuCisgICAgCisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpvZmZzZXRP
ZlNjb3BlQ2hhaW4oKSksCisgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEpOworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgaml0LnN0b3JlNjQoCisgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEs
CisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKKyNlbHNlCisgICAgaml0LnN0
b3JlUHRyKAorICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIxLAorICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0
YWNrOjpTY29wZUNoYWluICsKKyAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICBqaXQuc3RvcmUzMigKKyAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0
ZXIpKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4gKworICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisjZW5kaWYKKyAgICAKKyAg
ICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5v
bkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0Zv
cihraW5kKSksCisgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICAvLyBNYWtlIGEg
dGFpbCBjYWxsLiBUaGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gSklUIGNvZGUuCisgICAgZW1pdFBv
aW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDApOworICAgIGppdC5qdW1wKEdQUklu
Zm86OnJlZ1QwKTsKKworICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisgICAgCisgICAgLy8gSGVy
ZSB3ZSBkb24ndCBrbm93IGFueXRoaW5nLCBzbyByZXZlcnQgdG8gdGhlIGZ1bGwgc2xvdyBwYXRo
LgorICAgIAorICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBv
cGVyYXRpb25WaXJ0dWFsQ2FsbCA6IG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QpOworICAgIAor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwor
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAg
KCJWaXJ0dWFsICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2Fs
bCIgOiAiY29uc3RydWN0IikpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENh
bGxUaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dl
bmVyYXRvcih2bSwgQ29kZUZvckNhbGwpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmly
dHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICByZXR1cm4gdmlydHVh
bEZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IoVk0qIHZtKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lv
biAxNTYyMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMjIgQEAKICNpZiBFTkFCTEUoSklUKQogbmFt
ZXNwYWNlIEpTQyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbEdlbmVyYXRvcihW
TSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoVk0qKTsKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiBvbGRTdHlsZUxpbmtDYWxsR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgb2xkU3R5bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgb2xkU3R5bGVMaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoVk0qKTsKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKFZNKik7CitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVWaXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7
CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhH
ZW5lcmF0b3IoVk0qKTsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5l
cmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5l
cmF0b3IoVk0qKTsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5r
R2VuZXJhdG9yKFZNKik7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5r
R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRo
dW5rR2VuZXJhdG9yKFZNKik7CisKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHJpbmdMZW5ndGhU
cmFtcG9saW5lR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ2Fs
bEdlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdl
bmVyYXRvcihWTSopOwo=
</data>
<flag name="review"
          id="234462"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212289</attachid>
            <date>2013-09-21 17:57:28 -0700</date>
            <delta_ts>2013-09-25 20:16:17 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>466995</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2MjM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MiBA
QAorMjAxMy0wOS0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IE1vdmUgREZHIGlubGluZSBjYWNoaW5nIGxvZ2ljIGludG8gaml0LworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzQ5CisKKyAgICAgICAgUnViYmVy
IHN0YW1wZWQgYnkgU2FtIFdlaW5pZy4KKyAgICAgICAgCisgICAgICAgIFJvbGwgYmFjayBpbiB3
aXRoIHBvc3NpYmxlIFdpbmRvd3MgZml4LgorICAgICAgICAKKyAgICAgICAgV2Ugd2FudCB0byBn
ZXQgcmlkIG9mIHRoZSBiYXNlbGluZSBKSVQncyBpbmxpbmUgY2FjaGluZyBtYWNoaW5lcnkgYW5k
IGhhdmUgaXQgdXNlIHRoZQorICAgICAgICBERkcncyBpbnN0ZWFkLiBCdXQgYmVmb3JlIHdlIGRv
IHRoYXQgd2UgbmVlZCB0byBtb3ZlIHRoZSBERkcncyBpbmxpbmUgY2FjaGluZyBtYWNoaW5lCisg
ICAgICAgIG91dCBmcm9tIGJlaGluZCBpdHMgRU5BQkxFKERGR19KSVQpIGd1YXJkcyBhbmQgbWFr
ZSBpdCBhdmFpbGFibGUgdG8gdGhlIHdob2xlIHN5c3RlbS4KKyAgICAgICAgVGhpcyBwYXRjaCBk
b2VzIHRoYXQ6CisgICAgICAgIAorICAgICAgICAtIGRmZy9ERkdSZXBhdGNoIGJlY29tZXMgaml0
L1JlcGF0Y2guCisgICAgICAgIAorICAgICAgICAtIFRoZSB0aHVua3MgdXNlZCBieSB0aGUgREZH
IElDIGdvIGludG8gaml0L1RodW5rR2VuZXJhdG9ycywgaW5zdGVhZCBvZiBkZmcvREZHVGh1bmtz
LgorICAgICAgICAKKyAgICAgICAgLSBUaGUgb3BlcmF0aW9ucyB1c2VkIGJ5IHRoZSBERkcgSUMg
Z28gaW50byBqaXQvSklUT3BlcmF0aW9ucywgaW5zdGVhZCBvZgorICAgICAgICAgIGRmZy9ERkdP
cGVyYXRpb25zLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgb2xkIEpJVCdzIHRodW5rIGdlbmVy
YXRvcnMgZm9yIGNhbGxzIGFyZSByZW5hbWVkIHRvIHJlZHVjZSBjb25mdXNpb24uIFByZXZpb3Vz
bHkKKyAgICAgICAgICBpdCB3YXMgZWFzeSB0byBrbm93IHdoaWNoIGdlbmVyYXRvcnMgYmVsb25n
IHRvIHdoaWNoIEpJVCBiZWNhdXNlIHRoZSBvbGQgSklUIHVzZWQKKyAgICAgICAgICBKU0M6OnZp
cnR1YWxDYWxsQmxhaCBhbmQgdGhlIERGRyB1c2VkIEpTQzo6REZHOjp2aXJ0dWFsQ2FsbEJsYWgs
IGJ1dCB0aGF0J3Mgbm90IHRoZQorICAgICAgICAgIGNhc2UgYW55bW9yZS4gTm90ZSB0aGF0IHRo
ZSBvbGQgSklUJ3MgdGh1bmsgZ2VuZXJhdG9ycyB3aWxsIGRpZSBpbiBhIGZ1dHVyZSBwYXRjaC4K
KyAgICAgICAgCisgICAgICAgIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcyBiZXlvbmQgdGhvc2UgbW92
ZXMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5s
aXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVzZXRT
dHViSW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6Cisg
ICAgICAgICogZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3I6OkNh
bGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpD
YWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxB
cnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAg
ICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxl
ci5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpvcGVyYXRpb25QdXRCeVZhbEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9u
cy5oOgorICAgICAgICAoSlNDOjpERkc6Om9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZv
clR5cGUpOgorICAgICAgICAoSlNDOjpERkc6Om9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoT25l
QXJndW1lbnRGb3JUeXBlKToKKyAgICAgICAgKiBkZmcvREZHUmVnaXN0ZXJTZXQuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZGZn
L0RGR1JlcGF0Y2guaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21w
YXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xl
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVk
UHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkNvbXBhcmVBbmRCb3hCb29s
ZWFuU2xvd1BhdGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5v
blBlZXBob2xlQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAg
ICAgICAoSlNDOjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3I6OkNv
bXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdUaHVua3MuY3BwOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuaDoKKyAgICAgICAgKiBmdGwv
RlRMSW50cmluc2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExW
TS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDYWxsT3JD
b25zdHJ1Y3QpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuaDoKKyAgICAgICAg
KiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjpsaW5rRm9yKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rU2xvd0NhbGwpOgorICAgICAgICAq
IGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQv
SklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQv
SklUT3BlcmF0aW9uV3JhcHBlcnMuaDogQWRkZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlJlZ2lzdGVy
U2V0OjpSZWdpc3RlclNldCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojphc1BPRCk6Cisg
ICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojpjb3B5SW5mbyk6CisgICAgICAgIChKU0M6OlJlZ2lz
dGVyU2V0OjpzZXQpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6c2V0R1BSQnlJbmRleCk6
CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpjbGVhcik6CisgICAgICAgIChKU0M6OlJlZ2lz
dGVyU2V0OjpnZXQpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6Z2V0R1BSQnlJbmRleCk6
CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpnZXRGcmVlR1BSKToKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJTZXQ6OnNldEZQUkJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6
Z2V0RlBSQnlJbmRleCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpzZXRCeUluZGV4KToK
KyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmdldEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpS
ZWdpc3RlclNldDo6bnVtYmVyT2ZTZXRHUFJzKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6
Om51bWJlck9mU2V0RlBScyk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpudW1iZXJPZlNl
dFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpzZXRCaXQpOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6Y2xlYXJCaXQpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNl
dDo6Z2V0Qml0KToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpyZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hCeUlkU2VsZkFjY2Vzcyk6
CisgICAgICAgIChKU0M6OmFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayk6CisgICAgICAgIChK
U0M6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6OmVtaXRSZXN0b3JlU2NyYXRjaCk6
CisgICAgICAgIChKU0M6OmxpbmtSZXN0b3JlU2NyYXRjaCk6CisgICAgICAgIChKU0M6OmdlbmVy
YXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQp
OgorICAgICAgICAoSlNDOjpyZXBhdGNoR2V0QnlJRCk6CisgICAgICAgIChKU0M6OmdldFBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdCk6CisgICAgICAgIChKU0M6OnBhdGNoSnVtcFRvR2V0QnlJZFN0
dWIpOgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKEpTQzo6
YnVpbGRHZXRCeUlETGlzdCk6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5
SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJ
ZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAgICAg
KEpTQzo6ZW1pdFB1dFRyYW5zaXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRC
eUlEKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlC
dWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKEpTQzo6YnVpbGRQdXRCeUlkTGlzdCk6CisgICAg
ICAgIChKU0M6OnRyeVJlcGF0Y2hJbik6CisgICAgICAgIChKU0M6OnJlcGF0Y2hJbik6CisgICAg
ICAgIChKU0M6OmxpbmtTbG93Rm9yKToKKyAgICAgICAgKEpTQzo6bGlua0Zvcik6CisgICAgICAg
IChKU0M6OmxpbmtDbG9zdXJlQ2FsbCk6CisgICAgICAgIChKU0M6OnJlc2V0R2V0QnlJRCk6Cisg
ICAgICAgIChKU0M6OnJlc2V0UHV0QnlJRCk6CisgICAgICAgIChKU0M6OnJlc2V0SW4pOgorICAg
ICAgICAqIGppdC9SZXBhdGNoLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpyZXNldEdldEJ5SUQp
OgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXNldEluKToK
KyAgICAgICAgKiBqaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cik6CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6bG9jayk6CisgICAg
ICAgIChKU0M6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6YWxsb2NhdGVTY3JhdGNoKToKKyAg
ICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjphbGxvY2F0ZVNjcmF0Y2hHUFIp
OgorICAgICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRj
aEZQUik6CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6ZGlkUmV1c2VS
ZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKToKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yOjpyZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKToKKyAgICAgICAg
KEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpkZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemUp
OgorICAgICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlVXNlZFJl
Z2lzdGVyc1RvU2NyYXRjaEJ1ZmZlcik6CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6cmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlcik6CisgICAgICAg
ICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6Om9sZFN0eWxlR2VuZXJh
dGVTbG93Q2FzZUZvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlTGlua0ZvckdlbmVyYXRvcik6
CisgICAgICAgIChKU0M6Om9sZFN0eWxlTGlua0NhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpvbGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpvbGRTdHls
ZUxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlVmlydHVh
bEZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpvbGRTdHlsZVZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjplbWl0UG9pbnRlclZhbGlkYXRpb24pOgorICAgICAgICAoSlNDOjp0aHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzbG93
UGF0aEZvcik6CisgICAgICAgIChKU0M6OmxpbmtGb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OmxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ29uc3Ry
dWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2xvc3VyZUNhbGxUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcik6CisgICAg
ICAgIChKU0M6OnZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjp2aXJ0
dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRv
cnMuaDoKKwogMjAxMy0wOS0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIGZpeCB0aGUgcmV2ZXJ0LgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTU2MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDYgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHUGxhbi5jcHAKICAgICBkZmcvREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAKLSAgICBkZmcvREZHUmVwYXRjaC5jcHAKICAgICBkZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKICAgICBkZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTIyNCw2ICsyMjMsNyBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIGppdC9KSVRFeGNlcHRpb25zLmNwcAogICAgIGppdC9KSVRP
cGNvZGVzLmNwcAogICAgIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisgICAgaml0L0pJVE9wZXJh
dGlvbnMuY3BwCiAgICAgaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAogICAgIGppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAogICAgIGppdC9KSVRTdHViUm91dGluZS5jcHAKQEAgLTIzMSw2
ICsyMzEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGppdC9KSVRUaHVua3Mu
Y3BwCiAgICAgaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAogICAg
IGppdC9KdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcAorICAgIGppdC9SZXBhdGNoLmNwcAog
ICAgIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwCiAKICAgICBwYXJzZXIvTGV4ZXIuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU2
MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtp
bmcgY29weSkKQEAgLTMzNywxMyArMzM3LDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsu
aCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlclNldC5oIFwKLQlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwIFwKLQlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlcGF0Y2guaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FuZVN0cmlu
Z0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTY29yZUJvYXJkLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ns
b3dQYXRoR2VuZXJhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAgXApAQCAtNjMwLDYgKzYyNiw5IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9uV3JhcHBlcnMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJDYWxsLmggXApAQCAtNjUy
LDYgKzY1MSw5IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5o
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvci5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJn
ZXQucHJpCShyZXZpc2lvbiAxNTYyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTgyLDcgKzE4Miw2IEBAIFNPVVJDRVMgKz0gXAogICAg
IGRmZy9ERkdQbGFuLmNwcCBcCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcCBcCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgXAotICAgIGRm
Zy9ERkdSZXBhdGNoLmNwcCBcCiAgICAgZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgXAog
ICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgXAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcCBcCkBAIC0yMjEsNiArMjIwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaml0L0pJ
VEV4Y2VwdGlvbnMuY3BwIFwKICAgICBqaXQvSklUT3Bjb2Rlcy5jcHAgXAogICAgIGppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwIFwKKyAgICBqaXQvSklUT3BlcmF0aW9ucy5jcHAgXAogICAgIGppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAgXAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cCBcCiAgICAgaml0L0pJVFN0dWJSb3V0aW5lLmNwcCBcCkBAIC0yMjgsNiArMjI4LDcgQEAgU09V
UkNFUyArPSBcCiAgICAgaml0L0pJVFRodW5rcy5jcHAgXAogICAgIGppdC9KSVRUb0RGR0RlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgXAogICAgIGppdC9KdW1wUmVwbGFjZW1lbnRXYXRj
aHBvaW50LmNwcCBcCisgICAgaml0L1JlcGF0Y2guY3BwIFwKICAgICBqaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcCBcCiAgICAgbGxpbnQvTExJbnRDTG9vcC5jcHAgXAogICAgIGxsaW50L0xMSW50RGF0
YS5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZp
c2lvbiAxNTYyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNzcsNiArMzc3
LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRFeGNlcHRpb25zLmNwcCIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUT3Bjb2Rlcy5jcHAiIC8+DQog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVE9wY29kZXMzMl82NC5jcHAiIC8+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVE9wZXJhdGlvbnMuY3BwIiAvPg0KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAiIC8+DQog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
IiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRTdHViUm91dGluZS5jcHAi
IC8+DQpAQCAtMzg0LDYgKzM4NSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRc
SklUVGh1bmtzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGppdFxKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcCIgLz4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcUmVwYXRjaC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caml0XFRodW5rR2VuZXJhdG9ycy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cbGxpbnRcTExJbnRDTG9vcC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cbGxpbnRcTExJbnREYXRhLmNwcCIgLz4NCkBAIC03NjcsNiArNzY5LDggQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVREaXNhc3NlbWJsZXIuaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklURXhjZXB0aW9ucy5oIiAvPg0KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRJbmxpbmVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caml0XEpJVE9wZXJhdGlvbldyYXBwZXJzLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XEpJVE9wZXJhdGlvbnMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcSklUU3R1YkNhbGwuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxqaXRcSklUU3R1YlJvdXRpbmUuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxqaXRcSklUU3R1YnMuaCIgLz4NCkBAIC03NzgsNiArNzgyLDkgQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGppdFxKSVRXcml0ZUJhcnJpZXIuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcSlNJbnRlcmZhY2VKSVQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxqaXRcSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGppdFxSZWdpc3RlclNldC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGppdFxSZXBhdGNoLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aml0XFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGppdFxTcGVjaWFsaXplZFRodW5rSklULmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caml0XFRodW5rR2VuZXJhdG9yLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caml0XFRodW5rR2VuZXJhdG9ycy5oIiAvPg0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxNTYyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTE4LDYgKzExOCwxMyBAQAogCQkwRjI0RTU0MjE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxw
ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0
RTUzRDE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NDMxN0VBOUY1OTAwQUJCMjE3
IC8qIEZQUkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjRFNTNFMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJbmZvLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NDQxN0VBOUY1OTAwQUJC
MjE3IC8qIEdQUkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMjRFNTNGMTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNEU1NEMxN0VFMjc0OTAw
QUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NDUxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlv
bnMuY3BwICovOyB9OworCQkwRjI0RTU0RDE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1
NDYxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCAqLzsgfTsKKwkJMEYyNEU1NEUx
N0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbldyYXBwZXJzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0NzE3RUUyNzQ5MDBBQkIyMTcg
LyogSklUT3BlcmF0aW9uV3JhcHBlcnMuaCAqLzsgfTsKKwkJMEYyNEU1NEYxN0VFMjc0OTAwQUJC
MjE3IC8qIFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjI0RTU0ODE3RUUyNzQ5MDBBQkIyMTcgLyogUmVnaXN0ZXJTZXQuaCAqLzsg
fTsKKwkJMEYyNEU1NTAxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NDkxN0VFMjc0OTAwQUJC
MjE3IC8qIFJlcGF0Y2guY3BwICovOyB9OworCQkwRjI0RTU1MTE3RUUyNzQ5MDBBQkIyMTcgLyog
UmVwYXRjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyNEU1NEExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLzsgfTsKKwkJMEYyNEU1NTIx
N0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NEIxN0VFMjc0OTAwQUJC
MjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oICovOyB9OwogCQkwRjI1NkMzNjE2MjdC
MEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjU2QzM0MTYy
N0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2
NkFDMTdCNkI1M0YwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTgxN0I2QjUzRDAwQTdB
RTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQjY2QUQxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2QTkxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0yNjQsOCArMjcxLDYgQEAKIAkJMEY3NjZEMzUxNUFFMjUzQjAwOEYzNjNFIC8q
IEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDMzMTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVwbGFj
ZW1lbnRXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3NjZEMzYxNUFFNEExQTAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQuY3BwICovOyB9OwogCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMzcxNUFFNEExQTAwOEYzNjNFIC8qIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkwRjc2NkQ0NDE1QjJBM0MwMDA4RjM2M0UgLyogREZHUmVnaXN0
ZXJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NzY2RDQyMTVCMkEzQkQwMDhGMzYzRSAvKiBERkdSZWdpc3RlclNldC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNzY2RDQ2MTVCMzcwMUYwMDhG
MzYzRSAvKiBERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDQ1MTVCMzcwMUQwMDhGMzYzRSAvKiBE
RkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxp
bmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovOyB9
OwogCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNEQjEgLyogREZHQ2FwYWJpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRjE0MTcyQzJG
MDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0Nv
bW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZD
MDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MjksOCArNzM0LDYgQEAKIAkJODZBRTY0
QUExMzVFNUUxQzAwOTYzMDEyIC8qIFNINEFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZBRTY0QTcxMzVFNUUxQzAwOTYzMDEyIC8qIFNI
NEFzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTg2QjU4MjY3MTREMjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkI1ODIyRTE0RDIzNzNC
MDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwICovOyB9OwogCQk4NkI1ODI2OTE0RDI3OTcwMDBB
OUMzMDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NjAzQ0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGlu
Zy5jcHAgKi87IH07Ci0JCTg2QkIwOUMwMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QkIwOUJF
MTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCAqLzsgfTsKLQkJODZCQjA5QzExMzhF
MzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2QkIwOUJGMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNo
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZD
MzZFRUEwRUUxMjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkMzNkVFOTBFRTEyODlEMDBCM0RGNTkg
LyogTWFjcm9Bc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk4NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJB
Uk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZD
NTY4REQxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCAqLzsgfTsKIAkJ
ODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDNTY4REUxMUEyMTNFRTAw
MDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzE4LDYgKzEzMjEsMTMgQEAKIAkJMEYyNEU1M0Qx
N0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDQ2FsbEhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyNEU1M0UxN0VBOUY1OTAwQUJCMjE3IC8qIEZQUkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRlBSSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHUFJJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVE9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjI0RTU0NjE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRPcGVyYXRpb25zLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjRFNTQ3MTdFRTI3NDkwMEFCQjIxNyAvKiBK
SVRPcGVyYXRpb25XcmFwcGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
SVRPcGVyYXRpb25XcmFwcGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI0
RTU0ODE3RUUyNzQ5MDBBQkIyMTcgLyogUmVnaXN0ZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyNEU1NDkxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVwYXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGF0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyNEU1NEIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBB
QTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQ
YXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhH
ZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTgxN0I2QjUz
RDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5j
b21pbmdSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE5
MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNDYzLDggKzE0NzMsNiBAQAogCQkwRjc2NkQzMzE1QUUyNTM1MDA4RjM2
M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNzY2RDM2MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjc2NkQzNzE1QUU0QTFBMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGNzY2RDQyMTVCMkEzQkQwMDhGMzYzRSAvKiBERkdSZWdpc3RlclNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZWdpc3RlclNldC5oOyBwYXRoID0gZGZnL0RGR1Jl
Z2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNzY2RDQ1MTVCMzcw
MUQwMDhGMzYzRSAvKiBERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg7IHBhdGgg
PSBkZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1w
bGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Ft
cGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MDIzRTkx
NjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCeVZhbEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MjMs
OCArMTkzMSw2IEBACiAJCTg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAv
KiBDb2RlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJv
ZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI1ODI2QTE0RDM1RDUxMDBB
OUMzMDYgLyogVGllcmVkTU1hcEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRpZXJlZE1NYXBBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkJC
MDlCRTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdSZXBhdGNoLmNwcDsgcGF0aCA9IGRmZy9ERkdSZXBhdGNo
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODZCQjA5QkYxMzhFMzgxQjAwNTY3
MDJGIC8qIERGR1JlcGF0Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
UmVwYXRjaC5oOyBwYXRoID0gZGZnL0RGR1JlcGF0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODZCRjY0MkExNDhEQjJCNTAwNERFMzZBIC8qIEludHJpbnNpYy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRyaW5zaWMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QzU2OEREMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNy
b0Fzc2VtYmxlckFSTS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
YWNyb0Fzc2VtYmxlckFSTS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzA3
LDE2ICsyNzEzLDE2IEBACiAJCQkJMEYyNEU1M0IxN0VBOUY1OTAwQUJCMjE3IC8qIEFzc2VtYmx5
SGVscGVycy5jcHAgKi8sCiAJCQkJMEYyNEU1M0MxN0VBOUY1OTAwQUJCMjE3IC8qIEFzc2VtYmx5
SGVscGVycy5oICovLAogCQkJCTBGMjRFNTNEMTdFQTlGNTkwMEFCQjIxNyAvKiBDQ2FsbEhlbHBl
cnMuaCAqLywKLQkJCQkwRjI0RTUzRTE3RUE5RjU5MDBBQkIyMTcgLyogRlBSSW5mby5oICovLAot
CQkJCTBGMjRFNTNGMTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi8sCiAJCQkJMEY3M0Q3
QUIxNjVBMTQyQTAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwICovLAogCQkJ
CTBGNzNEN0FDMTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmggKi8s
CiAJCQkJMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8s
CiAJCQkJQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
ICovLAogCQkJCUE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9y
LmggKi8sCiAJCQkJODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0
b3JGaXhlZFZNUG9vbC5jcHAgKi8sCisJCQkJMEYyNEU1M0UxN0VBOUY1OTAwQUJCMjE3IC8qIEZQ
UkluZm8uaCAqLywKIAkJCQkwRjc2NkQyRDE1QThEQ0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0
dWJSb3V0aW5lLmNwcCAqLywKIAkJCQkwRjc2NkQyRTE1QThEQ0REMDA4RjM2M0UgLyogR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmggKi8sCisJCQkJMEYyNEU1M0YxN0VBOUY1OTAwQUJCMjE3IC8qIEdQ
UkluZm8uaCAqLywKIAkJCQkwRjQ2ODBEMDE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1
cm5WYWx1ZS5jcHAgKi8sCiAJCQkJMEY0NjgwRDExNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxs
UmV0dXJuVmFsdWUuaCAqLywKIAkJCQkxNDI5RDkyRDBFRDIyRDcwMDBCODk2MTkgLyogSklULmNw
cCAqLywKQEAgLTI3MzUsNiArMjc0MSw5IEBACiAJCQkJODZDQzg1QTAwRUU3OUE0NzAwMjg4Njgy
IC8qIEpJVElubGluZXMuaCAqLywKIAkJCQlCQ0RENTFFOTBGQjhERjc0MDA0QThCREMgLyogSklU
T3Bjb2Rlcy5jcHAgKi8sCiAJCQkJQTcxMjM2RTQxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29k
ZXMzMl82NC5jcHAgKi8sCisJCQkJMEYyNEU1NDUxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJh
dGlvbnMuY3BwICovLAorCQkJCTBGMjRFNTQ2MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRp
b25zLmggKi8sCisJCQkJMEYyNEU1NDcxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbldy
YXBwZXJzLmggKi8sCiAJCQkJODZDQzg1QzMwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5
QWNjZXNzLmNwcCAqLywKIAkJCQlBN0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAgKi8sCiAJCQkJOTYwNjI2OTUwRkI4RUMwMjAwOTc5OEFCIC8qIEpJ
VFN0dWJDYWxsLmggKi8sCkBAIC0yNzU3LDYgKzI3NjYsMTAgQEAKIAkJCQlBNzZDNTE3NDExODI3
NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLywKIAkJCQkwRjc2NkQzMjE1QUUyNTM1
MDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgKi8sCiAJCQkJMEY3NjZE
MzMxNUFFMjUzNTAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCAqLywKKwkJ
CQkwRjI0RTU0ODE3RUUyNzQ5MDBBQkIyMTcgLyogUmVnaXN0ZXJTZXQuaCAqLywKKwkJCQkwRjI0
RTU0OTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgKi8sCisJCQkJMEYyNEU1NEExN0VF
Mjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLywKKwkJCQkwRjI0RTU0QjE3RUUyNzQ5MDBBQkIy
MTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8sCiAJCQkJQTcwOUYyRUYxN0EwQUMw
NDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oICovLAogCQkJCUE3Mzg2NTUxMTE4Njk3QjQwMDU0
MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggKi8sCiAJCQkJMEY1NzJENEQxNjg3OUZEQjAw
RTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggKi8sCkBAIC0zNjE0LDEzICszNjI3LDkgQEAKIAkJ
CQkwRkZGQzk1MTE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwICovLAogCQkJCTBGRkZDOTUyMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5oICovLAogCQkJCTg2RUM5REMxMTMyOERGODIwMDJCMkFENyAvKiBE
RkdSZWdpc3RlckJhbmsuaCAqLywKLQkJCQkwRjc2NkQ0MjE1QjJBM0JEMDA4RjM2M0UgLyogREZH
UmVnaXN0ZXJTZXQuaCAqLywKLQkJCQk4NkJCMDlCRTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVw
YXRjaC5jcHAgKi8sCi0JCQkJODZCQjA5QkYxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2gu
aCAqLywKIAkJCQlBNzdBNDIzQzE3QTBCQkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5o
ICovLAogCQkJCUE3NDEwMTdFMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5lU3RyaW5nR2V0QnlW
YWxTbG93UGF0aEdlbmVyYXRvci5oICovLAogCQkJCTg2RUNBM0Y5MTMyREYyNUEwMDJCMkFENyAv
KiBERkdTY29yZUJvYXJkLmggKi8sCi0JCQkJMEY3NjZENDUxNUIzNzAxRDAwOEYzNjNFIC8qIERG
R1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oICovLAogCQkJCTBGMUUzQTY1MTUzQTIxREYwMDBG
OTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi8sCiAJCQkJMEYxRTNBNTAxNTM3
QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi8sCiAJCQkJODZFQzlEQzIx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAqLywKQEAgLTM5NDYsNiAr
Mzk1NSw3IEBACiAJCQkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxp
c3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjE4MTZEMDJFQjIwMDU1QTVEQiAvKiBERkdB
bGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzc4MTBDMTc5OUVBMkUwMDgxNzUzMyAv
KiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNEU1NEUxN0VFMjc0OTAwQUJC
MjE3IC8qIEpJVE9wZXJhdGlvbldyYXBwZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E0
NjE1MzRDQkFGMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxNjAxNUUxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAv
KiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTM5NTYs
NiArMzk2Niw3IEBACiAJCQkJMEZGQjkyMUExNkQwMkVDNTAwNTVBNURCIC8qIERGR0Jhc2ljQmxv
Y2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzBCMDgzMzE3QTBCNzlCMDBEQUYxNEIg
LyogREZHQmluYXJ5U3dpdGNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGNDE3QTBCOEND
MDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MjRFNTUyMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGODM2NEI3MTY0QjBDMTEwMDUzMzI5QSAvKiBERkdCcmFuY2hEaXJl
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM1MTMyOERGODIwMDJCMkFENyAvKiBE
RkdCeXRlQ29kZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNTZDMzYxNjI3QjBBRDAw
N0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKQEAgLTQwMzAsMTQgKzQwNDEsMTEgQEAKIAkJCQkwRkJFMEY3NTE2QzFEQjBCMDA4
MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdS
ZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNzY2RDQ0MTVCMkEzQzAwMDhGMzYz
RSAvKiBERkdSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODZCQjA5QzExMzhFMzgx
QjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCBpbiBIZWFkZXJzICovLAogCQkJCTJBRDg5MzJCMTdF
Mzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3N0E0MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBERkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzQxMDE3RjE3OURBRjgwMDAyRUI4QkEgLyogREZHU2FuZVN0cmluZ0dldEJ5
VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUNBM0ZBMTMyREYy
NUEwMDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMx
NDE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQkw
Rjc2NkQ0NjE1QjM3MDFGMDA4RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50
UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUQxNkQwMkYzMDAw
NTVBNURCIC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVD
OUREMzEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCBpbiBIZWFkZXJzICov
LApAQCAtNDE3Miw2ICs0MTgwLDcgQEAKIAkJCQlBN0E0QUUxMDE3OTczQjREMDA1NjEyQjEgLyog
SklUU3R1YnNYODZDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUVGOTFGMTY4NzhGN0Qw
MDNFNUMyNSAvKiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzcxMkUzMTdDRDg3
OTMwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE2MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU0FjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAyMUExRDkwMDhF
N0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCkBAIC00NDY2LDYgKzQ0
NzUsOCBAQAogCQkJCTBGRjQyNzQyMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfZXh0ZXJuLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0NDE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2lu
cHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0ODE1OEVCRTkxMDA0Q0I5RkYgLyogdWRp
czg2X3N5bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNEU1NTExN0VFMjc0OTAwQUJCMjE3IC8q
IFJlcGF0Y2guaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjRFNTRGMTdFRTI3NDkwMEFCQjIxNyAv
KiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDkxNThFQkU5MTAwNENC
OUZGIC8qIHVkaXM4Nl90eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUFCMzkxNzk5RTRC
MjAwRDI4MzNEIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdB
OEFGNDExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKQEAg
LTQ5MzUsNiArNDk0Niw3IEBACiAJCQkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8qIERGR0Zp
eHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4
IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0Y5MTdBMEI4
Q0MwMDc3M0FEOCAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGgu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNEQ5MDUxN0EwQkFBODAwNkJBNTU0IC8qIERGR0lu
UGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTMzMTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDk2NSw3ICs0
OTc3LDYgQEAKIAkJCQlBNzhBOTc3QTE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkJFMEY3NDE2QzFEQjA5MDA4MkM1RTggLyogREZHUHJlZGljdGlv
bkluamVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVEMTRFRjkwQjMw
MEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk4NkJCMDlDMDEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkVDOUREMjEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVK
SVQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4ODBGMUYxNDMyOEJCOTAwQjA4RDQyIC8qIERG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4ODBGNEQxNDM1
M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC01MjMwLDYgKzUyNDEsNyBAQAogCQkJCTkzMzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJp
bmdSZWN1cnNpb25DaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDREUzQjQzMEU2Qzgz
MkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0U0RUU3MEYw
RUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjc2NkQzODE1QUU0QTFDMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NGMEQwQzBFRjBC
OEE1MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAko
cmV2aXNpb24gMTU2MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEyICs0MCwxMiBAQCB2b2lkIENhbGxM
aW5rSW5mbzo6dW5saW5rKFZNJiB2bSwgUmVwYXRjCiAgICAgcmVwYXRjaEJ1ZmZlci5yZXZlcnRK
dW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChSZXBhdGNoQnVmZmVyOjpzdGFydE9m
QnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rlcihob3RQYXRoQmVnaW4pLCBzdGF0aWNfY2FzdDxN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oY2FsbGVlR1BSKSwgMCk7CiAgICAgaWYgKGlzREZH
KSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNh
bGxSZXR1cm5Mb2NhdGlvbiwgKGNhbGxUeXBlID09IENvbnN0cnVjdCA/IHZtLmdldENUSVN0dWIo
REZHOjpsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpIDogdm0uZ2V0Q1RJU3R1YihERkc6Omxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpKS5jb2RlKCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhjYWxsUmV0dXJuTG9jYXRpb24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRD
VElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikgOiB2bS5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpKS5jb2RlKCkpOwogI2Vsc2UKICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgogICAgIH0gZWxzZQotICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IHZt
LmdldENUSVN0dWIobGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogdm0uZ2V0Q1RJU3R1
YihsaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoY2FsbFJldHVybkxvY2F0aW9uLCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElT
dHViKG9sZFN0eWxlTGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogdm0uZ2V0Q1RJU3R1
YihvbGRTdHlsZUxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgIGhhc1NlZW5TaG91bGRS
ZXBhdGNoID0gZmFsc2U7CiAgICAgY2FsbGVlLmNsZWFyKCk7CiAgICAgc3R1Yi5jbGVhcigpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDE1NjIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiREZHQ29t
bW9uLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgotI2lu
Y2x1ZGUgIkRGR1JlcGF0Y2guaCIKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUg
IkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTUxLDYgKzUwLDcgQEAK
ICNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCiAjaW5jbHVkZSAiUmVkdWNlV2hp
dGVzcGFjZS5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKKyNpbmNsdWRlICJSZXBhdGNo
LmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4K
ICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CkBAIC0yMzgyLDEyICsyMzgyLDEyIEBAIHZv
aWQgQ29kZUJsb2NrOjpyZXNldFN0dWJJbnRlcm5hbChSZXBhdGMKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6CiAgICAgICAgIGlmIChpc0dldEJ5SWRBY2Nlc3MoYWNj
ZXNzVHlwZSkpCi0gICAgICAgICAgICBERkc6OnJlc2V0R2V0QnlJRChyZXBhdGNoQnVmZmVyLCBz
dHViSW5mbyk7CisgICAgICAgICAgICByZXNldEdldEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1Yklu
Zm8pOwogICAgICAgICBlbHNlIGlmIChpc1B1dEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpCi0gICAg
ICAgICAgICBERkc6OnJlc2V0UHV0QnlJRChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7CisgICAg
ICAgICAgICByZXNldFB1dEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOwogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW5BY2Nlc3MoYWNjZXNzVHlwZSkp
OwotICAgICAgICAgICAgREZHOjpyZXNldEluKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKKyAg
ICAgICAgICAgIHJlc2V0SW4ocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMTU2MjM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDEyICszMSwxMiBAQAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNs
dWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiREZHUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRl
ICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0yMzEsNyArMjMxLDcgQEAgc3Ry
dWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgICAgIGludDhfdCB2YWx1ZVRhZ0dQUjsK
ICNlbmRpZgogICAgICAgICAgICAgaW50OF90IHZhbHVlR1BSOwotICAgICAgICAgICAgREZHOjpS
ZWdpc3RlclNldFBPRCB1c2VkUmVnaXN0ZXJzOworICAgICAgICAgICAgUmVnaXN0ZXJTZXRQT0Qg
dXNlZFJlZ2lzdGVyczsKICAgICAgICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9Eb25lOwogICAg
ICAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb1N0b3JhZ2VMb2FkOwogICAgICAgICAgICAgaW50
MzJfdCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMTU2MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIGNs
YXNzIENhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yIDogcHVibGljIEp1bXBpbmdT
bG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+IHsKIHB1YmxpYzoKICAg
ICBDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIFBfREZHT3BlcmF0aW9u
X0VTdFogZnVuY3Rpb24sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmcm9tLCBT
cGVjdWxhdGl2ZUpJVCogaml0LCBQX0pJVE9wZXJhdGlvbl9FU3RaIGZ1bmN0aW9uLAogICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSLCBHUFJSZWcgc3RvcmFnZUdQUiwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHNpemVfdCBzaXplKQogICAgICAgICA6IEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Q+KGZyb20sIGppdCkKICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1
bmN0aW9uKQpAQCAtNjgsNyArNjgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogICAgIAogcHJpdmF0
ZToKLSAgICBQX0RGR09wZXJhdGlvbl9FU3RaIG1fZnVuY3Rpb247CisgICAgUF9KSVRPcGVyYXRp
b25fRVN0WiBtX2Z1bmN0aW9uOwogICAgIEdQUlJlZyBtX3Jlc3VsdEdQUjsKICAgICBHUFJSZWcg
bV9zdG9yYWdlR1BSOwogICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CkBAIC03OSw3ICs3OSw3
IEBAIHByaXZhdGU6CiBjbGFzcyBDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xv
d1BhdGhHZW5lcmF0b3IgOiBwdWJsaWMgSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yPE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdD4gewogcHVibGljOgogICAgIENhbGxBcnJheUFsbG9jYXRvcldpdGhW
YXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIFBfREZHT3BlcmF0aW9uX0VTdFogZnVu
Y3Rpb24sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmcm9tLCBTcGVjdWxhdGl2
ZUpJVCogaml0LCBQX0pJVE9wZXJhdGlvbl9FU3RaIGZ1bmN0aW9uLAogICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSLCBTdHJ1Y3R1cmUqIGNvbnRpZ3VvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogYXJy
YXlTdG9yYWdlU3RydWN0dXJlLCBHUFJSZWcgc2l6ZUdQUikKICAgICAgICAgOiBKdW1waW5nU2xv
d1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Pihmcm9tLCBqaXQpCiAgICAg
ICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKQEAgLTExMiw3ICsxMTIsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBQX0RGR09wZXJhdGlvbl9FU3RaIG1fZnVuY3Rp
b247CisgICAgUF9KSVRPcGVyYXRpb25fRVN0WiBtX2Z1bmN0aW9uOwogICAgIEdQUlJlZyBtX3Jl
c3VsdEdQUjsKICAgICBTdHJ1Y3R1cmUqIG1fY29udGlndW91c1N0cnVjdHVyZTsKICAgICBTdHJ1
Y3R1cmUqIG1fYXJyYXlTdG9yYWdlU3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTU2MjM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwx
MiArMzYsMTIgQEAKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhp
dENvbXBpbGF0aW9uSW5mby5oIgogI2luY2x1ZGUgIkRGR1JlZ2lzdGVyQmFuay5oIgotI2luY2x1
ZGUgIkRGR1JlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiRlBSSW5mby5oIgogI2luY2x1ZGUgIkdQ
UkluZm8uaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgog
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXIuaAkocmV2aXNpb24gMTU2MjM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyAr
NzYsNyBAQCBwcml2YXRlOgogfTsKIAogZXh0ZXJuICJDIiB7Ci12b2lkIERGR19PUEVSQVRJT04g
Y29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFU
SU9OIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIH0KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTYyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBA
CiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgi
CiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgotI2luY2x1ZGUgIkRGR1JlcGF0Y2guaCIKICNpbmNs
dWRlICJERkdUaHVua3MuaCIKICNpbmNsdWRlICJERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5oIgogI2luY2x1ZGUgIkRGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCIKQEAgLTQ1LDI5NSArNDQsMjEgQEAKICNpbmNsdWRlICJJbnRlcnByZXRl
ci5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKKyNpbmNs
dWRlICJKSVRPcGVyYXRpb25XcmFwcGVycy5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgog
I2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIKICNpbmNsdWRlICJOYW1l
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJSZXBhdGNoLmgiCiAjaW5jbHVkZSAiU3RyaW5nQ29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5SW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9J
bmxpbmVBU00uaD4KIAogI2lmIEVOQUJMRShKSVQpCi0KLSNpZiBDUFUoTUlQUykKLSNpZiBXVEZf
TUlQU19QSUMKLSNkZWZpbmUgTE9BRF9GVU5DVElPTl9UT19UOShmdW5jdGlvbikgXAotICAgICAg
ICAiLnNldCBub3Jlb3JkZXIiICJcbiIgXAotICAgICAgICAiLmNwbG9hZCAkMjUiICJcbiIgXAot
ICAgICAgICAiLnNldCByZW9yZGVyIiAiXG4iIFwKLSAgICAgICAgImxhICR0OSwgIiBMT0NBTF9S
RUZFUkVOQ0UoZnVuY3Rpb24pICJcbiIKLSNlbHNlCi0jZGVmaW5lIExPQURfRlVOQ1RJT05fVE9f
VDkoZnVuY3Rpb24pICIiICJcbiIKLSNlbmRpZgotI2VuZGlmCi0KICNpZiBFTkFCTEUoREZHX0pJ
VCkKIAotI2lmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFg4Nl82NCkKLQotI2RlZmluZSBGVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJlZ2lzdGVyKSBcCi0gICAg
YXNtKCBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAg
IEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9u
KSAiOiIgIlxuIiBcCi0gICAgICAgICJtb3YgKCVyc3ApLCAlIiBTVFJJTkdJWkUocmVnaXN0ZXIp
ICJcbiIgXAotICAgICAgICAiam1wICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uIyNXaXRoUmV0
dXJuQWRkcmVzcykgIlxuIiBcCi0gICAgKTsKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTUyhmdW5jdGlvbiwgcnNpKQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTKGZ1bmN0aW9uLCByY3gpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTUyhmdW5jdGlvbiwgcjgpCi0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFg4NikK
LQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24s
IG9mZnNldCkgXAotICAgIGFzbSggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAi
IFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9u
KSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAg
ICJtb3YgKCVlc3ApLCAlZWF4XG4iIFwKLSAgICAgICAgIm1vdiAlZWF4LCAiIFNUUklOR0laRShv
ZmZzZXQpICIoJWVzcClcbiIgXAotICAgICAgICAiam1wICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0
aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgIlxuIiBcCi0gICAgKTsKLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgOCkKLSNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMTYpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDIwKQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAyNCkKLQotI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBD
UFUoQVJNX1RIVU1CMikKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAg
ICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24p
ICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICAiLnRodW1iIiAi
XG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4i
IFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgICJtb3Yg
YTIsIGxyIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJX
aXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtICggXAotICAg
ICIudGV4dCIgIlxuIiBcCi0gICAgIi5hbGlnbiAyIiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lN
Qk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJc
biIgXAotICAgICIudGh1bWIiICJcbiIgXAotICAgICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNf
UEFSQU0oZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAi
XG4iIFwKLSAgICAgICAgIm1vdiBhNCwgbHIiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JF
RkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0v
LyBFbmNvZGVkSlNWYWx1ZSBpbiBKU1ZBTFVFMzJfNjQgaXMgYSA2NC1iaXQgaW50ZWdlci4gV2hl
biBiZWluZyBjb21waWxlZCBpbiBBUk0gRUFCSSwgaXQgbXVzdCBiZSBhbGlnbmVkIGV2ZW4tbnVt
YmVyZWQgcmVnaXN0ZXIgKHIwLCByMiBvciBbc3BdKS4KLS8vIEFzIGEgcmVzdWx0LCByZXR1cm4g
YWRkcmVzcyB3aWxsIGJlIGF0IGEgNC1ieXRlIGZ1cnRoZXIgbG9jYXRpb24gaW4gdGhlIGZvbGxv
d2luZyBjYXNlcy4KLSNpZiBDT01QSUxFUl9TVVBQT1JUUyhFQUJJKSAmJiBDUFUoQVJNKQotI2Rl
ZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgInN0ciBsciwgW3NwLCAj
NF0iCi0jZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgInN0ciBs
ciwgW3NwLCAjOF0iCi0jZWxzZQotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQURE
UkVTU19FSkkgInN0ciBsciwgW3NwLCAjMF0iCi0jZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JF
VFVSTl9BRERSRVNTX0VKQ0kgInN0ciBsciwgW3NwLCAjNF0iCi0jZW5kaWYKLQotI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCi0gICAg
YXNtICggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5hbGlnbiAyIiAiXG4iIFwKLSAgICAi
Lmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0wo
ZnVuY3Rpb24pICJcbiIgXAotICAgICIudGh1bWIiICJcbiIgXAotICAgICIudGh1bWJfZnVuYyAi
IFRIVU1CX0ZVTkNfUEFSQU0oZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJF
U1NfRUpJICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldp
dGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtICggXAotICAg
ICIudGV4dCIgIlxuIiBcCi0gICAgIi5hbGlnbiAyIiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lN
Qk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJc
biIgXAotICAgICIudGh1bWIiICJcbiIgXAotICAgICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNf
UEFSQU0oZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAi
XG4iIFwKLSAgICAgICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAiXG4i
IFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRk
cmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoQVJNX1RS
QURJVElPTkFMKQotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FKGZ1bmN0aW9uKSBcCi0gICAgYXNtICggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1
bmN0aW9uKSAiXG4iIFwKLSAgICBJTkxJTkVfQVJNX0ZVTkNUSU9OKGZ1bmN0aW9uKSBcCi0gICAg
U1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAibW92IGEyLCBsciIg
IlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVy
bkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQi
ICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAg
ICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgSU5MSU5FX0FSTV9GVU5DVElPTihm
dW5jdGlvbikgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAg
ICAgIm1vdiBhNCwgbHIiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5j
dGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0vLyBFbmNvZGVkSlNW
YWx1ZSBpbiBKU1ZBTFVFMzJfNjQgaXMgYSA2NC1iaXQgaW50ZWdlci4gV2hlbiBiZWluZyBjb21w
aWxlZCBpbiBBUk0gRUFCSSwgaXQgbXVzdCBiZSBhbGlnbmVkIGV2ZW4tbnVtYmVyZWQgcmVnaXN0
ZXIgKHIwLCByMiBvciBbc3BdKS4KLS8vIEFzIGEgcmVzdWx0LCByZXR1cm4gYWRkcmVzcyB3aWxs
IGJlIGF0IGEgNC1ieXRlIGZ1cnRoZXIgbG9jYXRpb24gaW4gdGhlIGZvbGxvd2luZyBjYXNlcy4K
LSNpZiBDT01QSUxFUl9TVVBQT1JUUyhFQUJJKSAmJiBDUFUoQVJNKQotI2RlZmluZSBJTlNUUlVD
VElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgInN0ciBsciwgW3NwLCAjNF0iCi0jZGVmaW5l
IElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgInN0ciBsciwgW3NwLCAjOF0i
Ci0jZWxzZQotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgInN0
ciBsciwgW3NwLCAjMF0iCi0jZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNT
X0VKQ0kgInN0ciBsciwgW3NwLCAjNF0iCi0jZW5kaWYKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCi0gICAgYXNtICggXAotICAg
ICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJc
biIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBJTkxJTkVfQVJNX0ZV
TkNUSU9OKGZ1bmN0aW9uKSBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIg
XAotICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgIlxuIiBcCi0g
ICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3Mi
ICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKLSAgICBhc20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwK
LSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9T
WU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIElOTElORV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24p
IFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgIElOU1RS
VUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgIlxuIiBcCi0gICAgICAgICJiICIgTE9D
QUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7
Ci0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKE1JUFMpCi0KLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKLSAgICBhc20oIFwKLSAg
ICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
XG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklO
RyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24j
I1dpdGhSZXR1cm5BZGRyZXNzKSBcCi0gICAgICAgICJtb3ZlICRhMSwgJHJhIiAiXG4iIFwKLSAg
ICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIg
IlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRUNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAg
ICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1C
T0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4i
IFwKLSAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykg
XAotICAgICAgICAibW92ZSAkYTMsICRyYSIgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVG
RVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNk
ZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikg
XAotICAgIGFzbSggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwK
LSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgTE9BRF9GVU5DVElP
Tl9UT19UOShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKLSAgICAgICAgInN3ICRyYSwg
MjAoJHNwKSIgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAi
V2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKLSAgICBhc20oIFwKLSAg
ICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
XG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklO
RyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24j
I1dpdGhSZXR1cm5BZGRyZXNzKSBcCi0gICAgICAgICJzdyAkcmEsIDI0KCRzcCkiICJcbiIgXAot
ICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNz
IiAiXG4iIFwKLSAgICApOwotCi0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShTSDQpCi0KLSNk
ZWZpbmUgU0g0X1NDUkFUQ0hfUkVHSVNURVIgInIxMSIKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAotICAgIGFzbSggXAotICAgICIu
dGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIg
XAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1
bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgICJzdHMgcHIsIHI1IiAiXG4iIFwKLSAgICAgICAg
ImJyYSAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4i
IFwKLSAgICAgICAgIm5vcCIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBcCi0gICAg
Ii50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxu
IiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkco
ZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgInN0cyBwciwgcjciICJcbiIgXAotICAgICAg
ICAibW92LmwgMmYsICIgU0g0X1NDUkFUQ0hfUkVHSVNURVIgIlxuIiBcCi0gICAgICAgICJicmFm
ICIgU0g0X1NDUkFUQ0hfUkVHSVNURVIgIlxuIiBcCi0gICAgICAgICJub3AiICJcbiIgXAotICAg
ICAgICAiMTogLmJhbGlnbiA0IiAiXG4iIFwKLSAgICAgICAgIjI6IC5sb25nICIgTE9DQUxfUkVG
RVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MtMWIiICJcbiIgXAotICAgICk7Ci0K
LSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCBv
ZmZzZXQsIHNjcmF0Y2gpIFwKLSAgICBhc20oIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIu
Z2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChm
dW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAot
ICAgICAgICAic3RzIHByLCAiIHNjcmF0Y2ggIlxuIiBcCi0gICAgICAgICJtb3YubCAiIHNjcmF0
Y2ggIiwgQCgiIFNUUklOR0laRShvZmZzZXQpICIsIHIxNSkiICJcbiIgXAotICAgICAgICAibW92
LmwgMmYsICIgc2NyYXRjaCAiXG4iIFwKLSAgICAgICAgImJyYWYgIiBzY3JhdGNoICJcbiIgXAot
ICAgICAgICAibm9wIiAiXG4iIFwKLSAgICAgICAgIjE6IC5iYWxpZ24gNCIgIlxuIiBcCi0gICAg
ICAgICIyOiAubG9uZyAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRy
ZXNzLTFiIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1MoZnVuY3Rpb24sIDAsIFNINF9TQ1JBVENIX1JFR0lTVEVSKQotI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCA0LCBTSDRfU0NSQVRDSF9SRUdJ
U1RFUikKLQotI2VuZGlmCi0KLSNkZWZpbmUgUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRShmdW5jdGlvbikgXAotdm9pZCogREZHX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0
aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9G
Uk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FKGZ1bmN0aW9uKQotCi0jZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBm
dW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1w
bCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBc
Ci1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKQotCi0j
ZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlv
bikgXAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFk
ZHJlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRy
ZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAotRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikKLQotI2RlZmluZSBWX0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCi12b2lkIERG
R19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBKU0NlbGwqLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJF
TkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKQotCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKIHRlbXBsYXRlPGJvb2wgc3RyaWN0PgpAQCAtMzU3LDcgKzgyLDcgQEAgc3RhdGljIGlu
bGluZSB2b2lkIHB1dEJ5VmFsKEV4ZWNTdGF0ZSogZQogfQogCiB0ZW1wbGF0ZTxib29sIHN0cmlj
dD4KLUFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2Us
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQorQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC00NjYsNyArMTkxLDcgQEAgY2hhciogbmV3VHlw
ZWRBcnJheVdpdGhPbmVBcmd1bWVudCgKIAogZXh0ZXJuICJDIiB7CiAKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25U
b1RoaXMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCiB7CiAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CkBAIC00NzQsNyArMTk5LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25UbwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcCkudG9UaGlzKGV4ZWMsIE5vdFN0cmljdE1vZGUpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXNTdHJpY3QoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblRvVGhpc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTQ4Miw3ICsyMDcsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkpOwog
fQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgaW50MzJfdCBpbmxpbmVDYXBhY2l0eSkKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVUaGlzKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGNvbnN0cnVjdG9yLCBpbnQzMl90IGlubGluZUNhcGFjaXR5KQogewogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwpAQCAtNDk1LDcgKzIyMCw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25DcmVhdGVUaGkKICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywganNDYXN0
PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciktPmFsbG9jYXRpb25Qcm9maWxlKGV4ZWMsIGlubGlu
ZUNhcGFjaXR5KS0+c3RydWN0dXJlKCkpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC01MDMsNyArMjI4LDcg
QEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdAogICAgIHJldHVybiBj
b25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBzdHJ1Y3R1cmUpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGQoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwpAQCAtNTE0LDcgKzIzOSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uVmEKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQWRkKGV4ZWMs
IG9wMSwgb3AyKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
VmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CkBAIC01NDcsNyArMjcyLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBn
ZXRCeVZhbChFeAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShiYXNlKS5nZXQo
ZXhlYywgaW5kZXgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKQEAgLTU3OCw3ICszMDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkdlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlk
ZW50KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlW
YWxDZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkUHJvcGVydHkpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5
VmFsQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFByb3BlcnR5KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNjE4LDE0MCArMzQzLDE3IEBAIEFM
V0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlWYWxDZWwKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludChFeGVjU3RhdGUq
IGV4ZWMsIEpTQXJyYXkqIGJhc2UsIGludDMyX3QgaW5kZXgpCitFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0Fy
cmF5KiBiYXNlLCBpbnQzMl90IGluZGV4KQogewogICAgIHJldHVybiBnZXRCeVZhbENlbGxJbnQo
ZXhlYywgYmFzZSwgaW5kZXgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGJhc2Us
IGludDMyX3QgaW5kZXgpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEJ5VmFsU3RyaW5nSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGJhc2UsIGludDMyX3Qg
aW5kZXgpCiB7CiAgICAgcmV0dXJuIGdldEJ5VmFsQ2VsbEludChleGVjLCBiYXNlLCBpbmRleCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZChFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLSAgICAKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShiYXNlKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIElkZW50aWZp
ZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUu
Z2V0KGV4ZWMsIGlkZW50LCBzbG90KSk7Ci19Ci0KLUpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VKSShvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKLUVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRy
ZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgU3RyaW5nSW1wbCogdWlk
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAg
ICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAg
ICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGJhc2UpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90KTsKLQotICAgIGlmIChhY2Nl
c3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQot
ICAgICAgICBidWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0
dWJJbmZvKTsKLQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotSl9G
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSk7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
YmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi17
Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7Ci0KLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5m
byhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VW
YWx1ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBz
bG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihzdHViSW5mby5hY2Nlc3NUeXBlKSkgewotICAgICAgICBpZiAoc3R1YkluZm8uc2VlbikKLSAg
ICAgICAgICAgIHJlcGF0Y2hHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0
dWJJbmZvKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7
Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotfQotCi1KX0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0kob3BlcmF0aW9uSW5PcHRpbWl6
ZSk7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkluT3B0aW1pemVXaXRo
UmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCog
a2V5LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi17Ci0gICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0g
ICAgCi0gICAgaWYgKCFiYXNlLT5pc09iamVjdCgpKSB7Ci0gICAgICAgIHZtLT50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVJbnZhbGlkUGFyYW1ldGVyRXJyb3IoZXhlYywgImluIiwgYmFzZSkp
OwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIH0K
LSAgICAKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2so
KS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
ID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBJ
ZGVudGlmaWVyIGlkZW50KHZtLCBrZXkpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2UpOwot
ICAgIGJvb2wgcmVzdWx0ID0gYXNPYmplY3QoYmFzZSktPmdldFByb3BlcnR5U2xvdChleGVjLCBp
ZGVudCwgc2xvdCk7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoYWNjZXNzVHlwZSA9PSBzdHVi
SW5mby5hY2Nlc3NUeXBlKTsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uc2VlbikKLSAgICAgICAg
cmVwYXRjaEluKGV4ZWMsIGJhc2UsIGlkZW50LCByZXN1bHQsIHNsb3QsIHN0dWJJbmZvKTsKLSAg
ICBlbHNlCi0gICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwotICAgIAotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHJlc3VsdCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkluKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBT
dHJpbmdJbXBsKiBrZXkpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICBpZiAoIWJhc2UtPmlzT2Jq
ZWN0KCkpIHsKLSAgICAgICAgdm0tPnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUludmFsaWRQ
YXJhbWV0ZXJFcnJvcihleGVjLCAiaW4iLCBiYXNlKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgfQotCi0gICAgSWRlbnRpZmllciBpZGVudCh2
bSwga2V5KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihhc09iamVjdChi
YXNlKS0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uR2VuZXJpY0luKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBi
YXNlLCBFbmNvZGVkSlNWYWx1ZSBrZXkpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihDb21tb25TbG93UGF0aHM6Om9wSW4oZXhlYywgSlNW
YWx1ZTo6ZGVjb2RlKGtleSksIGJhc2UpKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQ2FsbEN1c3RvbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
YmFzZSwgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZnVuY3Rpb24sIFN0cmluZ0ltcGwqIHVp
ZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQp
OwotICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZnVuY3Rpb24oZXhlYywgYXNPYmpl
Y3QoYmFzZSksIGlkZW50KSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uQ2FsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBn
ZXR0ZXJTZXR0ZXIpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNhbGxHZXR0ZXIoZXhlYywgYmFzZSwgZ2V0dGVyU2V0dGVyKSk7Ci19Ci0KLXZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTc1OSw3ICszNjEsNyBAQCB2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpCiAgICAgb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5h
bDx0cnVlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUp
OwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC03NjcsNyAr
MzY5LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uUwogICAgIG9w
ZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWw8ZmFsc2U+KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVk
UHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogY2VsbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC03NzUsNyArMzc3
LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbAogICAgIG9wZXJh
dGlvblB1dEJ5VmFsSW50ZXJuYWw8dHJ1ZT4oZXhlYywgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBl
bmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNl
bGwsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmlj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFBy
b3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBA
IC03ODMsNyArMzg1LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2Vs
bAogICAgIG9wZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWw8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmVu
Y29kZShjZWxsKSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCi12b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5
b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGlu
dDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKQEAgLTc5OCw3ICs0MDAsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxCZXlvCiAgICAgICAgIGFycmF5LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4
KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCi12b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5
b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXks
IGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKQEAgLTgxMyw3ICs0MTUsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxCZXlvCiAgICAgICAgIGFycmF5LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGlu
ZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCi12b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmlj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgZG91Ymxl
IHZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25k
QXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMy
X3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTgzMCw3ICs0MzIs
NyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWCiAgICAgICAgIGFy
cmF5LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwganNWYWx1ZSwgc2xvdCk7
CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFy
cmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQz
Ml90IGluZGV4LCBkb3VibGUgdmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwpAQCAtODQ3LDcgKzQ0OSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRE
b3VibGVCeVYKICAgICAgICAgYXJyYXksIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5k
ZXgpLCBqc1ZhbHVlLCBzbG90KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQXJyYXkqIGFycmF5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQXJyYXkqIGFycmF5KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtODU2LDcgKzQ1OCw3IEBA
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXIKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGFycmF5LT5sZW5ndGgoKSkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaERvdWJsZShFeGVjU3RhdGUqIGV4
ZWMsIGRvdWJsZSB2YWx1ZSwgSlNBcnJheSogYXJyYXkpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaERvdWJsZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2
YWx1ZSwgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04NjUsNyArNDY3LDcg
QEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiBleGVjLCBK
U0FycmF5KiBhcnJheSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJy
YXlQb3AoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKIHsKICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
QEAgLTg3Myw3ICs0NzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkFyCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheS0+cG9wKGV4ZWMpKTsKIH0KICAg
ICAgICAgCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wQW5k
UmVjb3Zlckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQorRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgoRXhl
Y1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTg4Myw3
ICs0ODUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheS0+cG9wKGV4ZWMpKTsKIH0KICAgICAgICAgCi1F
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogYXJndW1lbnQpCitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGJhc2UsIEpTQ2VsbCogYXJndW1lbnQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC04OTYsNyArNDk4
LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZQogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYXNSZWdFeHBPYmplY3QoYmFzZSktPmV4ZWMoZXhlYywgaW5wdXQp
KTsKIH0KICAgICAgICAgCi1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50KQorc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTkxMSwyMzcg
KzUxMyw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QKICAgICBy
ZXR1cm4gYXNSZWdFeHBPYmplY3QoYmFzZSktPnRlc3QoZXhlYywgaW5wdXQpOwogfQogICAgICAg
ICAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0lt
cGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZt
LCB1aWQpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygp
LT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICBiYXNlLT5tZXRob2RUYWJsZSgpLT5wdXQoYmFzZSwg
ZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKLX0KLQot
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1w
bCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQodm0s
IHVpZCk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygp
LT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICBiYXNlLT5tZXRob2RUYWJsZSgpLT5wdXQoYmFzZSwg
ZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKLX0KLQot
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5n
SW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQo
dm0sIHVpZCk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2Nr
KCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAg
ICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19Ci0KLXZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQo
KSk7Ci0gICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5w
dXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
LCBzbG90KTsKLX0KLQotVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpD
SShvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0lt
cGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFk
ZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJhc2UpOwotICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29u
dGV4dCgpKTsKLSAgICAKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xv
dCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoc3R1
YkluZm8uc2VlbikKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVu
dCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBzdHViSW5m
by5zZWVuID0gdHJ1ZTsKLX0KLQotVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUpDSShvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpOwotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJh
c2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJ
bmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19j
YXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVl
KGJhc2UpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlLCBleGVjLT5jb2RlQmxvY2so
KS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgCi0gICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVu
dCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJh
c2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOwotICAgIGVsc2UKLSAg
ICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXpl
KTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1p
emVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlk
ZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsK
LQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENv
bnRleHQoKSk7Ci0gICAgCi0gICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2Jq
ZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAg
ICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChzdHViSW5mby5z
ZWVuKQotICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1
YkluZm8sIERpcmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsK
LX0KLQotVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2Us
IFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZv
KHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgCi0gICAg
QVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlw
ZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIGlmIChzdHViSW5mby5zZWVuKQotICAgICAgICByZXBhdGNo
UHV0QnlJRChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7Ci0gICAg
ZWxzZQotICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKLX0KLQotVl9GVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRM
aXN0KTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVu
dCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2Rl
QmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0K
LSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAg
SlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwg
ZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIGJhc2VWYWx1
ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlw
ZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBp
ZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxk
TGlzdCk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxk
TGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIg
aWRlbnQodm0sIHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+
Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUp
OwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwot
ICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJhc2UpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZh
bHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgCi0gICAgYmFz
ZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nl
c3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFs
dWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKLX0KLQotVl9GVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0QnVpbGRMaXN0KTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAg
SWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAg
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8u
YWNjZXNzVHlwZSk7Ci0gICAgCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVC
bG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICAKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmpl
Y3QoKSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwg
dmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIERp
cmVjdCk7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0ko
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdCk7Ci12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5B
ZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0Nl
bGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7
Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdl
dFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0g
ICAgCi0gICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5w
dXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAo
YWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBl
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFz
ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwotfQotCi1zaXplX3QgREZHX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CkBAIC0xMTQ5LDcgKzUyMSw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmVMZXMKICAgICByZXR1cm4ganNMZXNzPHRydWU+KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsKIH0KIAotc2l6ZV90IERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitzaXplX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzc0VxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKICAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKQEAgLTExNTcsNyArNTI5LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZUxlcwogICAgIHJldHVybiBqc0xlc3NFcTx0cnVlPihleGVjLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiB9CiAKLXNp
emVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikK
K3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MikKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTExNjUsNyArNTM3LDcgQEAgc2l6ZV90IERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZQogICAgIHJldHVybiBqc0xlc3M8ZmFsc2U+KGV4ZWMs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEp
KTsKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ckVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMikKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTExNzMsNyArNTQ1LDcgQEAg
c2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZQogICAgIHJldHVybiBqc0xl
c3NFcTxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE9wMSkpOwogfQogCi1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25D
b21wYXJlRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29t
cGFyZUVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTExODIsOSArNTU0LDkg
QEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUVxKAogfQogCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZVN0cmluZ0VxKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBsZWZ0LCBKU0NlbGwqIHJpZ2h0KQor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGxlZnQsIEpTQ2VsbCogcmlnaHQpCiAjZWxzZQotc2l6ZV90
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSogZXhlYywg
SlNDZWxsKiBsZWZ0LCBKU0NlbGwqIHJpZ2h0KQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBsZWZ0LCBKU0NlbGwq
IHJpZ2h0KQogI2VuZGlmCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC0xMTk4LDcg
KzU3MCw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHIKICNlbmRp
ZgogfQogCi1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxs
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMikKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcUNlbGwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTIxMiw3ICs1ODQs
NyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyCiAgICAgcmV0dXJu
IEpTVmFsdWU6OnN0cmljdEVxdWFsU2xvd0Nhc2VJbmxpbmUoZXhlYywgb3AxLCBvcDIpOwogfQog
Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTEyMjMsMTkzICs1OTUsNyBAQCBzaXplX3Qg
REZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyCiAgICAgcmV0dXJuIEpTVmFsdWU6OnN0
cmljdEVxdWFsKGV4ZWMsIHNyYzEsIHNyYzIpOwogfQogCi1zdGF0aWMgdm9pZCogaGFuZGxlSG9z
dENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGNhbGxlZSwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQotewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNh
bGxlckZyYW1lKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBleGVjQ2FsbGVl
LT5zZXRTY29wZShleGVjLT5zY29wZSgpKTsKLSAgICBleGVjQ2FsbGVlLT5zZXRDb2RlQmxvY2so
MCk7Ci0KLSAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKLSAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShjYWxsZWUs
IGNhbGxEYXRhKTsKLSAgICAKLSAgICAgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlSlMp
OwotICAgIAotICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KSB7Ci0gICAgICAg
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKLSAgICAg
ICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKLSAgICAgICAg
ICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5h
dGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7Ci0gICAgICAgICAgICBpZiAodm0tPmV4Y2VwdGlv
bigpKQotICAgICAgICAgICAgICAgIHJldHVybiB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwot
Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxS
ZXR1cm5WYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09
IENhbGxUeXBlTm9uZSk7Ci0gICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywg
Y3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZXhlYywgY2FsbGVlKSk7Ci0gICAgICAgIHJldHVybiB2
bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgIH0KLQotICAgIEFTU0VSVChraW5kID09IENv
ZGVGb3JDb25zdHJ1Y3QpOwotICAgIAotICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsK
LSAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1Y3REYXRhKGNhbGxl
ZSwgY29uc3RydWN0RGF0YSk7Ci0gICAgCi0gICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgIT0gQ29u
c3RydWN0VHlwZUpTKTsKLSAgICAKLSAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RU
eXBlSG9zdCkgewotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
Q2FsbGVlKTsKLSAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkp
OwotICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25z
dHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7Ci0gICAgICAgIGlmICh2bS0+
ZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKLQotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxS
ZXR1cm5WYWx1ZSk7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlID09IENv
bnN0cnVjdFR5cGVOb25lKTsKLSAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGNhbGxlZSkpOwotICAgIHJldHVybiB2bS0+
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpOwotfQotCi1pbmxpbmUgY2hhciogbGlua0ZvcihFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
ICAgIAotICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4ZWNDYWxsZWUtPmNhbGxlZUFzVmFs
dWUoKTsKLSAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihj
YWxsZWVBc1ZhbHVlKTsKLSAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKQotICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwg
Y2FsbGVlQXNWYWx1ZSwga2luZCkpOwotCi0gICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0
PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgZXhlY0NhbGxlZS0+c2V0
U2NvcGUoY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpKTsKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhl
Y3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGNvZGVQdHI7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwotICAgIGlmIChleGVj
dXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+
Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNf
Y2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLSAgICAgICAgSlNPYmplY3Qq
IGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxs
ZWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCk7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAg
ICAgICAgdm0tPnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihl
eGVjKSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY29kZUJsb2NrID0gZnVu
Y3Rpb25FeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCk7Ci0gICAgICAgIGlmIChleGVjQ2Fs
bGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCi0gICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdl
bmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgfQotICAgIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5r
SW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsKLSAgICBpZiAoIWNhbGxMaW5rSW5mby5zZWVu
T25jZSgpKQotICAgICAgICBjYWxsTGlua0luZm8uc2V0U2VlbigpOwotICAgIGVsc2UKLSAgICAg
ICAgbGlua0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBj
b2RlUHRyLCBraW5kKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZVB0
ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLX0KLQotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25MaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCi17Ci0gICAgcmV0dXJuIGxpbmtGb3Io
ZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwpOwotfQotCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQotewotICAgIHJldHVybiBs
aW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOwotfQotCi1pbmxpbmUgY2hhciog
dmlydHVhbEZvcldpdGhGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCwgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCi17Ci0gICAg
RXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLQotICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4ZWNDYWxsZWUtPmNhbGxlZUFzVmFs
dWUoKTsKLSAgICBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNW
YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkpCi0gICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVl
LCBjYWxsZWVBc1ZhbHVlLCBraW5kKSk7Ci0gICAgCi0gICAgSlNGdW5jdGlvbiogZnVuY3Rpb24g
PSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBleGVjQ2Fs
bGVlLT5zZXRTY29wZShmdW5jdGlvbi0+c2NvcGVVbmNoZWNrZWQoKSk7Ci0gICAgRXhlY3V0YWJs
ZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwotICAgIGlmIChVTkxJ
S0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKLSAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGZ1bmN0aW9uLT5z
Y29wZSgpLCBraW5kKTsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWNDYWxsZWUsIGVycm9yKTsKLSAgICAgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZXhlY3V0
YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOwotfQotCi1pbmxpbmUgY2hhciogdmlydHVhbEZvcihFeGVjU3RhdGUqIGV4ZWND
YWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAgICBKU0NlbGwqIGNhbGxl
ZUFzRnVuY3Rpb25DZWxsSWdub3JlZDsKLSAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlv
bihleGVjQ2FsbGVlLCBraW5kLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQpOwotfQotCi1z
dGF0aWMgYm9vbCBhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlZSwgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8pCi17Ci0gICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIEpTRnVuY3Rpb24qIG9sZENhbGxlZSA9IGNh
bGxMaW5rSW5mby5jYWxsZWUuZ2V0KCk7Ci0gICAgCi0gICAgaWYgKCFvbGRDYWxsZWUKLSAgICAg
ICAgfHwgb2xkQ2FsbGVlLT5zdHJ1Y3R1cmUoKSAhPSBjYWxsZWUtPnN0cnVjdHVyZSgpCi0gICAg
ICAgIHx8IG9sZENhbGxlZS0+ZXhlY3V0YWJsZSgpICE9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgQVNTRVJUKGNhbGxlZS0+ZXhlY3V0YWJs
ZSgpLT5oYXNKSVRDb2RlRm9yQ2FsbCgpKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29k
ZVB0ciA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5h
ZGRyZXNzRm9yQ2FsbCgpOwotICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrOwotICAgIGlm
IChjYWxsZWUtPmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZUJs
b2NrID0gMDsKLSAgICBlbHNlIHsKLSAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGNhbGxlZS0+ZXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwot
ICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0
YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBsaW5rQ2xvc3VyZUNhbGwoCi0gICAg
ICAgIGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29kZUJsb2NrLAotICAgICAgICBjYWxsZWUt
PnN0cnVjdHVyZSgpLCBjYWxsZWUtPmV4ZWN1dGFibGUoKSwgY29kZVB0cik7Ci0gICAgCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1
cmVDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKLXsKLSAgICBKU0NlbGwqIGNhbGxlZUFzRnVu
Y3Rpb25DZWxsOwotICAgIGNoYXIqIHJlc3VsdCA9IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhl
Y0NhbGxlZSwgQ29kZUZvckNhbGwsIGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9j
aygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7Ci0KLSAgICBpZiAo
IWF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNGdW5jdGlv
bkNlbGwsIGNhbGxMaW5rSW5mbykpCi0gICAgICAgIGxpbmtTbG93Rm9yKGV4ZWNDYWxsZWUsIGNh
bGxMaW5rSW5mbywgQ29kZUZvckNhbGwpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlKQoteyAgICAKLSAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9y
Q2FsbCk7Ci19Ci0KLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVj
dChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCi17Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0Nh
bGxlZSwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uVG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2
YWx1ZSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9QcmltaXRpdmUo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
QEAgLTE0MTcsNyArNjAzLDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25UbwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKS50
b1ByaW1pdGl2ZShleGVjKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCB2b2lkKiBi
dWZmZXIsIHNpemVfdCBzaXplKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJh
eShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIHZvaWQqIGJ1ZmZl
ciwgc2l6ZV90IHNpemUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xNDI1LDcgKzYxMSw3IEBAIGNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXkoRXgKICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PGNoYXIqPihjb25zdHJ1Y3RBcnJheU5lZ2F0aXZlSW5kZXhlZChleGVjLCBhcnJheVN0
cnVjdHVyZSwgc3RhdGljX2Nhc3Q8SlNWYWx1ZSo+KGJ1ZmZlciksIHNpemUpKTsKIH0KIAotY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUp
CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xNDMzLDcgKzYxOSw3IEBAIGNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3RW1wdHlBcnIKICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihK
U0FycmF5OjpjcmVhdGUoKnZtLCBhcnJheVN0cnVjdHVyZSkpOwogfQogCi1jaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIGFycmF5U3RydWN0dXJlLCBpbnQzMl90IHNpemUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFNpemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5
U3RydWN0dXJlLCBpbnQzMl90IHNpemUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xNDQ0LDEyMiAr
NjMwLDEyMiBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0CiAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJyYXlTdHJ1
Y3R1cmUsIHNpemUpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJh
eUJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIHNpemVf
dCBzdGFydCwgc2l6ZV90IHNpemUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Fy
cmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgc2l6
ZV90IHN0YXJ0LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PGNoYXIqPihjb25zdHJ1Y3RBcnJheU5lZ2F0aXZlSW5kZXhlZChleGVjLCBhcnJh
eVN0cnVjdHVyZSwgZXhlYy0+Y29kZUJsb2NrKCktPmNvbnN0YW50QnVmZmVyKHN0YXJ0KSwgc2l6
ZSkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhT
aXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoU2l6ZSgK
ICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0
aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTSW50OEFycmF5PihleGVj
LCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3SW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdJbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJl
dHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTSW50OEFycmF5PihleGVjLCBzdHJ1
Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3SW50MTZBcnJheVdpdGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJ
bnQxNkFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6
ZTxKU0ludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQxNkFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQxNkFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAg
IEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxK
U0ludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1
cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTSW50MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBs
ZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlX
aXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDMyQXJy
YXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdUeXBl
ZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTSW50MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNv
ZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJy
YXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhBcnJheVdp
dGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMy
X3QgbGVuZ3RoKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNVaW50OEFy
cmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTmV3VWludDhBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3VWludDhBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNVaW50OEFycmF5
PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICBy
ZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTVWludDhDbGFtcGVkQXJyYXk+KGV4ZWMsIHN0
cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdV
aW50OENsYW1wZWRBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRl
KiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTVWludDhDbGFt
cGVkQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhTaXplKAorY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVy
biBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNVaW50MTZBcnJheT4oZXhlYywgc3RydWN0dXJlLCBs
ZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5
V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZB
cnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5
cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNVaW50MTZBcnJheT4oZXhlYywgc3RydWN0dXJlLCBl
bmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQz
MkFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQzMkFy
cmF5V2l0aFNpemUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
aW50MzJfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU1Vp
bnQzMkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU1Vp
bnQzMkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJl
dHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNGbG9hdDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVy
ZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMy
QXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zs
b2F0MzJBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJu
IG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNGbG9hdDMyQXJyYXk+KGV4ZWMsIHN0cnVj
dHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdGbG9hdDY0QXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
RmxvYXQ2NEFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRo
U2l6ZTxKU0Zsb2F0NjRBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhPbmVBcmd1bWVudCgK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aE9uZUFyZ3Vt
ZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVB
cmd1bWVudDxKU0Zsb2F0NjRBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVj
U3RhdGUqIGV4ZWMsIHZvaWQqIHJlZ2V4cFB0cikKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3UmVnZXhwKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogcmVnZXhwUHRyKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOwpAQCAtMTU3Miw3ICs3NTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5lCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShSZWdFeHBP
YmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ2V4cCkpOwog
fQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbihFeGVj
U3RhdGUqIGV4ZWMpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZh
dGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNTgxLDcgKzc2Nyw3
IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3QKICAgICByZXR1cm4g
YWN0aXZhdGlvbjsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFy
Z3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE1
OTIsNyArNzc4LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25D
cmVhdGVJbmxpbmVkQXJndW1lbnRzKAorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNy
ZWF0ZUlubGluZWRBcmd1bWVudHMoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtMTYw
NCw3ICs3OTAsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW5sCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJP
ZmZBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGFyZ3VtZW50c0NlbGwsIEpTQ2Vs
bCogYWN0aXZhdGlvbkNlbGwpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFy
Z3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYXJndW1lbnRzQ2VsbCwgSlNDZWxsKiBh
Y3RpdmF0aW9uQ2VsbCkKIHsKICAgICBBU1NFUlQoZXhlYy0+Y29kZUJsb2NrKCktPnVzZXNBcmd1
bWVudHMoKSk7CiAgICAgaWYgKGFjdGl2YXRpb25DZWxsKSB7CkBAIC0xNjE0LDE0ICs4MDAsMTQg
QEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBcmd1bQogICAgIGpzQ2FzdDxB
cmd1bWVudHMqPihhcmd1bWVudHNDZWxsKS0+dGVhck9mZihleGVjKTsKIH0KIAotdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZJbmxpbmVkQXJndW1lbnRzKAordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRlYXJPZmZJbmxpbmVkQXJndW1lbnRzKAogICAgIEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBhcmd1bWVudHNDZWxsLCBKU0NlbGwqIGFjdGl2YXRpb25DZWxsLCBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGFjdGl2
YXRpb25DZWxsLCAhYWN0aXZhdGlvbkNlbGwpOyAvLyBDdXJyZW50bHksIHdlIGRvbid0IGlubGlu
ZSBmdW5jdGlvbnMgd2l0aCBhY3RpdmF0aW9ucy4KICAgICBqc0Nhc3Q8QXJndW1lbnRzKj4oYXJn
dW1lbnRzQ2VsbCktPnRlYXJPZmYoZXhlYywgaW5saW5lQ2FsbEZyYW1lKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgoRXhlY1N0
YXRlKiBleGVjLCBpbnQzMl90IGFyZ3VtZW50c1JlZ2lzdGVyKQorRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBp
bnQzMl90IGFyZ3VtZW50c1JlZ2lzdGVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTYzMyw3ICs4
MTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90KSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRCeVZh
bChFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYXJndW1lbnRzUmVnaXN0ZXIsIGludDMyX3QgaW5k
ZXgpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50QnlW
YWwoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGFyZ3VtZW50c1JlZ2lzdGVyLCBpbnQzMl90IGlu
ZGV4KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTY0OCw3ICs4MzQsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShh
cmd1bWVudHNWYWx1ZS5nZXQoZXhlYywgaW5kZXgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25HZXRJbmxpbmVkQXJndW1lbnRCeVZhbCgKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0SW5saW5lZEFyZ3VtZW50QnlWYWwoCiAgICAg
RXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGFyZ3VtZW50c1JlZ2lzdGVyLCBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSwgaW50MzJfdCBpbmRleCkKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwpAQCAtMTY2Niw3ICs4NTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkdlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcmd1bWVudHNWYWx1ZS5n
ZXQoZXhlYywgaW5kZXgpKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0Z1bmN0aW9uTm9DaGVjayhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRh
YmxlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uTm9DaGVjayhF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRhYmxlKQogewogICAgIEFTU0VS
VChmdW5jdGlvbkV4ZWN1dGFibGUtPmluaGVyaXRzKEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygp
KSk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTE2NzQsNyArODYwLDcgQEAgSlNDZWxs
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aQogICAgIHJldHVybiBKU0Z1bmN0aW9u
OjpjcmVhdGUoZXhlYywgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25F
eGVjdXRhYmxlKSwgZXhlYy0+c2NvcGUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0
aW9uRXhlY3V0YWJsZSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKIHsK
ICAgICBBU1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxlLT5pbmhlcml0cyhGdW5jdGlvbkV4ZWN1dGFi
bGU6OmluZm8oKSkpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0xNjgyLDcgKzg2OCw3
IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmUKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBzdGF0aWNfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGUpLCBleGVjLT5zY29wZSgpKSk7CiB9
CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbkV4cHJlc3Npb24o
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZUFzQ2VsbCkKK0pTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbkV4cHJlc3Npb24oRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZUFzQ2VsbCkKIHsKICAgICBBU1NFUlQo
ZnVuY3Rpb25FeGVjdXRhYmxlQXNDZWxsLT5pbmhlcml0cyhGdW5jdGlvbkV4ZWN1dGFibGU6Omlu
Zm8oKSkpOwogCkBAIC0xNjk0LDMzICs4ODAsMjIgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0Z1bmN0aQogICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZnVu
Y3Rpb25FeGVjdXRhYmxlLCBleGVjLT5zY29wZSgpKTsKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uSXNPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1
ZSkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIGpzSXNPYmplY3RUeXBlKGV4
ZWMsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogfQogCi1zaXplX3QgREZHX09QRVJBVElPTiBv
cGVyYXRpb25Jc0Z1bmN0aW9uKEVuY29kZWRKU1ZhbHVlIHZhbHVlKQorc2l6ZV90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBy
ZXR1cm4ganNJc0Z1bmN0aW9uVHlwZShKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKIH0KIAotSlND
ZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogdmFsdWUpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiB2YWx1ZSkKIHsKICAgICByZXR1cm4ganNUeXBlU3RyaW5nRm9yVmFs
dWUoZXhlYywgSlNWYWx1ZSh2YWx1ZSkpLmFzQ2VsbCgpOwogfQogCi12b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYmFzZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0KLSAgICBBU1NF
UlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID4gYmFzZS0+c3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIEFTU0VSVCghdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9y
KCkuZmFzdFBhdGhTaG91bGRTdWNjZWVkKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAq
IHNpemVvZihKU1ZhbHVlKSkpOwotICAgIGJhc2UtPnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVT
dG9yYWdlSWZOZWNlc3Nhcnkodm0sIHN0cnVjdHVyZSk7Ci0gICAgYmFzZS0+cHV0RGlyZWN0KHZt
LCBvZmZzZXQsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwotfQotCi1jaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShF
eGVjU3RhdGUqIGV4ZWMpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CkBAIC0xNzI5LDcgKzkwNCw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQWxsb2NhdGVQcm8KICAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKHZt
LCAwLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHksIGZhbHNlLCAwKSk7CiB9CiAKLWNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRl
KiBleGVjLCBzaXplX3QgbmV3U2l6ZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgbmV3U2l6ZSkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKQEAgLTE3MzgsNyArOTEzLDcgQEAgY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25BbGxvY2F0ZVBybwogICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQodm0sIDAsIDAsIG5ld1NpemUsIGZhbHNlLCAwKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJ
bml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQorY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlT
dG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmpl
Y3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNzQ5LDcgKzkyNCw3IEBAIGNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4ocmVzdWx0KTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9j
YXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAg
LTE3NTksNyArOTM0LDcgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRl
QgogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCi1jaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUludDMyKEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBjZWxsKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVJbnQzMihFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE3NzAsNyAr
OTQ1LDcgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVJbnQzMgogICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJlSW50MzIo
dm0pLmRhdGEoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlRG91
YmxlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQorY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25FbnN1cmVEb3VibGUoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CkBAIC0xNzgxLDcgKzk1Niw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uRW5zdXJlRG91YmwKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNP
YmplY3QoY2VsbCktPmVuc3VyZURvdWJsZSh2bSkuZGF0YSgpKTsKIH0KIAotY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBjZWxsKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzKEV4
ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTc5Miw3
ICs5NjcsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpCiAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5lbnN1cmVDb250
aWd1b3VzKHZtKS5kYXRhKCkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJh
Z2VFbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQorY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25SYWdlRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4MDMsNyArOTc4LDcgQEAg
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SYWdlRW5zdXJlQwogICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+cmFnZUVuc3VyZUNvbnRpZ3VvdXMo
dm0pLmRhdGEoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJy
YXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQorY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xODE0LDcgKzk4OSw3IEBAIGNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVuc3VyZUFycmF5U3RvcmFnZSh2bSkpOwogfQogCi1T
dHJpbmdJbXBsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNTdHJpbmcqIHN0cmluZykKK1N0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOwpAQCAtMTgyMiw3ICs5OTcsNyBAQCBTdHJpbmdJbXBsKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblJlc29sCiAgICAgcmV0dXJuIHN0cmluZy0+dmFsdWUoZXhlYykuaW1wbCgpOwog
fQogCi1KU1N0cmluZyogREZHX09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGNoYXJhY3RlcikKK0pTU3RyaW5nKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGlu
dDMyX3QgY2hhcmFjdGVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTgzMCw3ICsxMDA1LDcgQEAg
SlNTdHJpbmcqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU2luZ2xlQwogICAgIHJldHVybiBqc1Np
bmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBzdGF0aWNfY2FzdDxVQ2hhcj4oY2hhcmFjdGVyKSk7
CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QoRXhl
Y1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiBl
eGVjLCBKU1N0cmluZyogc3RyaW5nLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKQEAgLTE4MzgsNyArMTAxMyw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25OZXdTdHJpbmcKICAgICByZXR1cm4gU3RyaW5nT2JqZWN0OjpjcmVhdGUoZXhlYywgc3RydWN0
dXJlLCBzdHJpbmcpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJp
bmdPbkNlbGwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVG9TdHJpbmdPbkNlbGwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNl
bGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xODQ2LDcgKzEwMjEsNyBAQCBKU0NlbGwqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmdPCiAgICAgcmV0dXJuIEpTVmFsdWUoY2VsbCkudG9T
dHJpbmcoZXhlYyk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQorSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xODU0LDcgKzEwMjksNyBAQCBKU0NlbGwqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmcoCiAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29k
ZSh2YWx1ZSkudG9TdHJpbmcoZXhlYyk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVy
YXRpb25NYWtlUm9wZTIoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogbGVmdCwgSlNTdHJpbmcq
IHJpZ2h0KQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMihFeGVjU3Rh
dGUqIGV4ZWMsIEpTU3RyaW5nKiBsZWZ0LCBKU1N0cmluZyogcmlnaHQpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CkBAIC0xODYyLDcgKzEwMzcsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TWFrZVJvcGUyCiAgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKHZtLCBsZWZ0LCByaWdo
dCk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMoRXhlY1N0
YXRlKiBleGVjLCBKU1N0cmluZyogYSwgSlNTdHJpbmcqIGIsIEpTU3RyaW5nKiBjKQorSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3Ry
aW5nKiBhLCBKU1N0cmluZyogYiwgSlNTdHJpbmcqIGMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0x
ODcwLDcgKzEwNDUsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUz
CiAgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKHZtLCBhLCBiLCBjKTsKIH0KIAotY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKAor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91Ymxl
KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBzaXpl
X3QgdGFibGVJbmRleCkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVC
bG9jaygpOwpAQCAtMTg4NCw3ICsxMDU5LDcgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25GaW5kU3dpdGNoSQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4odGFibGUuY3RpRGVm
YXVsdC5leGVjdXRhYmxlQWRkcmVzcygpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25Td2l0Y2hTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgdGFibGVJbmRleCwgSlNT
dHJpbmcqIHN0cmluZykKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKiBzdHJpbmcpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CkBAIC0xODkyLDUwICsxMDY3LDE5IEBAIGNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uU3dpdGNoU3RyaW4KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KGV4
ZWMtPmNvZGVCbG9jaygpLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkuY3RpRm9y
VmFsdWUoc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwog
fQogCi1kb3VibGUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwg
aW50MzJfdCBiKQorZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQz
Ml90IGEsIGludDMyX3QgYikKIHsKICAgICByZXR1cm4gZm1vZChhLCBiKTsKIH0KIAotSlNDZWxs
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqIGV4
ZWMsIGludDMyX3Qgb3AxKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zy
b21DaGFyQ29kZShFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3Qgb3AxKQogewogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwogICAgIHJldHVybiBKU0M6OnN0cmluZ0Zyb21DaGFyQ29kZShleGVjLCBvcDEpOwogfQogCi1E
RkdIYW5kbGVyRW5jb2RlZCBERkdfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhl
Y1N0YXRlKiBleGVjLCB1aW50MzJfdCBjYWxsSW5kZXgpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAg
ICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgQVNTRVJU
KGV4Y2VwdGlvblZhbHVlKTsKLSAgICAKLSAgICB1bnNpZ25lZCB2UENJbmRleCA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5ieXRlY29kZU9mZnNldEZvckNhbGxBdEluZGV4KGNhbGxJbmRleCk7Ci0gICAg
RXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0
aW9uVmFsdWUsIHZQQ0luZGV4KTsKLSAgICBBU1NFUlQoaGFuZGxlci5jYXRjaFJvdXRpbmUpOwot
ICAgIHJldHVybiBkZmdIYW5kbGVyRW5jb2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxlci5j
YXRjaFJvdXRpbmUpOwotfQotCi1ERkdIYW5kbGVyRW5jb2RlZCBERkdfT1BFUkFUSU9OIGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXJJblN0dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8pCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKLSAg
ICAKLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBzdHViSW5mby0+Y29kZU9yaWdpbjsKLSAg
ICB3aGlsZSAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVPcmlnaW4g
PSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOwotICAgIAotICAgIEV4Y2VwdGlv
bkhhbmRsZXIgaGFuZGxlciA9IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVl
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChoYW5kbGVyLmNhdGNoUm91
dGluZSk7Ci0gICAgcmV0dXJuIGRmZ0hhbmRsZXJFbmNvZGVkKGhhbmRsZXIuY2FsbEZyYW1lLCBo
YW5kbGVyLmNhdGNoUm91dGluZSk7Ci19Ci0KLXNpemVfdCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZl
cnRKU1ZhbHVlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQor
c2l6ZV90IEpJVF9PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUb0ludDMyKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xOTQ0LDcg
KzEwODgsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkudG9VSW50MzIoZXhlYyk7CiB9CiAKLXNpemVf
dCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gZGZnQ29u
dmVydEpTVmFsdWVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3ApCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xOTUyLDcgKzEwOTYsNyBAQCBzaXplX3QgREZH
X09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvCiAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3ApLnRvQm9vbGVhbihleGVjKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIGRl
YnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRlKiBleGVjLCB2b2lk
KiBkZWJ1Z0luZm9SYXcsIHZvaWQqIHNjcmF0Y2gpCit2b2lkIEpJVF9PUEVSQVRJT04gZGVidWdP
cGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGRl
YnVnSW5mb1Jhdywgdm9pZCogc2NyYXRjaCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTE5OTAsNyAr
MTEzNCw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3AKICAgICBk
YXRhTG9nKCJcbiIpOwogfQogCi1leHRlcm4gIkMiIHZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2Vy
UmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKiBjb2RlQmxvY2spCitleHRlcm4gIkMiIHZvaWQg
SklUX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCiB7CiAgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3
aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAogICAgIC8vIHJlYWxseSBi
ZSBwcm9maXRhYmxlLgpAQCAtMjAzNCw3ICsxMTc4LDcgQEAgZXh0ZXJuICJDIiB2b2lkIERGR19P
UEVSQVRJT04gdHJpZ2dlclJlbwogfQogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCi12b2lkIERGR19P
UEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIEpJVF9PUEVS
QVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CkBAIC0yMDk2LDcgKzEyNDAsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5v
dyhFeGVjCiAgICAgICAgIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUo
Y29kZUJsb2NrKSwgdm0tPmVuc3VyZVdvcmtsaXN0KCkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFU
SU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKK2NoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVu
dHJ5Tm93KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBieXRlY29kZUluZGV4LCBpbnQz
Ml90IHN0cmVhbUluZGV4KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtMjIxNSw3
ICsxMzU5LDcgQEAgY2hhciogREZHX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coCiAKIC8v
IEZJWE1FOiBNYWtlIGNhbGxzIHdvcmsgd2VsbC4gQ3VycmVudGx5IHRoZXkncmUgYSBwdXJlIHJl
Z3Jlc3Npb24uCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEz
NjIxCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZUTENhbGwoRXhlY1N0
YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GVExDYWxs
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBFeGVjU3RhdGUqIGNhbGxlckV4ZWMgPSBleGVjLT5j
YWxsZXJGcmFtZSgpOwogICAgIApAQCAtMjIzNSw3ICsxMzc5LDcgQEAgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25GVAogCiAvLyBGSVhNRTogTWFrZSBjYWxscyB3b3JrIHdl
bGwuIEN1cnJlbnRseSB0aGV5J3JlIGEgcHVyZSByZWdyZXNzaW9uLgogLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25GVExDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GVExDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIEV4ZWNTdGF0ZSogY2FsbGVyRXhlYyA9IGV4ZWMtPmNhbGxlckZyYW1lKCk7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2
aXNpb24gMTU2MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zNywyODkgKzM4
LDEyOSBAQCBuYW1lc3BhY2UgREZHIHsKIAogZXh0ZXJuICJDIiB7CiAKLSNpZiBDQUxMSU5HX0NP
TlZFTlRJT05fSVNfU1REQ0FMTAotI2RlZmluZSBERkdfT1BFUkFUSU9OIENERUNMCi0jZWxzZQot
I2RlZmluZSBERkdfT1BFUkFUSU9OCi0jZW5kaWYKLQotLy8gVGhlc2UgdHlwZWRlZnMgcHJvdmlk
ZSB0eXBlY2hlY2tpbmcgd2hlbiBnZW5lcmF0aW5nIGNhbGxzIG91dCB0byBoZWxwZXIgcm91dGlu
ZXM7Ci0vLyB0aGlzIGhlbHBzIHByZXZlbnQgY2FsbGluZyBhIGhlbHBlciByb3V0aW5lIHdpdGgg
dGhlIHdyb25nIGFyZ3VtZW50cyEKLS8qCi0gICAgS2V5OgotICAgIFY6IHZvaWQKLSAgICBKOiBK
U1ZhbHVlCi0gICAgUDogcG9pbnRlciAodm9pZCopCi0gICAgQzogSlNDZWxsKgotICAgIEE6IEpT
QXJyYXkqCi0gICAgUzogc2l6ZV90Ci0gICAgWjogaW50MzJfdAotICAgIEQ6IGRvdWJsZQotICAg
IEk6IFN0cmluZ0ltcGwqCi0qLwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
ICgqSl9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FQSkoRXhlY1N0YXRlKiwgSlNBcnJheSop
OwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25f
RUFaKShFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCk7Ci10eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxs
Kik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlv
bl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwotdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNJKShFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBTdHJpbmdJbXBsKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
KCpKX0RGR09wZXJhdGlvbl9FQ0opKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVl
KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9u
X0VEQSkoRXhlY1N0YXRlKiwgZG91YmxlLCBKU0FycmF5Kik7Ci10eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSSkoRXhlY1N0YXRlKiwgU3RyaW5n
SW1wbCopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVy
YXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKQSkoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIEpTQXJyYXkqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiAoKkpfREZHT3BlcmF0aW9uX0VKSSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0
cmluZ0ltcGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZH
T3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9u
X0VKc3NaKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIGludDMyX3QpOwotdHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUpQKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgdm9pZCopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSl9ERkdPcGVyYXRpb25fRVApKEV4ZWNTdGF0ZSosIHZvaWQqKTsKLXR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VQUCkoRXhlY1N0YXRl
Kiwgdm9pZCosIHZvaWQqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAo
KkpfREZHT3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7Ci10eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU1MpKEV4ZWNT
dGF0ZSosIHNpemVfdCwgc2l6ZV90KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiAoKkpfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKLXR5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaSWNmWikoRXhl
Y1N0YXRlKiwgaW50MzJfdCwgSW5saW5lQ2FsbEZyYW1lKiwgaW50MzJfdCk7Ci10eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FWlopKEV4ZWNTdGF0
ZSosIGludDMyX3QsIGludDMyX3QpOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpD
X0RGR09wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFU
SU9OICgqQ19ERkdPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwotdHlwZWRlZiBK
U0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlND
ZWxsKik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VD
QykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09Q
RVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VJY2YpKEV4ZWNTdGF0ZSosIElubGluZUNhbGxGcmFt
ZSopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FSiko
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJ
T04gKCpDX0RGR09wZXJhdGlvbl9FSnNzU3QpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgU3RydWN0
dXJlKik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VK
c3NKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKLXR5cGVkZWYgSlNDZWxs
KiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUpzc0pzc0pzcykoRXhlY1N0YXRlKiwg
SlNTdHJpbmcqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09Q
RVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VPWikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQz
Ml90KTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRVN0
KShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9O
ICgqQ19ERkdPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwotdHlwZWRlZiBkb3Vi
bGUgREZHX09QRVJBVElPTiAoKkRfREZHT3BlcmF0aW9uX0REKShkb3VibGUsIGRvdWJsZSk7Ci10
eXBlZGVmIGRvdWJsZSBERkdfT1BFUkFUSU9OICgqRF9ERkdPcGVyYXRpb25fWlopKGludDMyX3Qs
IGludDMyX3QpOwotdHlwZWRlZiBkb3VibGUgREZHX09QRVJBVElPTiAoKkRfREZHT3BlcmF0aW9u
X0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIGludDMyX3QgREZHX09Q
RVJBVElPTiAoKlpfREZHT3BlcmF0aW9uX0QpKGRvdWJsZSk7Ci10eXBlZGVmIHNpemVfdCBERkdf
T1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0Nl
bGwqKTsKLXR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9FSiko
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElP
TiAoKlNfREZHT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlKTsKLXR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlv
bl9KKShFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZH
T3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpW
X0RGR09wZXJhdGlvbl9FT1pEKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIGRvdWJs
ZSk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VPWkopKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2
b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxs
Kik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDSWNmKShF
eGVjU3RhdGUqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKTsKLXR5cGVkZWYgdm9pZCBERkdf
T1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNDSWNmKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBK
U0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgq
Vl9ERkdPcGVyYXRpb25fRUNKSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVy
YXRpb25fRUNaKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKLXR5cGVkZWYgdm9pZCBE
RkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBK
U0NlbGwqKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUpD
SSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCosIFN0cmluZ0ltcGwqKTsKLXR5
cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUpKSikoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBl
ZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VKUFApKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCB2b2lkKiwgdm9pZCopOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJ
T04gKCpWX0RGR09wZXJhdGlvbl9FUFpKKShFeGVjU3RhdGUqLCB2b2lkKiwgaW50MzJfdCwgRW5j
b2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlv
bl9XKShXYXRjaHBvaW50U2V0Kik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RG
R09wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAo
KlBfREZHT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKLXR5cGVkZWYgY2hhciog
REZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VKUykoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUsIHNpemVfdCk7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJh
dGlvbl9FTykoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJB
VElPTiAoKlBfREZHT3BlcmF0aW9uX0VPUykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3Qp
OwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU9aKShFeGVj
U3RhdGUqLCBKU09iamVjdCosIGludDMyX3QpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9O
ICgqUF9ERkdPcGVyYXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKLXR5cGVk
ZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBz
aXplX3QpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVNK
c3MpKEV4ZWNTdGF0ZSosIHNpemVfdCwgSlNTdHJpbmcqKTsKLXR5cGVkZWYgY2hhciogREZHX09Q
RVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdCkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Ci10
eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3RKKShFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVS
QVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3RQUykoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdm9p
ZCosIHNpemVfdCk7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlv
bl9FU3RTUykoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgc2l6ZV90LCBzaXplX3QpOwotdHlwZWRl
ZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0WikoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgaW50MzJfdCk7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RG
R09wZXJhdGlvbl9FWlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIGludDMyX3QpOwotdHlwZWRlZiBT
dHJpbmdJbXBsKiBERkdfT1BFUkFUSU9OICgqSV9ERkdPcGVyYXRpb25fRUpzcykoRXhlY1N0YXRl
KiwgSlNTdHJpbmcqKTsKLXR5cGVkZWYgSlNTdHJpbmcqIERGR19PUEVSQVRJT04gKCpKc3NfREZH
T3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKLUpTQ2VsbCogREZHX09QRVJBVElP
TiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiwgaW50MzJfdCkgIFdURl9J
TlRFUk5BTDsgCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJD
b2RlKEV4ZWNTdGF0ZSosIGludDMyX3QpICBXVEZfSU5URVJOQUw7IAogCiAvLyBUaGVzZSByb3V0
aW5lcyBhcmUgcHJvdmlkZSBjYWxsYmFja3Mgb3V0IHRvIEMrKyBpbXBsZW1lbnRhdGlvbnMgb2Yg
b3BlcmF0aW9ucyB0b28gY29tcGxleCB0byBKSVQuCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKLUpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVUaGlzKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RvciwgaW50MzJfdCBpbmxpbmVDYXBhY2l0eSkgV1RGX0lOVEVSTkFMOwot
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXMoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXNTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMSkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25WYWx1ZUFkZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdU
Rl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlW
YWwoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRQcm9wZXJ0eSkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25HZXRCeVZhbENlbGwoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFByb3BlcnR5KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQoRXhlY1N0YXRlKiwgSlNBcnJheSos
IGludDMyX3QpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0QnlWYWxTdHJpbmdJbnQoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBpbnQzMl90KSBX
VEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5
SWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7
Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3Qo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci1F
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLUVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uSW5PcHRpbWl6ZShFeGVjU3RhdGUqLCBK
U0NlbGwqLCBTdHJpbmdJbXBsKik7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwqKTsKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2VuZXJpY0luKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVu
Y29kZWRKU1ZhbHVlKTsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ2Fs
bEN1c3RvbUdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYywgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQ2FsbEdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBX
VEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJp
bWl0aXZlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHZv
aWQqLCBzaXplX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgc2l6ZV90LCBzaXplX3QpIFdU
Rl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RW1wdHlBcnJheShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJf
dCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJy
YXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7
Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhPbmVBcmd1bWVu
dChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQxNkFycmF5V2l0aFNpemUoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdJbnQxNkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0ludDMyQXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2Rl
ZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
VWludDhBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9J
TlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhBcnJheVdpdGhP
bmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lO
VEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJh
eVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRoT25l
QXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRF
Uk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoU2l6
ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBp
bnQzMl90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zs
b2F0MzJBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVk
SlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdG
bG9hdDY0QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZf
SU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdp
dGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RG
X0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdl
eHAoRXhlY1N0YXRlKiwgdm9pZCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
IFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxT
dHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBp
bmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChF
eGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERv
dWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBp
bnQzMl90IGluZGV4LCBkb3VibGUgdmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJB
VElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKSBXVEZfSU5U
RVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQXJyYXkqKSBXVEZfSU5U
RVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaERv
dWJsZShFeGVjU3RhdGUqLCBkb3VibGUgdmFsdWUsIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7Ci1F
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSos
IEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aChFeGVjU3RhdGUqLCBKU0FycmF5KikgV1RG
X0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBF
eGVjKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFM
Owotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwq
KSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCog
YmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCop
IFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0Nl
bGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVS
TkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RP
cHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCog
YmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0lt
cGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBs
KikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVj
dChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqLCBKU09iamVjdCogY29uc3RydWN0
b3IsIGludDMyX3QgaW5saW5lQ2FwYWNpdHkpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VmFsdWVBZGQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVy
dHkpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
R2V0QnlWYWxDZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQ
cm9wZXJ0eSkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeVZhbEFycmF5SW50KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90KSBXVEZf
SU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFs
U3RyaW5nSW50KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1ByaW1pdGl2ZShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdBcnJheShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KSBX
VEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5QnVmZmVy
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90KSBXVEZfSU5URVJOQUw7Citj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkoRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5B
TDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aFNpemUoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNv
ZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdJbnQzMkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RG
X0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0
aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZf
SU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRo
U2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRoU2l6ZShFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGlu
dDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWlu
dDMyQXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpT
VmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3Rmxv
YXQzMkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lO
VEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRo
T25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9J
TlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0
aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoT25lQXJndW1lbnQo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwKEV4ZWNTdGF0ZSos
IHZvaWQqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZf
SU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3Qo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7
Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0KEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5U
RVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJv
dW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9J
TlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9u
ZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwg
ZG91YmxlIHZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09i
amVjdCosIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgV1RGX0lOVEVSTkFMOworRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOworRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRl
KiwgZG91YmxlIHZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqLCBKU0FycmF5KikgV1RG
X0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBv
cEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUq
LCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiAvLyBUaGVzZSBjb21wYXJpc29ucyBy
ZXR1cm4gYSBib29sZWFuIHdpdGhpbiBhIHNpemVfdCBzdWNoIHRoYXQgdGhlIHZhbHVlIGlzIHpl
cm8gZXh0ZW5kZWQgdG8gZmlsbCB0aGUgcmVnaXN0ZXIuCi1zaXplX3QgREZHX09QRVJBVElPTiBv
cGVyYXRpb25SZWdFeHBUZXN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRF
Uk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIp
IFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNz
RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Q29tcGFyZUdyZWF0ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwotc2l6ZV90IERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1zaXpl
X3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFM
Oworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChFeGVjU3RhdGUqLCBK
U0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlTGVzc0VxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK3NpemVf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRF
Uk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMikgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZUVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKICNpZiBVU0UoSlNWQUxVRTY0KQotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEoRXhlY1N0YXRlKiwg
SlNDZWxsKiBsZWZ0LCBKU0NlbGwqIHJpZ2h0KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqLCBKU0Nl
bGwqIGxlZnQsIEpTQ2VsbCogcmlnaHQpIFdURl9JTlRFUk5BTDsKICNlbHNlCi1zaXplX3QgREZH
X09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEoRXhlY1N0YXRlKiwgSlNDZWxsKiBs
ZWZ0LCBKU0NlbGwqIHJpZ2h0KSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Db21wYXJlU3RyaW5nRXEoRXhlY1N0YXRlKiwgSlNDZWxsKiBsZWZ0LCBKU0NlbGwq
IHJpZ2h0KSBXVEZfSU5URVJOQUw7CiAjZW5kaWYKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcUNlbGwoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwotc2l6ZV90IERG
R19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5B
TDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKikg
V1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVj
U3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtD
bG9zdXJlQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9J
TlRFUk5BTDsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9u
KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25DcmVhdGVBcmd1bWVudHMoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUlubGluZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgSW5s
aW5lQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blRlYXJPZmZBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVS
TkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZJbmxpbmVkQXJndW1lbnRz
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSopIFdURl9JTlRF
Uk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRz
TGVuZ3RoKEV4ZWNTdGF0ZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0SW5saW5lZEFyZ3VtZW50QnlWYWwoRXhlY1N0YXRl
KiwgaW50MzJfdCwgSW5saW5lQ2FsbEZyYW1lKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudEJ5VmFsKEV4ZWNT
dGF0ZSosIGludDMyX3QsIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbk5vQ2hlY2soRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RG
X0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5j
dGlvbihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNTdGF0ZSosIEpTQ2VsbCop
IFdURl9JTlRFUk5BTDsKLWRvdWJsZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMo
aW50MzJfdCwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotc2l6ZV90IERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uSXNPYmplY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsK
LXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbklzRnVuY3Rpb24oRW5jb2RlZEpTVmFsdWUp
IFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2YoRXhl
Y1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
U3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7
Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0
aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIHNpemVf
dCBuZXdTaXplKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJl
YWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsZShFeGVjU3RhdGUqLCBKU0Nl
bGwqKTsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVj
U3RhdGUqLCBKU0NlbGwqKTsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmFnZUVuc3Vy
ZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKLVN0cmluZ0lt
cGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiwgSlNTdHJp
bmcqKTsKLUpTU3RyaW5nKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0
cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90KTsKLQotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld1N0cmluZ09iamVjdChFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOwot
SlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSos
IEpTQ2VsbCopOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25N
YWtlUm9wZTIoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwotSlNDZWxsKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3Ry
aW5nKiwgSlNTdHJpbmcqKTsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRj
aEltbVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90IHRh
YmxlSW5kZXgpOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmcoRXhl
Y1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7CitzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsK
K3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBX
VEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZh
dGlvbihFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlQXJndW1lbnRzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxpbmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSos
IElubGluZUNhbGxGcmFtZSopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9J
TlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3Vt
ZW50cyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKSBXVEZf
SU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3Vt
ZW50c0xlbmd0aChFeGVjU3RhdGUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFsKEV4ZWNT
dGF0ZSosIGludDMyX3QsIElubGluZUNhbGxGcmFtZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRCeVZhbChF
eGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25Ob0NoZWNrKEV4ZWNTdGF0ZSosIEpTQ2VsbCop
IFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uRXhwcmVzc2lvbihFeGVjU3RhdGUqLCBKU0Nl
bGwqKSBXVEZfSU5URVJOQUw7Citkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25J
bnRzKGludDMyX3QsIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbklzT2JqZWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jc0Z1bmN0aW9uKEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9m
KEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5B
TDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2
ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVC
dXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXpl
X3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25F
bnN1cmVJbnQzMihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRW5zdXJlRG91YmxlKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SYWdlRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUq
LCBKU0NlbGwqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9y
YWdlKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworU3RyaW5nSW1wbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25SZXNvbHZlUm9wZShFeGVjU3RhdGUqLCBKU1N0cmluZyopOworSlNTdHJpbmcqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSosIGludDMy
X3QpOworCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4
ZWNTdGF0ZSosIEpTU3RyaW5nKiwgU3RydWN0dXJlKik7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVG9TdHJpbmdPbkNlbGwoRXhlY1N0YXRlKiwgSlNDZWxsKik7CitKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUp
OworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMihFeGVjU3RhdGUqLCBK
U1N0cmluZyosIEpTU3RyaW5nKik7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFr
ZVJvcGUzKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOworY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7CitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3QgdGFibGVJ
bmRleCwgSlNTdHJpbmcqKTsKIAogI2lmIEVOQUJMRShGVExfSklUKQogLy8gRklYTUU6IE1ha2Ug
Y2FsbHMgd29yayB3ZWxsLiBDdXJyZW50bHkgdGhleSdyZSBhIHB1cmUgcmVncmVzc2lvbi4KIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEKLUVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5U
RVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZUTENvbnN0cnVj
dChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkZUTENhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GVExDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lO
VEVSTkFMOwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCi0vLyBUaGlzIG1ldGhvZCBpcyB1
c2VkIHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9u
LCB3aGljaCBpcwotLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMg
b3V0IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCi0KLS8vIEFjY29yZGlu
ZyB0byBDKysgcnVsZXMsIGEgdHlwZSB1c2VkIGZvciB0aGUgcmV0dXJuIHNpZ25hdHVyZSBvZiBm
dW5jdGlvbiB3aXRoIEMgbGlua2FnZSAoaS5lLgotLy8gJ2V4dGVybiAiQyInKSBuZWVkcyB0byBi
ZSBQT0Q7IGhlbmNlIHB1dHRpbmcgYW55IGNvbnN0cnVjdG9ycyBpbnRvIGl0IGNvdWxkIGNhdXNl
IGVpdGhlciBjb21waWxlcgotLy8gd2FybmluZ3MsIG9yIHdvcnNlLCBhIGNoYW5nZSBpbiB0aGUg
QUJJIHVzZWQgdG8gcmV0dXJuIHRoZXNlIHR5cGVzLgotc3RydWN0IERGR0hhbmRsZXIgewotICAg
IHVuaW9uIFVuaW9uIHsKLSAgICAgICAgc3RydWN0IFN0cnVjdCB7Ci0gICAgICAgICAgICBFeGVj
U3RhdGUqIGV4ZWM7Ci0gICAgICAgICAgICB2b2lkKiBoYW5kbGVyOwotICAgICAgICB9IHM7Ci0g
ICAgICAgIHVpbnQ2NF90IGVuY29kZWQ7Ci0gICAgfSB1OwotfTsKLQotaW5saW5lIERGR0hhbmRs
ZXIgY3JlYXRlREZHSGFuZGxlcihFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGhhbmRsZXIpCi17Ci0g
ICAgREZHSGFuZGxlciByZXN1bHQ7Ci0gICAgcmVzdWx0LnUucy5leGVjID0gZXhlYzsKLSAgICBy
ZXN1bHQudS5zLmhhbmRsZXIgPSBoYW5kbGVyOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLSNp
ZiBDUFUoWDg2XzY0KQotdHlwZWRlZiBERkdIYW5kbGVyIERGR0hhbmRsZXJFbmNvZGVkOwotaW5s
aW5lIERGR0hhbmRsZXJFbmNvZGVkIGRmZ0hhbmRsZXJFbmNvZGVkKEV4ZWNTdGF0ZSogZXhlYywg
dm9pZCogaGFuZGxlcikKLXsKLSAgICByZXR1cm4gY3JlYXRlREZHSGFuZGxlcihleGVjLCBoYW5k
bGVyKTsKLX0KLSNlbHNlCi10eXBlZGVmIHVpbnQ2NF90IERGR0hhbmRsZXJFbmNvZGVkOwotaW5s
aW5lIERGR0hhbmRsZXJFbmNvZGVkIGRmZ0hhbmRsZXJFbmNvZGVkKEV4ZWNTdGF0ZSogZXhlYywg
dm9pZCogaGFuZGxlcikKLXsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoREZHSGFuZGxlcjo6
VW5pb24pID09IHNpemVvZih1aW50NjRfdCksIERGR0hhbmRsZXJfVW5pb25faXNfNjRiaXQpOwot
ICAgIHJldHVybiBjcmVhdGVERkdIYW5kbGVyKGV4ZWMsIGhhbmRsZXIpLnUuZW5jb2RlZDsKLX0K
LSNlbmRpZgotREZHSGFuZGxlckVuY29kZWQgREZHX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25I
YW5kbGVyKEV4ZWNTdGF0ZSosIHVpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1ERkdIYW5kbGVyRW5j
b2RlZCBERkdfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJJblN0dWIoRXhlY1N0YXRl
KiwgU3RydWN0dXJlU3R1YkluZm8qKSBXVEZfSU5URVJOQUw7Ci0KIC8vIFRoZXNlIG9wZXJhdGlv
bnMgaW1wbGVtZW50IHRoZSBpbXBsaWNpdGx5IGNhbGxlZCBUb0ludDMyIGFuZCBUb0Jvb2xlYW4g
Y29udmVyc2lvbnMgZnJvbSBFUzUuCiAvLyBUaGlzIGNvbnZlcnNpb24gcmV0dXJucyBhbiBpbnQz
Ml90IHdpdGhpbiBhIHNpemVfdCBzdWNoIHRoYXQgdGhlIHZhbHVlIGlzIHplcm8gZXh0ZW5kZWQg
dG8gZmlsbCB0aGUgcmVnaXN0ZXIuCi1zaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNW
YWx1ZVRvSW50MzIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLXNp
emVfdCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBkZmdD
b252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRF
Uk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiAKLXZvaWQgREZHX09QRVJB
VElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSosIHZv
aWQqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVnT3BlcmF0
aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRlKiwgdm9pZCosIHZvaWQqKSBXVEZf
SU5URVJOQUw7CiAKLXZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3co
Q29kZUJsb2NrKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9w
dGltaXphdGlvbk5vdyhDb2RlQmxvY2sqKSBXVEZfSU5URVJOQUw7CiAKICNpZiBFTkFCTEUoRlRM
X0pJVCkKLXZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0ZSopIFdU
Rl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KEV4ZWNT
dGF0ZSosIGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBzdHJlYW1JbmRleCkgV1RGX0lO
VEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKikg
V1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coRXhl
Y1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUluZGV4LCBpbnQzMl90IHN0cmVhbUluZGV4KSBXVEZf
SU5URVJOQUw7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKIH0gLy8gZXh0ZXJuICJDIgog
Ci1pbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNp
emVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRVN0
WiBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5
cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBUeXBlSW50ODoKQEAgLTM0OCw3
ICsxODksNyBAQCBpbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb25OZXdUCiAgICAg
cmV0dXJuIDA7CiB9CiAKLWlubGluZSBQX0RGR09wZXJhdGlvbl9FU3RKIG9wZXJhdGlvbk5ld1R5
cGVkQXJyYXlXaXRoT25lQXJndW1lbnRGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCitpbmxp
bmUgUF9KSVRPcGVyYXRpb25fRVN0SiBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3Vt
ZW50Rm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewog
ICAgIGNhc2UgVHlwZUludDg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jl
Z2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZWdpc3RlclNldC5oCShyZXZpc2lvbiAxNTYyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjE3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdS
ZWdpc3RlclNldF9oCi0jZGVmaW5lIERGR1JlZ2lzdGVyU2V0X2gKLQotI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJGUFJJbmZvLmgi
Ci0jaW5jbHVkZSAiR1BSSW5mby5oIgotI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KLQotbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgdG90YWxO
dW1iZXJPZlJlZ2lzdGVycyA9Ci0gICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVyczsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9m
Qnl0ZXNJblJlZ2lzdGVyU2V0ID0KLSAgICAodG90YWxOdW1iZXJPZlJlZ2lzdGVycyArIDcpID4+
IDM7Ci0KLXR5cGVkZWYgdWludDhfdCBSZWdpc3RlclNldFBPRFtudW1iZXJPZkJ5dGVzSW5SZWdp
c3RlclNldF07Ci0KLWNsYXNzIFJlZ2lzdGVyU2V0IHsKLXB1YmxpYzoKLSAgICBSZWdpc3RlclNl
dCgpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkJ5dGVzSW5SZWdp
c3RlclNldDsgaS0tOykKLSAgICAgICAgICAgIG1fc2V0W2ldID0gMDsKLSAgICB9Ci0gICAgCi0g
ICAgUmVnaXN0ZXJTZXQoY29uc3QgUmVnaXN0ZXJTZXRQT0QmIG90aGVyKQotICAgIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCi0g
ICAgICAgICAgICBtX3NldFtpXSA9IG90aGVyW2ldOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBS
ZWdpc3RlclNldFBPRCYgYXNQT0QoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQotICAgIAotICAg
IHZvaWQgY29weUluZm8oUmVnaXN0ZXJTZXRQT0QmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCi0g
ICAgICAgICAgICBvdGhlcltpXSA9IG1fc2V0W2ldOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNl
dChHUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgc2V0Qml0KEdQUkluZm86OnRvSW5kZXgocmVn
KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0R1BSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
KTsKLSAgICAgICAgc2V0Qml0KGluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhcihH
UFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgY2xlYXJCaXQoR1BSSW5mbzo6dG9JbmRleChyZWcp
KTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBnZXQoR1BSUmVnIHJlZykgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0gICAg
Ci0gICAgYm9vbCBnZXRHUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwotICAgICAg
ICByZXR1cm4gZ2V0Qml0KGluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJuIHRoZSBp
bmRleCd0aCBmcmVlIEdQUi4KLSAgICBHUFJSZWcgZ2V0RnJlZUdQUih1bnNpZ25lZCBpbmRleCA9
IDApIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFnZXRHUFJCeUluZGV4KGkp
ICYmICFpbmRleC0tKQotICAgICAgICAgICAgICAgIHJldHVybiBHUFJJbmZvOjp0b1JlZ2lzdGVy
KGkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIHNldChGUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgc2V0Qml0KEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBzZXRGUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwotICAgICAgICBz
ZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpbmRleCk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgY2xlYXIoRlBSUmVnIHJlZykKLSAgICB7Ci0gICAgICAgIGNsZWFyQml0KEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0g
ICAgCi0gICAgYm9vbCBnZXQoRlBSUmVnIHJlZykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBnZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjp0b0luZGV4KHJl
ZykpOwotICAgIH0KLSAgICAKLSAgICBib29sIGdldEZQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycyk7Ci0gICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMgKyBpbmRleCk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZv
PgotICAgIHZvaWQgc2V0QnlJbmRleCh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHNl
dChCYW5rSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICBib29sIGdldEJ5SW5kZXgodW5zaWduZWQgaW5kZXgp
Ci0gICAgewotICAgICAgICByZXR1cm4gZ2V0KEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7
Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIG51bWJlck9mU2V0R1BScygpIGNvbnN0Ci0gICAg
ewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFn
ZXRCaXQoaSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXN1bHQr
KzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICB1
bnNpZ25lZCBudW1iZXJPZlNldEZQUnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5zaWduZWQg
cmVzdWx0ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmICghZ2V0Qml0KEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzICsgaSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICByZXN1bHQrKzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAg
ICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZlNldFJlZ2lzdGVycygpIGNvbnN0Ci0gICAgewotICAg
ICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0b3Rh
bE51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAoIWdldEJpdChpKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJlc3VsdCsrOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICB2
b2lkIHNldEJpdCh1bnNpZ25lZCBpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51
bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgbV9zZXRbaSA+PiAzXSB8PSAoMSA8PCAoaSAmIDcp
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhckJpdCh1bnNpZ25lZCBpKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgbV9zZXRb
aSA+PiAzXSAmPSB+KDEgPDwgKGkgJiA3KSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZ2V0Qml0
KHVuc2lnbmVkIGkpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaSA8IHRvdGFsTnVtYmVy
T2ZSZWdpc3RlcnMpOwotICAgICAgICByZXR1cm4gISEobV9zZXRbaSA+PiAzXSAmICgxIDw8IChp
ICYgNykpKTsKLSAgICB9Ci0gICAgCi0gICAgUmVnaXN0ZXJTZXRQT0QgbV9zZXQ7Ci19OwotCi19
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbHNlIC8vIEVOQUJMRShERkdfSklUKSAtPiBz
byBpZiBERkcgaXMgZGlzYWJsZWQKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewot
Ci0vLyBEZWZpbmUgUmVnaXN0ZXJTZXRQT0QgdG8gc29tZXRoaW5nIHRoYXQgaXMgYSBQT0QsIGJ1
dCBpcyBvdGhlcndpc2UgdXNlbGVzcywKLS8vIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlZmVyIHRv
IHRoaXMgdHlwZSBpbiBjb2RlIHRoYXQgbWF5IGJlIGNvbXBpbGVkIHdoZW4KLS8vIHRoZSBERkcg
aXMgZGlzYWJsZWQuCi0KLXN0cnVjdCBSZWdpc3RlclNldFBPRCB7IH07Ci0KLX0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5kaWYgLy8g
REZHUmVnaXN0ZXJTZXRfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jl
cGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVw
YXRjaC5jcHAJKHJldmlzaW9uIDE1NjIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQxOSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdSZXBhdGNoLmgiCi0KLSNpZiBFTkFCTEUoREZH
X0pJVCkKLQotI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkNhbGxGcmFtZUlu
bGluZXMuaCIKLSNpbmNsdWRlICJERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKLSNpbmNs
dWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgotI2luY2x1ZGUgIkRGR1RodW5rcy5oIgotI2luY2x1
ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5o
IgotI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0
YUlubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1zdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2Rl
QmxvY2sqIGNvZGVibG9jaywgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBuZXdD
YWxsZWVGdW5jdGlvbikKLXsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZWJs
b2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbik7
Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlv
biwgYm9vbCBjb21wYWN0KQotewotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2Rl
QmxvY2spOwotCi0gICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7Ci0K
LSAgICAvLyBQYXRjaCB0aGUgc3RydWN0dXJlIGNoZWNrICYgdGhlIG9mZnNldCBvZiB0aGUgbG9h
ZC4KLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2hlY2tJbW1Ub0NhbGwpLCBzdHJ1Y3R1cmUpOwotICAgIHJlcGF0Y2hCdWZmZXIuc2V0TG9hZElu
c3RydWN0aW9uSXNBY3RpdmUoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmNvbnZlcnRpYmxl
TG9hZEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0b3JhZ2VMb2FkKSwg
aXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAo
Y29tcGFjdCkKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zm
c2V0KSk7Ci0gICAgZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uo
b2Zmc2V0KSk7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlmIChjb21wYWN0KSB7Ci0g
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Rh
Z0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwotICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRh
dGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXls
b2FkTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFn
ZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShv
ZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRy
YW5zaXRpb25DaGVjaygKLSAgICBKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAg
TWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2Fz
ZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09
IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZh
bGlkKCkpIHsKLSAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHVi
SW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotI2lmIERGR19FTkFCTEUoSklUX0FTU0VS
VCkKLSAgICAgICAgLy8gSWYgd2UgZXhlY3V0ZSB0aGlzIGNvZGUsIHRoZSBvYmplY3QgbXVzdCBo
YXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0LiBBc3NlcnQKLSAgICAgICAgLy8gdGhpcyBpbiBk
ZWJ1ZyBtb2Rlcy4KLSAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9r
ID0gaml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSk7Ci0gICAgICAgIGppdC5icmVha3BvaW50KCk7Ci0gICAgICAgIG9rLmxp
bmsoJmppdCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsK
LSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoUHRyKAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU1ZhbHVlIHBy
b3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywKLSAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZh
aWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKHByb3RvdHlwZS5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxs
KCkpOwotICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgcHJv
dG90eXBlLmFzQ2VsbCgpLCBwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBqaXQsCi0gICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci19
Ci0KLXN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVm
ZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciB0YXJnZXQpCi17Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBh
dGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVw
bGFjZVdpdGhKdW1wKAotICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJs
ZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcygKLSAgICAgICAgICAgICAgICBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAg
ICAgIC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpKSwK
LSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAotICAgICAgICBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAgc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAotICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCh0YXJnZXQpKTsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVTY3JhdGNoKE1hY3Jv
QXNzZW1ibGVyJiBzdHViSml0LCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBHUFJSZWcgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wJiBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzKQotewotICAg
IGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBzdHViSml0LnBvcChzY3JhdGNo
R1BSKTsKLSAgICAgICAgCi0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4gcG9wIHNj
cmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFjay4KLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmso
JnN0dWJKaXQpOwotICAgICAgICAKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0g
ICAgICAgIAotICAgICAgICBmYWlsID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgCi0gICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotfQotCi1zdGF0aWMg
dm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVl
ZFRvUmVzdG9yZVNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMs
IENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nh
c2VCZWdpbikKLXsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7
Ci0gICAgICAgIAotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGZhaWwsIHNsb3dDYXNlQmVnaW4pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBkaXJlY3RseSBiYWNrIHRvIG5vcm1h
bCBwYXRoCi0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIHNsb3dDYXNlQmVnaW4p
OwotfQotCi1zdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hC
dWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAgICBsaW5r
UmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNz
LCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9TbG93Q2FzZSkpOwotfQotCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NT
dHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9j
YXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91
dGluZSkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLQotICAgIE1hY3JvQXNzZW1ibGVy
IHN0dWJKaXQ7Ci0gICAgICAgIAotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC5kZmcudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0
ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNl
OwotICAgIAotICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNj
cmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgIHNjcmF0Y2hHUFIg
PSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIsIHJl
c3VsdFRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOwot
ICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgCi0gICAgZmFpbHVyZUNh
c2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgCi0gICAg
U3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0
ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewot
ICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZv
ckxvb2t1cChleGVjKSk7Ci0gICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAg
ICAgICAgICAgIHByb3RvT2JqZWN0LCBwcm90b09iamVjdC0+c3RydWN0dXJlKCksIGV4ZWMtPmNv
ZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcywg
c2NyYXRjaEdQUik7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Ci0gICAgfQot
ICAgIAotICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgc3R1YkppdC5sb2FkNjQocHJvdG9PYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0
KG9mZnNldCksIHJlc3VsdEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBz
dHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QtPmxv
Y2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkpLCByZXN1bHRHUFIpOwotICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAg
ICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJl
c3VsdEdQUik7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIo
cHJvdG9PYmplY3QtPmJ1dHRlcmZseUFkZHJlc3MoKSwgcmVzdWx0R1BSKTsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSksIHJlc3VsdEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAg
ICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNl
dEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3Vs
dFRhZ0dQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwotICAgIAotICAgIGVtaXRSZXN0b3JlU2NyYXRj
aChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFp
bCwgZmFpbHVyZUNhc2VzKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
JnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKLSAgICAKLSAgICBsaW5rUmVzdG9yZVNjcmF0
Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWls
dXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgCi0gICAgc3R1YlJv
dXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKLSAgICAgICAgcGF0Y2hCdWZmZXIs
Ci0gICAgICAgICgiREZHIHByb3RvdHlwZSBjaGFpbiBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJldHVy
biBwb2ludCAlcCIsCi0gICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5k
YXRhKCksIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci19Ci0KLXN0YXRpYyBi
b29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRl
c3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBjaGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAot
ICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJl
Y3Vyc2lvbi4KLQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7
Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgCi0gICAgaWYgKGlzSlNBcnJheShiYXNl
VmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7
Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgR1BSUmVn
IHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZh
bHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJz
KS5nZXRGcmVlR1BSKCk7Ci0gICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxz
ZTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2Ny
YXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIs
IHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNo
R1BSKTsKLSAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNl
czsKLSAgICAgICAKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsgCi0g
ICAgICAgIHN0dWJKaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
U3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBm
YWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7
Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
SW5kZXhpbmdTaGFwZU1hc2spKSk7Ci0gICAgICAgIAotICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigwKSkpOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5vcjY0
KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsK
LSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0dWJKaXQubW92ZShzY3JhdGNoR1BS
LCByZXN1bHRHUFIpOwotICAgICAgICBzdHViSml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMigweGZmZmZmZmZmKSwgcmVzdWx0VGFnR1BSKTsgLy8gSlNWYWx1ZTo6SW50MzJUYWcKLSNl
bmRpZgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0gICAg
ICAgIAotICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNj
cmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgICAg
IAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNvZGVCbG9j
ayk7Ci0gICAgICAgIAotICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5l
ZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2Vz
KTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09E
RV9GT1JfREZHX1NUVUIoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgi
REZHIEdldEJ5SWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAot
ICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKLSAgICAgICAgCi0gICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2Rl
QmxvY2spOwotICAgICAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8s
IHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlk
KTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICAvLyBG
SVhNRTogc2hvdWxkIHN1cHBvcnQgbGVuZ3RoIGFjY2VzcyBmb3IgU3RyaW5nLgotCi0gICAgLy8g
RklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KLSAgICBpZiAoIWJh
c2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTQ2VsbCogYmFz
ZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlQ2VsbC0+c3RydWN0dXJlKCk7Ci0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0Fy
ZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBPcHRpbWl6ZSBz
ZWxmIGFjY2Vzcy4KLSAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgewotICAg
ICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCi0gICAgICAgICAgICB8fCAhTWFjcm9B
c3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNldFJlbGF0
aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkpIHsKLSAgICAgICAgICAg
IHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVy
YXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8s
IHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlz
dCwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqdm0sIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSBnZXR0ZXJzIGFuZCBz
ZXR0ZXJzCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zm
c2V0KCk7Ci0gICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFp
bkFjY2VzcyhleGVjLCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJhc2UoKSwgcHJvcGVydHlOYW1lLCBv
ZmZzZXQpOwotICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0
cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgCi0gICAgZ2VuZXJhdGVQcm90b0No
YWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZz
ZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dD
YXNlKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVy
LCBzdHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9u
R2V0QnlJZEJ1aWxkTGlzdCk7Ci0gICAgCi0gICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hh
aW4sIGNvdW50LCB0cnVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCByZXBhdGNoR2V0
QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQotewotICAgIGJvb2wgY2FjaGVkID0gdHJ5Q2FjaGVHZXRCeUlEKGV4ZWMs
IGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7Ci0gICAgaWYgKCFjYWNo
ZWQpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwotfQotCi1zdGF0aWMgYm9vbCBnZXRQ
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QoCi0gICAgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdComIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgaW50JiBsaXN0SW5kZXgsCi0g
ICAgQ29kZUxvY2F0aW9uTGFiZWwmIHNsb3dDYXNlKQotewotICAgIHNsb3dDYXNlID0gc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIAotICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09
IGFjY2Vzc191bnNldCkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3R1YkluZm8uc3R1YlJv
dXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2Vs
Zkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAwLCBmYWxzZSk7Ci0gICAgICAgIGxpc3RJ
bmRleCA9IDA7Ci0gICAgfSBlbHNlIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19n
ZXRfYnlfaWRfc2VsZikgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3R1YkluZm8uc3R1YlJv
dXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
SklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShzbG93Q2FzZSksIHN0dWJJ
bmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7Ci0gICAg
ICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
LCAxLCB0cnVlKTsKLSAgICAgICAgbGlzdEluZGV4ID0gMTsKLSAgICB9IGVsc2UgaWYgKHN0dWJJ
bmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikgewotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgc2xvd0Nhc2UgPSBD
b2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0g
ICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5mby5z
dHViUm91dGluZSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5n
ZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCksIHRydWUpOwotICAgICAg
ICBzdHViSW5mby5zdHViUm91dGluZS5jbGVhcigpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0
QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSwgZmFsc2UpOwotICAgICAg
ICBsaXN0SW5kZXggPSAxOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOwotICAgICAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5z
dHJ1Y3R1cmVMaXN0OwotICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmdldEJ5SWRTZWxm
TGlzdC5saXN0U2l6ZTsKLSAgICAgICAgc2xvd0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFJF
TEVBU0VfQVNTRVJUKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSklUU3R1
YlJvdXRpbmUqIHN0dWJSb3V0aW5lKQotewotICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFj
Y2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOwotICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIGlmIChzdHViSW5mby51LmdldEJ5SWRT
ZWxmTGlzdC5kaWRTZWxmUGF0Y2hpbmcpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
Ci0gICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAot
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNr
KSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgcmVwbGFjZVdpdGhKdW1w
KHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci19
Ci0KLXN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmICghYmFzZVZh
bHVlLmlzQ2VsbCgpCi0gICAgICAgIHx8ICFzbG90LmlzQ2FjaGVhYmxlKCkKLSAgICAgICAgfHwg
IWJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNo
ZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBK
U0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotICAgIAotICAgIGlmIChzbG90LnNsb3RC
YXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgIGlmICghc3R1YkluZm8ucGF0Y2guZGZnLnJl
Z2lzdGVyc0ZsdXNoZWQpIHsKLSAgICAgICAgICAgIC8vIFdlIGNhbm5vdCBkbyBhcyBtdWNoIGlu
bGluZSBjYWNoaW5nIGlmIHRoZSByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCBwcmlvciB0byB0
aGlzIEdldEJ5SWQuIEluIHBhcnRpY3VsYXIsCi0gICAgICAgICAgICAvLyBub24tVmFsdWUgY2Fj
aGVkIHByb3BlcnRpZXMgcmVxdWlyZSBwbGFudGluZyBjYWxscywgd2hpY2ggcmVxdWlyZXMgcmVn
aXN0ZXJzIHRvIGhhdmUgYmVlbiBmbHVzaGVkLiBUaHVzLAotICAgICAgICAgICAgLy8gaWYgcmVn
aXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQsIGRvbid0IGRvIG5vbi1WYWx1ZSBjYWNoaW5nLgotICAg
ICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGludCBsaXN0
SW5kZXg7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlOwotCi0gICAgICAgIGlm
ICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc2xvd0Nhc2UpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgc3R1YkluZm8udS5nZXRCeUlkU2Vs
Zkxpc3QubGlzdFNpemUrKzsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcu
dmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAgIAotICAg
ICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdyb25nU3RydWN0ID0gc3R1YkppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgc3RyYXRlZ3kgd2UgdXNl
IGZvciBzdHVicyBpcyBhcyBmb2xsb3dzOgotICAgICAgICAvLyAxKSBDYWxsIERGRyBoZWxwZXIg
dGhhdCBjYWxscyB0aGUgZ2V0dGVyLgotICAgICAgICAvLyAyKSBDaGVjayBpZiB0aGVyZSB3YXMg
YW4gZXhjZXB0aW9uLCBhbmQgaWYgdGhlcmUgd2FzLCBjYWxsIHlldCBhbm90aGVyCi0gICAgICAg
IC8vICAgIGhlbHBlci4KLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNEaXJlY3QgPSBmYWxzZTsK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgaGFuZGxlckNhbGw7Ci0gICAgICAgIEZ1bmN0aW9uUHRyIG9wZXJh
dGlvbkZ1bmN0aW9uOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOwotICAg
ICAgICAKLSAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVy
KCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVn
KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZUdQUiAhPSBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNh
Y2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAg
c3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVs
YXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIp
OwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25GdW5jdGlvbiA9IG9wZXJhdGlv
bkNhbGxHZXR0ZXI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0dWJK
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICAgICAgICAgICAgICBiYXNl
R1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihG
dW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKS5leGVjdXRhYmxlQWRkcmVzcygpKSwKLSAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoaWRlbnQuaW1w
bCgpKSk7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRpb25DYWxs
Q3VzdG9tR2V0dGVyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAv
LyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRo
ZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQotICAgICAgICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBt
YWRlIGl0IGZyb20uIEl0IGp1c3Qgc28gaGFwcGVucyB0byBiZSB0aGUgcGxhY2UgdGhhdCB3ZSBh
cmUgYXQKLSAgICAgICAgICAgIC8vIHJpZ2h0IG5vdyEKLSAgICAgICAgICAgIHN0dWJKaXQuc3Rv
cmUzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4ZWMt
PmxvY2F0aW9uQXNSYXdCaXRzKCkpLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFn
Rm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2Fs
bCgpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICAgICAgc3R1Ykpp
dC5zZXR1cFJlc3VsdHMocmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCi0gICAgICAg
ICAgICBzdWNjZXNzID0gc3R1YkppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJ
bnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1Ykpp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSk7Ci0gICAgICAgICAgICBoYW5kbGVyQ2Fs
bCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICAgICAgc3R1YkppdC5qdW1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNJbmxp
bmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BS
KTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKGJhc2VHUFIgPT0gcmVzdWx0VGFnR1BSKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSks
IHJlc3VsdEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQ
Uik7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIp
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90
LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICAgICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVs
YXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICAg
ICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsK
LSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVt
cCgpOwotICAgICAgICAgICAgaXNEaXJlY3QgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBjb2RlQmxvY2spOwotICAgICAg
ICAKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayh3cm9uZ1N0cnVjdCwgc2xvd0Nhc2UpOwotICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKLSAg
ICAgICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVy
YXRpb25DYWxsLCBvcGVyYXRpb25GdW5jdGlvbik7Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9
Ci0gICAgICAgICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgICAgICAgICBGSU5B
TElaRV9ERkdfQ09ERSgKLSAgICAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAg
ICAgICAgICAgICAgICgiREZHIEdldEJ5SWQgcG9seW1vcnBoaWMgbGlzdCBhY2Nlc3MgZm9yICVz
LCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVj
LT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICAgICAgICAgKnZt
LAotICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAg
ICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSk7Ci0gICAgICAgIAotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3Rb
bGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91
dGluZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7Ci0gICAgICAgIAotICAgICAgICBwYXRjaEp1bXBU
b0dldEJ5SWRTdHViKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKLSAg
ICAgICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAx
KTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkt
PnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwgIXNsb3QuaXNDYWNoZWFi
bGVWYWx1ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgIHNpemVfdCBjb3VudCA9IG5vcm1hbGl6
ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZVZhbHVlLCBzbG90LnNsb3RC
YXNlKCksIGlkZW50LCBvZmZzZXQpOwotICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBl
Q2hhaW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90
b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgCi0gICAg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7
Ci0gICAgaW50IGxpc3RJbmRleDsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZTsKLSAg
ICBpZiAoIWdldFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCh2bSwgY29kZUJsb2NrLCBzdHViSW5m
bywgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIHNsb3dDYXNlKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5s
aXN0U2l6ZSsrOwotICAgIAotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7
Ci0gICAgCi0gICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywg
cHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
RG9uZSksIHNsb3dDYXNlLCBzdHViUm91dGluZSk7Ci0gICAgCi0gICAgcG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgdHJ1ZSk7Ci0gICAgCi0gICAgcGF0Y2hK
dW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7
Ci0gICAgCi0gICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUgLSAxKTsKLX0KLQotdm9pZCBidWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgYm9v
bCBkb250Q2hhbmdlQ2FsbCA9IHRyeUJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVlLCBw
cm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKTsKLSAgICBpZiAoIWRvbnRDaGFuZ2VDYWxsKQot
ICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKLX0KLQotc3RhdGljIFZfREZHT3BlcmF0aW9u
X0VKQ0kgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5
U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQotewotICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKSB7Ci0gICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdDsKLSAgICB9Ci0gICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKLSAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdDsKLX0KLQotc3RhdGljIFZfREZHT3BlcmF0aW9uX0VKQ0kg
YXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlT
bG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgaWYgKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpIHsKLSAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3Q7Ci0gICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0OwotICAgIH0KLSAgICBpZiAocHV0S2luZCA9
PSBEaXJlY3QpCi0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
QnVpbGRMaXN0OwotICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0
OwotfQotCi1zdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCi0gICAgRXhlY1N0YXRlKiBl
eGVjLAotICAgIEpTVmFsdWUsCi0gICAgY29uc3QgSWRlbnRpZmllciYsCi0gICAgY29uc3QgUHV0
UHJvcGVydHlTbG90JiBzbG90LAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAg
ICBQdXRLaW5kLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIENvZGVMb2NhdGlvbkxh
YmVsIGZhaWx1cmVMYWJlbCwKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGlu
ZSkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwotI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BSUmVnIHZh
bHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIp
OwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2guZGZn
LnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3Jh
dGNoID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIEdQ
UlJlZyBzY3JhdGNoR1BSMjsKLSAgICBjb25zdCBib29sIHdyaXRlQmFycmllck5lZWRlZCA9IHRy
dWU7Ci0jZWxzZQotICAgIGNvbnN0IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gZmFsc2U7Ci0j
ZW5kaWYKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OwotICAgIAotICAgIGlmIChz
Y3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcgJiYgKHdyaXRlQmFycmllck5lZWRlZCB8fCBpc091
dE9mTGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIo
YmFzZUdQUiwgdmFsdWVHUFIpOwotI2Vsc2UKLSAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0
aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUik7
Ci0jZW5kaWYKLSAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgICAgICBz
dHViSml0LnB1c2goc2NyYXRjaEdQUik7Ci0gICAgfQotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgYmFkU3RydWN0dXJlID0gc3R1YkppdC5icmFuY2hQdHIoCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSkpOwotICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BS
T0ZJTElORykKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHNjcmF0Y2hHUFIyID0gU3BlY3VsYXRp
dmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwot
I2Vsc2UKLSAgICBzY3JhdGNoR1BSMiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BS
KGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUiwgc2NyYXRjaEdQUik7Ci0jZW5kaWYKLSAg
ICBzdHViSml0LnB1c2goc2NyYXRjaEdQUjIpOwotICAgIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJh
cnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIFdyaXRlQmFy
cmllckZvclByb3BlcnR5QWNjZXNzKTsKLSAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSMik7Ci0j
ZW5kaWYKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGlmIChpc0lubGluZU9mZnNldChz
bG90LmNhY2hlZE9mZnNldCgpKSkKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsK
LSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklu
bGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0g
ICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5J
bmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBm
YWlsdXJlOwotICAgIAotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBz
dHViSml0LnBvcChzY3JhdGNoR1BSKTsKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgp
OwotICAgICAgICAKLSAgICAgICAgYmFkU3RydWN0dXJlLmxpbmsoJnN0dWJKaXQpOwotICAgICAg
ICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVt
cCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAg
ICAgICAgZmFpbHVyZSA9IGJhZFN0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwotICAgICAgICAgICAgCi0gICAgc3R1
YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKLSAgICAgICAgcGF0Y2hCdWZm
ZXIsCi0gICAgICAgICgiREZHIFB1dEJ5SWQgcmVwbGFjZSBzdHViIGZvciAlcywgcmV0dXJuIHBv
aW50ICVwIiwKLSAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEo
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAg
ICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJl
c3MoKSkpOwotfQotCi1zdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCi0gICAgRXhl
Y1N0YXRlKiBleGVjLAotICAgIEpTVmFsdWUsCi0gICAgY29uc3QgSWRlbnRpZmllciYsCi0gICAg
Y29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywKLSAgICBQdXRLaW5kIHB1dEtpbmQsCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0g
ICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCi0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlw
ZUNoYWluLAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCwKLSAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKLQotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBHUFJSZWcgdmFs
dWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRh
Z0dQUik7Ci0jZW5kaWYKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+
KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7Ci0gICAgCi0gICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycyk7Ci0g
ICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBh
bGxvY2F0b3IubG9jayh2YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICBhbGxvY2F0b3IubG9jayh2
YWx1ZUdQUik7Ci0gICAgCi0gICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0pOwotICAgICAgICAg
ICAgCi0gICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSBiYXNlR1BSKTsKLSAgICBBU1NFUlQoc2Ny
YXRjaEdQUjEgIT0gdmFsdWVHUFIpOwotICAgIAotICAgIGJvb2wgbmVlZFNlY29uZFNjcmF0Y2gg
PSBmYWxzZTsKLSAgICBib29sIG5lZWRUaGlyZFNjcmF0Y2ggPSBmYWxzZTsKLSNpZiBFTkFCTEUo
V1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgbmVlZFNlY29uZFNjcmF0Y2ggPSB0cnVlOwot
I2VuZGlmCi0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIG5lZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsKLSAg
ICAgICAgbmVlZFRoaXJkU2NyYXRjaCA9IHRydWU7Ci0gICAgfQotCi0gICAgR1BSUmVnIHNjcmF0
Y2hHUFIyOwotICAgIGlmIChuZWVkU2Vjb25kU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BS
MiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0
Y2hHUFIyICE9IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gdmFsdWVH
UFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUjEpOwotICAgIH0g
ZWxzZQotICAgICAgICBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWc7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIzOwotICAgIGlmIChuZWVkVGhpcmRTY3JhdGNoKSB7Ci0gICAgICAgIHNjcmF0Y2hH
UFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICBBU1NFUlQoc2Ny
YXRjaEdQUjMgIT0gYmFzZUdQUik7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSB2YWx1
ZUdQUik7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMSk7Ci0gICAg
ICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBzY3JhdGNoR1BSMik7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgIAotICAgIGFsbG9j
YXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhzdHViSml0KTsKLQotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgICAgICAgICAKLSAgICBB
U1NFUlQob2xkU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlk
YXRlZCgpKTsKLSAgICAKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG9sZFN0cnVjdHVyZSkpKTsKLSAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hl
Y2soCi0gICAgICAgIG9sZFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVC
bG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLAotICAgICAgICBzY3JhdGNo
R1BSMSk7Ci0gICAgICAgICAgICAKLSAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKLSAg
ICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBwcm90b3R5cGVDaGFpbi0+
aGVhZCgpOyAqaXQ7ICsraXQpIHsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25D
aGVjaygKLSAgICAgICAgICAgICAgICAoKml0KS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNv
ZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwgZmFpbHVyZUNhc2VzLAotICAgICAgICAgICAg
ICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmIEVOQUJMRShXUklURV9C
QVJSSUVSX1BST0ZJTElORykKLSAgICBBU1NFUlQobmVlZFNlY29uZFNjcmF0Y2gpOwotICAgIEFT
U0VSVChzY3JhdGNoR1BSMiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAvLyBNdXN0IGFsd2F5cyBl
bWl0IHRoaXMgd3JpdGUgYmFycmllciBhcyB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gaXRzZWxm
IHJlcXVpcmVzIGl0Ci0gICAgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihzdHViSml0LCBi
YXNlR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllckZvclByb3BlcnR5
QWNjZXNzKTsKLSNlbmRpZgotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93
UGF0aDsKLSAgICAKLSAgICBib29sIHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9IGZhbHNlOwotICAg
IAotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICBDb3Bp
ZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2bS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9y
KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSkgewotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1f
Y3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKHN0dWJKaXQuYnJhbmNoU3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKSk7Ci0gICAgICAgICAg
ICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJl
bnRSZW1haW5pbmcpOwotICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwot
ICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVz
cygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOwot
ICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihz
aXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBzaXplX3Qgb2xkU2l6ZSA9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAq
IHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSMyk7Ci0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9j
dXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBl
bmQoc3R1YkppdC5icmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKLSAgICAgICAgICAg
IHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZyk7Ci0gICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7Ci0g
ICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNz
KCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7Ci0g
ICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNp
emVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIC8vIFdlIGhhdmUgc2Ny
YXRjaEdQUjEgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwgc2NyYXRj
aEdQUjIgPSBhdmFpbGFibGUKLSAgICAgICAgICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7
IG9mZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7IG9mZnNldCArPSBzaXpl
b2Yodm9pZCopKSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIzLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNp
emVvZih2b2lkKikpKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCAt
KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRj
aEdQUjEsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSkpOwotICAgICAgICBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSB0cnVlOwotICAg
IH0KLQotICAgIHN0dWJKaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zm
c2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoIXNjcmF0Y2hH
UFIxSGFzU3RvcmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSAgICAgICAg
c3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3Jh
Z2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0
dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9y
YWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRl
cmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAg
c3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2Yo
SlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnRhZykpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBz
dWNjZXNzOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7Ci0gICAgICAgICAgICAK
LSAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKLSAgICAgICAgYWxsb2Nh
dG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7Ci0gICAgICAgIHN1
Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLQotICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmc3R1
YkppdCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5n
KHN0dWJKaXQpOwotICAgICAgICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBvcGVyYXRpb25DYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nl
c3NJblNsb3dQYXRoOwotICAgIAotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHNsb3dQ
YXRoLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVS
ZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIq
IHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2ly
ZWRTY3JhdGNoQnVmZmVyU2l6ZSgpKTsKLSAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJl
Z2lzdGVyc1RvU2NyYXRjaEJ1ZmZlcihzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BS
MSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0
dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwg
dmFsdWVHUFIpOwotI2Vsc2UKLSAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVH
UFIsIHZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBvcGVyYXRpb25DYWxsID0gc3R1Ykpp
dC5jYWxsKCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3Jh
dGNoQnVmZmVyKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAg
c3VjY2Vzc0luU2xvd1BhdGggPSBzdHViSml0Lmp1bXAoKTsKLSAgICB9Ci0gICAgCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7Ci0g
ICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAg
aWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQotICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7Ci0gICAgZWxzZQotICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGZhaWx1cmVDYXNlcywgZmFpbHVyZUxhYmVsKTsKLSAgICBpZiAoc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkg
ewotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvblJlYWxs
b2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNj
ZXNzSW5TbG93UGF0aCwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIH0KLSAgICAKLSAgICBz
dHViUm91dGluZSA9Ci0gICAgICAgIGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgICAgICAgICAg
RklOQUxJWkVfREZHX0NPREUoCi0gICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAg
ICAgICAgICAgKCJERkcgUHV0QnlJZCAlc3RyYW5zaXRpb24gc3R1YiAoJXAgLT4gJXApIGZvciAl
cywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA/ICJy
ZWFsbG9jYXRpbmcgIiA6ICIiLAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0
cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2so
KSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgICAgICp2bSwKLSAgICAgICAgICAgIGV4
ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUpOwotfQotCi1zdGF0aWMgYm9vbCB0cnlDYWNoZVB1
dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLQotICAgIGlm
ICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSlNDZWxs
KiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9
IHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpOwotICAgIAotICAgIGlmICghc2xvdC5pc0NhY2hlYWJs
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hl
YWJsZURpY3Rpb25hcnkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gT3B0aW1p
emUgc2VsZiBhY2Nlc3MuCi0gICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkgewotICAg
ICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewot
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTa2lwIG9wdGlt
aXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUK
LSAgICAgICAgICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCi0gICAg
ICAgICAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2Ci0gICAgICAgICAgICAg
ICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVk
IHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcwotICAgICAgICAgICAgLy8gaW5kZXhpbmcg
c3RvcmFnZS4KLSAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5n
SGVhZGVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAobm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZUNlbGwpID09
IEludmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9
IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKLSAgICAgICAgICAgICAgICBleGVjLCBiYXNlVmFs
dWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwKLSAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUsIG9sZFN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sCi0gICAgICAgICAgICAgICAgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0
aW5lKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKLSAgICAg
ICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAg
ICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVj
ayksCi0gICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlk
RnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHVi
SW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIHB1dEtpbmQgPT0g
RGlyZWN0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywg
c3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1
dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSwgZmFsc2UpOwotICAgICAgICBzdHViSW5mby5p
bml0UHV0QnlJZFJlcGxhY2UoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1
Y3R1cmUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQot
ewotICAgIGJvb2wgY2FjaGVkID0gdHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgcHJv
cGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7Ci0gICAgaWYgKCFjYWNoZWQpCi0g
ICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5k
KSk7Ci19Ci0KLXN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0
S2luZCBwdXRLaW5kKQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJs
b2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBpZiAoIWJhc2VWYWx1ZS5p
c0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBi
YXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+
c3RydWN0dXJlKCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnBy
ZXZpb3VzSUQoKTsKLSAgICAKLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNz
LgotICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKLSAgICAgICAgUG9seW1vcnBo
aWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0
eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVh
bGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQotICAgICAgICAgICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0
byBtYWtlIGl0IGhhcHBlbi4KLSAgICAgICAgICAgIGlmIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVycyA8IDYKLSAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCi0gICAgICAgICAgICAgICAg
JiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6aW5n
IHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCi0g
ICAgICAgICAgICAvLyBpbmRleGluZyBzdG9yYWdlLgotICAgICAgICAgICAgaWYgKG9sZFN0cnVj
dHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub3JtYWxpemVQcm90b3R5cGVD
aGFpbihleGVjLCBiYXNlQ2VsbCkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RydWN0dXJl
Q2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0byBjcmVh
dGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5LgotICAgICAg
ICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20oCi0gICAgICAgICAgICAg
ICAgcHV0S2luZCwgc3R1YkluZm8sCi0gICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xv
d0Nhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZW1pdFB1dFRyYW5zaXRpb25TdHVi
KAotICAgICAgICAgICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBz
dHViSW5mbywgcHV0S2luZCwKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9sZFN0cnVjdHVy
ZSwgcHJvdG90eXBlQ2hhaW4sCi0gICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlz
dC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLAotICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5l
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKAotICAgICAgICAg
ICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgICp2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICAgICAgb2xk
U3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAotICAgICAgICAgICAgICAgICAg
ICBzdHViUm91dGluZSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UncmUg
bm93IGNvbW1pdHRlZCB0byBjcmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1kYXRh
IGFjY29yZGluZ2x5LgotICAgICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6
OmZyb20oCi0gICAgICAgICAgICAgICAgcHV0S2luZCwgc3R1YkluZm8sCi0gICAgICAgICAgICAg
ICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
ZW1pdFB1dFJlcGxhY2VTdHViKAotICAgICAgICAgICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgcHJv
cGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwKLSAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwg
c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3Mo
Ci0gICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6cmVwbGFjZSgKLSAgICAgICAgICAgICAg
ICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUsIHN0dWJSb3V0aW5lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChsaXN0LT5pc0Z1bGwoKSkKLSAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9u
KHNsb3QsIHB1dEtpbmQpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgYm9vbCBjYWNoZWQgPSB0cnlCdWlsZFB1
dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywg
cHV0S2luZCk7Ci0gICAgaWYgKCFjYWNoZWQpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNv
ZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJp
Y1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Ci19Ci0KLXN0YXRpYyBib29sIHRyeVJl
cGF0Y2hJbigKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGJvb2wgd2FzRm91bmQsCi0gICAgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKCFiYXNlLT5zdHJ1Y3R1
cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgaWYgKHdhc0ZvdW5kKSB7Ci0gICAgICAgIGlmICghc2xvdC5pc0NhY2hl
YWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCk7Ci0g
ICAgCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0SWdub3JlZDsKLSAgICBzaXplX3QgY291bnQg
PSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2UsIHdhc0Zv
dW5kID8gc2xvdC5zbG90QmFzZSgpIDogSlNWYWx1ZSgpLCBpZGVudCwgb2Zmc2V0SWdub3JlZCk7
Ci0gICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0OwotICAgIGludCBsaXN0SW5kZXg7Ci0gICAgCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsID0gc3R1YkluZm8uaG90UGF0aEJlZ2luOwotICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWw7Ci0gICAgCi0gICAgaWYgKHN0dWJJbmZvLmFj
Y2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KSB7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKTsKLSAgICAgICAgc3R1
YkluZm8uaW5pdEluTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDApOwotICAgICAgICBz
bG93Q2FzZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
Ci0gICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0g
ICAgICAgIGxpc3RJbmRleCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfaW5fbGlzdCk7Ci0gICAgICAgIHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0g
ICAgICAgIGxpc3RJbmRleCA9IHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplOwotICAgICAgICBz
bG93Q2FzZUxhYmVsID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChsaXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgIFJlZlB0
cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgCi0gICAgewotICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VH
UFIpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJl
Z2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7
Ci0gICAgICAgIAotICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7Ci0gICAgICAgIAot
ICAgICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoOwotICAgICAgICBpZiAoc2NyYXRjaEdQ
UiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRp
dmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAg
IHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3Jh
dGNoID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGZhaWx1cmVDYXNlczsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5j
aFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSkpOwotICAgICAgICAKLSAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0
dXJlOwotICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewot
ICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUt
PnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgcHJvdG90eXBlLCBwcm90b3R5cGUtPnN0cnVj
dHVyZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAg
ICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1
cmUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAg
ICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdhc0ZvdW5kKSwg
cmVzdWx0R1BSKTsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc3VjY2VzcywgZmFpbDsKLSAgICAgICAgCi0gICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChz
dHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwg
ZmFpbHVyZUNhc2VzKTsKLSAgICAgICAgCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOwotCi0gICAgICAgIGxpbmtSZXN0b3Jl
U2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWws
IGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKLSAgICAgICAgCi0g
ICAgICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCi0gICAgICAg
ICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiREZHIEluIChmb3VuZCA9ICVzKSBzdHVi
IGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICB3YXNGb3VuZCA/ICJ5
ZXMiIDogIm5vIiwgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAotICAgICAg
ICAgICAgICAgIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgfQotICAg
IAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRy
dWUpOwotICAgIHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplKys7Ci0gICAgCi0gICAgUmVwYXRj
aEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uaG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldCgwKSwgQ29kZUxvY2F0aW9uTGFi
ZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICAKLSAgICByZXR1cm4gbGlzdElu
ZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOwotfQotCi12b2lkIHJlcGF0
Y2hJbigKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIGJvb2wgd2FzRm91bmQsCi0gICAgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKHRyeVJlcGF0Y2hJbihleGVj
LCBiYXNlLCBpZGVudCwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIG9wZXJhdGlvbkluKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoUmVw
YXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotewotICAgIGlmIChraW5kID09IENv
ZGVGb3JDYWxsKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0
b3IpLmNvZGUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKGtpbmQgPT0g
Q29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5r
R2VuZXJhdG9yKS5jb2RlKCkpOwotfQotCi12b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpT
RnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKTsK
LSAgICAKLSAgICAvLyBJZiB5b3UncmUgYmVpbmcgY2FsbC1saW5rZWQgZnJvbSBhIERGRyBjYWxs
ZXIgdGhlbiB5b3Ugb2J2aW91c2x5IGRpZG4ndCBnZXQgaW5saW5lZC4KLSAgICBpZiAoY2FsbGVl
Q29kZUJsb2NrKQotICAgICAgICBjYWxsZWVDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkID0gZmFsc2U7Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVj
LT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxv
Y2stPnZtKCk7Ci0gICAgCi0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNv
ZGVCbG9jayk7Ci0gICAgCi0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Ci0g
ICAgY2FsbExpbmtJbmZvLmNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2Fs
bExpbmtJbmZvLmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgY2FsbGVlKTsKLSAgICBjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxsZWUuc2V0KGV4ZWMtPmNh
bGxlckZyYW1lKCktPnZtKCksIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNh
bGxlZSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhl
ciwgY29kZVB0cik7Ci0gICAgCi0gICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKLSAgICAgICAgY2Fs
bGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGV4ZWMtPmNhbGxlckZyYW1lKCksICZjYWxs
TGlua0luZm8pOwotICAgIAotICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZt
LT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25z
dHJ1Y3QpOwotICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8s
IENvZGVGb3JDb25zdHJ1Y3QpOwotfQotCi12b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSogZXhl
YywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKLXsKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1l
KCktPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKLSAg
ICAKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKLSAg
ICAKLSAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBraW5k
KTsKLX0KLQotdm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGNvZGVQdHIpCi17Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7Ci0gICAgCi0g
ICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2Rl
QmxvY2soKTsKLSAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7Ci0gICAgCi0gICAg
R1BSUmVnIGNhbGxlZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oY2FsbExpbmtJbmZvLmNhbGxl
ZUdQUik7Ci0gICAgCi0gICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0sIGNhbGxlckNvZGVCbG9j
ayk7Ci0gICAgCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICAKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgc3R1YkppdC5i
cmFuY2hUZXN0NjQoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZUdQ
UiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0jZWxzZQotICAgIC8vIFdlIHdvdWxkIGhh
dmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCi0jZW5kaWYKLSAg
ICAKLSAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgIHN0dWJKaXQuYnJhbmNoUHRyKAotICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsKLSAgICAKLSAg
ICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgIHN0dWJKaXQuYnJhbmNoUHRyKAotICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKLSAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlKSkpOwotICAgIAot
ICAgIHN0dWJKaXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxl
ZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLAotICAgICAgICBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0dWJKaXQuc3Rv
cmU2NCgKLSAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCi0gICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbikpKTsKLSNlbHNl
Ci0gICAgc3R1YkppdC5zdG9yZVB0cigKLSAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
Ci0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2Nv
cGVDaGFpbikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgc3R1YkppdC5zdG9yZTMyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotI2VuZGlmCi0gICAgCi0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsKLSAgICBKSVRD
b21waWxlcjo6SnVtcCBkb25lID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgc2xvd1BhdGgu
bGluaygmc3R1YkppdCk7Ci0gICAgc3R1YkppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86Om5vbkFyZ0dQ
UjEpOwotI2VuZGlmCi0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBH
UFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNs
b3cgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgJnN0dWJKaXQsIGNhbGxlckNvZGVCbG9jayk7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGlu
ayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldCgwKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25M
YWJlbCh2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsK
LSAgICAKLSAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBh
ZG9wdFJlZihuZXcgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVfREZH
X0NPREUoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiREZHIGNsb3N1
cmUgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXQgJXAgKCVzKSIsCi0g
ICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExp
bmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDApLmV4ZWN1dGFibGVBZGRy
ZXNzKCksCi0gICAgICAgICAgICAgICAgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCB0b0NT
dHJpbmcocG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSkuZGF0YSgpKSksCi0gICAgICAgICp2
bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBleGVjdXRh
YmxlLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbikpOwotICAgIAotICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotICAgIAotICAgIHJlcGF0Y2hCdWZmZXIu
cmVwbGFjZVdpdGhKdW1wKAotICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mQnJhbmNoUHRy
V2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKSwKLSAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBsaW5r
U2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7Ci0g
ICAgCi0gICAgY2FsbExpbmtJbmZvLnN0dWIgPSBzdHViUm91dGluZS5yZWxlYXNlKCk7Ci0gICAg
Ci0gICAgQVNTRVJUKCFjYWxsZWVDb2RlQmxvY2sgfHwgY2FsbGVlQ29kZUJsb2NrLT5pc0luY29t
aW5nQ2FsbEFscmVhZHlMaW5rZWQoJmNhbGxMaW5rSW5mbykpOwotfQotCi12b2lkIHJlc2V0R2V0
QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCi17Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwotICAgIENvZGVMb2NhdGlvbkRhdGFM
YWJlbFB0ciBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRh
TGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNr
SW1tVG9DYWxsKTsKLSAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hh
YmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXZlcnRK
dW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAg
IFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJl
c3Moc3RydWN0dXJlTGFiZWwpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+
KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKSwKLSAgICAgICAgICAgICAgICBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVu
dXNlZFBvaW50ZXIpKTsKLSAgICB9Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0cnVjdHVy
ZUxhYmVsLCByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOwotI2Vsc2UKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOwotICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
Q29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2Fk
T3JTdG9yZSksIDApOwotI2VuZGlmCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFD
YWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci19Ci0KLXZvaWQg
cmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKLXsKLSAgICBWX0RGR09wZXJhdGlvbl9FSkNJIHVub3B0aW1pemVkRnVu
Y3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9ERkdPcGVyYXRpb25fRUpDST4oTWFjcm9Bc3NlbWJsZXI6
OnJlYWRDYWxsVGFyZ2V0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7Ci0gICAgVl9ERkdPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRGdW5jdGlvbjsKLSAg
ICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdCkKLSAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7
Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dEJ1aWxkTGlzdCkKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdCkKLSAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKLSAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgfQotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVu
Y3Rpb24pOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVMYWJlbCA9IHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90
KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKLSAgICBpZiAoTWFjcm9B
c3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkpIHsK
LSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJy
YW5jaFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRj
aGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BS
KSwKLSAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKTsKLSAgICB9Ci0gICAg
cmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0cnVjdHVyZUxhYmVsLCByZWludGVycHJldF9jYXN0PHZv
aWQqPih1bnVzZWRQb2ludGVyKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXBhdGNoQnVm
ZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKLSNlbHNl
Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRP
clN0b3JlKSwgMCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOwotI2VuZGlmCi0gICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNl
KSk7Ci19Ci0KLXZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1
YkluZm8uaG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldCgwKSwgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCShyZXZpc2lvbiAxNTYyMzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAt
MSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgREZHUmVwYXRjaF9oCi0jZGVmaW5lIERGR1JlcGF0Y2hfaAotCi0jaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkRG
R0pJVENvbXBpbGVyLmgiCi0jaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgotCi1uYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLXZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiwg
SlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVy
ZVN0dWJJbmZvJik7Ci12b2lkIGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7Ci12b2lkIGJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsK
LXZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7
Ci12b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2lu
ZCk7Ci12b2lkIHJlcGF0Y2hJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBjb25zdCBJZGVudGlmaWVy
JiwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8m
KTsKLXZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBK
U0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCk7Ci12b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQpOwotdm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiwg
Q2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlKiwgRXhlY3V0YWJsZUJhc2UqLCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIpOwotdm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYs
IFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwg
U3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3RydWN0
dXJlU3R1YkluZm8mKTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZWxzZSAvLyBF
TkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBKU0MgewotCi1jbGFzcyBSZXBhdGNoQnVmZmVyOwotc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZv
OwotCi1uYW1lc3BhY2UgREZHIHsKLQotaW5saW5lIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9p
ZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci1pbmxpbmUgTk9fUkVUVVJOX0RVRV9UT19DUkFT
SCB2b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLWlubGluZSBOT19SRVRVUk4gdm9pZCBy
ZXNldEluKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKLSNlbmRpZiAvLyBERkdSZXBhdGNoX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaAkocmV2aXNpb24gMTU2MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcl9oCi0jZGVmaW5lIERGR1NjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcl9oCi0KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLQotI2lmIEVOQUJM
RShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHUmVnaXN0ZXJTZXQuaCIKLSNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlci5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLS8vIFRo
aXMgY2xhc3MgcHJvdmlkZXMgYSBsb3ctbGV2ZWwgcmVnaXN0ZXIgYWxsb2NhdG9yIGZvciB1c2Ug
aW4gc3R1YnMuCi0KLWNsYXNzIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciB7Ci1wdWJsaWM6Ci0g
ICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzKQotICAgICAgICA6IG1fdXNlZFJlZ2lzdGVycyh1c2VkUmVnaXN0ZXJzKQotICAgICAgICAs
IG1fZGlkUmV1c2VSZWdpc3RlcnMoZmFsc2UpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgbG9jayhUIHJlZykgeyBtX2xvY2tlZFJlZ2lzdGVy
cy5zZXQocmVnKTsgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgotICAg
IHR5cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgYWxsb2NhdGVTY3JhdGNoKCkKLSAgICB7
Ci0gICAgICAgIC8vIEZpcnN0IHRyeSB0byBhbGxvY2F0ZSBhIHJlZ2lzdGVyIHRoYXQgaXMgdG90
YWxseSBmcmVlLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFua0luZm86Om51
bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgICAgIHR5cGVuYW1lIEJhbmtJbmZvOjpS
ZWdpc3RlclR5cGUgcmVnID0gQmFua0luZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChyZWcpCi0gICAgICAgICAgICAgICAgJiYgIW1fdXNl
ZFJlZ2lzdGVycy5nZXQocmVnKQotICAgICAgICAgICAgICAgICYmICFtX3NjcmF0Y2hSZWdpc3Rl
cnMuZ2V0KHJlZykpIHsKLSAgICAgICAgICAgICAgICBtX3NjcmF0Y2hSZWdpc3RlcnMuc2V0KHJl
Zyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlZzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgLy8gU2luY2UgdGhhdCBmYWlsZWQsIHRyeSB0byBhbGxvY2F0
ZSBhIHJlZ2lzdGVyIHRoYXQgaXMgbm90IHlldAotICAgICAgICAvLyBsb2NrZWQgb3IgdXNlZCBm
b3Igc2NyYXRjaC4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbmtJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgICAgICB0eXBlbmFtZSBCYW5rSW5mbzo6
UmVnaXN0ZXJUeXBlIHJlZyA9IEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAg
aWYgKCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVnKSAmJiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdl
dChyZWcpKSB7Ci0gICAgICAgICAgICAgICAgbV9zY3JhdGNoUmVnaXN0ZXJzLnNldChyZWcpOwot
ICAgICAgICAgICAgICAgIG1fZGlkUmV1c2VSZWdpc3RlcnMgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIHJldHVybiByZWc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIC8vIFdlIGZhaWxlZC4KLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgLy8gTWFrZSBzb21l
IHNpbGx5IGNvbXBpbGVycyBoYXBweS4KLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVu
YW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGU+KC0xKTsKLSAgICB9Ci0gICAgCi0gICAgR1BSUmVn
IGFsbG9jYXRlU2NyYXRjaEdQUigpIHsgcmV0dXJuIGFsbG9jYXRlU2NyYXRjaDxHUFJJbmZvPigp
OyB9Ci0gICAgRlBSUmVnIGFsbG9jYXRlU2NyYXRjaEZQUigpIHsgcmV0dXJuIGFsbG9jYXRlU2Ny
YXRjaDxGUFJJbmZvPigpOyB9Ci0gICAgCi0gICAgYm9vbCBkaWRSZXVzZVJlZ2lzdGVycygpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9kaWRSZXVzZVJlZ2lzdGVyczsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhNYWNyb0Fzc2Vt
YmxlciYgaml0KQotICAgIHsKLSAgICAgICAgaWYgKCFtX2RpZFJldXNlUmVnaXN0ZXJzKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICht
X3NjcmF0Y2hSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMuZ2V0
RlBSQnlJbmRleChpKSkgewotICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMig4KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdpc3Rlcihp
KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVy
cy5nZXRHUFJCeUluZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQot
ICAgICAgICAgICAgICAgIGppdC5wdXNoKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgcmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGlu
ZyhNYWNyb0Fzc2VtYmxlciYgaml0KQotICAgIHsKLSAgICAgICAgaWYgKCFtX2RpZFJldXNlUmVn
aXN0ZXJzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAg
IGlmIChtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3Rl
cnMuZ2V0R1BSQnlJbmRleChpKSkKLSAgICAgICAgICAgICAgICBqaXQucG9wKEdQUkluZm86OnRv
UmVnaXN0ZXIoaSkpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9zY3JhdGNo
UmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5k
ZXgoaSkpIHsKLSAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEZQUkluZm86OnRvUmVnaXN0ZXIoaSkpOwotICAgICAgICAg
ICAgICAgIGppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMig4KSwgTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBkZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemUoKSBj
b25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSAqIHNp
emVvZihKU1ZhbHVlKTsgfQotICAgIAotICAgIHZvaWQgcHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9T
Y3JhdGNoQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBqaXQsIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hC
dWZmZXIsIEdQUlJlZyBzY3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZykKLSAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3Rl
cnMuZ2V0R1BSQnlJbmRleChpKSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAg
ICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgc3RhdGljX2Nhc3Q8RW5jb2Rl
ZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspKTsKLSNl
bHNlCi0gICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwg
c3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkp
ICsgKGNvdW50KyspKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNj
cmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZyAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0R1BSQnlJ
bmRleChpKSAmJiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCi0gICAgICAg
ICAgICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgIH0K
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsp
IHsKLSAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSkgewot
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0
YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSAr
IChjb3VudCsrKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJs
ZShGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVChjb3VudCAqIHNpemVvZihKU1ZhbHVlKSA9
PSBkZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemUoKSk7Ci0gICAgICAgIAotICAgICAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5n
dGhQdHIoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb3VudCAqIHNpemVvZihKU1Zh
bHVlKSkpLCBzY3JhdGNoR1BSKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCByZXN0b3JlVXNlZFJl
Z2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBqaXQsIFNjcmF0Y2hCdWZm
ZXIqIHNjcmF0Y2hCdWZmZXIsIEdQUlJlZyBzY3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZykKLSAg
ICB7Ci0gICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAg
ICAgIC8vIEZpbmQgYSBzY3JhdGNoIHJlZ2lzdGVyLgotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgICAg
ICBpZiAobV9sb2NrZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSB8fCBtX3NjcmF0Y2hSZWdp
c3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgCi0gICAg
ICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXIt
PmFjdGl2ZUxlbmd0aFB0cigpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIGppdC5zdG9yZVB0cihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUik7Ci0KLSAgICAgICAg
Ly8gUmVzdG9yZSBkb3VibGUgcmVnaXN0ZXJzIGZpcnN0LgotICAgICAgICB1bnNpZ25lZCBjb3Vu
dCA9IG1fdXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldEdQUnMoKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAg
IGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSkgewotICAgICAgICAgICAgICAg
IGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PEVuY29k
ZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSksIHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKHNjcmF0Y2hHUFIsIEZQ
UkluZm86OnRvUmVnaXN0ZXIoaSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0
ZXJzLmdldEdQUkJ5SW5kZXgoaSkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAg
ICAgIGppdC5sb2FkNjQoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVy
LT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSNl
bHNlCi0gICAgICAgICAgICAgICAgaml0LmxvYWQzMihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1
ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKyksIEdQUkluZm86OnRv
UmVnaXN0ZXIoaSkpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi1wcml2YXRlOgotICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKLSAgICBSZWdp
c3RlclNldCBtX2xvY2tlZFJlZ2lzdGVyczsKLSAgICBSZWdpc3RlclNldCBtX3NjcmF0Y2hSZWdp
c3RlcnM7Ci0gICAgYm9vbCBtX2RpZFJldXNlUmVnaXN0ZXJzOwotfTsKLQotfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLSNlbmRpZiAvLyBE
RkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE1
NjIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJBcnJheVBy
b3RvdHlwZS5oIgogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCIKKyNpbmNs
dWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIK
ICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIK
QEAgLTI2MSw3ICsyNjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENv
ZGVPCiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHBheWxvYWRTdG9yZVdpdGhQYXRjaCA9
IG1faml0LnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlUGF5bG9hZEdQUiwgSklU
Q29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwogCiAgICAgSklUQ29tcGlsZXI6OkxhYmVs
IGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7Ci0gICAgVl9ERkdPcGVyYXRpb25fRUpDSSBvcHRp
bWl6ZWRDYWxsOworICAgIFZfSklUT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkQ2FsbDsKICAgICBp
ZiAobV9qaXQuc3RyaWN0TW9kZUZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKSkgewogICAg
ICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCiAgICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwpAQCAtNDQwLDcgKzQ0MSw3IEBA
IGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFu
Y2goTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2Rl
LCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7CiAgICAgQmFzaWNCbG9j
ayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogbm90
VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CkBAIC01MTIsMTMgKzUxMywxMyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEp1bXBUeXBlPgogY2xhc3MgQ29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVy
YXRvcgotICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19ERkdP
cGVyYXRpb25fRUpKLCBHUFJSZWc+IHsKKyAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0
b3I8SnVtcFR5cGUsIFNfSklUT3BlcmF0aW9uX0VKSiwgR1BSUmVnPiB7CiBwdWJsaWM6CiAgICAg
Q29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgSnVtcFR5cGUg
ZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwKLSAgICAgICAgU19ERkdPcGVyYXRpb25fRUpKIGZ1
bmN0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2Fk
LAorICAgICAgICBTX0pJVE9wZXJhdGlvbl9FSkogZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsCiAgICAgICAgIEdQUlJlZyBhcmcyVGFn
LCBHUFJSZWcgYXJnMlBheWxvYWQpCi0gICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1
bXBUeXBlLCBTX0RGR09wZXJhdGlvbl9FSkosIEdQUlJlZz4oCisgICAgICAgIDogQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0pJVE9wZXJhdGlvbl9FSkosIEdQUlJlZz4oCiAgICAg
ICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBOZWVkVG9TcGlsbCwgcmVzdWx0KQogICAgICAg
ICAsIG1fYXJnMVRhZyhhcmcxVGFnKQogICAgICAgICAsIG1fYXJnMVBheWxvYWQoYXJnMVBheWxv
YWQpCkBAIC01NDYsNyArNTQ3LDcgQEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV9hcmcyUGF5bG9h
ZDsKIH07CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVD
b21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNz
ZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxw
ZXJGdW5jdGlvbikKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKQEAg
LTM2MTEsNyArMzYxMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihGaW5hbE9iamVjdFR5cGUpKSk7CiAgICAgICAg
IG1faml0Lm1vdmUodGhpc1ZhbHVlUGF5bG9hZEdQUiwgdGVtcEdQUik7CiAgICAgICAgIG1faml0
Lm1vdmUodGhpc1ZhbHVlVGFnR1BSLCB0ZW1wVGFnR1BSKTsKLSAgICAgICAgSl9ERkdPcGVyYXRp
b25fRUogZnVuY3Rpb247CisgICAgICAgIEpfSklUT3BlcmF0aW9uX0VKIGZ1bmN0aW9uOwogICAg
ICAgICBpZiAobV9qaXQuZ3JhcGgoKS5leGVjdXRhYmxlRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5p
c1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uVG9UaGlzU3Ry
aWN0OwogICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1NjIzNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgogI2luY2x1ZGUg
IkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHQ2FsbEFycmF5
QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVl
SW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgpAQCAtMjUzLDcgKzI1NCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KIAogICAgIEpJVENv
bXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwogICAgIAotICAgIFZfREZH
T3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkQ2FsbDsKKyAgICBWX0pJVE9wZXJhdGlvbl9FSkNJIG9w
dGltaXplZENhbGw7CiAgICAgaWYgKG1faml0LnN0cmljdE1vZGVGb3IobV9jdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbikpIHsKICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQogICAgICAgICAg
ICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsK
QEAgLTQyOCw3ICs0MjksNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNv
bXBhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBo
ZWxwZXJGdW5jdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhv
bGVCcmFuY2goTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9u
KQogewogICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOwog
ICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwpA
QCAtNDk4LDEyICs0OTksMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQ
ZWVwaAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZT4KIGNsYXNzIENvbXBhcmVBbmRCb3hC
b29sZWFuU2xvd1BhdGhHZW5lcmF0b3IKLSAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0
b3I8SnVtcFR5cGUsIFNfREZHT3BlcmF0aW9uX0VKSiwgR1BSUmVnPiB7CisgICAgOiBwdWJsaWMg
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0pJVE9wZXJhdGlvbl9FSkosIEdQUlJl
Zz4gewogcHVibGljOgogICAgIENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3Io
CiAgICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsCi0gICAgICAgIFNf
REZHT3BlcmF0aW9uX0VKSiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyKQotICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19E
RkdPcGVyYXRpb25fRUpKLCBHUFJSZWc+KAorICAgICAgICBTX0pJVE9wZXJhdGlvbl9FSkogZnVu
Y3Rpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICAgICAg
OiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfSklUT3BlcmF0aW9uX0VKSiwgR1BS
UmVnPigKICAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIE5lZWRUb1NwaWxsLCByZXN1
bHQpCiAgICAgICAgICwgbV9hcmcxKGFyZzEpCiAgICAgICAgICwgbV9hcmcyKGFyZzIpCkBAIC01
MjUsNyArNTI2LDcgQEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV9hcmcyOwogfTsKIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSogbm9k
ZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRp
b25fRUpKIGhlbHBlckZ1bmN0aW9uKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24gY29uZCwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewog
ICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwpAQCAtMzkwNiw3ICszOTA3LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksCiAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoRmluYWxPYmplY3RUeXBlKSkpOwog
ICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgdGVtcEdQUik7Ci0gICAgICAgIEpfREZH
T3BlcmF0aW9uX0VKIGZ1bmN0aW9uOworICAgICAgICBKX0pJVE9wZXJhdGlvbl9FSiBmdW5jdGlv
bjsKICAgICAgICAgaWYgKG1faml0LmdyYXBoKCkuZXhlY3V0YWJsZUZvcihub2RlLT5jb2RlT3Jp
Z2luKS0+aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvblRv
VGhpc1N0cmljdDsKICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE1NjIzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04OTUsMjIgKzg5NSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnVzZUNoaWxkcmVuKE5v
ZGUqIG4KICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihNYWNy
b0Fzc2VtYmxlciYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNj
cmF0Y2gyLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGppdCk7Ci0gICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRj
aDEpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtp
bmQpOwotICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoMSk7Ci0gICAgQVNTRVJUKG93bmVyICE9
IHNjcmF0Y2gyKTsKLSAgICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOwotCi0jaWYgRU5B
QkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIEpJVENvbXBpbGVyOjplbWl0Q291bnQo
aml0LCBXcml0ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7Ci0jZW5k
aWYKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQ
UiwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVz
ZUtpbmQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIFVOVVNFRF9Q
QVJBTShvd25lckdQUik7CkBAIC0xMDE3LDcgKzEwMDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlSW4oTm9kZSogbm9kCiAjZW5kaWYKIH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVDb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK2Jv
b2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNy
b0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0pJVE9wZXJhdGlvbl9FSkog
aGVscGVyRnVuY3Rpb24pCiB7CiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0
ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRf
TUFYKSB7CkBAIC0xNDY1LDcgKzE0NDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UGVlcEhvbGVJbnQzCiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29tcGFyZSBpcyBmdXNl
ZCB3aXRoIGEgc3Vic2VxdWVudCBicmFuY2guCi1ib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UGVlcEhvbGVCcmFuY2goTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNv
bmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbikKK2Jvb2wgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW5jaChOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRp
b24gZG91YmxlQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkogb3BlcmF0aW9uKQogewogICAg
IC8vIEZ1c2VkIGNvbXBhcmUgJiBicmFuY2guCiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJs
b2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKQEAgLTM4NDIsNyArMzgyNiw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2QKIH0KIAogLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBjb21wYXJlIGlzIGZ1c2VkIHdpdGggYSBzdWJzZXF1ZW50IGJyYW5jaC4KLWJvb2wg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9u
IGRvdWJsZUNvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbikKK2Jvb2wgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGRv
dWJsZUNvbmRpdGlvbiwgU19KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbikKIHsKICAgICBpZiAo
Y29tcGlsZVBlZXBIb2xlQnJhbmNoKG5vZGUsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uLCBv
cGVyYXRpb24pKQogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1NjIzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsMTAgKzM2LDExIEBACiAjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKICNpbmNs
dWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5o
IgotI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuLmgiCiAjaW5jbHVkZSAiREZHVmFsdWVTb3VyY2UuaCIKKyNpbmNsdWRlICJKSVRP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiUHV0
S2luZC5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewpAQCAtMzExLDggKzMxMiw2IEBAIHB1YmxpYzoKICAgICAgICAgc3BlY3Vs
YXRpb25XYXRjaHBvaW50Rm9yTWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2N1cnJlbnROb2RlLT5j
b2RlT3JpZ2luKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoTWFjcm9B
c3NlbWJsZXImLCBHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNj
cmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJVc2VLaW5kKTsKLQogICAgIHZvaWQgd3JpdGVCYXJyaWVy
KEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBXcml0ZUJh
cnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcg
c2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnKTsKICAgICB2b2lkIHdyaXRlQmFycmllcihHUFJS
ZWcgb3duZXJHUFIsIEpTQ2VsbCogdmFsdWUsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBz
Y3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRH
UFJSZWcpOwogICAgIHZvaWQgd3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1
ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hH
UFIxID0gSW52YWxpZEdQUlJlZyk7CkBAIC03MzIsOSArNzMxLDkgQEAgcHVibGljOgogICAgIHZv
aWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBOb2RlKiBi
cmFuY2hOb2RlLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICBib29sIG5vblNwZWN1bGF0aXZl
Q29tcGFyZU51bGwoTm9kZSosIEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CiAg
ICAgCi0gICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqLCBOb2RlKiBi
cmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19ERkdPcGVy
YXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsKLSAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVl
cGhvbGVDb21wYXJlKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwg
U19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsKLSAgICBib29sIG5vblNwZWN1bGF0
aXZlQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNf
REZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7CisgICAgdm9pZCBub25TcGVjdWxhdGl2
ZVBlZXBob2xlQnJhbmNoKE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6
UmVsYXRpb25hbENvbmRpdGlvbiwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsK
KyAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUqLCBNYWNyb0Fz
c2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1
bmN0aW9uKTsKKyAgICBib29sIG5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3Nl
bWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5j
dGlvbik7CiAgICAgCiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9k
ZSosIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwogICAgIHZvaWQgbm9u
U3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKE5vZGUqLCBib29sIGludmVydCA9IGZhbHNl
KTsKQEAgLTkyNCwxNjkgKzkyMywxNjkgQEAgcHVibGljOgogICAgIC8vIG1hY2hpbmUgcmVnaXN0
ZXJzLCBhbmQgZGVsZWdhdGUgdGhlIGNhbGxpbmcgY29udmVudGlvbiBzcGVjaWZpYwogICAgIC8v
IGRlY2lzaW9uIGFzIHRvIGhvdyB0byBmaWxsIHRoZSByZWdzaXRlcnMgdG8gc2V0dXBBcmd1bWVu
dHMqIG1ldGhvZHMuCiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZH
T3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
UF9ERkdPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgY2VsbCkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VDIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGNlbGwpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoY2VsbCk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9F
TyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FTyBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBvYmplY3QpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPUyBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIHNpemVfdCBzaXplKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRU9TIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1tUHRy
KHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBvYmplY3QsIGludDMyX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBvYmplY3QsIGludDMyX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19E
RkdPcGVyYXRpb25fRU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwg
aW50MzJfdCBzaXplKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRP
cGVyYXRpb25fRU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgaW50
MzJfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUpKSk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihQX0RGR09wZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2xk
LCBzaXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklU
T3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVf
dCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KG9sZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUyBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIHNpemVfdCBzaXplKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBz
aXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTSnNzIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90IGluZGV4LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTSnNzIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90IGluZGV4LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGluZGV4
KSwgYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFBfSklUT3BlcmF0aW9uX0VTdCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3Ra
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBh
cmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25f
RVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJS
ZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0
WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qg
YXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9u
X0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6
ZV90IGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tMzIoYXJnMikpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9E
RkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3Bl
cmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3RQUyBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2ludGVyLCBzaXplX3Qgc2l6ZSkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTdFBT
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHZvaWQqIHBv
aW50ZXIsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cihwb2lu
dGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3RTUyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgaW5kZXgs
IHNpemVfdCBzaXplKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRP
cGVyYXRpb25fRVN0U1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgc2l6ZV90IGluZGV4LCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0
ZWRJbW1QdHIoaW5kZXgpLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9u
X0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVy
YXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FQyBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEpTQ2VsbCogY2VsbCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
SlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKFRydXN0ZWRJbW1QdHIoY2VsbCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUNDIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpTQ2VsbCogY2VsbCkKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihj
ZWxsKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSWNmIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSWNmIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJh
bWUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VTdCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Q19KSVRPcGVyYXRpb25fRVN0IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VKc3NTdCBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VK
c3NTdCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUpz
c0pzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VKc3NK
c3Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
Mik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSnNzSnNzSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VKc3NKc3NKc3Mgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAK
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpzc19ERkdPcGVyYXRpb25fRVog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpzc19KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3Bl
cmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0ljZiBvcGVyYXRpb24sIEdQ
UlJlZyBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDSWNmIG9wZXJhdGlvbiwg
R1BSUmVnIGFyZzEsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1Q
dHIoaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNDSWNmIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDQ0ljZiBvcGVyYXRpb24s
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgYXJnMiwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDWiBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxLCBpbnQgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDWiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBpbnQgYXJn
MikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBUcnVzdGVkSW1tMzIoYXJnMikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVy
YXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAg
IH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25f
VyBvcGVyYXRpb24sIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9XIG9wZXJhdGlvbiwgV2F0Y2hw
b2ludFNldCogd2F0Y2hwb2ludFNldCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzKFRydXN0ZWRJbW1QdHIod2F0Y2hwb2ludFNldCkpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbChvcGVyYXRpb24pOwpAQCAtMTExOCwyNDQgKzExMTcsMjQ0IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0
LCBhcmc1KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERf
REZHT3BlcmF0aW9uX1paIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9KSVRPcGVy
YXRpb25fWlogb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhhcmcxLCBhcmcyKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfREZHT3BlcmF0aW9uX0RE
IG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEZQUlJlZyBhcmcyKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9KSVRPcGVyYXRpb25fREQgb3BlcmF0
aW9uLCBGUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSwgRlBSUmVnIGFyZzIpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKElfREZHT3BlcmF0aW9uX0VKc3Mgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKElfSklUT3BlcmF0aW9uX0VKc3Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9w
ZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c0V4ZWNTdGF0ZSgpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCB2b2lkKiBwb2ludGVyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCB2b2lkKiBw
b2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9ERkdPcGVyYXRpb25fRCBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEZQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oWl9KSVRPcGVyYXRpb25fRCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEZQUlJl
ZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSk7CiAgICAg
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5hcHBlbmRDYWxsKG9wZXJhdGlvbik7
CiAgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCByZXN1bHQpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSSBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RyaW5nSW1w
bCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQSBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VBWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VBWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKc3NaIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpzc1ogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCB2b2lkKiBwb2ludGVyLCBzaXpl
X3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBz
aXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50IHN0YXJ0Q29uc3RhbnQsIGlu
dCBudW1Db25zdGFudHMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FU1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQgc3RhcnRDb25zdGFu
dCwgaW50IG51bUNvbnN0YW50cykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoc3RhcnRDb25zdGFudCksIFRydXN0ZWRJbW0zMihu
dW1Db25zdGFudHMpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQUCBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0RGR09wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTQ2VsbCogY2Vs
bCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VD
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoY2VsbCkpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9ERkdPcGVyYXRpb25fRUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEsIGNvbnN0IFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxLCBjb25zdCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBT
dHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgU3Ry
aW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FREEg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FREEgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0RGR09wZXJhdGlvbl9FSkEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FSkEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9K
SVRPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAg
ICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25f
RVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQzMl90IGFyZzEpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIGludDMyX3QgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoYXJnMSkpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAg
ICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25f
RVpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50MzJfdCBhcmcxLCBHUFJSZWcgYXJnMikK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VaWiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludDMyX3QgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMy
KGFyZzEpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VaSWNmWiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIGludDMyX3QgYXJnMSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUs
IEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRVpJY2ZaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50MzJfdCBhcmcxLCBJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEp
LCBUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSksIGFyZzIpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJh
dGlvbl9FSlMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIHNpemVfdCBp
bmRleCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9u
X0VKUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyB2YWx1ZSwgc2l6ZV90IGluZGV4
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKHZhbHVl
LCBUcnVzdGVkSW1tUHRyKGluZGV4KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3RKIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJ
VE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
U19ERkdPcGVyYXRpb25fSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fSiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHMoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRp
b25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3Bl
cmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUpKIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FUFAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FUFAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMiBpbW0pCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMiBpbW0pCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoaW1tLm1fdmFsdWUpKSkpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAg
ICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25f
RUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MiBpbW0sIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMiBpbW0sIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGltbS5tX3ZhbHVlKSkpLCBhcmcyKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZH
T3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNKIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMi5ncHIo
KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkQgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIEZQUlJlZyBhcmczKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oVl9KSVRPcGVyYXRpb25fRU9aRCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MiwgRlBSUmVnIGFyZzMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FSlBQIG9wZXJhdGlvbiwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyLCB2b2lkKiBwb2ludGVyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsK
ICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlv
bl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBTdHJpbmdJbXBsKiB1
aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9F
SkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBTdHJpbmdJbXBsKiB1aWQp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwg
YXJnMiwgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FSkpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRVBaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDSkogb3BlcmF0
aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNKSiBvcGVyYXRpb24sIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQog
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlvbl9FSiBv
cGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oRF9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBGUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwpAQCAtMTM3OSw3ICsxMzc4LDcgQEAg
cHVibGljOgogI2RlZmluZSBTSDRfMzJCSVRfRFVNTVlfQVJHCiAjZW5kaWYKIAotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9ERkdPcGVyYXRpb25fRCBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEZQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oWl9KSVRPcGVyYXRpb25fRCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEZQUlJlZyBh
cmcxKQogICAgIHsKICAgICAgICAgcHJlcGFyZUZvckV4dGVybmFsQ2FsbCgpOwogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50cyhhcmcxKTsKQEAgLTEzODcsMjMzICsxMzg2LDIzMyBAQCBwdWJs
aWM6CiAgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRh
ZywgR1BSUmVnIHJlc3VsdFBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c0V4ZWNTdGF0ZSgpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVAg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgdm9pZCog
cG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQs
IHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwg
cmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0RGR09wZXJhdGlvbl9FUFAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIHZvaWQqIHBvaW50ZXIpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUFAgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIHZvaWQqIHBvaW50
ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0
VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXls
b2FkLCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
SklUT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3Vs
dFBheWxvYWQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwg
U3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9K
SVRPcGVyYXRpb25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0
UGF5bG9hZCwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5
bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0RGR09wZXJhdGlvbl9FQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJl
ZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywg
R1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQs
IHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRUFaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VBWiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwg
YXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSnNzWiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FSnNzWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5
bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0RGR09wZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgdm9pZCogcG9pbnRlciwgc2l6
ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoVHJ1c3RlZEltbVB0cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50IHN0YXJ0Q29uc3RhbnQsIGludCBudW1Db25z
dGFudHMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FU1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwg
aW50IHN0YXJ0Q29uc3RhbnQsIGludCBudW1Db25zdGFudHMpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKHN0YXJ0Q29uc3RhbnQp
LCBUcnVzdGVkSW1tMzIobnVtQ29uc3RhbnRzKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVz
dWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FSlAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0
UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgdm9pZCogcG9pbnRl
cikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VK
UCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJS
ZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCB2b2lkKiBwb2ludGVyKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlf
QVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQ
YXlsb2FkLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VKUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcg
YXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShF
QUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMik7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEpTQ2VsbCogY2VsbCkKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEpTQ2VsbCogY2VsbCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGNl
bGwpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgY29u
c3QgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBjb25zdCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZElt
bVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSSBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJn
MVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkkgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJl
ZyBhcmcxUGF5bG9hZCwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2Fk
LCBhcmcxVGFnLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJl
c3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3Vs
dFBheWxvYWQsIGludDMyX3QgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBTdHJpbmdJbXBs
KiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwg
aW50MzJfdCBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklU
X0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgVHJ1c3RlZEltbTMyKGFyZzFUYWcpLCBUcnVzdGVkSW1t
UHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRURBIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEZQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VEQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBGUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMSwgYXJn
Mik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkEgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQ
UlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFn
LCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9h
ZCwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzIp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFRydXN0ZWRJbW0zMiBhcmcxVGFn
LCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFRydXN0ZWRJbW0zMiBhcmcxVGFnLCBHUFJSZWcg
YXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcx
VGFnLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcx
VGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJl
ZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRf
RFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCBy
ZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3Vs
dFBheWxvYWQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcg
cmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0
VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXls
b2FkLCBpbnQzMl90IGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkLCBpbnQzMl90IGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXls
b2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VaSWNmWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkLCBpbnQzMl90IGFyZzEsIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VaSWNmWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkLCBpbnQzMl90IGFyZzEsIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoYXJnMSksIFRydXN0ZWRJbW1QdHIoaW5saW5l
Q2FsbEZyYW1lKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9F
Wlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50
MzJfdCBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJl
ZyByZXN1bHRQYXlsb2FkLCBpbnQzMl90IGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSwg
YXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9CiAKLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VKUyBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEpTVmFsdWVSZWdzIHZhbHVlLCBzaXplX3QgaW5kZXgpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FSlMgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBKU1ZhbHVlUmVncyB2YWx1ZSwgc2l6ZV90IGluZGV4KQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRf
RFVNTVlfQVJHIHZhbHVlLnBheWxvYWRHUFIoKSwgdmFsdWUudGFnR1BSKCksIFRydXN0ZWRJbW1Q
dHIoaW5kZXgpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
UF9ERkdPcGVyYXRpb25fRVN0SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVN0SiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMlRhZywgR1BS
UmVnIGFyZzJQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYXJnMlBheWxvYWQsIGFyZzJUYWcp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxv
YWQsIGFyZzFUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9KIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzKGFyZzFQYXlsb2FkLCBhcmcxVGFnKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMy
QklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9u
X0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJn
MVBheWxvYWQsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcg
YXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBh
cmcxVGFnLCBTSDRfMzJCSVRfRFVNTVlfQVJHIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJn
MlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BS
UmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQ
UlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxv
YWQsIGFyZzFUYWcsIFNINF8zMkJJVF9EVU1NWV9BUkcgYXJnMlBheWxvYWQsIGFyZzJUYWcpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcg
YXJnMVBheWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBH
UFJSZWcgYXJnMVBheWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRf
RFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBTSDRfMzJCSVRfRFVNTVlfQVJHIGltbSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwg
cmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBpbW0sIEdQUlJlZyBhcmcy
VGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0pJVE9wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBpbW0sIEdQUlJl
ZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgaW1tLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBTSDRfMzJCSVRfRFVNTVlfQVJHIGFyZzJQYXlsb2Fk
LCBhcmcyVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KIAot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNKIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNKIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJl
c3VsdCwgR1BSUmVnIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBKU1ZhbHVlUmVn
cyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIucGF5bG9hZEdQUigp
LCBhcmcyLnRhZ0dQUigpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQucGF5bG9hZEdQUigpLCByZXN1bHQudGFn
R1BSKCkpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZH
T3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogCi0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FT1pEIG9wZXJhdGlvbiwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBGUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkQgb3BlcmF0aW9uLCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIsIEZQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJCSVRfRFVNTVlfQVJH
IGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVy
YXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9E
RkdPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBh
eWxvYWQsIEdQUlJlZyBhcmcyLCB2b2lkKiBwb2ludGVyKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcx
VGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyLCB2b2lkKiBwb2ludGVyKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRf
RFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50
ZXIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09w
ZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9h
ZCwgR1BSUmVnIGFyZzIsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKQ0kgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMVRh
ZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwgU3RyaW5nSW1wbCogdWlkKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRf
RFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHVpZCkp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24p
OwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0
aW9uX0VDSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBh
cmcyUGF5bG9hZCwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDSkogb3BlcmF0aW9u
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCwgR1BSUmVn
IGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyUGF5bG9hZCwgYXJnMlRhZywgYXJnM1Bh
eWxvYWQsIGFyZzNUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9ERkdPcGVyYXRpb25fRVBaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwg
YXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmczUGF5bG9h
ZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0RGR09wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
LCBHUFJSZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcy
LCBFQUJJXzMyQklUX0RVTU1ZX0FSRyBTSDRfMzJCSVRfRFVNTVlfQVJHIGFyZzNQYXlsb2FkLCBh
cmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RG
R09wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVz
dGVkSW1tMzIgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9h
ZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyLCBFQUJJXzMyQklUX0RVTU1ZX0FSRyBTSDRfMzJCSVRfRFVNTVlfQVJHIGFyZzNQYXls
b2FkLCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKERfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKERfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwg
YXJnMVRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTE5MTYsOCArMTkxNSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGJldHRlclVzZVN0cmljdEludDUyKGVkZ2Uubm9kZSgpKTsKICAgICB9
CiAgICAgCi0gICAgYm9vbCBjb21wYXJlKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiwgU19ERkdPcGVyYXRp
b25fRUpKKTsKLSAgICBib29sIGNvbXBpbGVQZWVwSG9sZUJyYW5jaChOb2RlKiwgTWFjcm9Bc3Nl
bWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRp
b24sIFNfREZHT3BlcmF0aW9uX0VKSik7CisgICAgYm9vbCBjb21wYXJlKE5vZGUqLCBNYWNyb0Fz
c2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRp
dGlvbiwgU19KSVRPcGVyYXRpb25fRUpKKTsKKyAgICBib29sIGNvbXBpbGVQZWVwSG9sZUJyYW5j
aChOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSik7CiAgICAgdm9pZCBjb21w
aWxlUGVlcEhvbGVJbnQzMkJyYW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgSklUQ29tcGls
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlSW50NTJC
cmFuY2goTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uKTsKICAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZUJvb2xlYW5CcmFuY2goTm9kZSosIE5v
ZGUqIGJyYW5jaE5vZGUsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHJldmlzaW9uIDE1NjIzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTMsMjM4ICs5Myw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJh
dGlvblQKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJERkcgT1NSIGV4
aXQgZ2VuZXJhdGlvbiB0aHVuayIpKTsKIH0KIAotaW5saW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxp
ZGF0aW9uKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcG9pbnRlckdQUikKLXsKLSNpZiAhQVNT
RVJUX0RJU0FCTEVECi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGlzTm9uWmVybyA9IGppdC5icmFu
Y2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgcG9pbnRlckdQUik7Ci0gICAgaml0LmJy
ZWFrcG9pbnQoKTsKLSAgICBpc05vblplcm8ubGluaygmaml0KTsKLSAgICBqaXQucHVzaChwb2lu
dGVyR1BSKTsKLSAgICBqaXQubG9hZDgocG9pbnRlckdQUiwgcG9pbnRlckdQUik7Ci0gICAgaml0
LnBvcChwb2ludGVyR1BSKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGppdCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHBvaW50ZXJHUFIpOwotI2VuZGlmCi19Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qIHZtKQotewotICAg
IENDYWxsSGVscGVycyBqaXQodm0pOwotICAgIAotICAgIC8vIFdlIHdpbGwganVtcCB0byBoZXJl
IGlmIHRoZSBKSVQgY29kZSB0aGlua3MgaXQncyBtYWtpbmcgYSBjYWxsLCBidXQgdGhlCi0gICAg
Ly8gbGlua2luZyBoZWxwZXIgKEMrKyBjb2RlKSBkZWNpZGVkIHRvIHRocm93IGFuIGV4Y2VwdGlv
biBpbnN0ZWFkLiBXZSB3aWxsCi0gICAgLy8gaGF2ZSBzYXZlZCB0aGUgY2FsbFJldHVybkluZGV4
IGluIHRoZSBmaXJzdCBhcmd1bWVudHMgb2YgSklUU3RhY2tGcmFtZS4KLSAgICAvLyBOb3RlIHRo
YXQgdGhlIHJldHVybiBhZGRyZXNzIHdpbGwgYmUgb24gdGhlIHN0YWNrIGF0IHRoaXMgcG9pbnQs
IHNvIHdlCi0gICAgLy8gbmVlZCB0byByZW1vdmUgaXQgYW5kIGRyb3AgaXQgb24gdGhlIGZsb29y
LCBzaW5jZSB3ZSBkb24ndCBjYXJlIGFib3V0IGl0LgotICAgIC8vIEZpbmFsbHkgbm90ZSB0aGF0
IHRoZSBjYWxsIGZyYW1lIHJlZ2lzdGVyIHBvaW50cyBhdCB0aGUgY2FsbGVlIGZyYW1lLCBzbwot
ICAgIC8vIHdlIG5lZWQgdG8gcG9wIGl0LgotICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQubG9h
ZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6Q2FsbGVyRnJhbWUpLAotICAgICAgICBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBqaXQucGVl
azY0KEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdT
X0lOREVYKTsKLSNlbHNlCi0gICAgaml0LnBlZWsoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOwotI2VuZGlmCi0gICAgaml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIp
OwotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8
dm9pZCo+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0g
ICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAg
aml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9u
KGppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICBqaXQuanVtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIpOwotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAm
aml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCAoIkRGRyB0aHJvdyBleGNlcHRpb24gZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsK
LX0KLQotc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCi0gICAgQ0NhbGxIZWxwZXJzJiBqaXQsIFZN
KiB2bSwgUF9ERkdPcGVyYXRpb25fRSBzbG93UGF0aEZ1bmN0aW9uKQotewotICAgIGppdC5wcmVz
ZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMik7Ci0gICAgZW1p
dFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMik7Ci0gICAgaml0LnN0
b3JlUHRyKAotICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyLAotICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0
YWNrOjpSZXR1cm5QQykpOwotICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaml0LnBv
a2U2NChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJH
U19JTkRFWCk7Ci0jZWxzZQotICAgIGppdC5wb2tlKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJl
dHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKLSNlbmRpZgotICAgIGppdC5zZXR1
cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgCi0gICAg
Ly8gVGhpcyBzbG93IGNhbGwgd2lsbCByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygb25lIG9mIHRoZSBm
b2xsb3dpbmc6Ci0gICAgLy8gMSkgRXhjZXB0aW9uIHRocm93aW5nIHRodW5rLgotICAgIC8vIDIp
IEhvc3QgY2FsbCByZXR1cm4gdmFsdWUgcmV0dXJuZXIgdGhpbmd5LgotICAgIC8vIDMpIFRoZSBm
dW5jdGlvbiB0byBjYWxsLgotICAgIGppdC5sb2FkUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNr
OjpSZXR1cm5QQyksCi0gICAgICAgIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7
Ci0gICAgaml0LnN0b3JlUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
MCksCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBDKSk7Ci0gICAgZW1pdFBvaW50ZXJW
YWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBq
aXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSKTsKLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7Ci0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwot
fQotCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JUaHVua0dlbmVyYXRvcigK
LSAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAgICAvLyBUaGUg
cmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBX
ZSB3aWxsIGhlbmNlCi0gICAgLy8gc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwg
ZnJhbWUgd2hpbGUgd2UgbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsCi0gICAgLy8gdG8gcGVyZm9y
bSBsaW5raW5nIGFuZCBsYXp5IGNvbXBpbGF0aW9uIGlmIG5lY2Vzc2FyeS4gV2UgZXhwZWN0IHRo
ZSBjYWxsZWUKLSAgICAvLyB0byBiZSBpbiBub25BcmdHUFIwL25vbkFyZ0dQUjEgKHBheWxvYWQv
dGFnKSwgdGhlIGNhbGwgZnJhbWUgdG8gaGF2ZSBhbHJlYWR5Ci0gICAgLy8gYmVlbiBhZGp1c3Rl
ZCwgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSIGhvbGRzIHRoZSBleGNlcHRpb24gaGFuZGxlciBp
bmRleCwKLSAgICAvLyBhbmQgYWxsIG90aGVyIHJlZ2lzdGVycyB0byBiZSBhdmFpbGFibGUgZm9y
IHVzZS4gV2UgdXNlIEpJVFN0YWNrRnJhbWU6OmFyZ3MKLSAgICAvLyB0byBzYXZlIGltcG9ydGFu
dCBpbmZvcm1hdGlvbiBhY3Jvc3MgY2FsbHMuCi0gICAgCi0gICAgQ0NhbGxIZWxwZXJzIGppdCh2
bSk7Ci0gICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/
IG9wZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7Ci0gICAgCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkRG
RyBsaW5rICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIg
OiAiY29uc3RydWN0IikpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVu
a0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2
bSwgQ29kZUZvckNhbGwpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVj
dFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJh
dG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQotLy8gRm9yIGNsb3N1cmUgb3B0aW1pemF0
aW9ucywgd2Ugb25seSBpbmNsdWRlIGNhbGxzLCBzaW5jZSBpZiB5b3UncmUgdXNpbmcgY2xvc3Vy
ZXMgZm9yCi0vLyBvYmplY3QgY29uc3RydWN0aW9uIHRoZW4geW91J3JlIGdvaW5nIHRvIGxvc2Ug
YmlnIHRpbWUgYW55d2F5LgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRo
dW5rR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKLSAgICAK
LSAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwpOwotICAg
IAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQp
OwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkRGRyBsaW5rIGNsb3N1
cmUgY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7Ci19Ci0KLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKAotICAgIFZNKiB2bSwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQotewotICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUg
c3RhY2ssIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCi0gICAgLy8ganVt
cCB0byB0aGUgY2FsbGVlLCBvciBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUgY2FsbCBm
cmFtZSB3aGlsZSB3ZQotICAgIC8vIG1ha2UgYSBDKysgZnVuY3Rpb24gY2FsbCB0byB0aGUgYXBw
cm9wcmlhdGUgREZHIG9wZXJhdGlvbi4KLQotICAgIENDYWxsSGVscGVycyBqaXQodm0pOwotICAg
IAotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7Ci0KLSAgICAvLyBGSVhNRTog
d2Ugc2hvdWxkIGhhdmUgYSBzdG9yeSBmb3IgZWxpbWluYXRpbmcgdGhlc2UgY2hlY2tzLiBJbiBt
YW55IGNhc2VzLAotICAgIC8vIHRoZSBERkcga25vd3MgdGhhdCB0aGUgdmFsdWUgaXMgZGVmaW5p
dGVseSBhIGNlbGwsIG9yIGRlZmluaXRlbHkgYSBmdW5jdGlvbi4KLSAgICAKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIHNsb3dDYXNlLmFwcGVuZCgKLSAgICAgICAgaml0LmJyYW5jaFRlc3Q2NCgK
LSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6bm9uQXJnR1BSMCwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0jZWxzZQotICAgIHNsb3dDYXNlLmFwcGVuZCgK
LSAgICAgICAgaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgR1BSSW5mbzo6bm9uQXJnR1BSMSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Ci0jZW5kaWYKLSAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIHNsb3dDYXNlLmFwcGVuZCgKLSAg
ICAgICAgaml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWws
Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMiwg
U3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvbjo6aW5mbygpKSkpOwotICAgIAotICAgIC8vIE5vdyB3
ZSBrbm93IHdlIGhhdmUgYSBKU0Z1bmN0aW9uLgotICAgIAotICAgIGppdC5sb2FkUHRyKAotICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAotICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyKTsK
LSAgICBzbG93Q2FzZS5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2gzMigKLSAgICAgICAgICAg
IENDYWxsSGVscGVyczo6TGVzc1RoYW4sCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMiwgRXhlY3V0YWJsZUJhc2U6
Om9mZnNldE9mTnVtUGFyYW1ldGVyc0ZvcihraW5kKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigwKSkpOwotICAgIAotICAgIC8vIE5vdyB3ZSBrbm93IHRoYXQgd2Ug
aGF2ZSBhIENvZGVCbG9jaywgYW5kIHdlJ3JlIGNvbW1pdHRlZCB0byBtYWtpbmcgYSBmYXN0Ci0g
ICAgLy8gY2FsbC4KLSAgICAKLSAgICBqaXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVD
aGFpbigpKSwKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMSk7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBqaXQuc3RvcmU2NCgKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMSwKLSAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdp
c3RlcikpICogSlNTdGFjazo6U2NvcGVDaGFpbikpOwotI2Vsc2UKLSAgICBqaXQuc3RvcmVQdHIo
Ci0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEsCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNj
b3BlQ2hhaW4gKwotICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgIGppdC5zdG9yZTMyKAotICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICog
SlNTdGFjazo6U2NvcGVDaGFpbiArCi0gICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSNlbmRpZgotICAgIAotICAgIGppdC5s
b2FkUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BS
MiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQp
KSwKLSAgICAgICAgR1BSSW5mbzo6cmVnVDApOwotICAgIAotICAgIC8vIE1ha2UgYSB0YWlsIGNh
bGwuIFRoaXMgd2lsbCByZXR1cm4gYmFjayB0byBERkcgY29kZS4KLSAgICBlbWl0UG9pbnRlclZh
bGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVn
VDApOwotCi0gICAgc2xvd0Nhc2UubGluaygmaml0KTsKLSAgICAKLSAgICAvLyBIZXJlIHdlIGRv
bid0IGtub3cgYW55dGhpbmcsIHNvIHJldmVydCB0byB0aGUgZnVsbCBzbG93IHBhdGguCi0gICAg
Ci0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/IG9wZXJhdGlv
blZpcnR1YWxDYWxsIDogb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdCk7Ci0gICAgCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkRGRyB2
aXJ0dWFsICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIg
OiAiY29uc3RydWN0IikpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxU
aHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVy
YXRvcih2bSwgQ29kZUZvckNhbGwpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVh
bENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICByZXR1cm4gdmlydHVhbEZv
clRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJKHJldmlzaW9uIDE1NjIzNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE2ICs0
MCw2IEBAIG5hbWVzcGFjZSBERkcgewogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdl
bmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSopOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhy
b3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKik7Ci0KLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKik7Ci0KLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSopOwotCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOwotCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5o
CShyZXZpc2lvbiAxNTYyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJp
bnNpY1JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDEyIEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhvc3JFeGl0LCAid2Via2l0X29z
cl9leGl0IiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBib29sZWFuLCBpbnQzMiwgVmFyaWFkaWMp
KQogCiAjZGVmaW5lIEZPUl9FQUNIX0ZVTkNUSU9OX1RZUEUobWFjcm8pIFwKLSAgICBtYWNybyhJ
X0RGR09wZXJhdGlvbl9FSnNzLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludFB0cikp
IFwKLSAgICBtYWNybyhKX0RGR09wZXJhdGlvbl9FLCBmdW5jdGlvblR5cGUoaW50NjQsIGludFB0
cikpIFwKLSAgICBtYWNybyhQX0RGR09wZXJhdGlvbl9FQywgZnVuY3Rpb25UeXBlKGludFB0ciwg
aW50UHRyLCBpbnRQdHIpKSBcCi0gICAgbWFjcm8oVl9ERkdPcGVyYXRpb25fRU9aRCwgZnVuY3Rp
b25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0ciwgaW50MzIsIGRvdWJsZVR5cGUpKSBcCi0g
ICAgbWFjcm8oVl9ERkdPcGVyYXRpb25fRU9aSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQ
dHIsIGludFB0ciwgaW50MzIsIGludDY0KSkgXAotICAgIG1hY3JvKFpfREZHT3BlcmF0aW9uX0Qs
IGZ1bmN0aW9uVHlwZShpbnQzMiwgZG91YmxlVHlwZSkpCisgICAgbWFjcm8oSV9KSVRPcGVyYXRp
b25fRUpzcywgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIpKSBcCisgICAgbWFj
cm8oSl9KSVRPcGVyYXRpb25fRSwgZnVuY3Rpb25UeXBlKGludDY0LCBpbnRQdHIpKSBcCisgICAg
bWFjcm8oUF9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50
UHRyKSkgXAorICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VPWkQsIGZ1bmN0aW9uVHlwZSh2b2lk
VHlwZSwgaW50UHRyLCBpbnRQdHIsIGludDMyLCBkb3VibGVUeXBlKSkgXAorICAgIG1hY3JvKFZf
SklUT3BlcmF0aW9uX0VPWkosIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIs
IGludDMyLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9ELCBmdW5jdGlvblR5
cGUoaW50MzIsIGRvdWJsZVR5cGUpKQogCiBjbGFzcyBJbnRyaW5zaWNSZXBvc2l0b3J5IDogcHVi
bGljIENvbW1vblZhbHVlcyB7CiBwdWJsaWM6CkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICN1
bmRlZiBGVU5DVElPTl9UWVBFX0dFVFRFUgogICAgIAogI2RlZmluZSBGVU5DVElPTl9UWVBFX1JF
U09MVkVSKHR5cGVOYW1lLCB0eXBlKSBcCi0gICAgTFR5cGUgb3BlcmF0aW9uVHlwZShERkc6OnR5
cGVOYW1lKSAgICAgICAgIFwKKyAgICBMVHlwZSBvcGVyYXRpb25UeXBlKEpTQzo6dHlwZU5hbWUp
ICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgIHJldHVybiB0eXBlTmFtZSgpOyAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkocmV2aXNpb24gMTU2MjM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OTQsNyArMTk5NCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHVuYWNjZXB0YWJseSBzbG93Lgog
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIx
CiAgICAgICAgIAotICAgICAgICBKX0RGR09wZXJhdGlvbl9FIGZ1bmN0aW9uID0KKyAgICAgICAg
Sl9KSVRPcGVyYXRpb25fRSBmdW5jdGlvbiA9CiAgICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0g
Q2FsbCA/IG9wZXJhdGlvbkZUTENhbGwgOiBvcGVyYXRpb25GVExDb25zdHJ1Y3Q7CiAgICAgICAg
IAogICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBtX25vZGUtPm9wKCkgPT0gQ2FsbCA/
IDAgOiAxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRD
b21waWxlci5oCShyZXZpc2lvbiAxNTYyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIC8vIFRha2VzIHRoZSBjYWxsIGZyYW1lIGFu
ZCB0aGUgaW5kZXggb2YgdGhlIGV4aXQsIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIHRvCiAvLyBq
dW1wIHRvLgogZXh0ZXJuICJDIiB7Ci12b2lkKiBERkdfT1BFUkFUSU9OIGNvbXBpbGVGVExPU1JF
eGl0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGV4aXRJRCkgV1RGX0lOVEVSTkFMOwordm9pZCogSklU
X09QRVJBVElPTiBjb21waWxlRlRMT1NSRXhpdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBleGl0SUQp
IFdURl9JTlRFUk5BTDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxNTYy
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTMsNiArNDEzLDIxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIChj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3Vt
ZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSkgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIH0KIAor
ICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJS
ZWcgc2NyYXRjaDIsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCkKKyAgICB7CisgICAgICAg
IFVOVVNFRF9QQVJBTShvd25lcik7CisgICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7CisgICAgICAgIFVOVVNFRF9QQVJBTSh1c2VL
aW5kKTsKKyAgICAgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gxKTsKKyAgICAgICAgQVNTRVJU
KG93bmVyICE9IHNjcmF0Y2gyKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNjcmF0Y2gy
KTsKKyAgICAgICAgCisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgICAg
ICBlbWl0Q291bnQoV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkp
OworI2VuZGlmCisgICAgfQorCiAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4m
IGRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayopOwogICAgIAogcHJvdGVjdGVkOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTU2MjM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDAsMjMgKzgwMCwy
MyBAQCB2b2lkIEpJVDo6bGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuCiAgICAgICAgIEFT
U0VSVChjYWxsTGlua0luZm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbAogICAgICAg
ICAgICAgICAgfHwgY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxW
YXJhcmdzKTsKICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJ
bmZvOjpDYWxsKSB7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0lu
Zm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsR2Vu
ZXJhdG9yKS5jb2RlKCkpOworICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExp
bmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKG9sZFN0eWxlTGlua0Ns
b3N1cmVDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0
dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkp
OworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbiwgdm0tPmdldENUSVN0dWIob2xkU3R5bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29k
ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEFTU0VSVChraW5kID09IENvZGVG
b3JDb25zdHJ1Y3QpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9y
KS5jb2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJl
dHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDb25zdHJ1Y3RHZW5l
cmF0b3IpLmNvZGUoKSk7CiB9CiAKIHZvaWQgSklUOjpsaW5rU2xvd0NhbGwoQ29kZUJsb2NrKiBj
YWxsZXJDb2RlQmxvY2ssIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQogewogICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogCi0gICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxlckNvZGVC
bG9jay0+dm0oKS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwg
Y2FsbGVyQ29kZUJsb2NrLT52bSgpLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5l
cmF0b3IpLmNvZGUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMTU2MjM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKElu
c3RydQogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIGVtaXRMb2FkKEpTU3RhY2s6OkNh
bGxlZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIo
dmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5n
ZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBz
YW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwogICAgIApAQCAtMzA2LDcgKzMwNiw3IEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQKICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIAotICAgIG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlv
biA9IGVtaXROYWtlZENhbGwob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gbV92bS0+Z2V0Q1RJ
U3R1YihsaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkgOiBtX3ZtLT5nZXRDVElTdHViKGxp
bmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtl
ZENhbGwob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gbV92bS0+Z2V0Q1RJU3R1YihvbGRTdHls
ZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IG1fdm0tPmdldENUSVN0dWIob2xkU3R5
bGVMaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2Nv
ZGVCbG9jayk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOwpAQCAtMzM1LDcg
KzMzNSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKENhbGwKICAgICAK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNvZGVQdHIuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLT5o
b3RQYXRoT3RoZXIubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93
LCBDb2RlTG9jYXRpb25MYWJlbChtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9y
KS5jb2RlKCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVs
KG1fdm0tPmdldENUSVN0dWIob2xkU3R5bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKSk7
CiAgICAgCiAgICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0g
YWRvcHRSZWYobmV3IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NP
REUoCkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNh
bGwoQ2FsbAogICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKAogICAgICAgICBSZXBh
dGNoQnVmZmVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0lu
Zm8tPmhvdFBhdGhCZWdpbiksCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZv
LT5jYWxsUmV0dXJuTG9jYXRpb24sIG1fdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0
b3IpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxs
UmV0dXJuTG9jYXRpb24sIG1fdm0tPmdldENUSVN0dWIob2xkU3R5bGVWaXJ0dWFsQ2FsbEdlbmVy
YXRvcikuY29kZSgpKTsKICAgICAKICAgICBjYWxsTGlua0luZm8tPnN0dWIgPSBzdHViUm91dGlu
ZS5yZWxlYXNlKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJ
KHJldmlzaW9uIDE1NjIzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoSW5zdHJ1CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCiAgICAgZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChKU1N0YWNrOjpDYWxsZWUsIHJlZ1QwKTsKLSAgICBl
bWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUo
KSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENh
bGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2sp
OwogICAgIApAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UoT3Bjb2RlSUQKIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAKLSAgICBtX2NhbGxT
dHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJu
TG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0t
PmdldENUSVN0dWIobGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogbV92bS0+Z2V0Q1RJ
U3R1YihsaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBtX2NhbGxTdHJ1Y3R1cmVTdHVi
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBl
bWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0tPmdldENUSVN0dWIo
b2xkU3R5bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkgOiBtX3ZtLT5nZXRDVElTdHVi
KG9sZFN0eWxlTGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxv
Y2sobV9jb2RlQmxvY2spOwogICAgIApAQCAtMjYzLDcgKzI2Myw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUNsb3N1cmVDYWxsKENhbGwKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNh
bGwsIEZ1bmN0aW9uUHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgIHBhdGNo
QnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLT5ob3RQYXRoT3RoZXIubGFiZWxBdE9mZnNl
dCgwKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbChtX3Zt
LT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKG1fdm0tPmdldENUSVN0dWIob2xkU3R5
bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgCiAgICAgUmVmUHRyPENsb3N1
cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3IENsb3N1cmVDYWxs
U3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREUoCkBAIC0yODEsNyArMjgxLDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwoQ2FsbAogICAgIHJlcGF0Y2hCdWZm
ZXIucmVwbGFjZVdpdGhKdW1wKAogICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mQnJhbmNo
UHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8tPmhvdFBhdGhCZWdpbiksCiAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIG1f
dm0tPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIG1fdm0tPmdl
dENUSVN0dWIob2xkU3R5bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICAKICAg
ICBjYWxsTGlua0luZm8tPnN0dWIgPSBzdHViUm91dGluZS5yZWxlYXNlKCk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbldyYXBwZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFwcGVycy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFw
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSklUT3BlcmF0aW9uV3JhcHBl
cnNfaAorI2RlZmluZSBKSVRPcGVyYXRpb25XcmFwcGVyc19oCisKKyNpbmNsdWRlICJKSVRPcGVy
YXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+CisjaW5jbHVkZSA8d3RmL0lubGlu
ZUFTTS5oPgorCisjaWYgQ09NUElMRVIoTVNWQykKKyNpbmNsdWRlIDxpbnRyaW4uaD4KKyNlbmRp
ZiAvLyBDT01QSUxFUihNU1ZDKQorCituYW1lc3BhY2UgSlNDIHsKKworI2lmICFDT01QSUxFUihN
U1ZDKQorCisjaWYgQ1BVKE1JUFMpCisjaWYgV1RGX01JUFNfUElDCisjZGVmaW5lIExPQURfRlVO
Q1RJT05fVE9fVDkoZnVuY3Rpb24pIFwKKyAgICAgICAgIi5zZXQgbm9yZW9yZGVyIiAiXG4iIFwK
KyAgICAgICAgIi5jcGxvYWQgJDI1IiAiXG4iIFwKKyAgICAgICAgIi5zZXQgcmVvcmRlciIgIlxu
IiBcCisgICAgICAgICJsYSAkdDksICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiXG4iCisj
ZWxzZQorI2RlZmluZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uKSAiIiAiXG4iCisjZW5k
aWYKKyNlbmRpZgorCisjaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoWDg2XzY0KQorCisjZGVmaW5l
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmVnaXN0ZXIp
IFwKKyAgICBhc20oIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxu
IiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkco
ZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgIm1vdiAoJXJzcCksICUiIFNUUklOR0laRShy
ZWdpc3RlcikgIlxuIiBcCisgICAgICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24j
I1dpdGhSZXR1cm5BZGRyZXNzKSAiXG4iIFwKKyAgICApOworI2RlZmluZSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByc2kpCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4KQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByOCkKKworI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBD
UFUoWDg2KQorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhm
dW5jdGlvbiwgb2Zmc2V0KSBcCisgICAgYXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAi
Lmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0wo
ZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwK
KyAgICAgICAgIm1vdiAoJWVzcCksICVlYXhcbiIgXAorICAgICAgICAibW92ICVlYXgsICIgU1RS
SU5HSVpFKG9mZnNldCkgIiglZXNwKVxuIiBcCisgICAgICAgICJqbXAgIiBMT0NBTF9SRUZFUkVO
Q0UoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSAiXG4iIFwKKyAgICApOworI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCA4KQorI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAxNikKKyNkZWZpbmUgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMjApCisjZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDI0KQorCisjZWxpZiBDT01QSUxFUihH
Q0MpICYmIENQVShBUk1fVEhVTUIyKQorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAgICIudGV4dCIgIlxu
IiBcCisgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhm
dW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgICIu
dGh1bWIiICJcbiIgXAorICAgICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZnVuY3Rp
b24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAg
ICAgIm1vdiBhMiwgbHIiICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5j
dGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyAgICBhc20g
KCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCisgICAgIi50aHVtYiIgIlxuIiBcCisgICAgIi50aHVtYl9mdW5jICIgVEhV
TUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIjoiICJcbiIgXAorICAgICAgICAibW92IGE0LCBsciIgIlxuIiBcCisgICAgICAgICJiICIg
TE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAg
ICk7CisKKy8vIEVuY29kZWRKU1ZhbHVlIGluIEpTVkFMVUUzMl82NCBpcyBhIDY0LWJpdCBpbnRl
Z2VyLiBXaGVuIGJlaW5nIGNvbXBpbGVkIGluIEFSTSBFQUJJLCBpdCBtdXN0IGJlIGFsaWduZWQg
ZXZlbi1udW1iZXJlZCByZWdpc3RlciAocjAsIHIyIG9yIFtzcF0pLgorLy8gQXMgYSByZXN1bHQs
IHJldHVybiBhZGRyZXNzIHdpbGwgYmUgYXQgYSA0LWJ5dGUgZnVydGhlciBsb2NhdGlvbiBpbiB0
aGUgZm9sbG93aW5nIGNhc2VzLgorI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVBQkkpICYmIENQVShB
Uk0pCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxy
LCBbc3AsICM0XSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpD
SSAic3RyIGxyLCBbc3AsICM4XSIKKyNlbHNlCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JF
VFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICMwXSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05f
U1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM0XSIKKyNlbmRpZgorCisj
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24p
IFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmFsaWduIDIiICJcbiIg
XAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURF
X1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgIi50aHVtYiIgIlxuIiBcCisgICAgIi50aHVt
Yl9mdW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NU
UklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRV
Uk5fQUREUkVTU19FSkkgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0
aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKKyAgICBhc20g
KCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCisgICAgIi50aHVtYiIgIlxuIiBcCisgICAgIi50aHVtYl9mdW5jICIgVEhV
TUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIjoiICJcbiIgXAorICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19F
SkNJICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhS
ZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQ
VShBUk1fVFJBRElUSU9OQUwpCisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwK
KyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9T
WU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIElOTElORV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24p
IFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgICJtb3Yg
YTIsIGxyIiAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJX
aXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAg
ICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJc
biIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBJTkxJTkVfQVJNX0ZV
TkNUSU9OKGZ1bmN0aW9uKSBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIg
XAorICAgICAgICAibW92IGE0LCBsciIgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJF
TkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKy8vIEVu
Y29kZWRKU1ZhbHVlIGluIEpTVkFMVUUzMl82NCBpcyBhIDY0LWJpdCBpbnRlZ2VyLiBXaGVuIGJl
aW5nIGNvbXBpbGVkIGluIEFSTSBFQUJJLCBpdCBtdXN0IGJlIGFsaWduZWQgZXZlbi1udW1iZXJl
ZCByZWdpc3RlciAocjAsIHIyIG9yIFtzcF0pLgorLy8gQXMgYSByZXN1bHQsIHJldHVybiBhZGRy
ZXNzIHdpbGwgYmUgYXQgYSA0LWJ5dGUgZnVydGhlciBsb2NhdGlvbiBpbiB0aGUgZm9sbG93aW5n
IGNhc2VzLgorI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVBQkkpICYmIENQVShBUk0pCisjZGVmaW5l
IElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICM0XSIK
KyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBb
c3AsICM4XSIKKyNlbHNlCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNT
X0VKSSAic3RyIGxyLCBbc3AsICMwXSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJO
X0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM0XSIKKyNlbmRpZgorCisjZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKKyAgICBhc20g
KCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5j
dGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIElOTElO
RV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
OiIgIlxuIiBcCisgICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAi
XG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJu
QWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAorICAgIGFzbSAoIFwKKyAgICAiLnRleHQi
ICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAg
ICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgSU5MSU5FX0FSTV9GVU5DVElPTihm
dW5jdGlvbikgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAg
ICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAiXG4iIFwKKyAgICAgICAg
ImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBc
CisgICAgKTsKKworI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoTUlQUykKKworI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAorICAgIGFz
bSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgTE9BRF9GVU5DVElPTl9UT19UOShm
dW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKKyAgICAgICAgIm1vdmUgJGExLCAkcmEiICJc
biIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5B
ZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyAgICBhc20oIFwKKyAgICAiLnRleHQiICJc
biIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBI
SURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikg
IjoiICJcbiIgXAorICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5B
ZGRyZXNzKSBcCisgICAgICAgICJtb3ZlICRhMywgJHJhIiAiXG4iIFwKKyAgICAgICAgImIgIiBM
T0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAg
KTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1
bmN0aW9uKSBcCisgICAgYXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIg
U1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24p
ICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICBMT0FE
X0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAorICAgICAgICAi
c3cgJHJhLCAyMCgkc3ApIiAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVu
Y3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAorICAgIGFz
bSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgTE9BRF9GVU5DVElPTl9UT19UOShm
dW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKKyAgICAgICAgInN3ICRyYSwgMjQoJHNwKSIg
IlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVy
bkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFNI
NCkKKworI2RlZmluZSBTSDRfU0NSQVRDSF9SRUdJU1RFUiAicjExIgorCisjZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgYXNtKCBc
CisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgInN0cyBwciwgcjUiICJcbiIgXAor
ICAgICAgICAiYnJhICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJl
c3MiICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwKKyAgICApOworCisjZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyAgICBhc20o
IFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0
aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICAic3RzIHByLCByNyIgIlxuIiBc
CisgICAgICAgICJtb3YubCAyZiwgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAiXG4iIFwKKyAgICAg
ICAgImJyYWYgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAiXG4iIFwKKyAgICAgICAgIm5vcCIgIlxu
IiBcCisgICAgICAgICIxOiAuYmFsaWduIDQiICJcbiIgXAorICAgICAgICAiMjogLmxvbmcgIiBM
T0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcy0xYiIgIlxuIiBcCisg
ICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVu
Y3Rpb24sIG9mZnNldCwgc2NyYXRjaCkgXAorICAgIGFzbSggXAorICAgICIudGV4dCIgIlxuIiBc
CisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVf
U1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIg
IlxuIiBcCisgICAgICAgICJzdHMgcHIsICIgc2NyYXRjaCAiXG4iIFwKKyAgICAgICAgIm1vdi5s
ICIgc2NyYXRjaCAiLCBAKCIgU1RSSU5HSVpFKG9mZnNldCkgIiwgcjE1KSIgIlxuIiBcCisgICAg
ICAgICJtb3YubCAyZiwgIiBzY3JhdGNoICJcbiIgXAorICAgICAgICAiYnJhZiAiIHNjcmF0Y2gg
IlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAgICAgICAiMTogLmJhbGlnbiA0IiAiXG4i
IFwKKyAgICAgICAgIjI6IC5sb25nICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJl
dHVybkFkZHJlc3MtMWIiICJcbiIgXAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCisjZGVm
aW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDQsIFNINF9TQ1JB
VENIX1JFR0lTVEVSKQorCisjZW5kaWYKKworI2RlZmluZSBQX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCit2b2lkKiBKSVRfT1BFUkFUSU9OIGZ1bmN0
aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZF
UkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAorRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCisKKyNkZWZpbmUgSl9GVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVz
c1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKK0ZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKQorCisjZGVmaW5lIEpfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAorRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9B
U00gV1RGX0lOVEVSTkFMOyBcCitGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUNJKGZ1bmN0aW9uKQorCisjZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKSShmdW5jdGlvbikgXAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5j
dGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmlu
Z0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5B
TDsgXAorRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikK
KworI2RlZmluZSBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1
bmN0aW9uKSBcCit2b2lkIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBTdHJpbmdJbXBsKiwgUmV0dXJu
QWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKK0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKQorCisjZWxzZSAvLyAh
Q09NUElMRVIoTVNWQykKKworI2RlZmluZSBQX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgdm9pZCogSklUX09QRVJBVElPTiBmdW5jdGlvbiMj
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNF
RF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKKyAgICB2b2lkKiBKSVRfT1BFUkFUSU9OIGZ1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNz
KGV4ZWMsIFJldHVybkFkZHJlc3NQdHIoKih2b2lkKiopX0FkZHJlc3NPZlJldHVybkFkZHJlc3Mo
KSkpOyB9CisjZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0Uo
ZnVuY3Rpb24pIFwKKyAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uIyNX
aXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VE
X0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAorICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gZnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBmdW5jdGlvbiMjV2l0aFJldHVy
bkFkZHJlc3MoZXhlYywgUmV0dXJuQWRkcmVzc1B0cigqKHZvaWQqKilfQWRkcmVzc09mUmV0dXJu
QWRkcmVzcygpKSk7IH0KKyNkZWZpbmUgSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRUNJKGZ1bmN0aW9uKSBcCisgICAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBm
dW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1w
bCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBc
CisgICAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogY2VsbCwgU3RyaW5nSW1wbCogc3RyaW5nKSB7IHJldHVybiBmdW5jdGlvbiMj
V2l0aFJldHVybkFkZHJlc3MoZXhlYywgY2VsbCwgc3RyaW5nLCBSZXR1cm5BZGRyZXNzUHRyKCoo
dm9pZCoqKV9BZGRyZXNzT2ZSZXR1cm5BZGRyZXNzKCkpKTsgfQorI2RlZmluZSBKX0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKKyAgICBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVS
RU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCisgICAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBmdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBT
dHJpbmdJbXBsKiBzdHJpbmcpIHsgcmV0dXJuIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhl
eGVjLCB2YWx1ZSwgc3RyaW5nLCBSZXR1cm5BZGRyZXNzUHRyKCoodm9pZCoqKV9BZGRyZXNzT2ZS
ZXR1cm5BZGRyZXNzKCkpKTsgfQorI2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCisgICAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUsIEpTQ2VsbCosIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZS
T01fQVNNIFdURl9JTlRFUk5BTDsgXAorICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
ZnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSwgSlNDZWxsKiBj
ZWxsLCBTdHJpbmdJbXBsKiBzdHJpbmcpIHsgcmV0dXJuIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRk
cmVzcyhleGVjLCB2YWx1ZSwgY2VsbCwgc3RyaW5nLCBSZXR1cm5BZGRyZXNzUHRyKCoodm9pZCoq
KV9BZGRyZXNzT2ZSZXR1cm5BZGRyZXNzKCkpKTsgfQorCisjZW5kaWYgLy8gIUNPTVBJTEVSKE1T
VkMpCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSklUT3BlcmF0aW9uV3JhcHBl
cnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjI0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKSVRPcGVyYXRpb25zLmgiCisKKyNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKKyNp
bmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgi
CisjaW5jbHVkZSAiSklUT3BlcmF0aW9uV3JhcHBlcnMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25z
LmgiCisjaW5jbHVkZSAiUmVwYXRjaC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworZXh0ZXJuICJD
IiB7CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZChFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKKyAgICAKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShiYXNlKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOworICAgIElkZW50aWZp
ZXIgaWRlbnQodm0sIHVpZCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUu
Z2V0KGV4ZWMsIGlkZW50LCBzbG90KSk7Cit9CisKK0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VKSShvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRy
ZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgU3RyaW5nSW1wbCogdWlk
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAg
ICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAg
ICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGJhc2UpOworICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90KTsKKworICAgIGlmIChhY2Nl
c3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQor
ICAgICAgICBidWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0
dWJJbmZvKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworSl9G
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSk7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
YmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7
CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5m
byhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOworICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VW
YWx1ZSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBz
bG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihzdHViSW5mby5hY2Nlc3NUeXBlKSkgeworICAgICAgICBpZiAoc3R1YkluZm8uc2VlbikKKyAg
ICAgICAgICAgIHJlcGF0Y2hHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0
dWJJbmZvKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitKX0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0kob3BlcmF0aW9uSW5PcHRpbWl6
ZSk7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluT3B0aW1pemVXaXRo
UmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCog
a2V5LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgCisgICAgaWYgKCFiYXNlLT5pc09iamVjdCgpKSB7CisgICAgICAgIHZtLT50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVJbnZhbGlkUGFyYW1ldGVyRXJyb3IoZXhlYywgImluIiwgYmFzZSkp
OworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0K
KyAgICAKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2so
KS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
ID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBJ
ZGVudGlmaWVyIGlkZW50KHZtLCBrZXkpOworICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2UpOwor
ICAgIGJvb2wgcmVzdWx0ID0gYXNPYmplY3QoYmFzZSktPmdldFByb3BlcnR5U2xvdChleGVjLCBp
ZGVudCwgc2xvdCk7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoYWNjZXNzVHlwZSA9PSBzdHVi
SW5mby5hY2Nlc3NUeXBlKTsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uc2VlbikKKyAgICAgICAg
cmVwYXRjaEluKGV4ZWMsIGJhc2UsIGlkZW50LCByZXN1bHQsIHNsb3QsIHN0dWJJbmZvKTsKKyAg
ICBlbHNlCisgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOworICAgIAorICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHJlc3VsdCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBT
dHJpbmdJbXBsKiBrZXkpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICBpZiAoIWJhc2UtPmlzT2Jq
ZWN0KCkpIHsKKyAgICAgICAgdm0tPnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUludmFsaWRQ
YXJhbWV0ZXJFcnJvcihleGVjLCAiaW4iLCBiYXNlKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorCisgICAgSWRlbnRpZmllciBpZGVudCh2
bSwga2V5KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihhc09iamVjdChi
YXNlKS0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2VuZXJpY0luKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBi
YXNlLCBFbmNvZGVkSlNWYWx1ZSBrZXkpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihDb21tb25TbG93UGF0aHM6Om9wSW4oZXhlYywgSlNW
YWx1ZTo6ZGVjb2RlKGtleSksIGJhc2UpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ2FsbEN1c3RvbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
YmFzZSwgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZnVuY3Rpb24sIFN0cmluZ0ltcGwqIHVp
ZCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQp
OworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZnVuY3Rpb24oZXhlYywgYXNPYmpl
Y3QoYmFzZSksIGlkZW50KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ2FsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBn
ZXR0ZXJTZXR0ZXIpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNhbGxHZXR0ZXIoZXhlYywgYmFzZSwgZ2V0dGVyU2V0dGVyKSk7Cit9CisKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKK3sK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29u
dGV4dCgpKTsKKyAgICBiYXNlLT5tZXRob2RUYWJsZSgpLT5wdXQoYmFzZSwgZXhlYywgaWRlbnQs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKK30KKwordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkKQorewor
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAg
UHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29u
dGV4dCgpKTsKKyAgICBiYXNlLT5tZXRob2RUYWJsZSgpLT5wdXQoYmFzZSwgZXhlYywgaWRlbnQs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKK30KKwordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkKQor
eworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Cisg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRD
b250ZXh0KCkpOworICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVjdChi
YXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSwgc2xvdCk7Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgQVNT
RVJUKGJhc2UtPmlzT2JqZWN0KCkpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhl
Yy0+dm0oKSwgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKK30K
KworVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0T3B0aW1pemUpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAg
IElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAg
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LmFjY2Vzc1R5cGUpOworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJhc2UpOworICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAg
ICAKKyAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgCisg
ICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNj
ZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uc2VlbikK
KyAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1
YkluZm8sIE5vdERpcmVjdCk7CisgICAgZWxzZQorICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1
ZTsKK30KKworVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVy
YXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0lt
cGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFk
ZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJhc2UpOworICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENv
bnRleHQoKSk7CisgICAgCisgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNs
b3QpOworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHN0
dWJJbmZvLnNlZW4pCisgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgaWRl
bnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworICAgIGVsc2UKKyAgICAgICAgc3R1Yklu
Zm8uc2VlbiA9IHRydWU7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemVXaXRoUmV0dXJu
QWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQp
OworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5n
ZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Cisg
ICAgCisgICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOworICAgIGFzT2JqZWN0KGJhc2UpLT5w
dXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBpZiAo
YWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBl
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChzdHViSW5mby5zZWVuKQorICAgICAg
ICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIERpcmVj
dCk7CisgICAgZWxzZQorICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKK30KKworVl9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwq
IHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJl
c3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlLCBleGVj
LT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgCisgICAgQVNTRVJUKGJhc2Ut
PmlzT2JqZWN0KCkpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwg
aWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGlmIChzdHViSW5mby5zZWVuKQorICAgICAgICByZXBhdGNoUHV0QnlJRChleGVj
LCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7CisgICAgZWxzZQorICAgICAg
ICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKK30KKworVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KTsKK3ZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0V2l0aFJldHVybkFk
ZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2Vs
bCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
Cit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsK
KyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0
U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNWYWx1ZSBiYXNl
VmFsdWUoYmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJs
b2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywg
aWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwg
c3R1YkluZm8sIE5vdERpcmVjdCk7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCk7Cit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1
cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBK
U0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVp
ZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCkt
PmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9
IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIEpTVmFsdWUg
YmFzZVZhbHVlKGJhc2UpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlLCBleGVjLT5j
b2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgCisgICAgYmFzZVZhbHVlLnB1dChl
eGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBz
bG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKK30KKworVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0
KTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRM
aXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBp
ZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5j
b2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBh
Y2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7
CisgICAgCisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRC
eUlkQ29udGV4dCgpKTsKKyAgICAKKyAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7CisgICAg
YXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgdmFsdWUsIHNsb3Qp
OworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0
dWJJbmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYnVpbGRQdXRC
eUlkTGlzdChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7Cit9CisK
K1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdCk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0
cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJl
dHVybkFkZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZh
bHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgCisgICAgQVNT
RVJUKGJhc2UtPmlzT2JqZWN0KCkpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhl
Yy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNzVHlwZSAh
PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZSwgaWRlbnQsIHNs
b3QsIHN0dWJJbmZvLCBEaXJlY3QpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
YmFzZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgRW5jb2Rl
ZEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBBU1NFUlQoc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpID4gYmFzZS0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkpOworICAgIEFTU0VSVCghdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCkuZmFzdFBhdGhT
aG91bGRTdWNjZWVkKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1Zh
bHVlKSkpOworICAgIGJhc2UtPnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNl
c3Nhcnkodm0sIHN0cnVjdHVyZSk7CisgICAgYmFzZS0+cHV0RGlyZWN0KHZtLCBvZmZzZXQsIEpT
VmFsdWU6OmRlY29kZSh2YWx1ZSkpOworfQorCitzdGF0aWMgdm9pZCogaGFuZGxlSG9zdENhbGwo
RXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGNhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kKQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZy
YW1lKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisKKyAgICBleGVjQ2FsbGVlLT5zZXRT
Y29wZShleGVjLT5zY29wZSgpKTsKKyAgICBleGVjQ2FsbGVlLT5zZXRDb2RlQmxvY2soMCk7CisK
KyAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKKyAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShjYWxsZWUsIGNhbGxE
YXRhKTsKKyAgICAKKyAgICAgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlSlMpOworICAg
IAorICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KSB7CisgICAgICAgICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKKyAgICAgICAgICAg
IGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKKyAgICAgICAgICAgIHZt
LT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5m
dW5jdGlvbihleGVjQ2FsbGVlKSk7CisgICAgICAgICAgICBpZiAodm0tPmV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgICAgIHJldHVybiB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworCisgICAg
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5W
YWx1ZSk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxU
eXBlTm9uZSk7CisgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
Tm90QUZ1bmN0aW9uRXJyb3IoZXhlYywgY2FsbGVlKSk7CisgICAgICAgIHJldHVybiB2bS0+Z2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpOworICAgIH0KKworICAgIEFTU0VSVChraW5kID09IENvZGVGb3JD
b25zdHJ1Y3QpOworICAgIAorICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKKyAgICBD
b25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1Y3REYXRhKGNhbGxlZSwgY29u
c3RydWN0RGF0YSk7CisgICAgCisgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0
VHlwZUpTKTsKKyAgICAKKyAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlSG9z
dCkgeworICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVl
KTsKKyAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOworICAg
ICAgICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3RE
YXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CisgICAgICAgIGlmICh2bS0+ZXhjZXB0
aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKwor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5W
YWx1ZSk7CisgICAgfQorICAgIAorICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVj
dFR5cGVOb25lKTsKKyAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5v
dEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGNhbGxlZSkpOworICAgIHJldHVybiB2bS0+Z2V0Q1RJ
U3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpOworfQorCitpbmxpbmUgY2hhciogbGlua0ZvcihFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAor
ICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4ZWNDYWxsZWUtPmNhbGxlZUFzVmFsdWUoKTsK
KyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVB
c1ZhbHVlKTsKKyAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKQorICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVl
QXNWYWx1ZSwga2luZCkpOworCisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVu
Y3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUo
Y2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJs
ZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHI7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOworICAgIGlmIChleGVjdXRhYmxl
LT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJh
dGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICAgICAgSlNPYmplY3QqIGVycm9y
ID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGNh
bGxlZS0+c2NvcGUoKSwga2luZCk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAg
dm0tPnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKSk7
CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0
dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIH0KKyAgICAgICAgY29kZUJsb2NrID0gZnVuY3Rpb25F
eGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCk7CisgICAgICAgIGlmIChleGVjQ2FsbGVlLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSkpCisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVj
dXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRl
ZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7CisgICAgfQorICAgIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhl
eGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsKKyAgICBpZiAoIWNhbGxMaW5rSW5mby5zZWVuT25jZSgp
KQorICAgICAgICBjYWxsTGlua0luZm8uc2V0U2VlbigpOworICAgIGVsc2UKKyAgICAgICAgbGlu
a0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRy
LCBraW5kKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZVB0ci5leGVj
dXRhYmxlQWRkcmVzcygpKTsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5r
Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhlY0Nh
bGxlZSwgQ29kZUZvckNhbGwpOworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxp
bmtDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAgIHJldHVybiBsaW5rRm9y
KGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOworfQorCitpbmxpbmUgY2hhciogdmlydHVh
bEZvcldpdGhGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCwgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCit7CisgICAgRXhlY1N0
YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKwor
ICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4ZWNDYWxsZWUtPmNhbGxlZUFzVmFsdWUoKTsK
KyAgICBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7
CisgICAgaWYgKFVOTElLRUxZKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkpCisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNoYXIqPihoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxs
ZWVBc1ZhbHVlLCBraW5kKSk7CisgICAgCisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nh
c3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBleGVjQ2FsbGVlLT5z
ZXRTY29wZShmdW5jdGlvbi0+c2NvcGVVbmNoZWNrZWQoKSk7CisgICAgRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOworICAgIGlmIChVTkxJS0VMWSgh
ZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKKyAgICAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihleGVjdXRhYmxlKTsKKyAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVj
dXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGZ1bmN0aW9uLT5zY29wZSgp
LCBraW5kKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWNDYWxsZWUsIGVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZXhlY3V0YWJsZS0+
Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOworfQorCitpbmxpbmUgY2hhciogdmlydHVhbEZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVu
Y3Rpb25DZWxsSWdub3JlZDsKKyAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVj
Q2FsbGVlLCBraW5kLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQpOworfQorCitzdGF0aWMg
Ym9vbCBhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwg
SlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8p
Cit7CisgICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2Fs
bGVlQXNGdW5jdGlvbkNlbGwpOworICAgIEpTRnVuY3Rpb24qIG9sZENhbGxlZSA9IGNhbGxMaW5r
SW5mby5jYWxsZWUuZ2V0KCk7CisgICAgCisgICAgaWYgKCFvbGRDYWxsZWUKKyAgICAgICAgfHwg
b2xkQ2FsbGVlLT5zdHJ1Y3R1cmUoKSAhPSBjYWxsZWUtPnN0cnVjdHVyZSgpCisgICAgICAgIHx8
IG9sZENhbGxlZS0+ZXhlY3V0YWJsZSgpICE9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQVNTRVJUKGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5o
YXNKSVRDb2RlRm9yQ2FsbCgpKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9
IGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5hZGRyZXNz
Rm9yQ2FsbCgpOworICAgIAorICAgIENvZGVCbG9jayogY29kZUJsb2NrOworICAgIGlmIChjYWxs
ZWUtPmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgY29kZUJsb2NrID0g
MDsKKyAgICBlbHNlIHsKKyAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGNhbGxlZS0+ZXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOworICAgICAg
ICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19j
YXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBsaW5rQ2xvc3VyZUNhbGwoCisgICAgICAgIGV4
ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29kZUJsb2NrLAorICAgICAgICBjYWxsZWUtPnN0cnVj
dHVyZSgpLCBjYWxsZWUtPmV4ZWN1dGFibGUoKSwgY29kZVB0cik7CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxs
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsOworICAgIGNoYXIqIHJlc3VsdCA9IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxl
ZSwgQ29kZUZvckNhbGwsIGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5n
ZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7CisKKyAgICBpZiAoIWF0dGVt
cHRUb09wdGltaXplQ2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNGdW5jdGlvbkNlbGws
IGNhbGxMaW5rSW5mbykpCisgICAgICAgIGxpbmtTbG93Rm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5r
SW5mbywgQ29kZUZvckNhbGwpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVl
KQoreyAgICAKKyAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCk7
Cit9CisKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVj
U3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwg
Q29kZUZvckNvbnN0cnVjdCk7Cit9CisKK0pJVEhhbmRsZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04g
bG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqIGV4ZWMsIHVpbnQzMl90IGNhbGxJbmRl
eCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVj
LT5leGNlcHRpb24oKTsKKyAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOworICAgIAorICAgIHVu
c2lnbmVkIHZQQ0luZGV4ID0gZXhlYy0+Y29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0Rm9yQ2Fs
bEF0SW5kZXgoY2FsbEluZGV4KTsKKyAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBnZW5l
cmljVW53aW5kKHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSwgdlBDSW5kZXgpOworICAgIEFTU0VS
VChoYW5kbGVyLmNhdGNoUm91dGluZSk7CisgICAgcmV0dXJuIGRmZ0hhbmRsZXJFbmNvZGVkKGhh
bmRsZXIuY2FsbEZyYW1lLCBoYW5kbGVyLmNhdGNoUm91dGluZSk7Cit9CisKK0pJVEhhbmRsZXJF
bmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlckluU3R1YihFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKK3sKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
KworICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICBB
U1NFUlQoZXhjZXB0aW9uVmFsdWUpOworICAgIAorICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9
IHN0dWJJbmZvLT5jb2RlT3JpZ2luOworICAgIHdoaWxlIChjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkKKyAgICAgICAgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5j
YWxsZXI7CisgICAgCisgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Vud2lu
ZCh2bSwgZXhlYywgZXhjZXB0aW9uVmFsdWUsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Cisg
ICAgQVNTRVJUKGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKKyAgICByZXR1cm4gZGZnSGFuZGxlckVu
Y29kZWQoaGFuZGxlci5jYWxsRnJhbWUsIGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKK30KKworfSAv
LyBleHRlcm4gIkMiCisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSklUT3BlcmF0aW9uc19oCisjZGVmaW5lIEpJVE9wZXJhdGlvbnNfaAorCisjaW5jbHVk
ZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiSlNBcnJheS5oIgorI2luY2x1ZGUgIkpTQ0pTVmFs
dWUuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIK
KyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBDQUxMSU5HX0NPTlZFTlRJT05fSVNfU1REQ0FMTAor
I2RlZmluZSBKSVRfT1BFUkFUSU9OIENERUNMCisjZWxzZQorI2RlZmluZSBKSVRfT1BFUkFUSU9O
CisjZW5kaWYKKworLy8gVGhlc2UgdHlwZWRlZnMgcHJvdmlkZSB0eXBlY2hlY2tpbmcgd2hlbiBn
ZW5lcmF0aW5nIGNhbGxzIG91dCB0byBoZWxwZXIgcm91dGluZXM7CisvLyB0aGlzIGhlbHBzIHBy
ZXZlbnQgY2FsbGluZyBhIGhlbHBlciByb3V0aW5lIHdpdGggdGhlIHdyb25nIGFyZ3VtZW50cyEK
Ky8qCisgICAgS2V5OgorICAgIFY6IHZvaWQKKyAgICBKOiBKU1ZhbHVlCisgICAgUDogcG9pbnRl
ciAodm9pZCopCisgICAgQzogSlNDZWxsKgorICAgIEE6IEpTQXJyYXkqCisgICAgUzogc2l6ZV90
CisgICAgWjogaW50MzJfdAorICAgIEQ6IGRvdWJsZQorICAgIEk6IFN0cmluZ0ltcGwqCisqLwor
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRSko
RXhlY1N0YXRlKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJ
VE9wZXJhdGlvbl9FQSkoRXhlY1N0YXRlKiwgSlNBcnJheSopOwordHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUFaKShFeGVjU3RhdGUqLCBKU0Fy
cmF5KiwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpK
X0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVmIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIEpTQ2VsbCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgq
Sl9KSVRPcGVyYXRpb25fRUNJKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7Cit0
eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ0op
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VEQSkoRXhlY1N0YXRlKiwgZG91
YmxlLCBKU0FycmF5Kik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpK
X0pJVE9wZXJhdGlvbl9FSSkoRXhlY1N0YXRlKiwgU3RyaW5nSW1wbCopOwordHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAo
KkpfSklUT3BlcmF0aW9uX0VKQSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQXJyYXkq
KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9u
X0VKSSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKSikoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKc3NaKShFeGVjU3RhdGUqLCBK
U1N0cmluZyosIGludDMyX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
ICgqSl9KSVRPcGVyYXRpb25fRUpQKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCop
OwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25f
RVApKEV4ZWNTdGF0ZSosIHZvaWQqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiAoKkpfSklUT3BlcmF0aW9uX0VQUCkoRXhlY1N0YXRlKiwgdm9pZCosIHZvaWQqKTsKK3R5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VQUyko
RXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FU1MpKEV4ZWNTdGF0ZSosIHNpemVfdCwgc2l6ZV90
KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9u
X0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VaSWNmWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgSW5s
aW5lQ2FsbEZyYW1lKiwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FWlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIGludDMyX3Qp
OwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FKShFeGVj
U3RhdGUqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25f
RVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
KCpDX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVmIEpTQ2Vs
bCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgSlNDZWxsKik7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0
aW9uX0VJY2YpKEV4ZWNTdGF0ZSosIElubGluZUNhbGxGcmFtZSopOwordHlwZWRlZiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUpOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9F
SnNzU3QpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgU3RydWN0dXJlKik7Cit0eXBlZGVmIEpTQ2Vs
bCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NKc3MpKEV4ZWNTdGF0ZSosIEpT
U3RyaW5nKiwgSlNTdHJpbmcqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19K
SVRPcGVyYXRpb25fRUpzc0pzc0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyos
IEpTU3RyaW5nKik7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0
aW9uX0VPWikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKK3R5cGVkZWYgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRVN0KShFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRVop
KEV4ZWNTdGF0ZSosIGludDMyX3QpOwordHlwZWRlZiBkb3VibGUgSklUX09QRVJBVElPTiAoKkRf
SklUT3BlcmF0aW9uX0REKShkb3VibGUsIGRvdWJsZSk7Cit0eXBlZGVmIGRvdWJsZSBKSVRfT1BF
UkFUSU9OICgqRF9KSVRPcGVyYXRpb25fWlopKGludDMyX3QsIGludDMyX3QpOwordHlwZWRlZiBk
b3VibGUgSklUX09QRVJBVElPTiAoKkRfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0
aW9uX0QpKGRvdWJsZSk7Cit0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVy
YXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYgc2l6ZV90
IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUpOwordHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VK
SikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYg
c2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9KKShFbmNvZGVkSlNWYWx1ZSk7
Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0
ZSopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FT1pEKShF
eGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIGRvdWJsZSk7Cit0eXBlZGVmIHZvaWQgSklU
X09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VPWkopKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
aW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpW
X0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVmIHZvaWQgSklU
X09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDSWNmKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBJ
bmxpbmVDYWxsRnJhbWUqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVy
YXRpb25fRUNDSWNmKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJh
bWUqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNKSiko
RXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3R5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNaKShFeGVjU3RhdGUq
LCBKU0NlbGwqLCBpbnQzMl90KTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRP
cGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYgdm9p
ZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUpDSSkoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIEpTQ2VsbCosIFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFU
SU9OICgqVl9KSVRPcGVyYXRpb25fRUpKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElP
TiAoKlZfSklUT3BlcmF0aW9uX0VKUFApKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCB2b2lk
Kiwgdm9pZCopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9F
UFpKKShFeGVjU3RhdGUqLCB2b2lkKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRl
ZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9XKShXYXRjaHBvaW50U2V0Kik7
Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FKShFeGVjU3Rh
dGUqKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VDKShF
eGVjU3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklU
T3BlcmF0aW9uX0VKUykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCk7Cit0eXBl
ZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FTykoRXhlY1N0YXRlKiwg
SlNPYmplY3QqKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9u
X0VPUykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBKSVRf
T1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGlu
dDMyX3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVBT
KShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElP
TiAoKlBfSklUT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwordHlwZWRlZiBjaGFy
KiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVNKc3MpKEV4ZWNTdGF0ZSosIHNpemVf
dCwgSlNTdHJpbmcqKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0
aW9uX0VTdCkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVS
QVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FU3RKKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNv
ZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlv
bl9FU3RQUykoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCk7Cit0eXBlZGVm
IGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FU3RTUykoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgc2l6ZV90LCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9O
ICgqUF9KSVRPcGVyYXRpb25fRVN0WikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCk7
Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FWlopKEV4ZWNT
dGF0ZSosIGludDMyX3QsIGludDMyX3QpOwordHlwZWRlZiBTdHJpbmdJbXBsKiBKSVRfT1BFUkFU
SU9OICgqSV9KSVRPcGVyYXRpb25fRUpzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsKK3R5cGVk
ZWYgSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gKCpKc3NfSklUT3BlcmF0aW9uX0VaKShFeGVjU3Rh
dGUqLCBpbnQzMl90KTsKKworZXh0ZXJuICJDIiB7CisKKy8vIFRoaXMgbWV0aG9kIGlzIHVzZWQg
dG8gbG9va3VwIGFuIGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdo
aWNoIGlzCisvLyB0aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQg
dG8gb25lIG9mIHRoZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92ZS4KKworLy8gQWNjb3JkaW5nIHRv
IEMrKyBydWxlcywgYSB0eXBlIHVzZWQgZm9yIHRoZSByZXR1cm4gc2lnbmF0dXJlIG9mIGZ1bmN0
aW9uIHdpdGggQyBsaW5rYWdlIChpLmUuCisvLyAnZXh0ZXJuICJDIicpIG5lZWRzIHRvIGJlIFBP
RDsgaGVuY2UgcHV0dGluZyBhbnkgY29uc3RydWN0b3JzIGludG8gaXQgY291bGQgY2F1c2UgZWl0
aGVyIGNvbXBpbGVyCisvLyB3YXJuaW5ncywgb3Igd29yc2UsIGEgY2hhbmdlIGluIHRoZSBBQkkg
dXNlZCB0byByZXR1cm4gdGhlc2UgdHlwZXMuCitzdHJ1Y3QgSklUSGFuZGxlciB7CisgICAgdW5p
b24gVW5pb24geworICAgICAgICBzdHJ1Y3QgU3RydWN0IHsKKyAgICAgICAgICAgIEV4ZWNTdGF0
ZSogZXhlYzsKKyAgICAgICAgICAgIHZvaWQqIGhhbmRsZXI7CisgICAgICAgIH0gczsKKyAgICAg
ICAgdWludDY0X3QgZW5jb2RlZDsKKyAgICB9IHU7Cit9OworCitpbmxpbmUgSklUSGFuZGxlciBj
cmVhdGVKSVRIYW5kbGVyKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogaGFuZGxlcikKK3sKKyAgICBK
SVRIYW5kbGVyIHJlc3VsdDsKKyAgICByZXN1bHQudS5zLmV4ZWMgPSBleGVjOworICAgIHJlc3Vs
dC51LnMuaGFuZGxlciA9IGhhbmRsZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIENQ
VShYODZfNjQpCit0eXBlZGVmIEpJVEhhbmRsZXIgSklUSGFuZGxlckVuY29kZWQ7CitpbmxpbmUg
SklUSGFuZGxlckVuY29kZWQgZGZnSGFuZGxlckVuY29kZWQoRXhlY1N0YXRlKiBleGVjLCB2b2lk
KiBoYW5kbGVyKQoreworICAgIHJldHVybiBjcmVhdGVKSVRIYW5kbGVyKGV4ZWMsIGhhbmRsZXIp
OworfQorI2Vsc2UKK3R5cGVkZWYgdWludDY0X3QgSklUSGFuZGxlckVuY29kZWQ7CitpbmxpbmUg
SklUSGFuZGxlckVuY29kZWQgZGZnSGFuZGxlckVuY29kZWQoRXhlY1N0YXRlKiBleGVjLCB2b2lk
KiBoYW5kbGVyKQoreworICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihKSVRIYW5kbGVyOjpVbmlv
bikgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgSklUSGFuZGxlcl9Vbmlvbl9pc182NGJpdCk7CisgICAg
cmV0dXJuIGNyZWF0ZUpJVEhhbmRsZXIoZXhlYywgaGFuZGxlcikudS5lbmNvZGVkOworfQorI2Vu
ZGlmCitKSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXIoRXhlY1N0YXRlKiwgdWludDMyX3QpIFdURl9JTlRFUk5BTDsKK0pJVEhhbmRsZXJFbmNvZGVk
IEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlckluU3R1YihFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmVTdHViSW5mbyopIFdURl9JTlRFUk5BTDsKKworRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJp
bmdJbXBsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJ
bXBsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwq
KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklu
T3B0aW1pemUoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOworRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJ
bXBsKik7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJbihF
eGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7CitFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5B
TDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJ
bXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBK
U0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFM
Owordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3Ry
aW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJ
bXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRT
dHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBK
U0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRF
Uk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVp
bGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJO
QUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5p
c2hQdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwg
RW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5U
RVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhl
Y1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5r
Q29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKKworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEpJVE9wZXJhdGlvbnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
UmVnaXN0ZXJTZXRfaAorI2RlZmluZSBSZWdpc3RlclNldF9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5j
bHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzID0KKyAg
ICBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQgPQor
ICAgICh0b3RhbE51bWJlck9mUmVnaXN0ZXJzICsgNykgPj4gMzsKKwordHlwZWRlZiB1aW50OF90
IFJlZ2lzdGVyU2V0UE9EW251bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0XTsKKworY2xhc3MgUmVn
aXN0ZXJTZXQgeworcHVibGljOgorICAgIFJlZ2lzdGVyU2V0KCkKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0OyBpLS07KQorICAgICAg
ICAgICAgbV9zZXRbaV0gPSAwOworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlclNldChjb25zdCBS
ZWdpc3RlclNldFBPRCYgb3RoZXIpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNldDsgaS0tOykKKyAgICAgICAgICAgIG1fc2V0W2ldID0g
b3RoZXJbaV07CisgICAgfQorICAgIAorICAgIGNvbnN0IFJlZ2lzdGVyU2V0UE9EJiBhc1BPRCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2V0OyB9CisgICAgCisgICAgdm9pZCBjb3B5SW5mbyhSZWdpc3Rl
clNldFBPRCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNldDsgaS0tOykKKyAgICAgICAgICAgIG90aGVyW2ldID0g
bV9zZXRbaV07CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KEdQUlJlZyByZWcpCisgICAgewor
ICAgICAgICBzZXRCaXQoR1BSSW5mbzo6dG9JbmRleChyZWcpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzZXRHUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAgICBzZXRCaXQoaW5k
ZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKEdQUlJlZyByZWcpCisgICAgeworICAg
ICAgICBjbGVhckJpdChHUFJJbmZvOjp0b0luZGV4KHJlZykpOworICAgIH0KKyAgICAKKyAgICBi
b29sIGdldChHUFJSZWcgcmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEJpdChH
UFJJbmZvOjp0b0luZGV4KHJlZykpOworICAgIH0KKyAgICAKKyAgICBib29sIGdldEdQUkJ5SW5k
ZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBH
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgIHJldHVybiBnZXRCaXQoaW5kZXgp
OworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm4gdGhlIGluZGV4J3RoIGZyZWUgR1BSLgorICAg
IEdQUlJlZyBnZXRGcmVlR1BSKHVuc2lnbmVkIGluZGV4ID0gMCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7
CisgICAgICAgICAgICBpZiAoIWdldEdQUkJ5SW5kZXgoaSkgJiYgIWluZGV4LS0pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KEZQUlJl
ZyByZWcpCisgICAgeworICAgICAgICBzZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMg
KyBGUFJJbmZvOjp0b0luZGV4KHJlZykpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEZQUkJ5
SW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBGUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgIHNldEJpdChHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVycyArIGluZGV4KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcihGUFJSZWcg
cmVnKQorICAgIHsKKyAgICAgICAgY2xlYXJCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMg
KyBGUFJJbmZvOjp0b0luZGV4KHJlZykpOworICAgIH0KKyAgICAKKyAgICBib29sIGdldChGUFJS
ZWcgcmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEJpdChHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyArIEZQUkluZm86OnRvSW5kZXgocmVnKSk7CisgICAgfQorICAgIAorICAg
IGJvb2wgZ2V0RlBSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpbmRleCA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0
dXJuIGdldEJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGluZGV4KTsKKyAgICB9Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CisgICAgdm9pZCBzZXRCeUluZGV4
KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgc2V0KEJhbmtJbmZvOjp0b1JlZ2lzdGVy
KGluZGV4KSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgor
ICAgIGJvb2wgZ2V0QnlJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVy
biBnZXQoQmFua0luZm86OnRvUmVnaXN0ZXIoaW5kZXgpKTsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgbnVtYmVyT2ZTZXRHUFJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJl
c3VsdCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIWdldEJpdChpKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mU2V0RlBS
cygpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAg
ICAgICAgICAgaWYgKCFnZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bWJl
ck9mU2V0UmVnaXN0ZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnM7IGkt
LTspIHsKKyAgICAgICAgICAgIGlmICghZ2V0Qml0KGkpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgc2V0Qml0KHVuc2lnbmVkIGkp
CisgICAgeworICAgICAgICBBU1NFUlQoaSA8IHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMpOworICAg
ICAgICBtX3NldFtpID4+IDNdIHw9ICgxIDw8IChpICYgNykpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGNsZWFyQml0KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICBBU1NFUlQoaSA8IHRvdGFs
TnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAgICBtX3NldFtpID4+IDNdICY9IH4oMSA8PCAoaSAm
IDcpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBnZXRCaXQodW5zaWduZWQgaSkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpIDwgdG90YWxOdW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAg
IHJldHVybiAhIShtX3NldFtpID4+IDNdICYgKDEgPDwgKGkgJiA3KSkpOworICAgIH0KKyAgICAK
KyAgICBSZWdpc3RlclNldFBPRCBtX3NldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZWxzZSAvLyBFTkFCTEUoSklUKSAtPiBzbyBpZiBKSVQgaXMgZGlzYWJsZWQKKworbmFtZXNwYWNl
IEpTQyB7CisKKy8vIERlZmluZSBSZWdpc3RlclNldFBPRCB0byBzb21ldGhpbmcgdGhhdCBpcyBh
IFBPRCwgYnV0IGlzIG90aGVyd2lzZSB1c2VsZXNzLAorLy8gdG8gbWFrZSBpdCBlYXNpZXIgdG8g
cmVmZXIgdG8gdGhpcyB0eXBlIGluIGNvZGUgdGhhdCBtYXkgYmUgY29tcGlsZWQgd2hlbgorLy8g
dGhlIERGRyBpcyBkaXNhYmxlZC4KKworc3RydWN0IFJlZ2lzdGVyU2V0UE9EIHsgfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gUmVn
aXN0ZXJTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUmVwYXRjaC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIKKyNpbmNsdWRlICJHQ0F3YXJl
SklUU3R1YlJvdXRpbmUuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKKyNpbmNsdWRl
ICJSZXBhdGNoQnVmZmVyLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgi
CisjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGh1bmtH
ZW5lcmF0b3JzLmgiCisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVibG9j
aywgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBuZXdDYWxsZWVGdW5jdGlvbikK
K3sKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZWJsb2NrKTsKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbik7Cit9CisKK3N0YXRpYyB2
b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwgYm9vbCBjb21wYWN0
KQoreworICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOworCisgICAg
Ly8gT25seSBvcHRpbWl6ZSBvbmNlIQorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7CisKKyAgICAvLyBQYXRjaCB0
aGUgc3RydWN0dXJlIGNoZWNrICYgdGhlIG9mZnNldCBvZiB0aGUgbG9hZC4KKyAgICByZXBhdGNo
QnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0
T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwp
LCBzdHJ1Y3R1cmUpOworICAgIHJlcGF0Y2hCdWZmZXIuc2V0TG9hZEluc3RydWN0aW9uSXNBY3Rp
dmUoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmNvbnZlcnRpYmxlTG9hZEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0b3JhZ2VMb2FkKSwgaXNPdXRPZkxpbmVPZmZz
ZXQob2Zmc2V0KSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoY29tcGFjdCkKKyAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRh
TGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9y
U3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSk7CisgICAgZWxz
ZQorICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9h
ZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSk7CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGlmIChjb21wYWN0KSB7CisgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFj
dEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwg
b2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUp
LCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdM
b2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRh
TGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2Fk
T3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAg
fQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygK
KyAgICBKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgTWFjcm9Bc3NlbWJsZXIm
IGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3Jh
dGNoR1BSKQoreworICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBz
dHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKKyAgICAg
ICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHViSW5mby5hZGRXYXRjaHBv
aW50KGNvZGVCbG9jaykpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLy8gSWYgd2Ug
ZXhlY3V0ZSB0aGlzIGNvZGUsIHRoZSBvYmplY3QgbXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2Ug
ZXhwZWN0LiBBc3NlcnQKKyAgICAgICAgLy8gdGhpcyBpbiBkZWJ1ZyBtb2Rlcy4KKyAgICAgICAg
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gaml0LmJyYW5jaFB0cigKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CisgICAg
ICAgIGppdC5icmVha3BvaW50KCk7CisgICAgICAgIG9rLmxpbmsoJmppdCk7CisjZW5kaWYKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsKKyAgICBmYWlsdXJlQ2FzZXMuYXBw
ZW5kKAorICAgICAgICBqaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZFN0cnVj
dHVyZVRyYW5zaXRpb25DaGVjaygKKyAgICBKU1ZhbHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBNYWNyb0Fzc2VtYmxl
ciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNj
cmF0Y2hHUFIpCit7CisgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOworICAgIAorICAgIGFkZFN0
cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKKyAgICAgICAgcHJvdG90eXBlLmFzQ2VsbCgpLCBwcm90
b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsCisg
ICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Cit9CisKK3N0YXRpYyB2b2lkIHJlcGxh
Y2VXaXRoSnVtcChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCit7CisgICAg
aWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQ
YXRjaCgpKSB7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKAorICAgICAg
ICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9u
QWRkcmVzcygKKyAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0
YUxhYmVsUHRyQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgIC0oaW50cHRyX3Qpc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpKSwKKyAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKHRhcmdldCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKAorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
anVtcEF0T2Zmc2V0KAorICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
U3RydWN0Q2hlY2spLAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKK30KKwor
c3RhdGljIHZvaWQgZW1pdFJlc3RvcmVTY3JhdGNoKE1hY3JvQXNzZW1ibGVyJiBzdHViSml0LCBi
b29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAmIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBmYWlsLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzKQoreworICAgIGlmIChuZWVkVG9SZXN0b3JlU2Ny
YXRjaCkgeworICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgCisgICAg
ICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIC8vIGxpbmsg
ZmFpbHVyZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4gcG9wIHNjcmF0Y2hHUFIsIGFuZCB0aGVuIGp1
bXAgYmFjay4KKyAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOworICAgICAgICAK
KyAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7CisgICAgICAgIAorICAgICAgICBmYWls
ID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc3Vj
Y2VzcyA9IHN0dWJKaXQuanVtcCgpOworfQorCitzdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0
Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsIHN1
Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbikKK3sKKyAgICBwYXRj
aEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7CisgICAgICAgIAorICAgIGlmIChu
ZWVkVG9SZXN0b3JlU2NyYXRjaCkgeworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWwsIHNs
b3dDYXNlQmVnaW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIGxpbmsg
ZmFpbHVyZSBjYXNlcyBkaXJlY3RseSBiYWNrIHRvIG5vcm1hbCBwYXRoCisgICAgcGF0Y2hCdWZm
ZXIubGluayhmYWlsdXJlQ2FzZXMsIHNsb3dDYXNlQmVnaW4pOworfQorCitzdGF0aWMgdm9pZCBs
aW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKK3sKKyAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hC
dWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMs
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworfQorCitz
dGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVf
dCBjb3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29k
ZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxh
YmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKK3sKKyAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKworICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7CisgICAgICAgIAor
ICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5k
ZmcuYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJSZWcgcmVzdWx0VGFn
R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIp
OworI2VuZGlmCisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lz
dGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Cisg
ICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworICAgIAorICAgIGlmIChzY3Jh
dGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBz
Y3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJl
c3VsdEdQUik7CisjZWxzZQorICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpz
ZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKKyNlbmRp
ZgorICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7CisgICAgICAgIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGZhaWx1cmVDYXNlczsKKyAgICAKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hh
aW4tPmhlYWQoKTsKKyAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7CisgICAgICAgIHByb3RvT2JqZWN0
ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKKyAg
ICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgICAgICAgICAgcHJvdG9PYmpl
Y3QsIHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LCBzdHViSml0LAorICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKKyAgICB9CisgICAgCisgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KG9mZnNldCkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdHViSml0
LmxvYWQ2NChwcm90b09iamVjdC0+bG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KSwgcmVzdWx0R1BS
KTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVjdC0+bG9jYXRpb25Gb3JPZmZzZXQob2Zm
c2V0KSksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgor
ICAgIH0gZWxzZSB7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+YnV0dGVy
Zmx5QWRkcmVzcygpLCByZXN1bHRHUFIpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHN0
dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5C
dXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0
R1BSKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0
KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAg
c3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJ
bkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVz
dWx0R1BSKTsKKyNlbmRpZgorICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nl
c3MsIGZhaWw7CisgICAgCisgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwor
ICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29k
ZUJsb2NrKCkpOworICAgIAorICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVl
ZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xh
YmVsLCBzbG93Q2FzZUxhYmVsKTsKKyAgICAKKyAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NP
REVfRk9SX0RGR19TVFVCKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJERkcgcHJv
dG90eXBlIGNoYWluIGFjY2VzcyBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAg
ICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3VjY2Vzc0xhYmVs
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKK30KKworc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlE
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCit7CisgICAgLy8gRklYTUU6IFdyaXRlIGEgdGVzdCB0aGF0IHByb3ZlcyB3ZSBu
ZWVkIHRvIGNoZWNrIGZvciByZWN1cnNpb24gaGVyZSBqdXN0CisgICAgLy8gbGlrZSB0aGUgaW50
ZXJwcmV0ZXIgZG9lcywgdGhlbiBhZGQgYSBjaGVjayBmb3IgcmVjdXJzaW9uLgorCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsK
KyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOworI2VuZGlm
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZv
LnBhdGNoLmRmZy52YWx1ZUdQUik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0
ZXJTZXQoc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKKyAg
ICAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKKyAgICAgICAgCisgICAgICAgIGlmIChzY3JhdGNo
R1BSID09IEludmFsaWRHUFJSZWcpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAg
c2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCBy
ZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBl
cnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOwor
I2VuZGlmCisgICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CisgICAgICAgCisgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7IAorICAgICAgICBzdHViSml0Lmxv
YWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOworICAgICAgICBmYWlsdXJl
Q2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
Y3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNr
KSkpOworICAgICAgICAKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHN0dWJKaXQub3I2NChHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgc3R1YkppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmZmZmZm
ZmYpLCByZXN1bHRUYWdHUFIpOyAvLyBKU1ZhbHVlOjpJbnQzMlRhZworI2VuZGlmCisKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKKyAgICAgICAgCisgICAgICAg
IGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRj
aEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKKyAgICAgICAgCisgICAgICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY29kZUJsb2NrKTsKKyAgICAgICAg
CisgICAgICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNj
cmF0Y2gsIHN0dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOworICAgICAgICAK
KyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RV
QigKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJERkcgR2V0QnlJZCBh
cnJheSBsZW5ndGggc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAg
ICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAg
ICAKKyAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAg
ICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YkluZm8uc3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBzaG91bGQg
c3VwcG9ydCBsZW5ndGggYWNjZXNzIGZvciBTdHJpbmcuCisKKyAgICAvLyBGSVhNRTogQ2FjaGUg
cHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgorICAgIGlmICghYmFzZVZhbHVlLmlzQ2Vs
bCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VW
YWx1ZS5hc0NlbGwoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1
Y3R1cmUoKTsKKyAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgor
ICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7CisgICAgICAgIGlmICghc2xv
dC5pc0NhY2hlYWJsZVZhbHVlKCkKKyAgICAgICAgICAgIHx8ICFNYWNyb0Fzc2VtYmxlcjo6aXND
b21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRT
dG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkgeworICAgICAgICAgICAgcmVwYXRjaENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRC
dWlsZExpc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAg
ICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBz
bG90LmNhY2hlZE9mZnNldCgpLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0LCB0cnVlKTsKKyAg
ICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgLy8gRklYTUU6IG9wdGltaXplIGdldHRlcnMgYW5kIHNldHRlcnMKKyAgICBp
ZiAoIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICBz
aXplX3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMs
IGJhc2VWYWx1ZSwgc2xvdC5zbG90QmFzZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCk7CisgICAg
aWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90
b3R5cGVDaGFpbihleGVjKTsKKyAgICAKKyAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHVi
KGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJl
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLCBzdHViSW5m
by5zdHViUm91dGluZSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7CisgICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBz
dHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRM
aXN0KTsKKyAgICAKKyAgICBzdHViSW5mby5pbml0R2V0QnlJZENoYWluKCp2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHRy
dWUpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit7CisgICAgYm9vbCBjYWNoZWQgPSB0cnlDYWNoZUdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBw
cm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKTsKKyAgICBpZiAoIWNhY2hlZCkKKyAgICAgICAg
cmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgb3BlcmF0aW9uR2V0QnlJZCk7Cit9CisKK3N0YXRpYyBib29sIGdldFBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdCgKKyAgICBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sCisgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiYg
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCBpbnQmIGxpc3RJbmRleCwKKyAgICBDb2RlTG9jYXRp
b25MYWJlbCYgc2xvd0Nhc2UpCit7CisgICAgc2xvd0Nhc2UgPSBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93
Q2FzZSk7CisgICAgCisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0
KSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzdHViSW5mby5zdHViUm91dGluZSk7CisgICAg
ICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QoKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QsIDAsIGZhbHNlKTsKKyAgICAgICAgbGlzdEluZGV4ID0gMDsKKyAg
ICB9IGVsc2UgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxm
KSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzdHViSW5mby5zdHViUm91dGluZSk7CisgICAg
ICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBKSVRTdHViUm91dGlu
ZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKHNsb3dDYXNlKSwgc3R1YkluZm8udS5nZXRCeUlk
U2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCB0cnVlKTsKKyAgICAgICAgc3R1YkluZm8u
aW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEsIHRydWUpOwor
ICAgICAgICBsaXN0SW5kZXggPSAxOworICAgIH0gZWxzZSBpZiAoc3R1YkluZm8uYWNjZXNzVHlw
ZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEh
c3R1YkluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICBzbG93Q2FzZSA9IENvZGVMb2NhdGlvbkxh
YmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKKyAgICAgICAgcG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLnN0dWJSb3V0aW5lLCBz
dHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5m
by51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHN0dWJJbmZvLnN0
dWJSb3V0aW5lLmNsZWFyKCk7CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3Qo
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxLCBmYWxzZSk7CisgICAgICAgIGxpc3RJbmRleCA9
IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNz
VHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdCk7CisgICAgICAgIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7
CisgICAgICAgIGxpc3RJbmRleCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXpl
OworICAgICAgICBzbG93Q2FzZSA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7
CisgICAgfQorICAgIAorICAgIGlmIChsaXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQo
bGlzdEluZGV4IDwgUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworc3RhdGljIHZvaWQgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1YihDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKSVRTdHViUm91dGluZSogc3R1
YlJvdXRpbmUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdCk7CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKGNvZGVCbG9jayk7CisgICAgaWYgKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LmRpZFNl
bGZQYXRjaGluZykgeworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKKyAgICAgICAgICAg
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCisgICAgICAgICAgICAg
ICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAorICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZl
ciwgc3R1YkluZm8sIHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKK30KKworc3RhdGljIGJv
b2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVl
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkK
KyAgICAgICAgfHwgIXNsb3QuaXNDYWNoZWFibGUoKQorICAgICAgICB8fCAhYmFzZVZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNv
ZGVCbG9jaygpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIEpTQ2VsbCogYmFzZUNl
bGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNl
Q2VsbC0+c3RydWN0dXJlKCk7CisgICAgCisgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNl
VmFsdWUpIHsKKyAgICAgICAgaWYgKCFzdHViSW5mby5wYXRjaC5kZmcucmVnaXN0ZXJzRmx1c2hl
ZCkgeworICAgICAgICAgICAgLy8gV2UgY2Fubm90IGRvIGFzIG11Y2ggaW5saW5lIGNhY2hpbmcg
aWYgdGhlIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVkIHByaW9yIHRvIHRoaXMgR2V0QnlJZC4g
SW4gcGFydGljdWxhciwKKyAgICAgICAgICAgIC8vIG5vbi1WYWx1ZSBjYWNoZWQgcHJvcGVydGll
cyByZXF1aXJlIHBsYW50aW5nIGNhbGxzLCB3aGljaCByZXF1aXJlcyByZWdpc3RlcnMgdG8gaGF2
ZSBiZWVuIGZsdXNoZWQuIFRodXMsCisgICAgICAgICAgICAvLyBpZiByZWdpc3RlcnMgd2VyZSBu
b3QgZmx1c2hlZCwgZG9uJ3QgZG8gbm9uLVZhbHVlIGNhY2hpbmcuCisgICAgICAgICAgICBpZiAo
IXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIAorICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKKyAgICAgICAgaW50IGxpc3RJbmRleDsKKyAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2U7CisKKyAgICAgICAgaWYgKCFnZXRQb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3Qodm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdCwgbGlzdEluZGV4LCBzbG93Q2FzZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6
ZSsrOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJS
ZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2guZGZn
LnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKKyAgICAgICAgCisgICAgICAgIENDYWxsSGVs
cGVycyBzdHViSml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgd3JvbmdTdHJ1Y3QgPSBzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUp
KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBzdHJhdGVneSB3ZSB1c2UgZm9yIHN0dWJzIGlz
IGFzIGZvbGxvd3M6CisgICAgICAgIC8vIDEpIENhbGwgREZHIGhlbHBlciB0aGF0IGNhbGxzIHRo
ZSBnZXR0ZXIuCisgICAgICAgIC8vIDIpIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBleGNlcHRpb24s
IGFuZCBpZiB0aGVyZSB3YXMsIGNhbGwgeWV0IGFub3RoZXIKKyAgICAgICAgLy8gICAgaGVscGVy
LgorICAgICAgICAKKyAgICAgICAgYm9vbCBpc0RpcmVjdCA9IGZhbHNlOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25DYWxsOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBoYW5kbGVyQ2FsbDsKKyAgICAgICAgRnVuY3Rpb25QdHIgb3BlcmF0aW9uRnVuY3Rpb247
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7CisgICAgICAgIAorICAgICAg
ICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0b20o
KSkgeworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChiYXNlR1BSICE9IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGlm
IChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgeworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
KSwgc2NyYXRjaEdQUik7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShz
bG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOworI2VuZGlmCisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgICAgIHN0dWJK
aXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CisjZWxzZQorICAg
ICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNj
cmF0Y2hHUFIpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0
dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbkZ1bmN0aW9uID0gb3BlcmF0aW9uQ2FsbEdldHRlcjsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEZ1bmN0aW9uUHRyKHNs
b3QuY3VzdG9tR2V0dGVyKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpLAorICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihpZGVudC5pbXBsKCkpKTsKKyAgICAg
ICAgICAgICAgICBvcGVyYXRpb25GdW5jdGlvbiA9IG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXI7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFr
ZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBjYWxsIGlzIG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2Ug
cmVtZW1iZXIgdGhlCisgICAgICAgICAgICAvLyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4g
SXQganVzdCBzbyBoYXBwZW5zIHRvIGJlIHRoZSBwbGFjZSB0aGF0IHdlIGFyZSBhdAorICAgICAg
ICAgICAgLy8gcmlnaHQgbm93IQorICAgICAgICAgICAgc3R1YkppdC5zdG9yZTMyKAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZXhlYy0+bG9jYXRpb25Bc1Jh
d0JpdHMoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgICAgIHN0dWJKaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICBzdHViSml0LnNldHVwUmVzdWx0
cyhyZXN1bHRHUFIsIHJlc3VsdFRhZ0dQUik7CisjZW5kaWYKKyAgICAgICAgICAgIHN1Y2Nlc3Mg
PSBzdHViSml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0
aW9uQ2hlY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cigmc3R1YkluZm8pKTsKKyAgICAgICAgICAgIGhhbmRsZXJDYWxsID0gc3R1YkppdC5j
YWxsKCk7CisgICAgICAgICAgICBzdHViSml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIy
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90
LmNhY2hlZE9mZnNldCgpKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAg
c3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVs
YXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOworI2Vsc2UKKyAg
ICAgICAgICAgICAgICBpZiAoYmFzZUdQUiA9PSByZXN1bHRUYWdHUFIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1
bHRUYWdHUFIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJl
bGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
Uiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShz
bG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAg
ICAgICBpc0RpcmVjdCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNvZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKHdyb25nU3RydWN0LCBzbG93Q2FzZSk7CisgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOworICAgICAgICBpZiAoIWlz
RGlyZWN0KSB7CisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9w
ZXJhdGlvbkZ1bmN0aW9uKTsKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlckNh
bGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJJblN0dWIpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0KKyAgICAgICAgICAg
IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RF
KAorICAgICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
KCJERkcgR2V0QnlJZCBwb2x5bW9ycGhpYyBsaXN0IGFjY2VzcyBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCIsCisgICAgICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygp
KS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAgICAgICAgICAqdm0sCisgICAgICAgICAg
ICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgICAgICBzbG90
LmlzQ2FjaGVhYmxlR2V0dGVyKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKTsKKyAgICAg
ICAgCisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNl
dCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1
cmUsIGlzRGlyZWN0KTsKKyAgICAgICAgCisgICAgICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIo
Y29kZUJsb2NrLCBzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOworICAgICAgICByZXR1cm4g
bGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOworICAgIH0KKyAg
ICAKKyAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5w
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSB8fCAhc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3Qu
Y2FjaGVkT2Zmc2V0KCk7CisgICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hh
aW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQs
IG9mZnNldCk7CisgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0g
c3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKKyAgICBpbnQgbGlz
dEluZGV4OworICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlOworICAgIGlmICghZ2V0UG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc2xvd0Nhc2UpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7Cisg
ICAgCisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKKyAgICAKKyAgICBn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFp
biwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc2xvd0Nh
c2UsIHN0dWJSb3V0aW5lKTsKKyAgICAKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxp
c3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Um91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKKyAgICAKKyAgICBwYXRjaEp1bXBUb0dldEJ5SWRT
dHViKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKKyAgICAKKyAgICBy
ZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOworfQor
Cit2b2lkIGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBib29sIGRvbnRDaGFuZ2VD
YWxsID0gdHJ5QnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwg
c2xvdCwgc3R1YkluZm8pOworICAgIGlmICghZG9udENoYW5nZUNhbGwpCisgICAgICAgIHJlcGF0
Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9w
ZXJhdGlvbkdldEJ5SWQpOworfQorCitzdGF0aWMgVl9KSVRPcGVyYXRpb25fRUpDSSBhcHByb3By
aWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQ
dXRLaW5kIHB1dEtpbmQpCit7CisgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKKyAgICAg
ICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
OworICAgIH0KKyAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0OworICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0OworfQorCitzdGF0aWMgVl9KSVRPcGVyYXRpb25fRUpDSSBhcHByb3ByaWF0ZUxp
c3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1
dEtpbmQgcHV0S2luZCkKK3sKKyAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgeworICAgICAg
ICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdDsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RCdWlsZExpc3Q7CisgICAgfQorICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKKyAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3Q7Cisg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Q7Cit9CisKK3N0YXRp
YyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsCisgICAgSlNW
YWx1ZSwKKyAgICBjb25zdCBJZGVudGlmaWVyJiwKKyAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QsCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIFB1dEtpbmQsCisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxh
YmVsLAorICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQoreworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBh
dGNoLmRmZy52YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVy
cykuZ2V0RnJlZUdQUigpOworICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsK
KyNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgR1BSUmVnIHNjcmF0Y2hH
UFIyOworICAgIGNvbnN0IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gdHJ1ZTsKKyNlbHNlCisg
ICAgY29uc3QgYm9vbCB3cml0ZUJhcnJpZXJOZWVkZWQgPSBmYWxzZTsKKyNlbmRpZgorICAgIAor
ICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7CisgICAgCisgICAgaWYgKHNjcmF0Y2hHUFIgPT0g
SW52YWxpZEdQUlJlZyAmJiAod3JpdGVCYXJyaWVyTmVlZGVkIHx8IGlzT3V0T2ZMaW5lT2Zmc2V0
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHNj
cmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFs
dWVHUFIpOworI2Vsc2UKKyAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2Vs
ZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOworI2VuZGlmCisg
ICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKKyAgICAgICAgc3R1YkppdC5wdXNo
KHNjcmF0Y2hHUFIpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJhZFN0cnVj
dHVyZSA9IHN0dWJKaXQuYnJhbmNoUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmUpKTsKKyAgICAKKyNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzY3JhdGNoR1BSMiA9IEFzc2VtYmx5SGVscGVyczo6c2Vs
ZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisjZWxzZQorICAg
IHNjcmF0Y2hHUFIyID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIs
IHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUiwgc2NyYXRjaEdQUik7CisjZW5kaWYKKyAgICBzdHViSml0
LnB1c2goc2NyYXRjaEdQUjIpOworICAgIEFzc2VtYmx5SGVscGVyczo6d3JpdGVCYXJyaWVyKHN0
dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQ
cm9wZXJ0eUFjY2Vzcyk7CisgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUjIpOworI2VuZGlmCisg
ICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkpCisgICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
ICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpT
VmFsdWUpKSk7CisgICAgZWxzZSB7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNl
dCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgIH0KKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CisgICAgICAg
IHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9y
YWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBz
dHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3Rv
cmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNl
dCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsK
KyAgICAKKyAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKKyAgICAgICAgc3R1YkppdC5w
b3Aoc2NyYXRjaEdQUik7CisgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAg
ICAgCisgICAgICAgIGJhZFN0cnVjdHVyZS5saW5rKCZzdHViSml0KTsKKyAgICAgICAgc3R1Ykpp
dC5wb3Aoc2NyYXRjaEdQUik7CisgICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgIGZh
aWx1cmUgPSBiYWRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKKyAgICAgICAgICAgIAorICAgIHN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAg
ICAgICAoIkRGRyBQdXRCeUlkIHJlcGxhY2Ugc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIs
CisgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgIHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
K30KKworc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAorICAgIEV4ZWNTdGF0ZSog
ZXhlYywKKyAgICBKU1ZhbHVlLAorICAgIGNvbnN0IElkZW50aWZpZXImLAorICAgIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYgc2xvdCwKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisg
ICAgUHV0S2luZCBwdXRLaW5kLAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLAorICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiwK
KyAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCisgICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiYgc3R1YlJvdXRpbmUpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisKKyAg
ICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZn
LmJhc2VHUFIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgR1BSUmVnIHZhbHVlVGFnR1BS
ID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOwor
I2VuZGlmCisgICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC5kZmcudmFsdWVHUFIpOworICAgIAorICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpOworICAgIGFsbG9j
YXRvci5sb2NrKGJhc2VHUFIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgYWxsb2NhdG9y
LmxvY2sodmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIp
OworICAgIAorICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtKTsKKyAgICAgICAgICAgIAorICAg
IEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAg
ICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQUik7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIx
ICE9IHZhbHVlR1BSKTsKKyAgICAKKyAgICBib29sIG5lZWRTZWNvbmRTY3JhdGNoID0gZmFsc2U7
CisgICAgYm9vbCBuZWVkVGhpcmRTY3JhdGNoID0gZmFsc2U7CisjaWYgRU5BQkxFKFdSSVRFX0JB
UlJJRVJfUFJPRklMSU5HKQorICAgIG5lZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsKKyNlbmRpZgor
ICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpCisgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkgeworICAgICAgICBuZWVkU2Vjb25kU2NyYXRjaCA9IHRydWU7CisgICAgICAgIG5l
ZWRUaGlyZFNjcmF0Y2ggPSB0cnVlOworICAgIH0KKworICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsK
KyAgICBpZiAobmVlZFNlY29uZFNjcmF0Y2gpIHsKKyAgICAgICAgc2NyYXRjaEdQUjIgPSBhbGxv
Y2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMiAh
PSBiYXNlR1BSKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsKKyAg
ICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
MzsKKyAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkgeworICAgICAgICBzY3JhdGNoR1BSMyA9IGFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIz
ICE9IGJhc2VHUFIpOworICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gdmFsdWVHUFIpOwor
ICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjEpOworICAgICAgICBBU1NF
UlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjIpOworICAgIH0gZWxzZQorICAgICAgICBzY3Jh
dGNoR1BSMyA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICAKKyAgICBhbGxvY2F0b3IucHJl
c2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7CisKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOworICAgICAgICAgICAgCisgICAgQVNTRVJUKG9s
ZFN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7
CisgICAgCisgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvbGRT
dHJ1Y3R1cmUpKSk7CisgICAgCisgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAg
ICAgICBvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwg
c3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKKyAgICAgICAgc2NyYXRjaEdQUjEpOwor
ICAgICAgICAgICAgCisgICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7CisgICAgICAgIGZv
ciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsg
Kml0OyArK2l0KSB7CisgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisg
ICAgICAgICAgICAgICAgKCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2so
KSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKKyAgICAgICAgICAgICAgICBzY3Jh
dGNoR1BSMSk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9Q
Uk9GSUxJTkcpCisgICAgQVNTRVJUKG5lZWRTZWNvbmRTY3JhdGNoKTsKKyAgICBBU1NFUlQoc2Ny
YXRjaEdQUjIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0aGlz
IHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1aXJl
cyBpdAorICAgIEFzc2VtYmx5SGVscGVyczo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIs
IHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3Mp
OworI2VuZGlmCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwor
ICAgIAorICAgIGJvb2wgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gZmFsc2U7CisgICAgCisgICAg
aWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgIENvcGllZEFsbG9j
YXRvciogY29waWVkQWxsb2NhdG9yID0gJnZtLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7
CisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50
UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1
YkppdC5icmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKKyAgICAgICAgICAgIHN0dWJK
aXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFp
bmluZyk7CisgICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7CisgICAgICAg
ICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3Bp
ZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7CisgICAgICAg
ICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihK
U1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNp
emVfdCBvbGRTaXplID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9m
KEpTVmFsdWUpOworICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsK
KyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRS
ZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHVi
Sml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOworICAgICAgICAgICAgc3R1Ykpp
dC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWlu
aW5nKTsKKyAgICAgICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKKyAgICAgICAg
ICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGll
ZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAg
ICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpT
VmFsdWUpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BS
MSA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9sZCBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9
IGF2YWlsYWJsZQorICAgICAgICAgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0
IDwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvbGRTaXplKTsgb2Zmc2V0ICs9IHNpemVvZih2b2lk
KikpIHsKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUjMsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZv
aWQqKSkpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihz
Y3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIC0ob2Zmc2V0
ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSk7CisgICAgICAgIHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9IHRydWU7CisgICAgfQorCisg
ICAgc3R1YkppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpCisgICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpKSk7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNT
dG9yYWdlKQorICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsK
KyAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkpKTsKKyAgICB9CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGlm
IChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgeworICAgICAgICBzdHViSml0
LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5z
dG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0
LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIx
LCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkp
OworICAgIH0KKyNlbmRpZgorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKKyAgICAgICAgICAgIAorICAgIGlm
IChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgeworICAgICAgICBhbGxvY2F0b3IucmVz
dG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0KTsKKyAgICAgICAgc3VjY2VzcyA9
IHN0dWJKaXQuanVtcCgpOworCisgICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsK
KyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1Ykpp
dCk7CisgICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIG9wZXJhdGlvbkNhbGw7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vzc0luU2xv
d1BhdGg7CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgc2xvd1BhdGgubGlu
aygmc3R1YkppdCk7CisgICAgICAgIAorICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJl
Z2lzdGVyc0J5UG9wcGluZyhzdHViSml0KTsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRj
aEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0
Y2hCdWZmZXJTaXplKCkpOworICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVnaXN0ZXJz
VG9TY3JhdGNoQnVmZmVyKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIxKTsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLCB2YWx1ZUdQ
Uik7CisjZWxzZQorICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShi
YXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLCB2YWx1ZUdQUiwgdmFs
dWVUYWdHUFIpOworI2VuZGlmCisgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwo
KTsKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZm
ZXIoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOworICAgICAgICBzdWNjZXNz
SW5TbG93UGF0aCA9IHN0dWJKaXQuanVtcCgpOworICAgIH0KKyAgICAKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICBwYXRj
aEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKKyAgICBpZiAoYWxs
b2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFp
bHVyZSwgZmFpbHVyZUxhYmVsKTsKKyAgICBlbHNlCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
ZmFpbHVyZUNhc2VzLCBmYWlsdXJlTGFiZWwpOworICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0
b3JhZ2VBbmRGaW5pc2hQdXQpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3NJblNs
b3dQYXRoLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7CisgICAgfQorICAgIAorICAgIHN0dWJSb3V0
aW5lID0KKyAgICAgICAgY3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgICAgICBGSU5BTEla
RV9ERkdfQ09ERSgKKyAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICAg
ICAoIkRGRyBQdXRCeUlkICVzdHJhbnNpdGlvbiBzdHViICglcCAtPiAlcCkgZm9yICVzLCByZXR1
cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID8gInJlYWxsb2Nh
dGluZyAiIDogIiIsCisgICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJl
LAorICAgICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRh
KCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0
YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAgICAgKnZtLAorICAgICAgICAgICAgZXhlYy0+Y29k
ZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKKyAg
ICAgICAgICAgIHN0cnVjdHVyZSk7Cit9CisKK3N0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMt
PmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworCisgICAgaWYgKCFiYXNl
VmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBKU0NlbGwqIGJhc2VD
ZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFz
ZUNlbGwtPnN0cnVjdHVyZSgpOworICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gc3RydWN0
dXJlLT5wcmV2aW91c0lEKCk7CisgICAgCisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGlj
dGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPcHRpbWl6ZSBzZWxm
IGFjY2Vzcy4KKyAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSB7CisgICAgICAgIGlm
IChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CisgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0
aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQorICAgICAg
ICAgICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KKyAgICAgICAgICAg
IGlmIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA8IDYKKyAgICAgICAgICAgICAgICAmJiBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpCisgICAgICAgICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxv
YywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCisgICAgICAgICAgICAvLyBpbmRleGluZyBzdG9yYWdl
LgorICAgICAgICAgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlQ2VsbCkgPT0gSW52YWxp
ZFByb3RvdHlwZUNoYWluKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0
dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZW1p
dFB1dFRyYW5zaXRpb25TdHViKAorICAgICAgICAgICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgaWRl
bnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwg
b2xkU3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAgICBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFD
YWxsVG9TbG93Q2FzZSksCisgICAgICAgICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAorICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCisgICAgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKKyAg
ICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOworICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlv
bihzbG90LCBwdXRLaW5kKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0dWJJbmZvLmlu
aXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9s
ZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3Qp
OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1
cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1
bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7CisgICAgICAgIHN0dWJJbmZvLmluaXRQdXRC
eUlkUmVwbGFjZSgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xv
dCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAg
Ym9vbCBjYWNoZWQgPSB0cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKKyAgICBpZiAoIWNhY2hlZCkKKyAgICAgICAg
cmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKK30K
Kworc3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1
dEtpbmQpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKworICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1
ZS5hc0NlbGwoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1
cmUoKTsKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+cHJldmlvdXNJ
RCgpOworICAgIAorICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAg
aWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkgeworICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0KiBsaXN0OworICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5l
OworICAgICAgICAKKyAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6
TmV3UHJvcGVydHkpIHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBp
ZiB3ZSBkb24ndCBoYXZlCisgICAgICAgICAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2Ug
aXQgaGFwcGVuLgorICAgICAgICAgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwg
NgorICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAh
PSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAgICAgICAgICAmJiBvbGRT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNh
c2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKKyAgICAgICAg
ICAgIC8vIGluZGV4aW5nIHN0b3JhZ2UuCisgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5j
b3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4
ZWMsIGJhc2VDZWxsKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiog
cHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0aW5nIHRo
ZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCisgICAgICAgICAgICBs
aXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbSgKKyAgICAgICAgICAgICAgICBwdXRL
aW5kLCBzdHViSW5mbywKKyAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCisgICAg
ICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZv
LCBwdXRLaW5kLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLCBwcm90
b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJy
ZW50U2xvd1BhdGhUYXJnZXQoKSksCisgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCisgICAgICAgICAgICAgICAg
UHV0QnlJZEFjY2Vzczo6dHJhbnNpdGlvbigKKyAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1
cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sCisgICAgICAgICAgICAgICAgICAgIHN0dWJS
b3V0aW5lKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSdyZSBub3cgY29t
bWl0dGVkIHRvIGNyZWF0aW5nIHRoZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3Jk
aW5nbHkuCisgICAgICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbSgK
KyAgICAgICAgICAgICAgICBwdXRLaW5kLCBzdHViSW5mbywKKyAgICAgICAgICAgICAgICBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBlbWl0UHV0
UmVwbGFjZVN0dWIoCisgICAgICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwg
Q29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLCBzdHViUm91
dGluZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKKyAgICAg
ICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjpyZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICAq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZSwgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKGxpc3Qt
PmlzRnVsbCgpKQorICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwg
cHV0S2luZCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBib29sIGNhY2hlZCA9IHRyeUJ1aWxkUHV0QnlJZExp
c3QoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5k
KTsKKyAgICBpZiAoIWNhY2hlZCkKKyAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2Nr
KCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJ
ZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKK30KKworc3RhdGljIGJvb2wgdHJ5UmVwYXRjaElu
KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgYm9vbCB3YXNGb3VuZCwKKyAgICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSgpLT5w
cm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXRJZ25vcmVkOworICAgIHNpemVfdCBjb3VudCA9IG5vcm1h
bGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZSwgd2FzRm91bmQgPyBz
bG90LnNsb3RCYXNlKCkgOiBKU1ZhbHVlKCksIGlkZW50LCBvZmZzZXRJZ25vcmVkKTsKKyAgICBp
ZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3Q7CisgICAgaW50IGxpc3RJbmRleDsKKyAgICAKKyAgICBDb2RlTG9jYXRpb25M
YWJlbCBzdWNjZXNzTGFiZWwgPSBzdHViSW5mby5ob3RQYXRoQmVnaW47CisgICAgQ29kZUxvY2F0
aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbDsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlw
ZSA9PSBhY2Nlc3NfdW5zZXQpIHsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0g
bmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgpOworICAgICAgICBzdHViSW5mby5p
bml0SW5MaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMCk7CisgICAgICAgIHNsb3dDYXNl
TGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAg
ICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICAgICAg
bGlzdEluZGV4ID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHVi
SW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19pbl9saXN0KTsKKyAgICAgICAgcG9seW1vcnBoaWNT
dHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKKyAgICAgICAg
bGlzdEluZGV4ID0gc3R1YkluZm8udS5pbkxpc3QubGlzdFNpemU7CisgICAgICAgIHNsb3dDYXNl
TGFiZWwgPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3Rb
bGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOworICAgICAgICAKKyAg
ICAgICAgaWYgKGxpc3RJbmRleCA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiBzdHViUm91dGluZTsKKyAgICAKKyAgICB7CisgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBh
dGNoLmRmZy52YWx1ZUdQUik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJT
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKKyAgICAg
ICAgCisgICAgICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtKTsKKyAgICAgICAgCisgICAgICAg
IGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2g7CisgICAgICAgIGlmIChzY3JhdGNoR1BSID09IElu
dmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6
OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHN0dWJK
aXQucHVzaChzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0g
dHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9
IGZhbHNlOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1
cmVDYXNlczsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cigK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOwor
ICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwor
ICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgeworICAgICAg
ICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3Rv
dHlwZUZvckxvb2t1cChleGVjKSk7CisgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9u
Q2hlY2soCisgICAgICAgICAgICAgICAgcHJvdG90eXBlLCBwcm90b3R5cGUtPnN0cnVjdHVyZSgp
LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCisgICAgICAgICAgICAgICAg
ZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBp
dC0+Z2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgIHN0
dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdhc0ZvdW5kKSwgcmVzdWx0
R1BSKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3Vj
Y2VzcywgZmFpbDsKKyAgICAgICAgCisgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0
LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVy
ZUNhc2VzKTsKKyAgICAgICAgCisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAm
c3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworCisgICAgICAgIGxpbmtSZXN0b3JlU2NyYXRj
aChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1
cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKKyAgICAgICAgCisgICAgICAg
IHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCisgICAgICAgICAgICBw
YXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiREZHIEluIChmb3VuZCA9ICVzKSBzdHViIGZvciAl
cywgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICAgICB3YXNGb3VuZCA/ICJ5ZXMiIDog
Im5vIiwgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAorICAgICAgICAgICAg
ICAgIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgfQorICAgIAorICAg
IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOwor
ICAgIHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplKys7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1
YkluZm8uaG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldCgwKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAKKyAgICByZXR1cm4gbGlzdEluZGV4IDwg
KFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOworfQorCit2b2lkIHJlcGF0Y2hJbigK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIGJvb2wgd2FzRm91bmQsCisgICAgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKHRyeVJlcGF0Y2hJbihleGVjLCBiYXNl
LCBpZGVudCwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIG9wZXJhdGlvbkluKTsKK30KKworc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoUmVwYXRjaEJ1
ZmZlciYgcmVwYXRjaEJ1ZmZlciwgVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKSB7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNv
ZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZv
ckNvbnN0cnVjdCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJh
dG9yKS5jb2RlKCkpOworfQorCit2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpTRnVuY3Rp
b24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKK3sKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKTsKKyAgICAK
KyAgICAvLyBJZiB5b3UncmUgYmVpbmcgY2FsbC1saW5rZWQgZnJvbSBhIERGRyBjYWxsZXIgdGhl
biB5b3Ugb2J2aW91c2x5IGRpZG4ndCBnZXQgaW5saW5lZC4KKyAgICBpZiAoY2FsbGVlQ29kZUJs
b2NrKQorICAgICAgICBjYWxsZWVDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0g
ZmFsc2U7CisgICAgCisgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxs
ZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZt
KCk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9j
ayk7CisgICAgCisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CisgICAgY2Fs
bExpbmtJbmZvLmNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbExpbmtJ
bmZvLmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2Fs
bGVlKTsKKyAgICBjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZy
YW1lKCktPnZtKCksIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlciwgY29k
ZVB0cik7CisgICAgCisgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgY2FsbGVlQ29k
ZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGV4ZWMtPmNhbGxlckZyYW1lKCksICZjYWxsTGlua0lu
Zm8pOworICAgIAorICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CisgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRD
VElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3Qp
OworICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIENvZGVG
b3JDb25zdHJ1Y3QpOworfQorCit2b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sK
KyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNv
ZGVCbG9jaygpOworICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAKKyAg
ICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBraW5kKTsKK30K
Kwordm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHIpCit7CisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7CisgICAgCisgICAgQ29k
ZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2so
KTsKKyAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CisgICAgCisgICAgR1BSUmVn
IGNhbGxlZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oY2FsbExpbmtJbmZvLmNhbGxlZUdQUik7
CisgICAgCisgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0sIGNhbGxlckNvZGVCbG9jayk7Cisg
ICAgCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgc3R1YkppdC5icmFuY2hU
ZXN0NjQoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZUdQUiwgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisjZWxzZQorICAgIC8vIFdlIHdvdWxkIGhhdmUgYWxy
ZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCisjZW5kaWYKKyAgICAKKyAg
ICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgIHN0dWJKaXQuYnJhbmNoUHRyKAorICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhjYWxsZWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsKKyAgICAKKyAgICBzbG93
UGF0aC5hcHBlbmQoCisgICAgICAgIHN0dWJKaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhj
YWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlKSkpOworICAgIAorICAgIHN0
dWJKaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLAorICAgICAgICBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHN0dWJKaXQuc3RvcmU2NCgK
KyAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCisgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbikpKTsKKyNlbHNlCisgICAg
c3R1YkppdC5zdG9yZVB0cigKKyAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCisgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFp
bikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKSk7CisgICAgc3R1YkppdC5zdG9yZTMyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworI2VuZGlmCisgICAgCisgICAgQXNz
ZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7CisgICAgQXNzZW1i
bHlIZWxwZXJzOjpKdW1wIGRvbmUgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAKKyAgICBzbG93UGF0
aC5saW5rKCZzdHViSml0KTsKKyAgICBzdHViSml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpu
b25BcmdHUFIwKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHN0dWJKaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMSk7CisjZW5kaWYKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSks
IEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NC
ZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgQXNzZW1ibHlIZWxwZXJzOjpK
dW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCp2bSwgJnN0dWJKaXQsIGNhbGxlckNvZGVCbG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZm
ZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldCgwKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9j
YXRpb25MYWJlbCh2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2Rl
KCkpKTsKKyAgICAKKyAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YlJvdXRp
bmUgPSBhZG9wdFJlZihuZXcgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJ
WkVfREZHX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiREZH
IGNsb3N1cmUgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXQgJXAgKCVz
KSIsCisgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwg
Y2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDApLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygp
LCB0b0NTdHJpbmcocG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSkuZGF0YSgpKSksCisgICAg
ICAgICp2bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBl
eGVjdXRhYmxlLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbikpOworICAgIAorICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOworICAgIAorICAgIHJlcGF0Y2hC
dWZmZXIucmVwbGFjZVdpdGhKdW1wKAorICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mQnJh
bmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKSwKKyAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAg
ICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2Fs
bCk7CisgICAgCisgICAgY2FsbExpbmtJbmZvLnN0dWIgPSBzdHViUm91dGluZS5yZWxlYXNlKCk7
CisgICAgCisgICAgQVNTRVJUKCFjYWxsZWVDb2RlQmxvY2sgfHwgY2FsbGVlQ29kZUJsb2NrLT5p
c0luY29taW5nQ2FsbEFscmVhZHlMaW5rZWQoJmNhbGxMaW5rSW5mbykpOworfQorCit2b2lkIHJl
c2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOworICAgIENvZGVMb2NhdGlv
bkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNoZWNrSW1tVG9DYWxsKTsKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNl
UGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAg
ICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hP
bkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQ+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKSwKKyAgICAgICAgICAgICAgICBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHVudXNlZFBvaW50ZXIpKTsKKyAgICB9CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0
cnVjdHVyZUxhYmVsLCByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOworI2Vsc2UKKyAgICByZXBhdGNoQnVmZmVy
LnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOwor
ICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0
YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxv
YWRMb2FkT3JTdG9yZSksIDApOworI2VuZGlmCisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cit9CisK
K3ZvaWQgcmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBWX0pJVE9wZXJhdGlvbl9FSkNJIHVub3B0aW1p
emVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25fRUpDST4oTWFjcm9Bc3Nl
bWJsZXI6OnJlYWRDYWxsVGFyZ2V0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgVl9KSVRPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRGdW5jdGlv
bjsKKyAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlz
dCkKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0
aW1pemU7CisgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdEJ1aWxkTGlzdCkKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdCkKKyAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAg
ZWxzZSB7CisgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgfQorICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1p
emVkRnVuY3Rpb24pOworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVMYWJl
bCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGlu
dHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKKyAgICBpZiAo
TWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNo
KCkpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNo
YWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0
T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmRmZy5i
YXNlR1BSKSwKKyAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKTsKKyAgICB9
CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0cnVjdHVyZUxhYmVsLCByZWludGVycHJldF9j
YXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICByZXBh
dGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMy
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsK
KyNlbHNlCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Rh
Z0xvYWRPclN0b3JlKSwgMCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOworI2VuZGlmCisgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Ns
b3dDYXNlKSk7Cit9CisKK3ZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVy
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uaG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldCgwKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVw
YXRjaF9oCisjZGVmaW5lIFJlcGF0Y2hfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAi
SklUT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCByZXBhdGNoR2V0QnlJ
RChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgYnVpbGRHZXRCeUlETGlzdChFeGVjU3Rh
dGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgYnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZWNTdGF0ZSos
IEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwordm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBQdXRLaW5kKTsKK3ZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVl
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1
YkluZm8mLCBQdXRLaW5kKTsKK3ZvaWQgcmVwYXRjaEluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGNv
bnN0IElkZW50aWZpZXImLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1
Y3R1cmVTdHViSW5mbyYpOwordm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYs
IENvZGVCbG9jayosIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKK3ZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0YXRlKiwgQ2Fs
bExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Cit2b2lkIGxpbmtDbG9zdXJlQ2Fs
bChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmUqLCBFeGVj
dXRhYmxlQmFzZSosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7Cit2b2lkIHJlc2V0R2V0QnlJRChS
ZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRQdXRCeUlEKFJl
cGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldEluKFJlcGF0Y2hC
dWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vs
c2UgLy8gRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBSZXBhdGNoQnVmZmVyOworc3RydWN0IFN0cnVjdHVyZVN0dWJJ
bmZvOworCitpbmxpbmUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHJlc2V0R2V0QnlJRChS
ZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KK2lubGluZSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgcmVzZXRQdXRC
eUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQoraW5saW5lIE5PX1JFVFVSTiB2b2lkIHJlc2V0SW4oUmVwYXRjaEJ1
ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKyNlbmRp
ZiAvLyBSZXBhdGNoX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAorI2RlZmluZSBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJS
ZWdpc3RlclNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBjbGFzcyBwcm92aWRl
cyBhIGxvdy1sZXZlbCByZWdpc3RlciBhbGxvY2F0b3IgZm9yIHVzZSBpbiBzdHVicy4KKworY2xh
c3MgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCisgICAgICAgIDog
bV91c2VkUmVnaXN0ZXJzKHVzZWRSZWdpc3RlcnMpCisgICAgICAgICwgbV9kaWRSZXVzZVJlZ2lz
dGVycyhmYWxzZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgdm9pZCBsb2NrKFQgcmVnKSB7IG1fbG9ja2VkUmVnaXN0ZXJzLnNldChyZWcpOyB9Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CisgICAgdHlwZW5hbWUgQmFua0lu
Zm86OlJlZ2lzdGVyVHlwZSBhbGxvY2F0ZVNjcmF0Y2goKQorICAgIHsKKyAgICAgICAgLy8gRmly
c3QgdHJ5IHRvIGFsbG9jYXRlIGEgcmVnaXN0ZXIgdGhhdCBpcyB0b3RhbGx5IGZyZWUuCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7
ICsraSkgeworICAgICAgICAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSByZWcg
PSBCYW5rSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgICAgIGlmICghbV9sb2NrZWRSZWdp
c3RlcnMuZ2V0KHJlZykKKyAgICAgICAgICAgICAgICAmJiAhbV91c2VkUmVnaXN0ZXJzLmdldChy
ZWcpCisgICAgICAgICAgICAgICAgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXQocmVnKSkgewor
ICAgICAgICAgICAgICAgIG1fc2NyYXRjaFJlZ2lzdGVycy5zZXQocmVnKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBTaW5jZSB0aGF0IGZhaWxlZCwgdHJ5IHRvIGFsbG9jYXRlIGEgcmVnaXN0ZXIgdGhh
dCBpcyBub3QgeWV0CisgICAgICAgIC8vIGxvY2tlZCBvciB1c2VkIGZvciBzY3JhdGNoLgorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFua0luZm86Om51bWJlck9mUmVnaXN0ZXJz
OyArK2kpIHsKKyAgICAgICAgICAgIHR5cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgcmVn
ID0gQmFua0luZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgICAgICBpZiAoIW1fbG9ja2VkUmVn
aXN0ZXJzLmdldChyZWcpICYmICFtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0KHJlZykpIHsKKyAgICAg
ICAgICAgICAgICBtX3NjcmF0Y2hSZWdpc3RlcnMuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAg
bV9kaWRSZXVzZVJlZ2lzdGVycyA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlZzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2UgZmFpbGVk
LgorICAgICAgICBDUkFTSCgpOworICAgICAgICAvLyBNYWtlIHNvbWUgc2lsbHkgY29tcGlsZXJz
IGhhcHB5LgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQmFua0luZm86OlJl
Z2lzdGVyVHlwZT4oLTEpOworICAgIH0KKyAgICAKKyAgICBHUFJSZWcgYWxsb2NhdGVTY3JhdGNo
R1BSKCkgeyByZXR1cm4gYWxsb2NhdGVTY3JhdGNoPEdQUkluZm8+KCk7IH0KKyAgICBGUFJSZWcg
YWxsb2NhdGVTY3JhdGNoRlBSKCkgeyByZXR1cm4gYWxsb2NhdGVTY3JhdGNoPEZQUkluZm8+KCk7
IH0KKyAgICAKKyAgICBib29sIGRpZFJldXNlUmVnaXN0ZXJzKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2RpZFJldXNlUmVnaXN0ZXJzOworICAgIH0KKyAgICAKKyAgICB2b2lkIHBy
ZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQpCisgICAg
eworICAgICAgICBpZiAoIW1fZGlkUmV1c2VSZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVy
cy5nZXRGUFJCeUluZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7
CisgICAgICAgICAgICAgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDgpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAg
ICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsg
KytpKSB7CisgICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgo
aSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCisgICAgICAgICAgICAgICAg
aml0LnB1c2goR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgdm9pZCByZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKE1hY3JvQXNzZW1ibGVy
JiBqaXQpCisgICAgeworICAgICAgICBpZiAoIW1fZGlkUmV1c2VSZWdpc3RlcnMpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJl
Z2lzdGVycy5nZXRHUFJCeUluZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4
KGkpKQorICAgICAgICAgICAgICAgIGppdC5wb3AoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnM7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0RlBS
QnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSkgeworICAgICAg
ICAgICAgICAgIGppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0
cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDgpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIGRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpICogc2l6ZW9mKEpTVmFsdWUpOyB9
CisgICAgCisgICAgdm9pZCBwcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXIoTWFj
cm9Bc3NlbWJsZXImIGppdCwgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciwgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBJbnZhbGlkR1BSUmVnKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY291bnQg
PSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
czsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4
KGkpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChH
UFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0
Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpOworI2Vsc2UKKyAgICAgICAgICAg
ICAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBzdGF0aWNfY2FzdDxFbmNv
ZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpOwor
I2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZh
bGlkR1BSUmVnICYmICFtX2xvY2tlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpICYmICFtX3Nj
cmF0Y2hSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKKyAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNF
X0FTU0VSVChzY3JhdGNoR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAg
aWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7CisgICAgICAgICAgICAgICAg
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2Rl
ZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVn
aXN0ZXIoaSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNvdW50ICogc2l6ZW9mKEpTVmFsdWUpID09IGRlc2lyZWRTY3JhdGNo
QnVmZmVyU2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihzdGF0aWNfY2FzdDxzaXplX3Q+KGNvdW50ICogc2l6ZW9mKEpTVmFsdWUpKSksIHNjcmF0Y2hH
UFIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0
Y2hCdWZmZXIoTWFjcm9Bc3NlbWJsZXImIGppdCwgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZl
ciwgR1BSUmVnIHNjcmF0Y2hHUFIgPSBJbnZhbGlkR1BSUmVnKQorICAgIHsKKyAgICAgICAgaWYg
KHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgLy8gRmluZCBhIHNj
cmF0Y2ggcmVnaXN0ZXIuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgICAgIGlmIChtX2xvY2tlZFJl
Z2lzdGVycy5nZXRHUFJCeUluZGV4KGkpIHx8IG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJCeUlu
ZGV4KGkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBz
Y3JhdGNoR1BSID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3Jh
dGNoR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICAKKyAgICAgICAgaml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRy
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSKTsKKworICAgICAgICAvLyBSZXN0b3JlIGRvdWJs
ZSByZWdpc3RlcnMgZmlyc3QuCisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gbV91c2VkUmVnaXN0
ZXJzLm51bWJlck9mU2V0R1BScygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lz
dGVycy5nZXRGUFJCeUluZGV4KGkpKSB7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3Jh
dGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgaml0LmxvYWREb3VibGUoc2NyYXRjaEdQUiwgRlBSSW5mbzo6dG9SZWdpc3Rl
cihpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvdW50
ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnM7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRl
eChpKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChz
dGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkg
KyAoY291bnQrKyksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworI2Vsc2UKKyAgICAgICAgICAg
ICAgICBqaXQubG9hZDMyKHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZl
ci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKK3ByaXZhdGU6Cisg
ICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyU2V0IG1fbG9ja2Vk
UmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyU2V0IG1fc2NyYXRjaFJlZ2lzdGVyczsKKyAgICBib29s
IG1fZGlkUmV1c2VSZWdpc3RlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CShyZXZpc2lvbiAxNTYyMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJU
aHVua0dlbmVyYXRvcnMuaCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkpJ
VE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIlNwZWNpYWxpemVkVGh1bmtKSVQuaCIKQEAgLTM4LDcgKzM5LDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBKU0ludGVyZmFjZUpJVDo6Q2FsbCBnZW5lcmF0
ZVNsb3dDYXNlRm9yKFZNKiB2bSwgSlNJbnRlcmZhY2VKSVQmIGppdCkKK3N0YXRpYyBKU0ludGVy
ZmFjZUpJVDo6Q2FsbCBvbGRTdHlsZUdlbmVyYXRlU2xvd0Nhc2VGb3IoVk0qIHZtLCBKU0ludGVy
ZmFjZUpJVCYgaml0KQogewogICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihK
U1N0YWNrOjpDYWxsZXJGcmFtZSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKICAgICBqaXQuZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFpbiwgSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QyLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwpAQCAtNTksNyArNjAsNyBAQCBz
dGF0aWMgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgZ2VuZXJhdGVTbG93CiAgICAgcmV0dXJuIGNhbGxO
b3RKU0Z1bmN0aW9uOwogfQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JH
ZW5lcmF0b3IoVk0qIHZtLCBGdW5jdGlvblB0ciBsYXp5TGluaywgRnVuY3Rpb25QdHIgbm90SlNG
dW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSkKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
b2xkU3R5bGVMaW5rRm9yR2VuZXJhdG9yKFZNKiB2bSwgRnVuY3Rpb25QdHIgbGF6eUxpbmssIEZ1
bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAgICAgSlNJbnRl
cmZhY2VKSVQgaml0KHZtKTsKICAgICAKQEAgLTg4LDcgKzg5LDcgQEAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBsaW5rRm9yR2VuZQogICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpy
ZWdUMCk7CiAgICAgCiAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKLSAgICBKU0ludGVyZmFjZUpJ
VDo6Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IGdlbmVyYXRlU2xvd0Nhc2VGb3Iodm0sIGppdCk7
CisgICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBvbGRTdHlsZUdl
bmVyYXRlU2xvd0Nhc2VGb3Iodm0sIGppdCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhj
YWxsTGF6eUxpbmssIGxhenlMaW5rKTsKQEAgLTk3LDIyICs5OCwyMiBAQCBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JHZW5lCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsICgibGluayAlcyB0cmFtcG9saW5lIiwgbmFtZSkpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua0NhbGxHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIG9sZFN0eWxlTGlua0NhbGxHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5r
Rm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDYWxsKSwgRnVuY3Rp
b25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjYWxsIik7CisgICAgcmV0dXJuIG9s
ZFN0eWxlTGlua0ZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2Fs
bCksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2FsbCIpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2
bSkKIHsKLSAgICByZXR1cm4gbGlua0ZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX3Zt
X2xhenlMaW5rQ29uc3RydWN0KSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0Nv
bnN0cnVjdCksICJjb25zdHJ1Y3QiKTsKKyAgICByZXR1cm4gb2xkU3R5bGVMaW5rRm9yR2VuZXJh
dG9yKHZtLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDb25zdHJ1Y3QpLCBGdW5jdGlvblB0
cihjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KSwgImNvbnN0cnVjdCIpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKFZNKiB2bSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZUxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcihWTSog
dm0pCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92
bV9sYXp5TGlua0Nsb3N1cmVDYWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5j
dGlvbiksICJjbG9zdXJlIGNhbGwiKTsKKyAgICByZXR1cm4gb2xkU3R5bGVMaW5rRm9yR2VuZXJh
dG9yKHZtLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDbG9zdXJlQ2FsbCksIEZ1bmN0aW9u
UHRyKGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2xvc3VyZSBjYWxsIik7CiB9CiAKLXN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvckdlbmVyYXRvcihWTSogdm0sIEZ1
bmN0aW9uUHRyIGNvbXBpbGUsIEZ1bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNoYXIq
IG5hbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3N0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgb2xkU3R5bGVWaXJ0dWFsRm9yR2VuZXJhdG9yKFZNKiB2bSwgRnVuY3Rpb25QdHIg
Y29tcGlsZSwgRnVuY3Rpb25QdHIgbm90SlNGdW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7
CiAgICAgCkBAIC0xNDgsNyArMTQ5LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2
aXJ0dWFsRm9yRwogICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CiAgICAgCiAg
ICAgc2xvd0Nhc2UubGluaygmaml0KTsKLSAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90
SlNGdW5jdGlvbiA9IGdlbmVyYXRlU2xvd0Nhc2VGb3Iodm0sIGppdCk7CisgICAgSlNJbnRlcmZh
Y2VKSVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBvbGRTdHlsZUdlbmVyYXRlU2xvd0Nhc2VG
b3Iodm0sIGppdCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQs
IEdMT0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQ29tcGlsZSwgY29t
cGlsZSk7CkBAIC0xNTcsMTQgKzE1OCwyNDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB2aXJ0dWFsRm9yRwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoInZp
cnR1YWwgJXMgdHJhbXBvbGluZSIsIG5hbWUpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHZpcnR1YWxDYWxsR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRT
dHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gdmlydHVhbEZv
ckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfaml0Q29tcGlsZSksIEZ1bmN0
aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2FsbCIsIENvZGVGb3JDYWxsKTsK
KyAgICByZXR1cm4gb2xkU3R5bGVWaXJ0dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihj
dGlfb3BfY2FsbF9qaXRDb21waWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5j
dGlvbiksICJjYWxsIiwgQ29kZUZvckNhbGwpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
b2xkU3R5bGVWaXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4g
dmlydHVhbEZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9qaXRD
b21waWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCksICJj
b25zdHJ1Y3QiLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1cm4gb2xkU3R5bGVWaXJ0dWFs
Rm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUp
LCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KSwgImNvbnN0cnVj
dCIsIENvZGVGb3JDb25zdHJ1Y3QpOworfQorCitpbmxpbmUgdm9pZCBlbWl0UG9pbnRlclZhbGlk
YXRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwb2ludGVyR1BSKQoreworI2lmICFBU1NF
UlRfRElTQUJMRUQKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNOb25aZXJvID0gaml0LmJyYW5j
aFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBwb2ludGVyR1BSKTsKKyAgICBqaXQuYnJl
YWtwb2ludCgpOworICAgIGlzTm9uWmVyby5saW5rKCZqaXQpOworICAgIGppdC5wdXNoKHBvaW50
ZXJHUFIpOworICAgIGppdC5sb2FkOChwb2ludGVyR1BSLCBwb2ludGVyR1BSKTsKKyAgICBqaXQu
cG9wKHBvaW50ZXJHUFIpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaml0KTsKKyAgICBVTlVT
RURfUEFSQU0ocG9pbnRlckdQUik7CisjZW5kaWYKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCit7CisgICAg
Q0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgCisgICAgLy8gV2Ugd2lsbCBqdW1wIHRvIGhlcmUg
aWYgdGhlIEpJVCBjb2RlIHRoaW5rcyBpdCdzIG1ha2luZyBhIGNhbGwsIGJ1dCB0aGUKKyAgICAv
LyBsaW5raW5nIGhlbHBlciAoQysrIGNvZGUpIGRlY2lkZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9u
IGluc3RlYWQuIFdlIHdpbGwKKyAgICAvLyBoYXZlIHNhdmVkIHRoZSBjYWxsUmV0dXJuSW5kZXgg
aW4gdGhlIGZpcnN0IGFyZ3VtZW50cyBvZiBKSVRTdGFja0ZyYW1lLgorICAgIC8vIE5vdGUgdGhh
dCB0aGUgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBvbiB0aGUgc3RhY2sgYXQgdGhpcyBwb2ludCwg
c28gd2UKKyAgICAvLyBuZWVkIHRvIHJlbW92ZSBpdCBhbmQgZHJvcCBpdCBvbiB0aGUgZmxvb3Is
IHNpbmNlIHdlIGRvbid0IGNhcmUgYWJvdXQgaXQuCisgICAgLy8gRmluYWxseSBub3RlIHRoYXQg
dGhlIGNhbGwgZnJhbWUgcmVnaXN0ZXIgcG9pbnRzIGF0IHRoZSBjYWxsZWUgZnJhbWUsIHNvCisg
ICAgLy8gd2UgbmVlZCB0byBwb3AgaXQuCisgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0Fm
dGVyQ2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5sb2Fk
UHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpDYWxsZXJGcmFtZSksCisgICAgICAgIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGppdC5wZWVr
NjQoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1Nf
SU5ERVgpOworI2Vsc2UKKyAgICBqaXQucGVlayhHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1
cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZW5kaWYKKyAgICBqaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7
CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2
b2lkKj4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAg
ICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBq
aXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24o
aml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMik7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZq
aXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsICgiVGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7Cit9CisK
K3N0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAorICAgIENDYWxsSGVscGVycyYgaml0LCBWTSogdm0s
IFBfSklUT3BlcmF0aW9uX0Ugc2xvd1BhdGhGdW5jdGlvbikKK3sKKyAgICBqaXQucHJlc2VydmVS
ZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIGVtaXRQb2lu
dGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIGppdC5zdG9yZVB0
cigKKyAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMiwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6
UmV0dXJuUEMpKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
ICZ2bS0+dG9wQ2FsbEZyYW1lKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGppdC5wb2tlNjQo
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5E
RVgpOworI2Vsc2UKKyAgICBqaXQucG9rZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5H
UFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZW5kaWYKKyAgICBqaXQuc2V0dXBBcmd1
bWVudHNFeGVjU3RhdGUoKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoYml0d2lzZV9jYXN0PHZvaWQqPihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFy
Z0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQ
UjApOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIAorICAgIC8vIFRo
aXMgc2xvdyBjYWxsIHdpbGwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIG9uZSBvZiB0aGUgZm9sbG93
aW5nOgorICAgIC8vIDEpIEV4Y2VwdGlvbiB0aHJvd2luZyB0aHVuay4KKyAgICAvLyAyKSBIb3N0
IGNhbGwgcmV0dXJuIHZhbHVlIHJldHVybmVyIHRoaW5neS4KKyAgICAvLyAzKSBUaGUgZnVuY3Rp
b24gdG8gY2FsbC4KKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6UmV0
dXJuUEMpLAorICAgICAgICBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAg
IGppdC5zdG9yZVB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApLAor
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQykpOworICAgIGVtaXRQb2ludGVyVmFsaWRh
dGlvbihqaXQsIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0LnJl
c3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJl
dHVybkdQUik7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKK30KKwor
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yVGh1bmtHZW5lcmF0b3IoCisgICAg
Vk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgLy8gVGhlIHJldHVy
biBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjayBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2ls
bCBoZW5jZQorICAgIC8vIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1l
IHdoaWxlIHdlIG1ha2UgYSBDKysgZnVuY3Rpb24gY2FsbAorICAgIC8vIHRvIHBlcmZvcm0gbGlu
a2luZyBhbmQgbGF6eSBjb21waWxhdGlvbiBpZiBuZWNlc3NhcnkuIFdlIGV4cGVjdCB0aGUgY2Fs
bGVlCisgICAgLy8gdG8gYmUgaW4gbm9uQXJnR1BSMC9ub25BcmdHUFIxIChwYXlsb2FkL3RhZyks
IHRoZSBjYWxsIGZyYW1lIHRvIGhhdmUgYWxyZWFkeQorICAgIC8vIGJlZW4gYWRqdXN0ZWQsIG5v
blByZXNlcnZlZE5vblJldHVybkdQUiBob2xkcyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgaW5kZXgs
CisgICAgLy8gYW5kIGFsbCBvdGhlciByZWdpc3RlcnMgdG8gYmUgYXZhaWxhYmxlIGZvciB1c2Uu
IFdlIHVzZSBKSVRTdGFja0ZyYW1lOjphcmdzCisgICAgLy8gdG8gc2F2ZSBpbXBvcnRhbnQgaW5m
b3JtYXRpb24gYWNyb3NzIGNhbGxzLgorICAgIAorICAgIENDYWxsSGVscGVycyBqaXQodm0pOwor
ICAgIAorICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVy
YXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOworICAgIAorICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJMaW5rICVz
IHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIgOiAiY29uc3Ry
dWN0IikpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRv
cihWTSogdm0pCit7CisgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZv
ckNhbGwpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKK3sKKyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBD
b2RlRm9yQ29uc3RydWN0KTsKK30KKworLy8gRm9yIGNsb3N1cmUgb3B0aW1pemF0aW9ucywgd2Ug
b25seSBpbmNsdWRlIGNhbGxzLCBzaW5jZSBpZiB5b3UncmUgdXNpbmcgY2xvc3VyZXMgZm9yCisv
LyBvYmplY3QgY29uc3RydWN0aW9uIHRoZW4geW91J3JlIGdvaW5nIHRvIGxvc2UgYmlnIHRpbWUg
YW55d2F5LgorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJh
dG9yKFZNKiB2bSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICAKKyAgICBzbG93
UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwpOworICAgIAorICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgY2xvc3VyZSBjYWxsIHNsb3cg
cGF0aCB0aHVuayIpKTsKK30KKworc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFs
Rm9yVGh1bmtHZW5lcmF0b3IoCisgICAgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCit7CisgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjaywgb3IgaW4g
dGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKKyAgICAvLyBqdW1wIHRvIHRoZSBjYWxs
ZWUsIG9yIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdl
CisgICAgLy8gbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsIHRvIHRoZSBhcHByb3ByaWF0ZSBKSVQg
b3BlcmF0aW9uLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgCisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKKworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2
ZSBhIHN0b3J5IGZvciBlbGltaW5hdGluZyB0aGVzZSBjaGVja3MuIEluIG1hbnkgY2FzZXMsCisg
ICAgLy8gdGhlIERGRyBrbm93cyB0aGF0IHRoZSB2YWx1ZSBpcyBkZWZpbml0ZWx5IGEgY2VsbCwg
b3IgZGVmaW5pdGVseSBhIGZ1bmN0aW9uLgorICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
c2xvd0Nhc2UuYXBwZW5kKAorICAgICAgICBqaXQuYnJhbmNoVGVzdDY0KAorICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpub25BcmdHUFIwLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpKTsKKyNlbHNlCisgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAgICBqaXQu
YnJhbmNoMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpu
b25BcmdHUFIxLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZykpKTsKKyNlbmRpZgorICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMik7CisgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAgICBqaXQuYnJh
bmNoUHRyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIyLCBTdHJ1Y3R1cmU6OmNs
YXNzSW5mb09mZnNldCgpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihKU0Z1bmN0aW9uOjppbmZvKCkpKSk7CisgICAgCisgICAgLy8gTm93IHdlIGtub3cgd2UgaGF2
ZSBhIEpTRnVuY3Rpb24uCisgICAgCisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4
ZWN1dGFibGUoKSksCisgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIHNsb3dDYXNl
LmFwcGVuZCgKKyAgICAgICAgaml0LmJyYW5jaDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpMZXNzVGhhbiwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAg
ICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZOdW1Q
YXJhbWV0ZXJzRm9yKGtpbmQpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKDApKSk7CisgICAgCisgICAgLy8gTm93IHdlIGtub3cgdGhhdCB3ZSBoYXZlIGEgQ29kZUJs
b2NrLCBhbmQgd2UncmUgY29tbWl0dGVkIHRvIG1ha2luZyBhIGZhc3QKKyAgICAvLyBjYWxsLgor
ICAgIAorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLAorICAg
ICAgICBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGppdC5z
dG9yZTY0KAorICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIxLAorICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0
YWNrOjpTY29wZUNoYWluKSk7CisjZWxzZQorICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgR1BS
SW5mbzo6bm9uQXJnR1BSMSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAg
ICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6U2NvcGVDaGFpbiArCisg
ICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKSk7CisgICAgaml0LnN0b3JlMzIoCisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29w
ZUNoYWluICsKKyAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSkpOworI2VuZGlmCisgICAgCisgICAgaml0LmxvYWRQdHIoCisgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIyLCBFeGVjdXRhYmxl
QmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCkpLAorICAgICAgICBH
UFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgLy8gTWFrZSBhIHRhaWwgY2FsbC4gVGhpcyB3aWxs
IHJldHVybiBiYWNrIHRvIEpJVCBjb2RlLgorICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQs
IEdQUkluZm86OnJlZ1QwKTsKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMCk7CisKKyAgICBz
bG93Q2FzZS5saW5rKCZqaXQpOworICAgIAorICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0
aGluZywgc28gcmV2ZXJ0IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KKyAgICAKKyAgICBzbG93UGF0
aEZvcihqaXQsIHZtLCBraW5kID09IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uVmlydHVhbENhbGwg
OiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICByZXR1cm4gRklOQUxJWkVf
Q09ERSgKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiVmlydHVhbCAlcyBzbG93IHBh
dGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVjdCIpKTsK
K30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JD
YWxsKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dl
bmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2
bSwgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHJpbmdM
ZW5ndGhUcmFtcG9saW5lR2VuZXJhdG9yKFZNKiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMTU2MjM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMTEgKzMxLDIyIEBACiAjaWYgRU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0MgewogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBsaW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dmlydHVhbENhbGxHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFs
Q29uc3RydWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVM
aW5rQ2FsbEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9sZFN0eWxlTGlu
a0NvbnN0cnVjdEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9sZFN0eWxl
TGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xk
U3R5bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9s
ZFN0eWxlVmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcihWTSopOworCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKik7CisKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKik7CisKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSopOworCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihWTSopOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOwor
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBvbGluZUdlbmVyYXRvcihW
TSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qKTsKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212656</attachid>
            <date>2013-09-25 20:16:17 -0700</date>
            <delta_ts>2013-09-25 21:21:41 -0700</delta_ts>
            <desc>revised patch: rebased to latest revision, and attempted fixes for Windows build. </desc>
            <filename>bug-121749.patch</filename>
            <type>text/plain</type>
            <size>476002</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBA
QAorMjAxMy0wOS0yNSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
TW92ZSBERkcgaW5saW5lIGNhY2hpbmcgbG9naWMgaW50byBqaXQvLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzQ5LgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbGFuZGluZyBodHRwOi8vdHJhYy53
ZWJraXQub3JnL2NoYW5nZXNldC8xNTYyMzUgYWZ0ZXIgcmViYXNpbmcgdG8gbGF0ZXN0CisgICAg
ICAgIHJldmlzaW9uIGFuZCBmaXhpbmcgYnVpbGQgYnJlYWthZ2VzIG9uIFdpbmRvd3MuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVzZXRTdHViSW50ZXJu
YWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICog
ZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Q2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxBcnJheUFsbG9j
YXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5oOgorICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRp
b25QdXRCeVZhbEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAg
ICAgICAoSlNDOjpERkc6Om9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUpOgor
ICAgICAgICAoSlNDOjpERkc6Om9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRG
b3JUeXBlKToKKyAgICAgICAgKiBkZmcvREZHUmVnaXN0ZXJTZXQuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1JlcGF0
Y2guaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhv
bGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1Bh
dGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
Q29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlND
OjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRC
b3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3Mu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuaDoKKyAgICAgICAgKiBmdGwvRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3Qp
OgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuaDoKKyAgICAgICAgKiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6d3JpdGVCYXJy
aWVyKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9y
KToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rU2xvd0NhbGwpOgorICAgICAgICAqIGppdC9KSVRD
YWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0
aW9uV3JhcHBlcnMuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25XcmFwcGVycy5oLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcC4KKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaC4KKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuaDog
Q29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oLgorICAg
ICAgICAqIGppdC9SZXBhdGNoLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcC4KKyAgICAgICAgKEpTQzo6dHJ5QnVpbGRHZXRCeUlETGlzdCk6Cisg
ICAgICAgICogaml0L1JlcGF0Y2guaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmguCisgICAgICAgICogaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oLgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAo
SlNDOjpvbGRTdHlsZUdlbmVyYXRlU2xvd0Nhc2VGb3IpOgorICAgICAgICAoSlNDOjpvbGRTdHls
ZUxpbmtGb3JHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpvbGRTdHlsZUxpbmtDYWxsR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6b2xkU3R5bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6b2xkU3R5bGVMaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpvbGRTdHlsZVZpcnR1YWxGb3JHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpvbGRTdHls
ZVZpcnR1YWxDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6b2xkU3R5bGVWaXJ0dWFsQ29u
c3RydWN0R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKToK
KyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpsaW5rRm9yVGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6bGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlu
a0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yVGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6dmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisKIDIwMTMtMDktMjUgIENvbW1pdCBRdWV1ZSAgPGNv
bW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIxNTY0MzIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwog
ICAgIGRmZy9ERkdQbGFuLmNwcAogICAgIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2Uu
Y3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAotICAgIGRmZy9E
RkdSZXBhdGNoLmNwcAogICAgIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCiAgICAgZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cApAQCAtMjI1LDYgKzIyNCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaml0
L0pJVEV4Y2VwdGlvbnMuY3BwCiAgICAgaml0L0pJVE9wY29kZXMuY3BwCiAgICAgaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAKKyAgICBqaXQvSklUT3BlcmF0aW9ucy5jcHAKICAgICBqaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCiAgICAgaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCiAgICAg
aml0L0pJVFN0dWJSb3V0aW5lLmNwcApAQCAtMjMyLDYgKzIzMiw3IEBAIHNldChKYXZhU2NyaXB0
Q29yZV9TT1VSQ0VTCiAgICAgaml0L0pJVFRodW5rcy5jcHAKICAgICBqaXQvSklUVG9ERkdEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCiAgICAgaml0L0p1bXBSZXBsYWNlbWVudFdhdGNo
cG9pbnQuY3BwCisgICAgaml0L1JlcGF0Y2guY3BwCiAgICAgaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAKIAogICAgIHBhcnNlci9MZXhlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMzM5LDEzICszMzks
OSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyQmFuay5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlZ2lzdGVyU2V0LmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVwYXRjaC5jcHAgXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRv
ci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaCBcCi0JU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBcCkBAIC02
MzIsNiArNjI4LDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFwcGVy
cy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YkNhbGwuaCBcCkBAIC02NTQsNiArNjUzLDkgQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJ
VC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0p1bXBSZXBsYWNlbWVudFdhdGNocG9p
bnQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0p1bXBSZXBsYWNlbWVudFdhdGNo
cG9pbnQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU2xvd1BhdGhDYWxsLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lh
bGl6ZWRUaHVua0pJVC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9yLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDE1NjQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODMsNyArMTgzLDYgQEAgU09VUkNFUyArPSBcCiAgICAgZGZnL0RGR1BsYW4uY3BwIFwKICAgICBk
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIFwKICAgICBkZmcvREZHUHJlZGlj
dGlvbkluamVjdGlvblBoYXNlLmNwcCBcCi0gICAgZGZnL0RGR1JlcGF0Y2guY3BwIFwKICAgICBk
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBcCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcCBcCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIFwKQEAgLTIyMiw2ICsy
MjEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBqaXQvSklURXhjZXB0aW9ucy5jcHAgXAogICAgIGpp
dC9KSVRPcGNvZGVzLmNwcCBcCiAgICAgaml0L0pJVE9wY29kZXMzMl82NC5jcHAgXAorICAgIGpp
dC9KSVRPcGVyYXRpb25zLmNwcCBcCiAgICAgaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBcCiAg
ICAgaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIFwKICAgICBqaXQvSklUU3R1YlJvdXRp
bmUuY3BwIFwKQEAgLTIyOSw2ICsyMjksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBqaXQvSklUVGh1
bmtzLmNwcCBcCiAgICAgaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNw
cCBcCiAgICAgaml0L0p1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwIFwKKyAgICBqaXQvUmVw
YXRjaC5jcHAgXAogICAgIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwIFwKICAgICBsbGludC9MTElu
dENMb29wLmNwcCBcCiAgICAgbGxpbnQvTExJbnREYXRhLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTM3OCw2ICszNzgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caml0XEpJVEV4Y2VwdGlvbnMuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGppdFxKSVRPcGNvZGVzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxqaXRcSklUT3Bjb2RlczMyXzY0LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxqaXRcSklUT3BlcmF0aW9ucy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aml0XEpJVFByb3BlcnR5QWNjZXNzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxqaXRcSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caml0XEpJVFN0dWJSb3V0aW5lLmNwcCIgLz4NCkBAIC0zODUsNiArMzg2LDcgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRUaHVua3MuY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEp1bXBSZXBsYWNl
bWVudFdhdGNocG9pbnQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxS
ZXBhdGNoLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcVGh1bmtHZW5l
cmF0b3JzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsbGludFxMTEludENM
b29wLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsbGludFxMTEludERhdGEu
Y3BwIiAvPg0KQEAgLTc2OSw2ICs3NzEsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aml0XEpJVERpc2Fzc2VtYmxlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGpp
dFxKSVRFeGNlcHRpb25zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJ
VElubGluZXMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUT3BlcmF0
aW9uV3JhcHBlcnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUT3Bl
cmF0aW9ucy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRTdHViQ2Fs
bC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRTdHViUm91dGluZS5o
IiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRTdHVicy5oIiAvPg0KQEAg
LTc4MCw2ICs3ODQsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFdyaXRl
QmFycmllci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKU0ludGVyZmFj
ZUpJVC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKdW1wUmVwbGFjZW1l
bnRXYXRjaHBvaW50LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJlZ2lz
dGVyU2V0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJlcGF0Y2guaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFNwZWNpYWxpemVkVGh1
bmtKSVQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcVGh1bmtHZW5lcmF0
b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcVGh1bmtHZW5lcmF0b3Jz
LmgiIC8+DQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NjQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDEzIEBACiAJCTBGMjRF
NTQ0MTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5m
by5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MjRFNTU1MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTMxN0YwQjcxQzAw
QUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgKi87IH07CiAJCTBGMjRFNTU2MTdGMEI3
MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTU0MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxp
bmVDYWxsRnJhbWVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0NTE3
RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgKi87IH07CisJCTBGMjRFNTREMTdF
RTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0NjE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3Bl
cmF0aW9ucy5oICovOyB9OworCQkwRjI0RTU0RTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0
aW9uV3JhcHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjRFNTQ3MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25XcmFwcGVycy5oICov
OyB9OworCQkwRjI0RTU0RjE3RUUyNzQ5MDBBQkIyMTcgLyogUmVnaXN0ZXJTZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ4MTdFRTI3NDkw
MEFCQjIxNyAvKiBSZWdpc3RlclNldC5oICovOyB9OworCQkwRjI0RTU1MDE3RUUyNzQ5MDBBQkIy
MTcgLyogUmVwYXRjaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjI0RTU0OTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgKi87IH07CisJ
CTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyog
UmVwYXRjaC5oICovOyB9OworCQkwRjI0RTU1MjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmggKi87IH07CiAJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlB
bGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJh
eUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQjY2QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5j
b21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJC
NjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZC
NTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI2Niw4ICsyNzMsNiBAQAog
CQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMzMx
NUFFMjUzNTAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc2NkQzODE1QUU0QTFD
MDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQzNjE1QUU0QTFBMDA4
RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgKi87IH07CiAJCTBG
NzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQz
NzE1QUU0QTFBMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNzY2RDQ0
MTVCMkEzQzAwMDhGMzYzRSAvKiBERkdSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZENDIxNUIyQTNCRDAwOEYzNjNFIC8qIERG
R1JlZ2lzdGVyU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY3NjZENDUxNUIzNzAxRDAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzcw
MDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5
IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87IH07CiAJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RC
MSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdC
Mjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyogREZH
Q29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTczMSw4ICs3MzYsNiBAQAogCQk4NkFFNjRBQTEzNUU1RTFDMDA5NjMwMTIgLyogU0g0QXNz
ZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NkFFNjRBNzEzNUU1RTFDMDA5NjMwMTIgLyogU0g0QXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZCNTgyNjcxNEQyNzk2QzAwQTlD
MzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAg
Ki87IH07CiAJCTg2QjU4MjY5MTREMjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDNDRUYyMTRD
NzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLzsgfTsKLQkJODZCQjA5QzAxMzhF
MzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZCQjA5QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0
Y2guY3BwICovOyB9OwotCQk4NkJCMDlDMTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCQjA5QkYx
MzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkMzNkVFQTBFRTEyODlEMDBCM0RGNTkgLyogTWFj
cm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2QzM2RUU5MEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2QzU2OEUwMTFBMjEz
RUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkM1NjhERDExQTIxM0VFMDAwN0Y3RjAgLyogTWFj
cm9Bc3NlbWJsZXJBUk0uY3BwICovOyB9OwogCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyog
TWFjcm9Bc3NlbWJsZXJNSVBTLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NkM1NjhERTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJNSVBT
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEz
MjIsNiArMTMyNSwxMyBAQAogCQkwRjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHUFJJbmZvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTUzMTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxs
RnJhbWVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5l
Q2FsbEZyYW1lU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTQx
N0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbmxpbmVDYWxsRnJhbWVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyNEU1NDUxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUT3BlcmF0aW9ucy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjRFNTQ2MTdFRTI3NDkwMEFCQjIxNyAv
KiBKSVRPcGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE9w
ZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNEU1NDcxN0VFMjc0
OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbldyYXBwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpJVE9wZXJhdGlvbldyYXBwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMjRFNTQ4MTdFRTI3NDkwMEFCQjIxNyAvKiBSZWdpc3RlclNldC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdpc3RlclNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjI0RTU0OTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXBhdGNoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNEU1NEExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0
Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhH
ZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2FsbEFycmF5
QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdDYWxsQXJyYXlBbGxv
Y2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR0NJbmNvbWluZ1JlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYyQjY2QTkxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NjcsOCArMTQ3Nyw2IEBACiAJCTBGNzY2RDMz
MTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMzYxNUFFNEExQTAwOEYzNjNFIC8qIFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2RDM3MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEY3NjZENDIxNUIyQTNCRDAwOEYzNjNFIC8qIERGR1JlZ2lzdGVyU2V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1JlZ2lzdGVyU2V0Lmg7IHBh
dGggPSBkZmcvREZHUmVnaXN0ZXJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MEY3NjZENDUxNUIzNzAxRDAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBs
aW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0Nv
dW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAw
NzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTkyNyw4ICsxOTM1LDYgQEAKIAkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8q
IENvZGVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENv
ZGVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCNTgyMkYxNEQy
MzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvZGVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QjU4
MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVyZWRNTWFwQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGllcmVkTU1hcEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTg2QkIwOUJFMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1JlcGF0Y2guY3BwOyBwYXRoID0g
ZGZnL0RGR1JlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkJCMDlC
RjEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdSZXBhdGNoLmg7IHBhdGggPSBkZmcvREZHUmVwYXRjaC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NkJGNjQyQTE0OERCMkI1MDA0REUzNkEgLyogSW50cmlu
c2ljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludHJpbnNpYy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkMzNkVFOTBFRTEyODlEMDBCM0RGNTkgLyogTWFj
cm9Bc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3Nl
bWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDNTY4REQxMUEyMTNFRTAw
MDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyQVJNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTI3MTEsMTYgKzI3MTcsMTYgQEAKIAkJCQkwRjI0RTUzQjE3RUE5RjU5MDBBQkIy
MTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKIAkJCQkwRjI0RTUzQzE3RUE5RjU5MDBBQkIy
MTcgLyogQXNzZW1ibHlIZWxwZXJzLmggKi8sCiAJCQkJMEYyNEU1M0QxN0VBOUY1OTAwQUJCMjE3
IC8qIENDYWxsSGVscGVycy5oICovLAotCQkJCTBGMjRFNTNFMTdFQTlGNTkwMEFCQjIxNyAvKiBG
UFJJbmZvLmggKi8sCi0JCQkJMEYyNEU1M0YxN0VBOUY1OTAwQUJCMjE3IC8qIEdQUkluZm8uaCAq
LywKIAkJCQkwRjczRDdBQjE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGlu
ZS5jcHAgKi8sCiAJCQkJMEY3M0Q3QUMxNjVBMTQyQTAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1
YlJvdXRpbmUuaCAqLywKIAkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJ
VENvZGVNYXAuaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1
dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyogRXhl
Y3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKKwkJCQkwRjI0RTUzRTE3RUE5RjU5
MDBBQkIyMTcgLyogRlBSSW5mby5oICovLAogCQkJCTBGNzY2RDJEMTVBOERDREQwMDhGMzYzRSAv
KiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovLAogCQkJCTBGNzY2RDJFMTVBOERDREQwMDhG
MzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCAqLywKKwkJCQkwRjI0RTUzRjE3RUE5RjU5
MDBBQkIyMTcgLyogR1BSSW5mby5oICovLAogCQkJCTBGNDY4MEQwMTRCQkM1RjgwMEJGRTI3MiAv
KiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLywKIAkJCQkwRjQ2ODBEMTE0QkJDNUY4MDBCRkUy
NzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oICovLAogCQkJCTE0MjlEOTJEMEVEMjJENzAwMEI4
OTYxOSAvKiBKSVQuY3BwICovLApAQCAtMjczOSw2ICsyNzQ1LDkgQEAKIAkJCQk4NkNDODVBMDBF
RTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lcy5oICovLAogCQkJCUJDREQ1MUU5MEZCOERGNzQw
MDRBOEJEQyAvKiBKSVRPcGNvZGVzLmNwcCAqLywKIAkJCQlBNzEyMzZFNDExOTVGMzNDMDBCRDIx
NzQgLyogSklUT3Bjb2RlczMyXzY0LmNwcCAqLywKKwkJCQkwRjI0RTU0NTE3RUUyNzQ5MDBBQkIy
MTcgLyogSklUT3BlcmF0aW9ucy5jcHAgKi8sCisJCQkJMEYyNEU1NDYxN0VFMjc0OTAwQUJCMjE3
IC8qIEpJVE9wZXJhdGlvbnMuaCAqLywKKwkJCQkwRjI0RTU0NzE3RUUyNzQ5MDBBQkIyMTcgLyog
SklUT3BlcmF0aW9uV3JhcHBlcnMuaCAqLywKIAkJCQk4NkNDODVDMzBFRTdBODk0MDAyODg2ODIg
LyogSklUUHJvcGVydHlBY2Nlc3MuY3BwICovLAogCQkJCUE3QzFFOEM4MTEyRTcwMUMwMEEzN0Y5
OCAvKiBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCAqLywKIAkJCQk5NjA2MjY5NTBGQjhFQzAy
MDA5Nzk4QUIgLyogSklUU3R1YkNhbGwuaCAqLywKQEAgLTI3NjEsNiArMjc3MCwxMCBAQAogCQkJ
CUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAogCQkJCTBG
NzY2RDMyMTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcCAq
LywKIAkJCQkwRjc2NkQzMzE1QUUyNTM1MDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hw
b2ludC5oICovLAorCQkJCTBGMjRFNTQ4MTdFRTI3NDkwMEFCQjIxNyAvKiBSZWdpc3RlclNldC5o
ICovLAorCQkJCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLywKKwkJ
CQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICovLAorCQkJCTBGMjRFNTRC
MTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQlB
NzA5RjJFRjE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJQTczODY1
NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCAqLywKIAkJCQkwRjU3
MkQ0RDE2ODc5RkRCMDBFNTdGQkQgLyogVGh1bmtHZW5lcmF0b3IuaCAqLywKQEAgLTM2MTgsMTMg
KzM2MzEsOSBAQAogCQkJCTBGRkZDOTUxMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTIxNEVGOTA5NTAwQzcyNTMyIC8q
IERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4
MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAotCQkJCTBGNzY2RDQyMTVCMkEzQkQw
MDhGMzYzRSAvKiBERkdSZWdpc3RlclNldC5oICovLAotCQkJCTg2QkIwOUJFMTM4RTM4MUIwMDU2
NzAyRiAvKiBERkdSZXBhdGNoLmNwcCAqLywKLQkJCQk4NkJCMDlCRjEzOEUzODFCMDA1NjcwMkYg
LyogREZHUmVwYXRjaC5oICovLAogCQkJCUE3N0E0MjNDMTdBMEJCRkQwMEE4REI4MSAvKiBERkdT
YWZlVG9FeGVjdXRlLmggKi8sCiAJCQkJQTc0MTAxN0UxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1Nh
bmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggKi8sCiAJCQkJODZFQ0EzRjkxMzJE
RjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCAqLywKLQkJCQkwRjc2NkQ0NTE1QjM3MDFE
MDA4RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8sCiAJCQkJMEYxRTNB
NjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLywKIAkJ
CQkwRjFFM0E1MDE1MzdDMkNCMDAwRjk0NTYgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCAqLywK
IAkJCQk4NkVDOURDMjEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuY3BwICov
LApAQCAtMzk1Miw2ICszOTYxLDcgQEAKIAkJCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyog
REZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMTgxNkQwMkVCMjAw
NTVBNURCIC8qIERGR0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczNzgxMEMxNzk5
RUEyRTAwODE3NTMzIC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI0RTU0
RTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9uV3JhcHBlcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjE2MDE1RTE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQxNjgz
Q0Y5MjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzk2Miw2ICszOTcyLDcgQEAKIAkJCQkwRkZCOTIxQTE2RDAyRUM1MDA1NUE1REIg
LyogREZHQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MEIwODMzMTdB
MEI3OUIwMERBRjE0QiAvKiBERkdCaW5hcnlTd2l0Y2guaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyNEU1NTIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MzY0QjcxNjRCMEMxMTAwNTMzMjlBIC8q
IERGR0JyYW5jaERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzUxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1
NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5l
cmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNDAzNiwxNCArNDA0NywxMSBAQAogCQkJCTBGQkUw
Rjc1MTZDMURCMEIwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkZDOTVFMTRFRjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDExMzI4REY4MjAw
MkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY3NjZENDQx
NUIyQTNDMDAwOEYzNjNFIC8qIERGR1JlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQk4
NkJCMDlDMTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkFEODkzMkIxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAvKiBERkdT
YW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZFQ0EzRkExMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRDhBMzE0MTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTBGNzY2RDQ2MTVCMzcwMUYwMDhGMzYzRSAvKiBERkdTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1
NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZC
OTIxRDE2RDAyRjMwMDA1NUE1REIgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2RUM5REQzMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5o
IGluIEhlYWRlcnMgKi8sCkBAIC00MTc4LDYgKzQxODYsNyBAQAogCQkJCUE3QTRBRTEwMTc5NzNC
NEQwMDU2MTJCMSAvKiBKSVRTdHVic1g4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI0RTU0RDE3RUUyNzQ5MDBBQkIyMTcgLyog
SklUT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2RjU0QTMxM0IyOEFBQjAwRUYy
QkNFIC8qIEpJVFdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTYwRTE2
RjVDRDAwQjM0NDYwIC8qIEpTQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQwNDgw
MTMxMDIxQTFEOTAwOEU3RjAxIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTQ0NzMsNiArNDQ4Miw4IEBACiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVk
aXM4Nl9leHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ0MTU4RUJFOTEwMDRDQjlG
RiAvKiB1ZGlzODZfaW5wdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ4MTU4RUJFOTEw
MDRDQjlGRiAvKiB1ZGlzODZfc3luLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI0RTU1MTE3RUUy
NzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNEU1NEYxN0VF
Mjc0OTAwQUJCMjE3IC8qIFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0
OTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0U1QUIzOTE3OTlFNEIyMDBEMjgzM0QgLyogVURpczg2RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0E4QUY0MTE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCBpbiBI
ZWFkZXJzICovLApAQCAtNDk0Miw2ICs0OTUzLDcgQEAKIAkJCQkwRjJCREMxNTE1MUM1RDREMDBD
RDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNzE3
QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdEODlDRjkxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjRFNTRDMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRP
cGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFE
NyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzA0RDkwNTE3QTBCQUE4MDA2
QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZFQTBBMzMxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC00OTcyLDcgKzQ5ODQsNiBAQAogCQkJCUE3OEE5NzdBMTc5NzM4QjgwMDlERjc0NCAvKiBE
RkdQbGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQkUwRjc0MTZDMURCMDkwMDgyQzVFOCAv
KiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
RkM5NUQxNEVGOTBCMzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTg2QkIwOUMwMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBh
dGNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REQyMTMyOERGODIwMDJCMkFENyAvKiBE
RkdTcGVjdWxhdGl2ZUpJVC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxRjE0MzI4QkI5
MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTUyMzgsNiArNTI0OSw3IEBACiAJCQkJOTMzNUYyNEQxMkU2NzY1QjAw
MkI1NTUzIC8qIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNERTNCNDMwRTZDODMyRDAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3RTRFRTcwRjBFQkI3QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEYyNEU1NTAxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQzJGMEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJh
cmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAv
KiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDQ0YwRDBDMEVGMEI4QTUwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uY3BwCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTIgKzQwLDEy
IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtLCBSZXBhdGMKICAgICByZXBhdGNo
QnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKFJlcGF0Y2hC
dWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGhvdFBhdGhCZWdpbiks
IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihjYWxsZWVHUFIpLCAwKTsK
ICAgICBpZiAoaXNERkcpIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCAoY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8g
dm0uZ2V0Q1RJU3R1YihERkc6OmxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikgOiB2bS5nZXRD
VElTdHViKERGRzo6bGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKSk7CisgICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgKGNhbGxUeXBlID09IENvbnN0
cnVjdCA/IHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKSA6IHZtLmdl
dENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKSk7CiAjZWxzZQogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiAgICAgfSBlbHNlCi0gICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbFR5cGUgPT0g
Q29uc3RydWN0ID8gdm0uZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkg
OiB2bS5nZXRDVElTdHViKGxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0cnVj
dCA/IHZtLmdldENUSVN0dWIob2xkU3R5bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkg
OiB2bS5nZXRDVElTdHViKG9sZFN0eWxlTGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAg
aGFzU2VlblNob3VsZFJlcGF0Y2ggPSBmYWxzZTsKICAgICBjYWxsZWUuY2xlYXIoKTsKICAgICBz
dHViLmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICNp
bmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJE
RkdOb2RlLmgiCi0jaW5jbHVkZSAiREZHUmVwYXRjaC5oIgogI2luY2x1ZGUgIkRGR1dvcmtsaXN0
LmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAt
NTAsNiArNDksNyBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0LmgiCiAjaW5jbHVkZSAiUmVkdWNlV2hpdGVzcGFjZS5oIgorI2luY2x1
ZGUgIlJlcGF0Y2guaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2xv
dFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTIzODAsMTIgKzIzODAs
MTIgQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkludGVybmFsKFJlcGF0YwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoKICAgICAgICAgaWYgKGlzR2V0QnlJZEFj
Y2VzcyhhY2Nlc3NUeXBlKSkKLSAgICAgICAgICAgIERGRzo6cmVzZXRHZXRCeUlEKHJlcGF0Y2hC
dWZmZXIsIHN0dWJJbmZvKTsKKyAgICAgICAgICAgIHJlc2V0R2V0QnlJRChyZXBhdGNoQnVmZmVy
LCBzdHViSW5mbyk7CiAgICAgICAgIGVsc2UgaWYgKGlzUHV0QnlJZEFjY2VzcyhhY2Nlc3NUeXBl
KSkKLSAgICAgICAgICAgIERGRzo6cmVzZXRQdXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZv
KTsKKyAgICAgICAgICAgIHJlc2V0UHV0QnlJRChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbkFjY2VzcyhhY2Nl
c3NUeXBlKSk7Ci0gICAgICAgICAgICBERkc6OnJlc2V0SW4ocmVwYXRjaEJ1ZmZlciwgc3R1Yklu
Zm8pOworICAgICAgICAgICAgcmVzZXRJbihyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAx
NTY0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMxLDEyIEBACiAjaWYgRU5BQkxFKEpJVCkK
IAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKLSNpbmNsdWRlICJERkdSZWdpc3RlclNldC5oIgog
I2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUg
IlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0
LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTIzMSw3ICsyMzEs
NyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICAgICAgaW50OF90IHZhbHVl
VGFnR1BSOwogI2VuZGlmCiAgICAgICAgICAgICBpbnQ4X3QgdmFsdWVHUFI7Ci0gICAgICAgICAg
ICBERkc6OlJlZ2lzdGVyU2V0UE9EIHVzZWRSZWdpc3RlcnM7CisgICAgICAgICAgICBSZWdpc3Rl
clNldFBPRCB1c2VkUmVnaXN0ZXJzOwogICAgICAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxUb0Rv
bmU7CiAgICAgICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvU3RvcmFnZUxvYWQ7CiAgICAgICAg
ICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQXJyYXlBbGxvY2F0
b3JTbG93UGF0aEdlbmVyYXRvci5oCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogY2xhc3MgQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IgOiBwdWJsaWMg
SnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdD4gewogcHVi
bGljOgogICAgIENhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgUF9ERkdP
cGVyYXRpb25fRVN0WiBmdW5jdGlvbiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIFBfSklUT3BlcmF0aW9uX0VTdFogZnVuY3Rpb24s
CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzdG9yYWdlR1BSLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IHNpemUpCiAgICAgICAgIDogSnVtcGluZ1Nsb3dQYXRoR2VuZXJh
dG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdD4oZnJvbSwgaml0KQogICAgICAgICAsIG1fZnVu
Y3Rpb24oZnVuY3Rpb24pCkBAIC02OCw3ICs2OCw3IEBAIHByb3RlY3RlZDoKICAgICB9CiAgICAg
CiBwcml2YXRlOgotICAgIFBfREZHT3BlcmF0aW9uX0VTdFogbV9mdW5jdGlvbjsKKyAgICBQX0pJ
VE9wZXJhdGlvbl9FU3RaIG1fZnVuY3Rpb247CiAgICAgR1BSUmVnIG1fcmVzdWx0R1BSOwogICAg
IEdQUlJlZyBtX3N0b3JhZ2VHUFI7CiAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKQEAgLTc5
LDcgKzc5LDcgQEAgcHJpdmF0ZToKIGNsYXNzIENhbGxBcnJheUFsbG9jYXRvcldpdGhWYXJpYWJs
ZVNpemVTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0PiB7CiBwdWJsaWM6CiAgICAgQ2FsbEFycmF5QWxsb2Nh
dG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgUF9ERkdPcGVyYXRpb25f
RVN0WiBmdW5jdGlvbiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZyb20sIFNw
ZWN1bGF0aXZlSklUKiBqaXQsIFBfSklUT3BlcmF0aW9uX0VTdFogZnVuY3Rpb24sCiAgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZSogY29udGlndW91c1N0cnVjdHVyZSwgU3RydWN0
dXJlKiBhcnJheVN0b3JhZ2VTdHJ1Y3R1cmUsIEdQUlJlZyBzaXplR1BSKQogICAgICAgICA6IEp1
bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+KGZyb20sIGpp
dCkKICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQpAQCAtMTEyLDcgKzExMiw3IEBAIHBy
b3RlY3RlZDoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFBfREZHT3BlcmF0aW9uX0VTdFog
bV9mdW5jdGlvbjsKKyAgICBQX0pJVE9wZXJhdGlvbl9FU3RaIG1fZnVuY3Rpb247CiAgICAgR1BS
UmVnIG1fcmVzdWx0R1BSOwogICAgIFN0cnVjdHVyZSogbV9jb250aWd1b3VzU3RydWN0dXJlOwog
ICAgIFN0cnVjdHVyZSogbV9hcnJheVN0b3JhZ2VTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxNTY0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDEyICszNiwxMiBAQAogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJE
RkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgiCiAjaW5jbHVkZSAiREZHUmVnaXN0ZXJCYW5rLmgi
Ci0jaW5jbHVkZSAiREZHUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJGUFJJbmZvLmgiCiAjaW5j
bHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJMaW5rQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNl
dC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Niw3ICs3Niw3IEBAIHByaXZhdGU6CiB9OwogCiBleHRlcm4gIkMiIHsKLXZvaWQgREZHX09Q
RVJBVElPTiBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJ
VF9PUEVSQVRJT04gY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogfQog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDYgQEAKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJERkdE
cml2ZXIuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCi0jaW5jbHVkZSAiREZHUmVwYXRjaC5o
IgogI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUgIkRGR1RvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5oIgpAQCAtNDUsMjk1ICs0NCwyMSBAQAogI2luY2x1ZGUgIklu
dGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5o
IgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbldyYXBwZXJzLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0
aW9uLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJKU05hbWVTY29wZS5oIgogI2luY2x1
ZGUgIk5hbWVJbnN0YW5jZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlcGF0Y2guaCIKICNpbmNsdWRlICJTdHJp
bmdDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlJbmxpbmVzLmgiCiAjaW5jbHVk
ZSA8d3RmL0lubGluZUFTTS5oPgogCiAjaWYgRU5BQkxFKEpJVCkKLQotI2lmIENQVShNSVBTKQot
I2lmIFdURl9NSVBTX1BJQwotI2RlZmluZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uKSBc
Ci0gICAgICAgICIuc2V0IG5vcmVvcmRlciIgIlxuIiBcCi0gICAgICAgICIuY3Bsb2FkICQyNSIg
IlxuIiBcCi0gICAgICAgICIuc2V0IHJlb3JkZXIiICJcbiIgXAotICAgICAgICAibGEgJHQ5LCAi
IExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIlxuIgotI2Vsc2UKLSNkZWZpbmUgTE9BRF9GVU5D
VElPTl9UT19UOShmdW5jdGlvbikgIiIgIlxuIgotI2VuZGlmCi0jZW5kaWYKLQogI2lmIEVOQUJM
RShERkdfSklUKQogCi0jaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoWDg2XzY0KQotCi0jZGVmaW5l
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmVnaXN0ZXIp
IFwKLSAgICBhc20oIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxu
IiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkco
ZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgIm1vdiAoJXJzcCksICUiIFNUUklOR0laRShy
ZWdpc3RlcikgIlxuIiBcCi0gICAgICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24j
I1dpdGhSZXR1cm5BZGRyZXNzKSAiXG4iIFwKLSAgICApOwotI2RlZmluZSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByc2kpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByOCkKLQotI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBD
UFUoWDg2KQotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhm
dW5jdGlvbiwgb2Zmc2V0KSBcCi0gICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAi
Lmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0wo
ZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwK
LSAgICAgICAgIm1vdiAoJWVzcCksICVlYXhcbiIgXAotICAgICAgICAibW92ICVlYXgsICIgU1RS
SU5HSVpFKG9mZnNldCkgIiglZXNwKVxuIiBcCi0gICAgICAgICJqbXAgIiBMT0NBTF9SRUZFUkVO
Q0UoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSAiXG4iIFwKLSAgICApOwotI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCA4KQotI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAxNikKLSNkZWZpbmUgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMjApCi0jZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDI0KQotCi0jZWxpZiBDT01QSUxFUihH
Q0MpICYmIENQVShBUk1fVEhVTUIyKQotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCi0gICAgYXNtICggXAotICAgICIudGV4dCIgIlxu
IiBcCi0gICAgIi5hbGlnbiAyIiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhm
dW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgICIu
dGh1bWIiICJcbiIgXAotICAgICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZnVuY3Rp
b24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAg
ICAgIm1vdiBhMiwgbHIiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5j
dGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLSAgICBhc20g
KCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmFsaWduIDIiICJcbiIgXAotICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCi0gICAgIi50aHVtYiIgIlxuIiBcCi0gICAgIi50aHVtYl9mdW5jICIgVEhV
TUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIjoiICJcbiIgXAotICAgICAgICAibW92IGE0LCBsciIgIlxuIiBcCi0gICAgICAgICJiICIg
TE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAg
ICk7Ci0KLS8vIEVuY29kZWRKU1ZhbHVlIGluIEpTVkFMVUUzMl82NCBpcyBhIDY0LWJpdCBpbnRl
Z2VyLiBXaGVuIGJlaW5nIGNvbXBpbGVkIGluIEFSTSBFQUJJLCBpdCBtdXN0IGJlIGFsaWduZWQg
ZXZlbi1udW1iZXJlZCByZWdpc3RlciAocjAsIHIyIG9yIFtzcF0pLgotLy8gQXMgYSByZXN1bHQs
IHJldHVybiBhZGRyZXNzIHdpbGwgYmUgYXQgYSA0LWJ5dGUgZnVydGhlciBsb2NhdGlvbiBpbiB0
aGUgZm9sbG93aW5nIGNhc2VzLgotI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVBQkkpICYmIENQVShB
Uk0pCi0jZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxy
LCBbc3AsICM0XSIKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpD
SSAic3RyIGxyLCBbc3AsICM4XSIKLSNlbHNlCi0jZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JF
VFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICMwXSIKLSNkZWZpbmUgSU5TVFJVQ1RJT05f
U1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM0XSIKLSNlbmRpZgotCi0j
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24p
IFwKLSAgICBhc20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmFsaWduIDIiICJcbiIg
XAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURF
X1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgIi50aHVtYiIgIlxuIiBcCi0gICAgIi50aHVt
Yl9mdW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NU
UklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRV
Uk5fQUREUkVTU19FSkkgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0
aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKLSAgICBhc20g
KCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmFsaWduIDIiICJcbiIgXAotICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCi0gICAgIi50aHVtYiIgIlxuIiBcCi0gICAgIi50aHVtYl9mdW5jICIgVEhV
TUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIjoiICJcbiIgXAotICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19F
SkNJICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhS
ZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQ
VShBUk1fVFJBRElUSU9OQUwpCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKLSAgICBhc20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwK
LSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9T
WU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIElOTElORV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24p
IFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgICJtb3Yg
YTIsIGxyIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJX
aXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtICggXAotICAg
ICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJc
biIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBJTkxJTkVfQVJNX0ZV
TkNUSU9OKGZ1bmN0aW9uKSBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIg
XAotICAgICAgICAibW92IGE0LCBsciIgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVGRVJF
TkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLS8vIEVu
Y29kZWRKU1ZhbHVlIGluIEpTVkFMVUUzMl82NCBpcyBhIDY0LWJpdCBpbnRlZ2VyLiBXaGVuIGJl
aW5nIGNvbXBpbGVkIGluIEFSTSBFQUJJLCBpdCBtdXN0IGJlIGFsaWduZWQgZXZlbi1udW1iZXJl
ZCByZWdpc3RlciAocjAsIHIyIG9yIFtzcF0pLgotLy8gQXMgYSByZXN1bHQsIHJldHVybiBhZGRy
ZXNzIHdpbGwgYmUgYXQgYSA0LWJ5dGUgZnVydGhlciBsb2NhdGlvbiBpbiB0aGUgZm9sbG93aW5n
IGNhc2VzLgotI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVBQkkpICYmIENQVShBUk0pCi0jZGVmaW5l
IElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICM0XSIK
LSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBb
c3AsICM4XSIKLSNlbHNlCi0jZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNT
X0VKSSAic3RyIGxyLCBbc3AsICMwXSIKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJO
X0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM0XSIKLSNlbmRpZgotCi0jZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKLSAgICBhc20g
KCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5j
dGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIElOTElO
RV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
OiIgIlxuIiBcCi0gICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAi
XG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJu
QWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQi
ICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAg
ICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgSU5MSU5FX0FSTV9GVU5DVElPTihm
dW5jdGlvbikgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAg
ICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAiXG4iIFwKLSAgICAgICAg
ImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBc
Ci0gICAgKTsKLQotI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoTUlQUykKLQotI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAotICAgIGFz
bSggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgTE9BRF9GVU5DVElPTl9UT19UOShm
dW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKLSAgICAgICAgIm1vdmUgJGExLCAkcmEiICJc
biIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5B
ZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLSAgICBhc20oIFwKLSAgICAiLnRleHQiICJc
biIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBI
SURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikg
IjoiICJcbiIgXAotICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5B
ZGRyZXNzKSBcCi0gICAgICAgICJtb3ZlICRhMywgJHJhIiAiXG4iIFwKLSAgICAgICAgImIgIiBM
T0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAg
KTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1
bmN0aW9uKSBcCi0gICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIg
U1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24p
ICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICBMT0FE
X0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAotICAgICAgICAi
c3cgJHJhLCAyMCgkc3ApIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVu
Y3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotICAgIGFz
bSggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgTE9BRF9GVU5DVElPTl9UT19UOShm
dW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKLSAgICAgICAgInN3ICRyYSwgMjQoJHNwKSIg
IlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVy
bkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFNI
NCkKLQotI2RlZmluZSBTSDRfU0NSQVRDSF9SRUdJU1RFUiAicjExIgotCi0jZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBc
Ci0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgInN0cyBwciwgcjUiICJcbiIgXAot
ICAgICAgICAiYnJhICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJl
c3MiICJcbiIgXAotICAgICAgICAibm9wIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLSAgICBhc20o
IFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0
aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAic3RzIHByLCByNyIgIlxuIiBc
Ci0gICAgICAgICJtb3YubCAyZiwgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAiXG4iIFwKLSAgICAg
ICAgImJyYWYgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAiXG4iIFwKLSAgICAgICAgIm5vcCIgIlxu
IiBcCi0gICAgICAgICIxOiAuYmFsaWduIDQiICJcbiIgXAotICAgICAgICAiMjogLmxvbmcgIiBM
T0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcy0xYiIgIlxuIiBcCi0g
ICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVu
Y3Rpb24sIG9mZnNldCwgc2NyYXRjaCkgXAotICAgIGFzbSggXAotICAgICIudGV4dCIgIlxuIiBc
Ci0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVf
U1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIg
IlxuIiBcCi0gICAgICAgICJzdHMgcHIsICIgc2NyYXRjaCAiXG4iIFwKLSAgICAgICAgIm1vdi5s
ICIgc2NyYXRjaCAiLCBAKCIgU1RSSU5HSVpFKG9mZnNldCkgIiwgcjE1KSIgIlxuIiBcCi0gICAg
ICAgICJtb3YubCAyZiwgIiBzY3JhdGNoICJcbiIgXAotICAgICAgICAiYnJhZiAiIHNjcmF0Y2gg
IlxuIiBcCi0gICAgICAgICJub3AiICJcbiIgXAotICAgICAgICAiMTogLmJhbGlnbiA0IiAiXG4i
IFwKLSAgICAgICAgIjI6IC5sb25nICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJl
dHVybkFkZHJlc3MtMWIiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCi0jZGVm
aW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDQsIFNINF9TQ1JB
VENIX1JFR0lTVEVSKQotCi0jZW5kaWYKLQotI2RlZmluZSBQX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCi12b2lkKiBERkdfT1BFUkFUSU9OIGZ1bmN0
aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZF
UkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAotRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCi0KLSNkZWZpbmUgSl9GVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBT
dHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5U
RVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rp
b24pCi0KLSNkZWZpbmUgSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJ
KGZ1bmN0aW9uKSBcCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRo
UmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCosIFJl
dHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCi1GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKQotCi0jZGVmaW5l
IFZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwK
LXZvaWQgREZHX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCosIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRy
KSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAotRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pCi0KIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAogdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+CkBAIC0zNTcsNyArODIsNyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgcHV0QnlWYWwoRXhlY1N0YXRlKiBlCiB9CiAKIHRlbXBsYXRlPGJv
b2wgc3RyaWN0PgotQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTQ2Niw3ICsxOTEsNyBAQCBjaGFy
KiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50KAogCiBleHRlcm4gIkMiIHsKIAotRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXMoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblRvVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcCkK
IHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKQEAgLTQ3NCw3ICsxOTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblRvCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wKS50b1RoaXMoZXhlYywgTm90U3RyaWN0TW9kZSkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpc1N0cmljdChFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNDgyLDcgKzIwNyw3IEBAIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG8KICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3ApLnRvVGhpcyhleGVjLCBTdHJpY3RN
b2RlKSk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVUaGlzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBpbnQzMl90IGlubGluZUNhcGFj
aXR5KQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGludDMyX3QgaW5saW5lQ2FwYWNpdHkpCiB7
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CkBAIC00OTUsNyArMjIwLDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNyZWF0ZVRoaQogICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVj
LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yKS0+YWxsb2NhdGlvblByb2ZpbGUoZXhl
YywgaW5saW5lQ2FwYWNpdHkpLT5zdHJ1Y3R1cmUoKSk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRl
KiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTUwMyw3
ICsyMjgsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0CiAgICAg
cmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGQoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZChFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC01MTQsNyArMjM5LDcgQEAgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25WYQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNB
ZGQoZXhlYywgb3AxLCBvcDIpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsK
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKQEAgLTU0Nyw3ICsyNzIsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRK
U1ZhbHVlIGdldEJ5VmFsKEV4CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGJh
c2UpLmdldChleGVjLCBpbmRleCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQogewogICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwpAQCAtNTc4LDcgKzMwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uR2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQo
ZXhlYywgaWRlbnQpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeVZhbENlbGwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRQcm9wZXJ0eSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2V0QnlWYWxDZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvcGVydHkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC02MTgsMTQwICszNDMs
MTcgQEAgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSBnZXRCeVZhbENlbAogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShiYXNlKS5nZXQoZXhlYywgaW5kZXgpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50KEV4
ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYmFzZSwgaW50MzJfdCBpbmRleCkKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludChFeGVjU3RhdGUqIGV4
ZWMsIEpTQXJyYXkqIGJhc2UsIGludDMyX3QgaW5kZXgpCiB7CiAgICAgcmV0dXJuIGdldEJ5VmFs
Q2VsbEludChleGVjLCBiYXNlLCBpbmRleCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmlu
ZyogYmFzZSwgaW50MzJfdCBpbmRleCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0QnlWYWxTdHJpbmdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogYmFzZSwg
aW50MzJfdCBpbmRleCkKIHsKICAgICByZXR1cm4gZ2V0QnlWYWxDZWxsSW50KGV4ZWMsIGJhc2Us
IGluZGV4KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRC
eUlkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgU3RyaW5nSW1wbCogdWlk
KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGJhc2UpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAg
SWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJh
c2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpKTsKLX0KLQotSl9GVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOwotRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0V2l0aFJl
dHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJ
bXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLQotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJl
c3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoYmFzZSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOwotCi0gICAg
aWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNz
VHlwZSkpCi0gICAgICAgIGJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwg
c2xvdCwgc3R1YkluZm8pOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwot
fQotCi1KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKTsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7
Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdl
dFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7Ci0gICAgUHJvcGVydHlTbG90IHNs
b3QoYmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywg
aWRlbnQsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKSB7Ci0gICAgICAgIGlmIChzdHViSW5mby5z
ZWVuKQotICAgICAgICAgICAgcmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwg
c2xvdCwgc3R1YkluZm8pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHViSW5mby5zZWVu
ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19
Ci0KLUpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShvcGVyYXRpb25J
bk9wdGltaXplKTsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uSW5PcHRp
bWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBTdHJp
bmdJbXBsKiBrZXksIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKLSAgICAKLSAgICBpZiAoIWJhc2UtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgdm0tPnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUludmFsaWRQYXJhbWV0ZXJFcnJvcihleGVjLCAiaW4i
LCBiYXNlKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsK
LQotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIGtleSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3Qo
YmFzZSk7Ci0gICAgYm9vbCByZXN1bHQgPSBhc09iamVjdChiYXNlKS0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIGlkZW50LCBzbG90KTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChhY2Nlc3NUeXBl
ID09IHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotICAgIAotICAgIGlmIChzdHViSW5mby5zZWVuKQot
ICAgICAgICByZXBhdGNoSW4oZXhlYywgYmFzZSwgaWRlbnQsIHJlc3VsdCwgc2xvdCwgc3R1Yklu
Zm8pOwotICAgIGVsc2UKLSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Ci0gICAgCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocmVzdWx0KSk7Ci19Ci0KLUVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uSW4oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGJhc2UsIFN0cmluZ0ltcGwqIGtleSkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgIGlmICghYmFz
ZS0+aXNPYmplY3QoKSkgewotICAgICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
SW52YWxpZFBhcmFtZXRlckVycm9yKGV4ZWMsICJpbiIsIGJhc2UpKTsKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0KLSAgICBJZGVudGlmaWVy
IGlkZW50KHZtLCBrZXkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGFz
T2JqZWN0KGJhc2UpLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCkpKTsKLX0KLQotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZW5lcmljSW4oRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGtleSkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbihl
eGVjLCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSwgYmFzZSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNDZWxsKiBiYXNlLCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBmdW5jdGlvbiwgU3RyaW5n
SW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQo
dm0sIHVpZCk7Ci0gICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShmdW5jdGlvbihleGVj
LCBhc09iamVjdChiYXNlKSwgaWRlbnQpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25DYWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBK
U0NlbGwqIGdldHRlclNldHRlcikKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY2FsbEdldHRlcihleGVjLCBiYXNlLCBnZXR0ZXJTZXR0ZXIpKTsKLX0KLQot
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9w
ZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzU5LDcgKzM2MSw3IEBAIHZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFN0cmkKICAgICBvcGVyYXRpb25QdXRCeVZh
bEludGVybmFsPHRydWU+KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkUHJvcGVydHksIGVuY29k
ZWRWYWx1ZSk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdChFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJv
cGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAg
LTc2Nyw3ICszNjksNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxOb25T
CiAgICAgb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbDxmYWxzZT4oZXhlYywgZW5jb2RlZEJhc2Us
IGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2Vs
bCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVy
dHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTc3
NSw3ICszNzcsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsCiAg
ICAgb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbDx0cnVlPihleGVjLCBKU1ZhbHVlOjplbmNvZGUo
Y2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogY2VsbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxs
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKQEAgLTc4Myw3ICszODUsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxDZWxsCiAgICAgb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbDxmYWxzZT4oZXhlYywgSlNW
YWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CiAK
LXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBh
cnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwpAQCAtNzk4LDcgKzQwMCw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbEJleW8KICAgICAgICAgYXJyYXksIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhl
YywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKLXZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwpAQCAtODEzLDcgKzQxNSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbEJleW8KICAgICAgICAgYXJyYXksIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAK
LXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91
bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4
LCBkb3VibGUgdmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlW
YWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJh
eSwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtODMw
LDcgKzQzMiw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVYKICAg
ICAgICAgYXJyYXksIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBqc1ZhbHVl
LCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFs
QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJy
YXksIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFsdWUpCiB7CiAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CkBAIC04NDcsNyArNDQ5LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dERvdWJsZUJ5VgogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBpbmRleCksIGpzVmFsdWUsIHNsb3QpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNBcnJheSogYXJyYXkpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04NTYsNyAr
NDU4LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlKEV4ZWNT
dGF0ZSogZXhlYywgZG91YmxlIHZhbHVlLCBKU0FycmF5KiBhcnJheSkKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlKEV4ZWNTdGF0ZSogZXhlYywg
ZG91YmxlIHZhbHVlLCBKU0FycmF5KiBhcnJheSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTg2NSw3
ICs0NjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhcnJheS0+bGVuZ3RoKCkpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUq
IGV4ZWMsIEpTQXJyYXkqIGFycmF5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25BcnJheVBvcChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQogewogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwpAQCAtODczLDcgKzQ3NSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uQXIKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFycmF5LT5wb3AoZXhlYykp
OwogfQogICAgICAgICAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJy
YXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQogewogICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpA
QCAtODgzLDcgKzQ4NSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
QXIKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFycmF5LT5wb3AoZXhlYykpOwogfQogICAg
ICAgICAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTg5
Niw3ICs0OTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1JlZ0V4cE9iamVjdChiYXNlKS0+ZXhlYyhleGVj
LCBpbnB1dCkpOwogfQogICAgICAgICAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJl
Z0V4cFRlc3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogYXJndW1lbnQp
CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50KQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAt
OTExLDIzNyArNTEzLDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVz
dAogICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdChiYXNlKS0+dGVzdChleGVjLCBpbnB1dCk7CiB9
CiAgICAgICAgIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwg
U3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIg
aWRlbnQodm0sIHVpZCk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29k
ZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIGJhc2UtPm1ldGhvZFRhYmxlKCktPnB1
dChiYXNlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3Qp
OwotfQotCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBT
dHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBp
ZGVudCh2bSwgdWlkKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29k
ZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIGJhc2UtPm1ldGhvZFRhYmxlKCktPnB1
dChiYXNlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3Qp
OwotfQotCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdChF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmll
ciBpZGVudCh2bSwgdWlkKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5j
b2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0
KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKLX0KLQotdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkKQot
ewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0g
ICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlk
Q29udGV4dCgpKTsKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0gICAgYXNPYmplY3Qo
YmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIHNsb3QpOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk7Ci12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwg
U3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi17Ci0gICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8o
cmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFz
ZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1
dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZh
bHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGlmIChzdHViSW5mby5zZWVuKQotICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlVmFs
dWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKLSAgICBlbHNlCi0gICAgICAg
IHN0dWJJbmZvLnNlZW4gPSB0cnVlOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSk7Ci12b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplV2l0aFJldHVy
bkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpT
Q2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlk
KTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+
Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBi
YXNlVmFsdWUoYmFzZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNv
ZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICAKLSAgICBiYXNlVmFsdWUucHV0KGV4
ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uc2VlbikKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQo
ZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7Ci0gICAg
ZWxzZQotICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKLX0KLQotVl9GVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
T3B0aW1pemUpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50
aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0g
ZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vz
c1R5cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5w
dXRCeUlkQ29udGV4dCgpKTsKLSAgICAKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0g
ICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgdmFsdWUsIHNs
b3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHN0
dWJJbmZvLnNlZW4pCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2UsIGlkZW50LCBz
bG90LCBzdHViSW5mbywgRGlyZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIHN0dWJJbmZvLnNlZW4g
PSB0cnVlOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJ
KG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Ci12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFk
ZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2Vs
bCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
Ci17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsK
LSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0
U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgUHV0UHJvcGVydHlT
bG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAg
ICAKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1
dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChh
Y2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUp
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAgICAg
IHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0
KTsKLSAgICBlbHNlCi0gICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwotfQotCi1WX0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3RCdWlsZExpc3QpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RC
dWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlm
aWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4
ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NU
eXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgCi0gICAg
YmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChh
Y2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUp
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNl
VmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKLX0KLQotVl9GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0QnVpbGRMaXN0KTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRl
bnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8g
PSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNj
ZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90
IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICAK
LSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAg
aWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNz
VHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMs
IGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOwotfQotCi1WX0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1
aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAg
ICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNz
KTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihz
dHViSW5mby5hY2Nlc3NUeXBlKTsKLSAgICAKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhl
Yy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIEFTU0VSVChiYXNl
LT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
IGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGlj
X2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHVi
SW5mbywgRGlyZWN0KTsKLX0KLQotVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKLXZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0V2l0
aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2
bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxv
Y2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgUHV0
UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4
dCgpKTsKLSAgICAKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0gICAgYXNPYmplY3Qo
YmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAot
ICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFj
Y2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYnVpbGRQdXRCeUlkTGlzdChl
eGVjLCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7Ci19Ci0KLXNpemVfdCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK3NpemVfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKICAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKQEAgLTExNDksNyArNTIxLDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZUxlcwogICAgIHJldHVybiBqc0xlc3M8dHJ1ZT4oZXhlYywgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQogCi1zaXpl
X3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzc0VxKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK3Np
emVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTE1Nyw3ICs1MjksNyBAQCBzaXplX3QgREZHX09QRVJBVElP
TiBvcGVyYXRpb25Db21wYXJlTGVzCiAgICAgcmV0dXJuIGpzTGVzc0VxPHRydWU+KGV4ZWMsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsK
IH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTE2NSw3ICs1MzcsNyBAQCBzaXplX3Qg
REZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlCiAgICAgcmV0dXJuIGpzTGVzczxmYWxz
ZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMSkpOwogfQogCi1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlckVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMikKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTE3Myw3ICs1
NDUsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlCiAgICAgcmV0
dXJuIGpzTGVzc0VxPGZhbHNlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMiksIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSk7CiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Db21wYXJlRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTE4Miw5
ICs1NTQsOSBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlRXEoCiB9CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25Db21wYXJlU3RyaW5nRXEoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGxlZnQsIEpTQ2VsbCog
cmlnaHQpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJp
bmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKICNlbHNl
Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIGxlZnQsIEpTQ2VsbCogcmlnaHQpCitzaXplX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGxlZnQs
IEpTQ2VsbCogcmlnaHQpCiAjZW5kaWYKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAg
LTExOTgsNyArNTcwLDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0
cgogI2VuZGlmCiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcUNlbGwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29t
cGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMjEy
LDcgKzU4NCw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHIKICAg
ICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZShleGVjLCBvcDEsIG9w
Mik7CiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTIyMywxOTMgKzU5NSw3IEBA
IHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHIKICAgICByZXR1cm4gSlNW
YWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgc3JjMSwgc3JjMik7CiB9CiAKLXN0YXRpYyB2b2lkKiBo
YW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVlLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0Nh
bGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLQotICAgIGV4
ZWNDYWxsZWUtPnNldFNjb3BlKGV4ZWMtPnNjb3BlKCkpOwotICAgIGV4ZWNDYWxsZWUtPnNldENv
ZGVCbG9jaygwKTsKLQotICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIENh
bGxEYXRhIGNhbGxEYXRhOwotICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRh
KGNhbGxlZSwgY2FsbERhdGEpOwotICAgIAotICAgICAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2Fs
bFR5cGVKUyk7Ci0gICAgCi0gICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsK
LSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWNDYWxsZWUp
OwotICAgICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwot
ICAgICAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2Fs
bERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKLSAgICAgICAgICAgIGlmICh2bS0+
ZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRI
b3N0Q2FsbFJldHVyblZhbHVlKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICBBU1NFUlQoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKLSAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihleGVjLCBjYWxsZWUpKTsKLSAgICAgICAg
cmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGtp
bmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgCi0gICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1
Y3REYXRhOwotICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERh
dGEoY2FsbGVlLCBjb25zdHJ1Y3REYXRhKTsKLSAgICAKLSAgICBBU1NFUlQoY29uc3RydWN0VHlw
ZSAhPSBDb25zdHJ1Y3RUeXBlSlMpOwotICAgIAotICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENv
bnN0cnVjdFR5cGVIb3N0KSB7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWNDYWxsZWUpOwotICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3Qo
Y2FsbGVlKSk7Ci0gICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKLSAgICAgICAg
aWYgKHZtLT5leGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiB2bS0+Z2V0Q1RJU3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpOwotCi0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRI
b3N0Q2FsbFJldHVyblZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGNvbnN0cnVjdFR5
cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpOwotICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24o
ZXhlYywgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgY2FsbGVlKSk7Ci0gICAgcmV0
dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci19Ci0KLWlubGluZSBjaGFyKiBsaW5rRm9y
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotewot
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7Ci0gICAgCi0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZXhlY0NhbGxlZS0+Y2Fs
bGVlQXNWYWx1ZSgpOwotICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1
bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwotICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCi0g
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihoYW5kbGVIb3N0Q2FsbChleGVj
Q2FsbGVlLCBjYWxsZWVBc1ZhbHVlLCBraW5kKSk7Ci0KLSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUg
PSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBleGVjQ2Fs
bGVlLT5zZXRTY29wZShjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCkpOwotICAgIEV4ZWN1dGFibGVC
YXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7Ci0KLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY29kZVB0cjsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7Ci0gICAg
aWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIGNvZGVQdHIgPSBleGVj
dXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwotICAg
IGVsc2UgewotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotICAgICAgICBK
U09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24o
ZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsKLSAgICAgICAgaWYgKGVycm9yKSB7
Ci0gICAgICAgICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlU3RhY2tPdmVyZmxv
d0Vycm9yKGV4ZWMpKTsKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
Pih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgfQotICAgICAgICBjb2RlQmxv
Y2sgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKTsKLSAgICAgICAgaWYg
KGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAgICAgICAgIGNvZGVQdHIg
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0Zvcihr
aW5kKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0
YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAgICB9
Ci0gICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0
Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwotICAgIGlmICghY2FsbExpbmtJ
bmZvLnNlZW5PbmNlKCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby5zZXRTZWVuKCk7Ci0gICAgZWxz
ZQotICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBj
YWxsZWUsIGNvZGVQdHIsIGtpbmQpOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
Pihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotfQotCi1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKLXsKLSAgICByZXR1cm4g
bGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCk7Ci19Ci0KLWNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCi17Ci0gICAg
cmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KLWlubGlu
ZSBjaGFyKiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkK
LXsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwotICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwotCi0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZXhlY0NhbGxlZS0+Y2Fs
bGVlQXNWYWx1ZSgpOwotICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihj
YWxsZWVBc1ZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkK
LSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGhhbmRsZUhvc3RDYWxsKGV4
ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKLSAgICAKLSAgICBKU0Z1bmN0aW9uKiBm
dW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAg
IGV4ZWNDYWxsZWUtPnNldFNjb3BlKGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpKTsKLSAgICBF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7Ci0gICAg
aWYgKFVOTElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yKGtpbmQpKSkgewotICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotICAgICAgICBKU09iamVjdCogZXJyb3Ig
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgZnVu
Y3Rpb24tPnNjb3BlKCksIGtpbmQpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAg
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlY0NhbGxlZSwgZXJyb3IpOwotICAgICAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
PihleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7Ci19Ci0KLWlubGluZSBjaGFyKiB2aXJ0dWFsRm9yKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotewotICAgIEpTQ2Vs
bCogY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkOwotICAgIHJldHVybiB2aXJ0dWFsRm9yV2l0
aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGtpbmQsIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCk7
Ci19Ci0KLXN0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoRXhlY1N0YXRl
KiBleGVjQ2FsbGVlLCBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbykKLXsKLSAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpT
RnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgSlNGdW5jdGlvbiogb2xkQ2Fs
bGVlID0gY2FsbExpbmtJbmZvLmNhbGxlZS5nZXQoKTsKLSAgICAKLSAgICBpZiAoIW9sZENhbGxl
ZQotICAgICAgICB8fCBvbGRDYWxsZWUtPnN0cnVjdHVyZSgpICE9IGNhbGxlZS0+c3RydWN0dXJl
KCkKLSAgICAgICAgfHwgb2xkQ2FsbGVlLT5leGVjdXRhYmxlKCkgIT0gY2FsbGVlLT5leGVjdXRh
YmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQoY2FsbGVlLT5l
eGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjb2RlUHRyID0gY2FsbGVlLT5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JD
YWxsKCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7
Ci0gICAgaWYgKGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAg
ICBjb2RlQmxvY2sgPSAwOwotICAgIGVsc2UgewotICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2FsbGVlLT5leGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tGb3JD
YWxsKCk7Ci0gICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGxpbmtDbG9zdXJlQ2Fs
bCgKLSAgICAgICAgZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssCi0gICAgICAg
IGNhbGxlZS0+c3RydWN0dXJlKCksIGNhbGxlZS0+ZXhlY3V0YWJsZSgpLCBjb2RlUHRyKTsKLSAg
ICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25M
aW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQotewotICAgIEpTQ2VsbCogY2Fs
bGVlQXNGdW5jdGlvbkNlbGw7Ci0gICAgY2hhciogcmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5j
dGlvbihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAg
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKS0+
Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsKLQot
ICAgIGlmICghYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBjYWxsZWVB
c0Z1bmN0aW9uQ2VsbCwgY2FsbExpbmtJbmZvKSkKLSAgICAgICAgbGlua1Nsb3dGb3IoZXhlY0Nh
bGxlZSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUpCi17ICAgIAotICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUs
IENvZGVGb3JDYWxsKTsKLX0KLQotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFs
Q29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKLXsKLSAgICByZXR1cm4gdmlydHVhbEZv
cihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25Ub1ByaW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIHZhbHVlKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1By
aW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwpAQCAtMTQxNyw3ICs2MDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblRvCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlOjpkZWNvZGUo
dmFsdWUpLnRvUHJpbWl0aXZlKGV4ZWMpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUs
IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0FycmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgdm9p
ZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTE0MjUsNyArNjEx
LDcgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheShFeAogICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKGV4ZWMs
IGFycmF5U3RydWN0dXJlLCBzdGF0aWNfY2FzdDxKU1ZhbHVlKj4oYnVmZmVyKSwgc2l6ZSkpOwog
fQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkoRXhlY1N0YXRl
KiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlKQorY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0
cnVjdHVyZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTE0MzMsNyArNjE5LDcgQEAgY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdFbXB0eUFycgogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
Y2hhcio+KEpTQXJyYXk6OmNyZWF0ZSgqdm0sIGFycmF5U3RydWN0dXJlKSk7CiB9CiAKLWNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqIGV4ZWMs
IFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGludDMyX3Qgc2l6ZSkKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogYXJyYXlTdHJ1Y3R1cmUsIGludDMyX3Qgc2l6ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTE0
NDQsMTIyICs2MzAsMTIyIEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlX
aXQKICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihKU0FycmF5OjpjcmVhdGUoKnZtLCBh
cnJheVN0cnVjdHVyZSwgc2l6ZSkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0FycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVy
ZSwgc2l6ZV90IHN0YXJ0LCBzaXplX3Qgc2l6ZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0
dXJlLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBzaXplKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKGV4
ZWMsIGFycmF5U3RydWN0dXJlLCBleGVjLT5jb2RlQmxvY2soKS0+Y29uc3RhbnRCdWZmZXIoc3Rh
cnQpLCBzaXplKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFy
cmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdp
dGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMy
X3QgbGVuZ3RoKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNJbnQ4QXJy
YXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNJbnQ4QXJyYXk+KGV4
ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25OZXdJbnQxNkFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJh
eVdpdGhTaXplPEpTSW50MTZBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoT25lQXJndW1lbnQo
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoT25lQXJndW1l
bnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFy
Z3VtZW50PEpTSW50MTZBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQog
Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlXaXRoU2l6ZSgKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhTaXplKAogICAgIEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewog
ICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNJbnQzMkFycmF5PihleGVjLCBzdHJ1
Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50
MzJBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
SW50MzJBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJu
IG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNJbnQzMkFycmF5PihleGVjLCBzdHJ1Y3R1
cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
VWludDhBcnJheVdpdGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50
OEFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxK
U1VpbnQ4QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU1Vp
bnQ4QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhTaXplKAorY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhTaXplKAogICAg
IEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQog
ewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNVaW50OENsYW1wZWRBcnJheT4o
ZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNV
aW50OENsYW1wZWRBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aFNpemUoCitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aFNpemUoCiAgICAgRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAg
ICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU1VpbnQxNkFycmF5PihleGVjLCBzdHJ1
Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWlu
dDE2QXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d1VpbnQxNkFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1
cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU1VpbnQxNkFycmF5PihleGVjLCBzdHJ1
Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3VWludDMyQXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
VWludDMyQXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhT
aXplPEpTVWludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhPbmVBcmd1bWVudCgKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlXaXRoT25lQXJndW1lbnQo
CiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3Vt
ZW50PEpTVWludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoU2l6ZSgKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aFNpemUoCiAgICAg
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7
CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0Zsb2F0MzJBcnJheT4oZXhlYywg
c3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0Zsb2F0MzJBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAg
ICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU0Zsb2F0MzJBcnJheT4oZXhl
Yywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRB
cnJheVdpdGhTaXplPEpTRmxvYXQ2NEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9
CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aE9uZUFy
Z3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRo
T25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5
V2l0aE9uZUFyZ3VtZW50PEpTRmxvYXQ2NEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRW
YWx1ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVn
ZXhwKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogcmVnZXhwUHRyKQorRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiByZWdl
eHBQdHIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNTcyLDcgKzc1OCw3IEBAIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVn
ZXhwKSk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3RpdmF0
aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVh
dGVBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE1ODEs
NyArNzY3LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdAogICAg
IHJldHVybiBhY3RpdmF0aW9uOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYykKK0pTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpb25DcmVhdGVBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwpAQCAtMTU5Miw3ICs3NzgsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3Jl
YXRlQXJnCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNyZWF0ZUlubGluZWRBcmd1bWVudHMoCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50cygKICAgICBFeGVjU3RhdGUqIGV4ZWMsIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CkBAIC0xNjA0LDcgKzc5MCw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVh
dGVJbmwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uVGVhck9mZkFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYXJndW1lbnRzQ2Vs
bCwgSlNDZWxsKiBhY3RpdmF0aW9uQ2VsbCkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25U
ZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBhcmd1bWVudHNDZWxsLCBK
U0NlbGwqIGFjdGl2YXRpb25DZWxsKQogewogICAgIEFTU0VSVChleGVjLT5jb2RlQmxvY2soKS0+
dXNlc0FyZ3VtZW50cygpKTsKICAgICBpZiAoYWN0aXZhdGlvbkNlbGwpIHsKQEAgLTE2MTQsMTQg
KzgwMCwxNCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFyZ3VtCiAgICAg
anNDYXN0PEFyZ3VtZW50cyo+KGFyZ3VtZW50c0NlbGwpLT50ZWFyT2ZmKGV4ZWMpOwogfQogCi12
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZklubGluZWRBcmd1bWVudHMoCit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZklubGluZWRBcmd1bWVudHMoCiAgICAgRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGFyZ3VtZW50c0NlbGwsIEpTQ2VsbCogYWN0aXZhdGlvbkNl
bGwsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogewogICAgIEFTU0VSVF9VTlVT
RUQoYWN0aXZhdGlvbkNlbGwsICFhY3RpdmF0aW9uQ2VsbCk7IC8vIEN1cnJlbnRseSwgd2UgZG9u
J3QgaW5saW5lIGZ1bmN0aW9ucyB3aXRoIGFjdGl2YXRpb25zLgogICAgIGpzQ2FzdDxBcmd1bWVu
dHMqPihhcmd1bWVudHNDZWxsKS0+dGVhck9mZihleGVjLCBpbmxpbmVDYWxsRnJhbWUpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0
aChFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYXJndW1lbnRzUmVnaXN0ZXIpCitFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aChFeGVjU3RhdGUq
IGV4ZWMsIGludDMyX3QgYXJndW1lbnRzUmVnaXN0ZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0x
NjMzLDcgKzgxOSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNs
b3QpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1
bWVudEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlciwgaW50
MzJfdCBpbmRleCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJn
dW1lbnRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYXJndW1lbnRzUmVnaXN0ZXIsIGlu
dDMyX3QgaW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNjQ4LDcgKzgzNCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGFyZ3VtZW50c1ZhbHVlLmdldChleGVjLCBpbmRleCkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFsKAorRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRJbmxpbmVkQXJndW1lbnRCeVZh
bCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYXJndW1lbnRzUmVnaXN0ZXIsIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBpbnQzMl90IGluZGV4KQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CkBAIC0xNjY2LDcgKzg1Miw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFyZ3VtZW50
c1ZhbHVlLmdldChleGVjLCBpbmRleCkpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3RnVuY3Rpb25Ob0NoZWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlv
bkV4ZWN1dGFibGUpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25O
b0NoZWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUpCiB7CiAg
ICAgQVNTRVJUKGZ1bmN0aW9uRXhlY3V0YWJsZS0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRhYmxl
OjppbmZvKCkpKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtMTY3NCw3ICs4NjAsNyBA
QCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3RpCiAgICAgcmV0dXJuIEpT
RnVuY3Rpb246OmNyZWF0ZShleGVjLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihm
dW5jdGlvbkV4ZWN1dGFibGUpLCBleGVjLT5zY29wZSgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogZnVuY3Rpb25FeGVjdXRhYmxlKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRh
YmxlKQogewogICAgIEFTU0VSVChmdW5jdGlvbkV4ZWN1dGFibGUtPmluaGVyaXRzKEZ1bmN0aW9u
RXhlY3V0YWJsZTo6aW5mbygpKSk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTE2ODIs
NyArODY4LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZQogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHN0YXRpY19j
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSksIGV4ZWMtPnNjb3Bl
KCkpKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uRXhw
cmVzc2lvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRhYmxlQXNDZWxs
KQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uRXhwcmVzc2lvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRhYmxlQXNDZWxsKQogewogICAg
IEFTU0VSVChmdW5jdGlvbkV4ZWN1dGFibGVBc0NlbGwtPmluaGVyaXRzKEZ1bmN0aW9uRXhlY3V0
YWJsZTo6aW5mbygpKSk7CiAKQEAgLTE2OTQsMzMgKzg4MCwyMiBAQCBKU0NlbGwqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3RnVuY3RpCiAgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShl
eGVjLCBmdW5jdGlvbkV4ZWN1dGFibGUsIGV4ZWMtPnNjb3BlKCkpOwogfQogCi1zaXplX3QgREZH
X09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIHZhbHVlKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSXNPYmplY3QoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICByZXR1cm4ganNJc09iamVj
dFR5cGUoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLXNpemVfdCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbklzRnVuY3Rpb24oRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitzaXplX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Jc0Z1bmN0aW9uKEVuY29kZWRKU1ZhbHVlIHZhbHVlKQog
ewogICAgIHJldHVybiBqc0lzRnVuY3Rpb25UeXBlKEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwog
fQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mKEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiB2YWx1ZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2Yo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIHZhbHVlKQogewogICAgIHJldHVybiBqc1R5cGVTdHJp
bmdGb3JWYWx1ZShleGVjLCBKU1ZhbHVlKHZhbHVlKSkuYXNDZWxsKCk7CiB9CiAKLXZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLQot
ICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPiBiYXNlLT5zdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgQVNTRVJUKCF2bS5oZWFwLnN0b3JhZ2VB
bGxvY2F0b3IoKS5mYXN0UGF0aFNob3VsZFN1Y2NlZWQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgYmFzZS0+c2V0U3RydWN0dXJlQW5kUmVh
bGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSh2bSwgc3RydWN0dXJlKTsKLSAgICBiYXNlLT5wdXRE
aXJlY3Qodm0sIG9mZnNldCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7Ci19Ci0KLWNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENh
cGFjaXR5KEV4ZWNTdGF0ZSogZXhlYykKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE3MjksNyArOTA0LDcgQEAgY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25BbGxvY2F0ZVBybwogICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQodm0sIDAsIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSwgZmFsc2UsIDApKTsKIH0K
IAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShF
eGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBuZXdTaXplKQorY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBuZXdT
aXplKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTczOCw3ICs5MTMsNyBAQCBjaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvCiAgICAgICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5p
bml0aWFsaXplZCh2bSwgMCwgMCwgbmV3U2l6ZSwgZmFsc2UsIDApKTsKIH0KIAotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9y
YWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3Qp
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIG9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE3NDksNyArOTI0LDcgQEAgY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOwpAQCAtMTc1OSw3ICs5MzQsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJl
YWxsb2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9
CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGNlbGwpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUlu
dDMyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAt
MTc3MCw3ICs5NDUsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUludDMy
CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5lbnN1
cmVJbnQzMih2bSkuZGF0YSgpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25F
bnN1cmVEb3VibGUoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2Vs
bCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE3ODEsNyArOTU2LDcgQEAgY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25FbnN1cmVEb3VibAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJlRG91YmxlKHZtKS5kYXRhKCkpOwogfQogCi1jaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiBleGVj
LCBKU0NlbGwqIGNlbGwpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRp
Z3VvdXMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBA
IC0xNzkyLDcgKzk2Nyw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29u
dGkKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVu
c3VyZUNvbnRpZ3VvdXModm0pLmRhdGEoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUmFnZUVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwp
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJhZ2VFbnN1cmVDb250aWd1b3VzKEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTgwMyw3ICs5
NzgsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJhZ2VFbnN1cmVDCiAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5yYWdlRW5zdXJlQ29u
dGlndW91cyh2bSkuZGF0YSgpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25F
bnN1cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4MTQsNyArOTg5LDcgQEAgY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheQogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJlQXJyYXlTdG9yYWdlKHZtKSk7
CiB9CiAKLVN0cmluZ0ltcGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJvcGUoRXhl
Y1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nKQorU3RyaW5nSW1wbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25SZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xODIyLDcgKzk5Nyw3IEBAIFN0cmluZ0ltcGwqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUmVzb2wKICAgICByZXR1cm4gc3RyaW5nLT52YWx1ZShleGVjKS5p
bXBsKCk7CiB9CiAKLUpTU3RyaW5nKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJh
Y3RlclN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgY2hhcmFjdGVyKQorSlNTdHJpbmcq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYywgaW50MzJfdCBjaGFyYWN0ZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xODMwLDcgKzEw
MDUsNyBAQCBKU1N0cmluZyogREZHX09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVDCiAgICAgcmV0
dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIHN0YXRpY19jYXN0PFVDaGFyPihjaGFy
YWN0ZXIpKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09i
amVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdChFeGVj
U3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOwpAQCAtMTgzOCw3ICsxMDEzLDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld1N0cmluZwogICAgIHJldHVybiBTdHJpbmdPYmplY3Q6OmNyZWF0ZShleGVj
LCBzdHJ1Y3R1cmUsIHN0cmluZyk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25Ub1N0cmluZ09uQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK0pTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZ09uQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4NDYsNyArMTAyMSw3IEBAIEpTQ2Vs
bCogREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZ08KICAgICByZXR1cm4gSlNWYWx1ZShj
ZWxsKS50b1N0cmluZyhleGVjKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4NTQsNyArMTAyOSw3IEBAIEpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZygKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZGVjb2RlKHZhbHVlKS50b1N0cmluZyhleGVjKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbk1ha2VSb3BlMihFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBsZWZ0LCBK
U1N0cmluZyogcmlnaHQpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUy
KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGxlZnQsIEpTU3RyaW5nKiByaWdodCkKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKQEAgLTE4NjIsNyArMTAzNyw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBv
cGVyYXRpb25NYWtlUm9wZTIKICAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIGxl
ZnQsIHJpZ2h0KTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3Bl
MyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBhLCBKU1N0cmluZyogYiwgSlNTdHJpbmcqIGMp
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSogZXhl
YywgSlNTdHJpbmcqIGEsIEpTU3RyaW5nKiBiLCBKU1N0cmluZyogYykKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKQEAgLTE4NzAsNyArMTA0NSw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25N
YWtlUm9wZTMKICAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIGEsIGIsIGMpOwog
fQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JE
b3VibGUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRG
b3JEb3VibGUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIHNpemVfdCB0YWJsZUluZGV4KQogewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7CkBAIC0xODg0LDcgKzEwNTksNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkZpbmRTd2l0Y2hJCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPih0YWJs
ZS5jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCB0YWJsZUlu
ZGV4LCBKU1N0cmluZyogc3RyaW5nKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0
Y2hTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgdGFibGVJbmRleCwgSlNTdHJpbmcqIHN0
cmluZykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4OTIsMzIgKzEwNjcsMTkgQEAgY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
aGFyKj4oZXhlYy0+Y29kZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KS5jdGlGb3JWYWx1ZShzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKSkuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CiB9CiAKLWRvdWJsZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50
MzJfdCBhLCBpbnQzMl90IGIpCitkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25J
bnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQogewogICAgIHJldHVybiBmbW9kKGEsIGIpOwogfQog
Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNT
dGF0ZSogZXhlYywgaW50MzJfdCBvcDEpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBvcDEpCiB7CiAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAgICAgcmV0dXJuIEpTQzo6c3RyaW5nRnJvbUNoYXJDb2RlKGV4ZWMsIG9wMSk7
CiB9CiAKLURGR0hhbmRsZXJFbmNvZGVkIERGR19PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFu
ZGxlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICBKU1ZhbHVlIGV4
Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgQVNTRVJUKGV4Y2VwdGlvblZh
bHVlKTsKLSAgICAKLSAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBnZW5lcmljVW53aW5k
KHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgQVNTRVJUKGhhbmRsZXIuY2F0Y2hSb3V0
aW5lKTsKLSAgICByZXR1cm4gZGZnSGFuZGxlckVuY29kZWQoaGFuZGxlci5jYWxsRnJhbWUsIGhh
bmRsZXIuY2F0Y2hSb3V0aW5lKTsKLX0KLQotc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVy
dEpTVmFsdWVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitz
aXplX3QgSklUX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTE5MjYsNyAr
MTA4OCw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG8KICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKS50b1VJbnQzMihleGVjKTsKIH0KIAotc2l6ZV90
IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCitzaXplX3QgSklUX09QRVJBVElPTiBkZmdDb252
ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTE5MzQsNyArMTA5Niw3IEBAIHNpemVfdCBERkdf
T1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcCkudG9Cb29sZWFuKGV4ZWMpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gZGVi
dWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqIGV4ZWMsIHZvaWQq
IGRlYnVnSW5mb1Jhdywgdm9pZCogc2NyYXRjaCkKK3ZvaWQgSklUX09QRVJBVElPTiBkZWJ1Z09w
ZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogZGVi
dWdJbmZvUmF3LCB2b2lkKiBzY3JhdGNoKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTk3Miw3ICsx
MTM0LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcAogICAgIGRh
dGFMb2coIlxuIik7CiB9CiAKLWV4dGVybiAiQyIgdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJS
ZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK2V4dGVybiAiQyIgdm9pZCBK
SVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqIGNvZGVCbG9j
aykKIHsKICAgICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdo
aWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxkbid0CiAgICAgLy8gcmVhbGx5IGJl
IHByb2ZpdGFibGUuCkBAIC0yMDE2LDcgKzExNzgsNyBAQCBleHRlcm4gIkMiIHZvaWQgREZHX09Q
RVJBVElPTiB0cmlnZ2VyUmVvCiB9CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKLXZvaWQgREZHX09Q
RVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0ZSogZXhlYykKK3ZvaWQgSklUX09QRVJB
VElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
QEAgLTIwNzgsNyArMTI0MCw3IEBAIHZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93
KEV4ZWMKICAgICAgICAgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShj
b2RlQmxvY2spLCB2bS0+ZW5zdXJlV29ya2xpc3QoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJ
T04gdHJpZ2dlck9TUkVudHJ5Tm93KAorY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50
cnlOb3coCiAgICAgRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIGludDMy
X3Qgc3RyZWFtSW5kZXgpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC0yMTk3LDcg
KzEzNTksNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKIAogLy8g
RklYTUU6IE1ha2UgY2FsbHMgd29yayB3ZWxsLiBDdXJyZW50bHkgdGhleSdyZSBhIHB1cmUgcmVn
cmVzc2lvbi4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2
MjEKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ2FsbChFeGVjU3Rh
dGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZUTENhbGwo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIEV4ZWNTdGF0ZSogY2FsbGVyRXhlYyA9IGV4ZWMtPmNh
bGxlckZyYW1lKCk7CiAgICAgCkBAIC0yMjE3LDcgKzEzNzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZUCiAKIC8vIEZJWE1FOiBNYWtlIGNhbGxzIHdvcmsgd2Vs
bC4gQ3VycmVudGx5IHRoZXkncmUgYSBwdXJlIHJlZ3Jlc3Npb24uCiAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIxCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkZUTENvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZUTENvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgRXhlY1N0YXRlKiBjYWxsZXJFeGVjID0gZXhlYy0+Y2FsbGVyRnJhbWUoKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZp
c2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQog
CiAjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiUHV0S2luZC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM3LDI4OCArMzgs
MTI5IEBAIG5hbWVzcGFjZSBERkcgewogCiBleHRlcm4gIkMiIHsKIAotI2lmIENBTExJTkdfQ09O
VkVOVElPTl9JU19TVERDQUxMCi0jZGVmaW5lIERGR19PUEVSQVRJT04gQ0RFQ0wKLSNlbHNlCi0j
ZGVmaW5lIERGR19PUEVSQVRJT04KLSNlbmRpZgotCi0vLyBUaGVzZSB0eXBlZGVmcyBwcm92aWRl
IHR5cGVjaGVja2luZyB3aGVuIGdlbmVyYXRpbmcgY2FsbHMgb3V0IHRvIGhlbHBlciByb3V0aW5l
czsKLS8vIHRoaXMgaGVscHMgcHJldmVudCBjYWxsaW5nIGEgaGVscGVyIHJvdXRpbmUgd2l0aCB0
aGUgd3JvbmcgYXJndW1lbnRzIQotLyoKLSAgICBLZXk6Ci0gICAgVjogdm9pZAotICAgIEo6IEpT
VmFsdWUKLSAgICBQOiBwb2ludGVyICh2b2lkKikKLSAgICBDOiBKU0NlbGwqCi0gICAgQTogSlNB
cnJheSoKLSAgICBTOiBzaXplX3QKLSAgICBaOiBpbnQzMl90Ci0gICAgRDogZG91YmxlCi0gICAg
STogU3RyaW5nSW1wbCoKLSovCi10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
KCpKX0RGR09wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VBKShFeGVjU3RhdGUqLCBKU0FycmF5Kik7
Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
QVopKEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwq
KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9u
X0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Ci10eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FQ0kpKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIFN0cmluZ0ltcGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAo
KkpfREZHT3BlcmF0aW9uX0VDSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUp
OwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25f
RURBKShFeGVjU3RhdGUqLCBkb3VibGUsIEpTQXJyYXkqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VJKShFeGVjU3RhdGUqLCBTdHJpbmdJ
bXBsKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJh
dGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUpBKShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgSlNBcnJheSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSl9ERkdPcGVyYXRpb25fRUpJKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3Ry
aW5nSW1wbCopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdP
cGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
OwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25f
RUpzc1opKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgaW50MzJfdCk7Ci10eXBlZGVmIEVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSlApKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCB2b2lkKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gKCpKX0RGR09wZXJhdGlvbl9FUCkoRXhlY1N0YXRlKiwgdm9pZCopOwotdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVBQKShFeGVjU3RhdGUq
LCB2b2lkKiwgdm9pZCopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgq
Sl9ERkdPcGVyYXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKLXR5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTUykoRXhlY1N0
YXRlKiwgc2l6ZV90LCBzaXplX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSl9ERkdPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwotdHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVpJY2ZaKShFeGVj
U3RhdGUqLCBpbnQzMl90LCBJbmxpbmVDYWxsRnJhbWUqLCBpbnQzMl90KTsKLXR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaWikoRXhlY1N0YXRl
KiwgaW50MzJfdCwgaW50MzJfdCk7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNf
REZHT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJ
T04gKCpDX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci10eXBlZGVmIEpT
Q2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0Nl
bGwqKTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUND
KShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BF
UkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUljZikoRXhlY1N0YXRlKiwgSW5saW5lQ2FsbEZyYW1l
Kik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VKKShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElP
TiAoKkNfREZHT3BlcmF0aW9uX0VKc3NTdCkoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBTdHJ1Y3R1
cmUqKTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUpz
c0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwotdHlwZWRlZiBKU0NlbGwq
IERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FSnNzSnNzSnNzKShFeGVjU3RhdGUqLCBK
U1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BF
UkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMy
X3QpOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FU3Qp
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04g
KCpDX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci10eXBlZGVmIGRvdWJs
ZSBERkdfT1BFUkFUSU9OICgqRF9ERkdPcGVyYXRpb25fREQpKGRvdWJsZSwgZG91YmxlKTsKLXR5
cGVkZWYgZG91YmxlIERGR19PUEVSQVRJT04gKCpEX0RGR09wZXJhdGlvbl9aWikoaW50MzJfdCwg
aW50MzJfdCk7Ci10eXBlZGVmIGRvdWJsZSBERkdfT1BFUkFUSU9OICgqRF9ERkdPcGVyYXRpb25f
RUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgaW50MzJfdCBERkdfT1BF
UkFUSU9OICgqWl9ERkdPcGVyYXRpb25fRCkoZG91YmxlKTsKLXR5cGVkZWYgc2l6ZV90IERGR19P
UEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2Vs
bCopOwotdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0VKKShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9O
ICgqU19ERkdPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpOwotdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9u
X0opKEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdP
cGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZf
REZHT3BlcmF0aW9uX0VPWkQpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwgZG91Ymxl
KTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRU9aSikoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZv
aWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwq
KTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNJY2YpKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSopOwotdHlwZWRlZiB2b2lkIERGR19P
UEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0NJY2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpT
Q2VsbCosIElubGluZUNhbGxGcmFtZSopOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpW
X0RGR09wZXJhdGlvbl9FQ0pKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJh
dGlvbl9FQ1opKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOwotdHlwZWRlZiB2b2lkIERG
R19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpT
Q2VsbCopOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FSkNJ
KShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwotdHlw
ZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FSkpKKShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVk
ZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUpQUCkoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIHZvaWQqLCB2b2lkKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElP
TiAoKlZfREZHT3BlcmF0aW9uX0VQWkopKEV4ZWNTdGF0ZSosIHZvaWQqLCBpbnQzMl90LCBFbmNv
ZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9u
X1cpKFdhdGNocG9pbnRTZXQqKTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZH
T3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgq
UF9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdHlwZWRlZiBjaGFyKiBE
RkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRUpTKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0
aW9uX0VPKShFeGVjU3RhdGUqLCBKU09iamVjdCopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFU
SU9OICgqUF9ERkdPcGVyYXRpb25fRU9TKShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCk7
Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FT1opKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCk7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04g
KCpQX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwotdHlwZWRl
ZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVMpKEV4ZWNTdGF0ZSosIHNp
emVfdCk7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU0pz
cykoRXhlY1N0YXRlKiwgc2l6ZV90LCBKU1N0cmluZyopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BF
UkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0KShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKLXR5
cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdEopKEV4ZWNTdGF0
ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJB
VElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdFBTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lk
Kiwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9u
X0VTdFNTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVfdCk7Ci10eXBlZGVm
IGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3RaKShFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqLCBpbnQzMl90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZH
T3BlcmF0aW9uX0VaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCk7Ci10eXBlZGVmIFN0
cmluZ0ltcGwqIERGR19PUEVSQVRJT04gKCpJX0RGR09wZXJhdGlvbl9FSnNzKShFeGVjU3RhdGUq
LCBKU1N0cmluZyopOwotdHlwZWRlZiBKU1N0cmluZyogREZHX09QRVJBVElPTiAoKkpzc19ERkdP
cGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwotSlNDZWxsKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqLCBpbnQzMl90KSAgV1RGX0lO
VEVSTkFMOyAKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNv
ZGUoRXhlY1N0YXRlKiwgaW50MzJfdCkgIFdURl9JTlRFUk5BTDsgCiAKIC8vIFRoZXNlIHJvdXRp
bmVzIGFyZSBwcm92aWRlIGNhbGxiYWNrcyBvdXQgdG8gQysrIGltcGxlbWVudGF0aW9ucyBvZiBv
cGVyYXRpb25zIHRvbyBjb21wbGV4IHRvIEpJVC4KLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOwotSlND
ZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqIGNvbnN0cnVjdG9yLCBpbnQzMl90IGlubGluZUNhcGFjaXR5KSBXVEZfSU5URVJOQUw7Ci1F
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpcyhFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpc1N0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RG
X0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZh
bChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFByb3BlcnR5KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvcGVydHkpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludChFeGVjU3RhdGUqLCBKU0FycmF5Kiwg
aW50MzJfdCkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeVZhbFN0cmluZ0ludChFeGVjU3RhdGUqLCBKU1N0cmluZyosIGludDMyX3QpIFdU
Rl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJ
ZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsK
LUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLUVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXplKEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIFN0cmluZ0ltcGwqKTsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25HZW5lcmljSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5j
b2RlZEpTVmFsdWUpOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25DYWxs
Q3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25DYWxsR2V0dGVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdU
Rl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9Qcmlt
aXRpdmUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdm9p
ZCosIHNpemVfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVfdCkgV1RG
X0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdFbXB0eUFycmF5KEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90
KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJh
eVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aE9uZUFyZ3VtZW50
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6ZShFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
SW50MzJBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVk
SlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdV
aW50OEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lO
VEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aE9u
ZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5U
RVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5
V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhPbmVB
cmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVS
TkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhTaXpl
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGlu
dDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3Rmxv
YXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRK
U1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zs
b2F0NjRBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9J
TlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0
aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZf
SU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4
cChFeGVjU3RhdGUqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkg
V1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0
cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHks
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
QmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGlu
ZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91
YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGlu
dDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFsdWUpIFdURl9JTlRF
Uk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJheSopIFdURl9JTlRF
Uk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91
YmxlKEV4ZWNTdGF0ZSosIGRvdWJsZSB2YWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKLUVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwg
SlNBcnJheSopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZf
SU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4
ZWMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCop
IFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikg
V1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2Vs
bCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJO
QUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9w
dGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1w
bCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwq
KSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25DcmVhdGVUaGlzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBjb25zdHJ1Y3Rv
ciwgaW50MzJfdCBpbmxpbmVDYXBhY2l0eSkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Ub1RoaXNTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MSkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25W
YWx1ZUFkZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWwoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0
eSkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCeVZhbENlbGwoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFBy
b3BlcnR5KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkdldEJ5VmFsQXJyYXlJbnQoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QpIFdURl9J
TlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxT
dHJpbmdJbnQoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0FycmF5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHZvaWQqLCBzaXplX3QpIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgc2l6ZV90LCBzaXplX3QpIFdURl9JTlRFUk5BTDsKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RW1wdHlBcnJheShFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFM
OworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoU2l6ZShFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdJbnQxNkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdJbnQxNkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29k
ZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0ludDMyQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZf
SU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlXaXRo
T25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9J
TlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhBcnJheVdpdGhT
aXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhBcnJheVdpdGhPbmVBcmd1bWVudChFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhTaXplKEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50
MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50
MzJBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNW
YWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9h
dDMyQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5U
RVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdpdGhP
bmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lO
VEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRo
U2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhPbmVBcmd1bWVudChF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiwg
dm9pZCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9J
TlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsK
K3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRF
Uk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91
bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09i
amVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lO
VEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25k
QXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBk
b3VibGUgdmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKSBXVEZfSU5URVJOQUw7CitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaERvdWJsZShFeGVjU3RhdGUq
LCBkb3VibGUgdmFsdWUsIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZf
SU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9w
QW5kUmVjb3Zlckxlbmd0aChFeGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOworRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIC8vIFRoZXNlIGNvbXBhcmlzb25zIHJl
dHVybiBhIGJvb2xlYW4gd2l0aGluIGEgc2l6ZV90IHN1Y2ggdGhhdCB0aGUgdmFsdWUgaXMgemVy
byBleHRlbmRlZCB0byBmaWxsIHRoZSByZWdpc3Rlci4KLXNpemVfdCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlZ0V4cFRlc3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVS
TkFMOwotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikg
V1RGX0lOVEVSTkFMOwotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NF
cShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25D
b21wYXJlR3JlYXRlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElP
TiBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNpemVf
dCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7
CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0KEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVS
TkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwogI2lmIFVTRShKU1ZBTFVFNjQpCi1FbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqLCBK
U0NlbGwqIGxlZnQsIEpTQ2VsbCogcmlnaHQpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFMOwogI2Vsc2UKLXNpemVfdCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqLCBKU0NlbGwqIGxl
ZnQsIEpTQ2VsbCogcmlnaHQpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqLCBKU0NlbGwqIGxlZnQsIEpTQ2VsbCog
cmlnaHQpIFdURl9JTlRFUk5BTDsKICNlbmRpZgotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZH
X09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFM
OwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqKSBX
VEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Ns
b3N1cmVDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1jaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lO
VEVSTkFMOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24o
RXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBJbmxp
bmVDYWxsRnJhbWUqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
VGVhck9mZkFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJO
QUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZklubGluZWRBcmd1bWVudHMo
RXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKikgV1RGX0lOVEVS
TkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudHNM
ZW5ndGgoRXhlY1N0YXRlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRJbmxpbmVkQXJndW1lbnRCeVZhbChFeGVjU3RhdGUq
LCBpbnQzMl90LCBJbmxpbmVDYWxsRnJhbWUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50QnlWYWwoRXhlY1N0
YXRlKiwgaW50MzJfdCwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uTm9DaGVjayhFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZf
SU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0
aW9uKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbkV4cHJlc3Npb24oRXhlY1N0YXRlKiwgSlNDZWxsKikg
V1RGX0lOVEVSTkFMOwotZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhp
bnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVy
YXRpb25Jc09iamVjdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwot
c2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSkg
V1RGX0lOVEVSTkFMOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZihFeGVj
U3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBT
dHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRo
SW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgc2l6ZV90
IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVh
bGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHko
RXhlY1N0YXRlKiwgSlNPYmplY3QqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVJbnQzMihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKLWNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlRG91YmxlKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCopOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzKEV4ZWNT
dGF0ZSosIEpTQ2VsbCopOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SYWdlRW5zdXJl
Q29udGlndW91cyhFeGVjU3RhdGUqLCBKU0NlbGwqKTsKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotU3RyaW5nSW1w
bCogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlUm9wZShFeGVjU3RhdGUqLCBKU1N0cmlu
ZyopOwotSlNTdHJpbmcqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKEV4ZWNTdGF0ZSosIGludDMyX3QpOwotCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgU3RydWN0dXJlKik7Ci1K
U0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmdPbkNlbGwoRXhlY1N0YXRlKiwg
SlNDZWxsKik7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmcoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1h
a2VSb3BlMihFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci1KU0NlbGwqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJp
bmcqLCBKU1N0cmluZyopOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNo
SW1tVGFyZ2V0Rm9yRG91YmxlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QgdGFi
bGVJbmRleCk7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVj
U3RhdGUqLCBzaXplX3QgdGFibGVJbmRleCwgSlNTdHJpbmcqKTsKK3NpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcUNlbGwoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwor
c2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdU
Rl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3RpdmF0
aW9uKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25DcmVhdGVBcmd1bWVudHMoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUlubGluZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwg
SW5saW5lQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblRlYXJPZmZBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lO
VEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZJbmxpbmVkQXJndW1l
bnRzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSopIFdURl9J
TlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1l
bnRzTGVuZ3RoKEV4ZWNTdGF0ZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0SW5saW5lZEFyZ3VtZW50QnlWYWwoRXhlY1N0
YXRlKiwgaW50MzJfdCwgSW5saW5lQ2FsbEZyYW1lKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudEJ5VmFsKEV4
ZWNTdGF0ZSosIGludDMyX3QsIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbk5vQ2hlY2soRXhlY1N0YXRlKiwgSlNDZWxsKikg
V1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdG
dW5jdGlvbihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCopIFdURl9JTlRFUk5BTDsKK2RvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbklu
dHMoaW50MzJfdCwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uSXNPYmplY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5B
TDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklzRnVuY3Rpb24oRW5jb2RlZEpTVmFs
dWUpIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2Yo
RXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0
YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFM
OworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZl
UHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqLCBKU09iamVjdCop
IFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1
dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVf
dCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVu
c3VyZUludDMyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25FbnN1cmVEb3VibGUoRXhlY1N0YXRlKiwgSlNDZWxsKik7CitjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlNDZWxsKik7CitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJhZ2VFbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSos
IEpTQ2VsbCopOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3Jh
Z2UoRXhlY1N0YXRlKiwgSlNDZWxsKik7CitTdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7CitKU1N0cmluZyogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJf
dCk7CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QoRXhl
Y1N0YXRlKiwgSlNTdHJpbmcqLCBTdHJ1Y3R1cmUqKTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpb25Ub1N0cmluZ09uQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK0pTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNTdGF0ZSosIEpT
U3RyaW5nKiwgSlNTdHJpbmcqKTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtl
Um9wZTMoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7CitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KTsKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUlu
ZGV4LCBKU1N0cmluZyopOwogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAvLyBGSVhNRTogTWFrZSBj
YWxscyB3b3JrIHdlbGwuIEN1cnJlbnRseSB0aGV5J3JlIGEgcHVyZSByZWdyZXNzaW9uLgogLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GVExDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRF
Uk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ29uc3RydWN0
KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRlRMQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZUTENvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5U
RVJOQUw7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKLS8vIFRoaXMgbWV0aG9kIGlzIHVz
ZWQgdG8gbG9va3VwIGFuIGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24s
IHdoaWNoIGlzCi0vLyB0aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBv
dXQgdG8gb25lIG9mIHRoZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92ZS4KLQotLy8gQWNjb3JkaW5n
IHRvIEMrKyBydWxlcywgYSB0eXBlIHVzZWQgZm9yIHRoZSByZXR1cm4gc2lnbmF0dXJlIG9mIGZ1
bmN0aW9uIHdpdGggQyBsaW5rYWdlIChpLmUuCi0vLyAnZXh0ZXJuICJDIicpIG5lZWRzIHRvIGJl
IFBPRDsgaGVuY2UgcHV0dGluZyBhbnkgY29uc3RydWN0b3JzIGludG8gaXQgY291bGQgY2F1c2Ug
ZWl0aGVyIGNvbXBpbGVyCi0vLyB3YXJuaW5ncywgb3Igd29yc2UsIGEgY2hhbmdlIGluIHRoZSBB
QkkgdXNlZCB0byByZXR1cm4gdGhlc2UgdHlwZXMuCi1zdHJ1Y3QgREZHSGFuZGxlciB7Ci0gICAg
dW5pb24gVW5pb24gewotICAgICAgICBzdHJ1Y3QgU3RydWN0IHsKLSAgICAgICAgICAgIEV4ZWNT
dGF0ZSogZXhlYzsKLSAgICAgICAgICAgIHZvaWQqIGhhbmRsZXI7Ci0gICAgICAgIH0gczsKLSAg
ICAgICAgdWludDY0X3QgZW5jb2RlZDsKLSAgICB9IHU7Ci19OwotCi1pbmxpbmUgREZHSGFuZGxl
ciBjcmVhdGVERkdIYW5kbGVyKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogaGFuZGxlcikKLXsKLSAg
ICBERkdIYW5kbGVyIHJlc3VsdDsKLSAgICByZXN1bHQudS5zLmV4ZWMgPSBleGVjOwotICAgIHJl
c3VsdC51LnMuaGFuZGxlciA9IGhhbmRsZXI7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotI2lm
IENQVShYODZfNjQpCi10eXBlZGVmIERGR0hhbmRsZXIgREZHSGFuZGxlckVuY29kZWQ7Ci1pbmxp
bmUgREZHSGFuZGxlckVuY29kZWQgZGZnSGFuZGxlckVuY29kZWQoRXhlY1N0YXRlKiBleGVjLCB2
b2lkKiBoYW5kbGVyKQotewotICAgIHJldHVybiBjcmVhdGVERkdIYW5kbGVyKGV4ZWMsIGhhbmRs
ZXIpOwotfQotI2Vsc2UKLXR5cGVkZWYgdWludDY0X3QgREZHSGFuZGxlckVuY29kZWQ7Ci1pbmxp
bmUgREZHSGFuZGxlckVuY29kZWQgZGZnSGFuZGxlckVuY29kZWQoRXhlY1N0YXRlKiBleGVjLCB2
b2lkKiBoYW5kbGVyKQotewotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihERkdIYW5kbGVyOjpV
bmlvbikgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgREZHSGFuZGxlcl9Vbmlvbl9pc182NGJpdCk7Ci0g
ICAgcmV0dXJuIGNyZWF0ZURGR0hhbmRsZXIoZXhlYywgaGFuZGxlcikudS5lbmNvZGVkOwotfQot
I2VuZGlmCi1ERkdIYW5kbGVyRW5jb2RlZCBERkdfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXIoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotCiAvLyBUaGVzZSBvcGVyYXRpb25zIGlt
cGxlbWVudCB0aGUgaW1wbGljaXRseSBjYWxsZWQgVG9JbnQzMiBhbmQgVG9Cb29sZWFuIGNvbnZl
cnNpb25zIGZyb20gRVM1LgogLy8gVGhpcyBjb252ZXJzaW9uIHJldHVybnMgYW4gaW50MzJfdCB3
aXRoaW4gYSBzaXplX3Qgc3VjaCB0aGF0IHRoZSB2YWx1ZSBpcyB6ZXJvIGV4dGVuZGVkIHRvIGZp
bGwgdGhlIHJlZ2lzdGVyLgotc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVU
b0ludDMyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1zaXplX3Qg
REZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gZGZnQ29udmVy
dEpTVmFsdWVUb0ludDMyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7
CitzaXplX3QgSklUX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogCi12b2lkIERGR19PUEVSQVRJT04g
ZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqLCB2b2lkKiwg
dm9pZCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblBy
aW50U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lkKikgV1RGX0lOVEVS
TkFMOwogCi12b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVC
bG9jayopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6
YXRpb25Ob3coQ29kZUJsb2NrKikgV1RGX0lOVEVSTkFMOwogCiAjaWYgRU5BQkxFKEZUTF9KSVQp
Ci12b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjU3RhdGUqKSBXVEZfSU5U
RVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhFeGVjU3RhdGUq
LCBpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIGludDMyX3Qgc3RyZWFtSW5kZXgpIFdURl9JTlRFUk5B
TDsKK3ZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0ZSopIFdURl9J
TlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KEV4ZWNTdGF0
ZSosIGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBzdHJlYW1JbmRleCkgV1RGX0lOVEVS
TkFMOwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCiB9IC8vIGV4dGVybiAiQyIKIAotaW5s
aW5lIFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9y
VHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQoraW5saW5lIFBfSklUT3BlcmF0aW9uX0VTdFogb3Bl
cmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQog
ewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgVHlwZUludDg6CkBAIC0zNDcsNyArMTg5
LDcgQEAgaW5saW5lIFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uTmV3VAogICAgIHJldHVy
biAwOwogfQogCi1pbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0SiBvcGVyYXRpb25OZXdUeXBlZEFy
cmF5V2l0aE9uZUFyZ3VtZW50Rm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQoraW5saW5lIFBf
SklUT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudEZv
clR5cGUoVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBj
YXNlIFR5cGVJbnQ4OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3Rl
clNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0
ZXJTZXQuaAkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdSZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxNyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgREZHUmVnaXN0
ZXJTZXRfaAotI2RlZmluZSBERkdSZWdpc3RlclNldF9oCi0KLSNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiRlBSSW5mby5oIgotI2lu
Y2x1ZGUgIkdQUkluZm8uaCIKLSNpbmNsdWRlIDx3dGYvQml0bWFwLmg+Ci0KLW5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRvdGFsTnVtYmVy
T2ZSZWdpc3RlcnMgPQotICAgIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnM7Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkJ5dGVz
SW5SZWdpc3RlclNldCA9Ci0gICAgKHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMgKyA3KSA+PiAzOwot
Ci10eXBlZGVmIHVpbnQ4X3QgUmVnaXN0ZXJTZXRQT0RbbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJT
ZXRdOwotCi1jbGFzcyBSZWdpc3RlclNldCB7Ci1wdWJsaWM6Ci0gICAgUmVnaXN0ZXJTZXQoKQot
ICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJT
ZXQ7IGktLTspCi0gICAgICAgICAgICBtX3NldFtpXSA9IDA7Ci0gICAgfQotICAgIAotICAgIFJl
Z2lzdGVyU2V0KGNvbnN0IFJlZ2lzdGVyU2V0UE9EJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0OyBpLS07KQotICAgICAg
ICAgICAgbV9zZXRbaV0gPSBvdGhlcltpXTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgUmVnaXN0
ZXJTZXRQT0QmIGFzUE9EKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KLSAgICAKLSAgICB2b2lk
IGNvcHlJbmZvKFJlZ2lzdGVyU2V0UE9EJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0OyBpLS07KQotICAgICAg
ICAgICAgb3RoZXJbaV0gPSBtX3NldFtpXTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoR1BS
UmVnIHJlZykKLSAgICB7Ci0gICAgICAgIHNldEJpdChHUFJJbmZvOjp0b0luZGV4KHJlZykpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIHNldEdQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAg
ewotICAgICAgICBBU1NFUlQoaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7Ci0g
ICAgICAgIHNldEJpdChpbmRleCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xlYXIoR1BSUmVn
IHJlZykKLSAgICB7Ci0gICAgICAgIGNsZWFyQml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgZ2V0KEdQUlJlZyByZWcpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gZ2V0Qml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAotICAg
IGJvb2wgZ2V0R1BSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0
dXJuIGdldEJpdChpbmRleCk7Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVybiB0aGUgaW5kZXgn
dGggZnJlZSBHUFIuCi0gICAgR1BSUmVnIGdldEZyZWVHUFIodW5zaWduZWQgaW5kZXggPSAwKSBj
b25zdAotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmICghZ2V0R1BSQnlJbmRleChpKSAmJiAh
aW5kZXgtLSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBzZXQoRlBSUmVnIHJlZykKLSAgICB7Ci0gICAgICAgIHNldEJpdChHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgc2V0RlBSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChpbmRleCA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgc2V0Qml0
KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaW5kZXgpOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGNsZWFyKEZQUlJlZyByZWcpCi0gICAgewotICAgICAgICBjbGVhckJpdChHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAot
ICAgIGJvb2wgZ2V0KEZQUlJlZyByZWcpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZ2V0
Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCBnZXRGUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMpOwotICAgICAgICByZXR1cm4gZ2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsg
aW5kZXgpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAg
ICB2b2lkIHNldEJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICBzZXQoQmFu
a0luZm86OnRvUmVnaXN0ZXIoaW5kZXgpKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQmFua0luZm8+Ci0gICAgYm9vbCBnZXRCeUluZGV4KHVuc2lnbmVkIGluZGV4KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGdldChCYW5rSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOwotICAg
IH0KLSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZlNldEdQUnMoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmICghZ2V0Qml0
KGkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVzdWx0Kys7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWdu
ZWQgbnVtYmVyT2ZTZXRGUFJzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3Vs
dCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAoIWdldEJpdChHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycyArIGkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVz
dWx0Kys7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0g
ICAgdW5zaWduZWQgbnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSBjb25zdAotICAgIHsKLSAgICAgICAg
dW5zaWduZWQgcmVzdWx0ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdG90YWxOdW1i
ZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFnZXRCaXQoaSkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXN1bHQrKzsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgdm9pZCBz
ZXRCaXQodW5zaWduZWQgaSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpIDwgdG90YWxOdW1iZXJP
ZlJlZ2lzdGVycyk7Ci0gICAgICAgIG1fc2V0W2kgPj4gM10gfD0gKDEgPDwgKGkgJiA3KSk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgY2xlYXJCaXQodW5zaWduZWQgaSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpIDwgdG90YWxOdW1iZXJPZlJlZ2lzdGVycyk7Ci0gICAgICAgIG1fc2V0W2kgPj4g
M10gJj0gfigxIDw8IChpICYgNykpOwotICAgIH0KLSAgICAKLSAgICBib29sIGdldEJpdCh1bnNp
Z25lZCBpKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9mUmVn
aXN0ZXJzKTsKLSAgICAgICAgcmV0dXJuICEhKG1fc2V0W2kgPj4gM10gJiAoMSA8PCAoaSAmIDcp
KSk7Ci0gICAgfQotICAgIAotICAgIFJlZ2lzdGVyU2V0UE9EIG1fc2V0OwotfTsKLQotfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkgLT4gc28gaWYg
REZHIGlzIGRpc2FibGVkCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotLy8g
RGVmaW5lIFJlZ2lzdGVyU2V0UE9EIHRvIHNvbWV0aGluZyB0aGF0IGlzIGEgUE9ELCBidXQgaXMg
b3RoZXJ3aXNlIHVzZWxlc3MsCi0vLyB0byBtYWtlIGl0IGVhc2llciB0byByZWZlciB0byB0aGlz
IHR5cGUgaW4gY29kZSB0aGF0IG1heSBiZSBjb21waWxlZCB3aGVuCi0vLyB0aGUgREZHIGlzIGRp
c2FibGVkLgotCi1zdHJ1Y3QgUmVnaXN0ZXJTZXRQT0QgeyB9OwotCi19IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotI2VuZGlmIC8vIERGR1Jl
Z2lzdGVyU2V0X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2gu
Y3BwCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jl
cGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0MTggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiREZHUmVwYXRjaC5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQp
Ci0KLSNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJDYWxsRnJhbWVJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAi
REZHU3BlY3VsYXRpdmVKSVQuaCIKLSNpbmNsdWRlICJERkdUaHVua3MuaCIKLSNpbmNsdWRlICJH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVk
ZSAiT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKLSNp
bmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxp
bmVzLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKLQotc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2Nr
KiBjb2RlYmxvY2ssIENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgbmV3Q2FsbGVl
RnVuY3Rpb24pCi17Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVibG9jayk7
Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOwotfQot
Ci1zdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sIGJv
b2wgY29tcGFjdCkKLXsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2Nr
KTsKLQotICAgIC8vIE9ubHkgb3B0aW1pemUgb25jZSEKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHNsb3dQYXRoRnVuY3Rpb24pOwotCi0gICAg
Ly8gUGF0Y2ggdGhlIHN0cnVjdHVyZSBjaGVjayAmIHRoZSBvZmZzZXQgb2YgdGhlIGxvYWQuCi0g
ICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRh
TGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNr
SW1tVG9DYWxsKSwgc3RydWN0dXJlKTsKLSAgICByZXBhdGNoQnVmZmVyLnNldExvYWRJbnN0cnVj
dGlvbklzQWN0aXZlKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5jb252ZXJ0aWJsZUxvYWRB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdG9yYWdlTG9hZCksIGlzT3V0
T2ZMaW5lT2Zmc2V0KG9mZnNldCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGNvbXBh
Y3QpCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkp
OwotICAgIGVsc2UKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNl
dCkpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBpZiAoY29tcGFjdCkgewotICAgICAg
ICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFM
YWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2Fk
T3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFi
ZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExv
YWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvVGFnTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zm
c2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Q
YXlsb2FkTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpOwotICAgIH0KLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0
aW9uQ2hlY2soCi0gICAgSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIE1hY3Jv
QXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBH
UFJSZWcgc2NyYXRjaEdQUikKLXsKLSAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBzdHJ1
Y3R1cmUgJiYgc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgp
KSB7Ci0gICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3R1YkluZm8u
YWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLSNpZiBERkdfRU5BQkxFKEpJVF9BU1NFUlQpCi0g
ICAgICAgIC8vIElmIHdlIGV4ZWN1dGUgdGhpcyBjb2RlLCB0aGUgb2JqZWN0IG11c3QgaGF2ZSB0
aGUgc3RydWN0dXJlIHdlIGV4cGVjdC4gQXNzZXJ0Ci0gICAgICAgIC8vIHRoaXMgaW4gZGVidWcg
bW9kZXMuCi0gICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9i
amVjdCksIHNjcmF0Y2hHUFIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IGpp
dC5icmFuY2hQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSkpOwotICAgICAgICBqaXQuYnJlYWtwb2ludCgpOwotICAgICAgICBvay5saW5rKCZq
aXQpOwotI2VuZGlmCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZCgKLSAgICAgICAgaml0LmJyYW5jaFB0cigKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOwotfQotCi1zdGF0
aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNWYWx1ZSBwcm90b3R5
cGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0g
ICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsK
LSAgICAKLSAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3RvdHlw
ZS5hc0NlbGwoKSwgcHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBz
dHViSW5mbywgaml0LAotICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotfQotCi1z
dGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
dGFyZ2V0KQotewotICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFi
bGVCcmFuY2hQdHJXaXRoUGF0Y2goKSkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VX
aXRoSnVtcCgKLSAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFu
Y2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAt
KGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKSksCi0gICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKLSAgICAgICAgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwo
dGFyZ2V0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlU2NyYXRjaChNYWNyb0Fzc2Vt
YmxlciYgc3R1YkppdCwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYg
ZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAgICBpZiAo
bmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7
Ci0gICAgICAgIAotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIAot
ICAgICAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgaGVyZSwgc28gd2UgY2FuIHBvcCBzY3JhdGNo
R1BSLCBhbmQgdGhlbiBqdW1wIGJhY2suCi0gICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZzdHVi
Sml0KTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOwotICAgICAg
ICAKLSAgICAgICAgZmFpbCA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLX0KLQotc3RhdGljIHZvaWQg
bGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzLCBDb2Rl
TG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVn
aW4pCi17Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdWNjZXNzTGFiZWwpOwotICAg
ICAgICAKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKLSAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgZGlyZWN0bHkgYmFjayB0byBub3JtYWwgcGF0
aAotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBzbG93Q2FzZUJlZ2luKTsKLX0K
LQotc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVmZmVy
LCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWws
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMpCi17Ci0gICAgbGlua1Jlc3Rv
cmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFp
bCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xv
d0Nhc2UpKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hh
aW4qIGNoYWluLCBzaXplX3QgY291bnQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9u
TGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUp
Ci17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlciBzdHVi
Sml0OwotICAgICAgICAKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
R1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
ZGZnLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycyku
Z2V0RnJlZUdQUigpOwotICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSAg
ICAKLSAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNo
R1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICBzY3JhdGNoR1BSID0gU3Bl
Y3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRU
YWdHUFIpOwotI2VuZGlmCi0gICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKLSAgICAg
ICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgIAotICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOwotICAgIAotICAgIFN0cnVj
dHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOwotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAg
ICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29r
dXAoZXhlYykpOwotICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAg
ICAgICBwcm90b09iamVjdCwgcHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpLCBleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCi0gICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0
Y2hHUFIpOwotICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOwotICAgIH0KLSAgICAK
LSAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIHN0dWJKaXQubG9hZDY0KHByb3RvT2JqZWN0LT5sb2NhdGlvbkZvck9mZnNldChvZmZz
ZXQpLCByZXN1bHRHUFIpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1Ykpp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0LT5sb2NhdGlv
bkZvck9mZnNldChvZmZzZXQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgc3R1YkppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICBz
dHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRH
UFIpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3Rv
T2JqZWN0LT5idXR0ZXJmbHlBZGRyZXNzKCksIHJlc3VsdEdQUik7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0
R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikpLCByZXN1bHRHUFIpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1
dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdH
UFIpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1
bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
cGF5bG9hZCkpLCByZXN1bHRHUFIpOwotI2VuZGlmCi0gICAgfQotCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKLSAgICAKLSAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1
YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZh
aWx1cmVDYXNlcyk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHVi
Sml0LCBleGVjLT5jb2RlQmxvY2soKSk7Ci0gICAgCi0gICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBh
dGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNh
c2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOwotICAgIAotICAgIHN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAg
ICAgICAoIkRGRyBwcm90b3R5cGUgY2hhaW4gYWNjZXNzIHN0dWIgZm9yICVzLCByZXR1cm4gcG9p
bnQgJXAiLAotICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgp
LCBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotfQotCi1zdGF0aWMgYm9vbCB0
cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICAvLyBGSVhNRTogV3JpdGUgYSB0ZXN0IHRo
YXQgcHJvdmVzIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lvbiBoZXJlIGp1c3QKLSAgICAv
LyBsaWtlIHRoZSBpbnRlcnByZXRlciBkb2VzLCB0aGVuIGFkZCBhIGNoZWNrIGZvciByZWN1cnNp
b24uCi0KLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIAotICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVl
KSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
ZGZnLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIEdQUlJlZyByZXN1
bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRh
Z0dQUik7Ci0jZW5kaWYKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0
RnJlZUdQUigpOwotICAgICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7Ci0g
ICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OwotICAgICAgICAKLSAgICAg
ICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgewotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgICAgICBzY3JhdGNoR1BSID0g
U3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCByZXN1
bHRUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7
Ci0gICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0g
ICAgICAgCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7IAotICAgICAg
ICBzdHViSml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVj
dHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgZmFpbHVy
ZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwotICAg
ICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEluZGV4
aW5nU2hhcGVNYXNrKSkpOwotICAgICAgICAKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMCkpKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQub3I2NChHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0jZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgcmVz
dWx0R1BSKTsKLSAgICAgICAgc3R1YkppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIo
MHhmZmZmZmZmZiksIHJlc3VsdFRhZ0dQUik7IC8vIEpTVmFsdWU6OkludDMyVGFnCi0jZW5kaWYK
LQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwotICAgICAgICAK
LSAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
LCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAKLSAg
ICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBjb2RlQmxvY2spOwot
ICAgICAgICAKLSAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9S
ZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0g
ICAgICAgIAotICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9S
X0RGR19TVFVCKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBH
ZXRCeUlkIGFycmF5IGxlbmd0aCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAg
ICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7
Ci0gICAgICAgIAotICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2Nr
KTsKLSAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHVi
SW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Ci0g
ICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgLy8gRklYTUU6
IHNob3VsZCBzdXBwb3J0IGxlbmd0aCBhY2Nlc3MgZm9yIFN0cmluZy4KLQotICAgIC8vIEZJWE1F
OiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCi0gICAgaWYgKCFiYXNlVmFs
dWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU0NlbGwqIGJhc2VDZWxs
ID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNl
bGwtPnN0cnVjdHVyZSgpOwotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNo
ZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gT3B0aW1pemUgc2VsZiBh
Y2Nlc3MuCi0gICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKLSAgICAgICAg
aWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQotICAgICAgICAgICAgfHwgIU1hY3JvQXNzZW1i
bGVyOjppc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRv
UGF0Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKSB7Ci0gICAgICAgICAgICByZXBh
dGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9u
R2V0QnlJZEJ1aWxkTGlzdCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1
Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QsIHRy
dWUpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICAvLyBGSVhNRTogb3B0aW1pemUgZ2V0dGVycyBhbmQgc2V0dGVy
cwotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgp
OwotICAgIHNpemVfdCBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nl
c3MoZXhlYywgYmFzZVZhbHVlLCBzbG90LnNsb3RCYXNlKCksIHByb3BlcnR5TmFtZSwgb2Zmc2V0
KTsKLSAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1
cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgIAotICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFj
Y2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBz
dHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSks
IHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIoY29kZUJsb2NrKTsKLSAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1
YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5
SWRCdWlsZExpc3QpOwotICAgIAotICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkQ2hhaW4oKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBj
b3VudCwgdHJ1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgcmVwYXRjaEdldEJ5SUQo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKLXsKLSAgICBib29sIGNhY2hlZCA9IHRyeUNhY2hlR2V0QnlJRChleGVjLCBiYXNl
VmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pOwotICAgIGlmICghY2FjaGVkKQot
ICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKLX0KLQotc3RhdGljIGJvb2wgZ2V0UG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0KAotICAgIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QqJiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGludCYgbGlzdEluZGV4LAotICAgIENv
ZGVMb2NhdGlvbkxhYmVsJiBzbG93Q2FzZSkKLXsKLSAgICBzbG93Q2FzZSA9IHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nl
c3NfdW5zZXQpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5l
KTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCgpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0
KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMCwgZmFsc2UpOwotICAgICAgICBsaXN0SW5kZXgg
PSAwOwotICAgIH0gZWxzZSBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5
X2lkX3NlbGYpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5l
KTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIEpJVFN0
dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoc2xvd0Nhc2UpLCBzdHViSW5mby51
LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwotICAgICAgICBz
dHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSwg
dHJ1ZSk7Ci0gICAgICAgIGxpc3RJbmRleCA9IDE7Ci0gICAgfSBlbHNlIGlmIChzdHViSW5mby5h
Y2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4pIHsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoISFzdHViSW5mby5zdHViUm91dGluZSk7Ci0gICAgICAgIHNsb3dDYXNlID0gQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1YlJv
dXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCks
IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpLCB0cnVlKTsKLSAgICAgICAgc3R1
YkluZm8uc3R1YlJvdXRpbmUuY2xlYXIoKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRT
ZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEsIGZhbHNlKTsKLSAgICAgICAgbGlz
dEluZGV4ID0gMTsKLSAgICB9IGVsc2UgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5m
by5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0KTsKLSAgICAgICAgcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0
dXJlTGlzdDsKLSAgICAgICAgbGlzdEluZGV4ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Qu
bGlzdFNpemU7Ci0gICAgICAgIHNsb3dDYXNlID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGxpc3RJbmRleCA9PSBQT0xZTU9SUEhJQ19M
SVNUX0NBQ0hFX1NJWkUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBSRUxFQVNF
X0FTU0VSVChsaXN0SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpJVFN0dWJSb3V0
aW5lKiBzdHViUm91dGluZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0KTsKLSAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICBpZiAoc3R1YkluZm8udS5nZXRCeUlkU2VsZkxp
c3QuZGlkU2VsZlBhdGNoaW5nKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAotICAg
ICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAg
ICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksCi0g
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHJlcGxhY2VXaXRoSnVtcChyZXBh
dGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotfQotCi1z
dGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBi
YXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoIWJhc2VWYWx1ZS5p
c0NlbGwoKQotICAgICAgICB8fCAhc2xvdC5pc0NhY2hlYWJsZSgpCi0gICAgICAgIHx8ICFiYXNl
VmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
ZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgSlNDZWxs
KiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBpZiAoc2xvdC5zbG90QmFzZSgp
ID09IGJhc2VWYWx1ZSkgewotICAgICAgICBpZiAoIXN0dWJJbmZvLnBhdGNoLmRmZy5yZWdpc3Rl
cnNGbHVzaGVkKSB7Ci0gICAgICAgICAgICAvLyBXZSBjYW5ub3QgZG8gYXMgbXVjaCBpbmxpbmUg
Y2FjaGluZyBpZiB0aGUgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQgcHJpb3IgdG8gdGhpcyBH
ZXRCeUlkLiBJbiBwYXJ0aWN1bGFyLAotICAgICAgICAgICAgLy8gbm9uLVZhbHVlIGNhY2hlZCBw
cm9wZXJ0aWVzIHJlcXVpcmUgcGxhbnRpbmcgY2FsbHMsIHdoaWNoIHJlcXVpcmVzIHJlZ2lzdGVy
cyB0byBoYXZlIGJlZW4gZmx1c2hlZC4gVGh1cywKLSAgICAgICAgICAgIC8vIGlmIHJlZ2lzdGVy
cyB3ZXJlIG5vdCBmbHVzaGVkLCBkb24ndCBkbyBub24tVmFsdWUgY2FjaGluZy4KLSAgICAgICAg
ICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwotICAgICAgICBpbnQgbGlzdEluZGV4
OwotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZTsKLQotICAgICAgICBpZiAoIWdl
dFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgcG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIHNsb3dDYXNlKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0
Lmxpc3RTaXplKys7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19j
YXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+
KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVl
R1BSKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5w
YXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAgICAgICAKLSAgICAgICAg
Q0NhbGxIZWxwZXJzIHN0dWJKaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0cnVjdCA9IHN0dWJKaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSkpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIHN0cmF0ZWd5IHdlIHVzZSBmb3Ig
c3R1YnMgaXMgYXMgZm9sbG93czoKLSAgICAgICAgLy8gMSkgQ2FsbCBERkcgaGVscGVyIHRoYXQg
Y2FsbHMgdGhlIGdldHRlci4KLSAgICAgICAgLy8gMikgQ2hlY2sgaWYgdGhlcmUgd2FzIGFuIGV4
Y2VwdGlvbiwgYW5kIGlmIHRoZXJlIHdhcywgY2FsbCB5ZXQgYW5vdGhlcgotICAgICAgICAvLyAg
ICBoZWxwZXIuCi0gICAgICAgIAotICAgICAgICBib29sIGlzRGlyZWN0ID0gZmFsc2U7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGhhbmRsZXJDYWxsOwotICAgICAgICBGdW5jdGlvblB0ciBvcGVyYXRpb25G
dW5jdGlvbjsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkgfHwgc2xvdC5pc0NhY2hlYWJs
ZUN1c3RvbSgpKSB7Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VHUFIgIT0gc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0dWJK
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZl
VG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7Ci0jZW5kaWYKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICAg
ICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSwgc2NyYXRjaEdQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgc2NyYXRj
aEdQUik7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRpb25DYWxs
R2V0dGVyOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoRnVuY3Rp
b25QdHIoc2xvdC5jdXN0b21HZXR0ZXIoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSksCi0gICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkp
OwotICAgICAgICAgICAgICAgIG9wZXJhdGlvbkZ1bmN0aW9uID0gb3BlcmF0aW9uQ2FsbEN1c3Rv
bUdldHRlcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTmVl
ZCB0byBtYWtlIHN1cmUgdGhhdCB3aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0
dXJlLCB3ZSByZW1lbWJlciB0aGUKLSAgICAgICAgICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBp
dCBmcm9tLiBJdCBqdXN0IHNvIGhhcHBlbnMgdG8gYmUgdGhlIHBsYWNlIHRoYXQgd2UgYXJlIGF0
Ci0gICAgICAgICAgICAvLyByaWdodCBub3chCi0gICAgICAgICAgICBzdHViSml0LnN0b3JlMzIo
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihleGVjLT5sb2Nh
dGlvbkFzUmF3Qml0cygpKSwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0Zvcihz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwoKTsK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgIHN0dWJKaXQuc2V0
dXBSZXN1bHRzKHJlc3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAg
c3VjY2VzcyA9IHN0dWJKaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0
ZWRFeGNlcHRpb25DaGVjayk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc2V0
dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKLSAgICAgICAgICAgIGhhbmRsZXJDYWxsID0gc3R1Ykpp
dC5jYWxsKCk7Ci0gICAgICAgICAgICBzdHViSml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChz
bG90LmNhY2hlZE9mZnNldCgpKSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAg
ICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0
UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOwotI2Vsc2UK
LSAgICAgICAgICAgICAgICBpZiAoYmFzZUdQUiA9PSByZXN1bHRUYWdHUFIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
Uiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BS
KTsKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCBy
ZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNl
dFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAg
ICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0
R1BSKTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxh
dGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwotI2VuZGlmCi0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAg
ICAgICAgICBpc0RpcmVjdCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNvZGVCbG9jayk7Ci0gICAgICAgIAotICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKHdyb25nU3RydWN0LCBzbG93Q2FzZSk7Ci0gICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgICAgICBpZiAo
IWlzRGlyZWN0KSB7Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGws
IG9wZXJhdGlvbkZ1bmN0aW9uKTsKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxl
ckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0KLSAgICAgICAgICAgIGNy
ZWF0ZUpJVFN0dWJSb3V0aW5lKAotICAgICAgICAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAot
ICAgICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgKCJE
RkcgR2V0QnlJZCBwb2x5bW9ycGhpYyBsaXN0IGFjY2VzcyBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsCi0gICAgICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5k
YXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKSwKLSAgICAgICAgICAgICAgICAqdm0sCi0gICAgICAgICAgICAg
ICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICBzbG90Lmlz
Q2FjaGVhYmxlR2V0dGVyKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKTsKLSAgICAgICAg
Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUs
IGlzRGlyZWN0KTsKLSAgICAgICAgCi0gICAgICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29k
ZUJsb2NrLCBzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwotICAgICAgICByZXR1cm4gbGlz
dEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOwotICAgIH0KLSAgICAK
LSAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5wcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSB8fCAhc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2Fj
aGVkT2Zmc2V0KCk7Ci0gICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5G
b3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQsIG9m
ZnNldCk7Ci0gICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3Ry
dWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKLSAgICBpbnQgbGlzdElu
ZGV4OwotICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlOwotICAgIGlmICghZ2V0UG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc2xvd0Nhc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7Ci0gICAg
Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKLSAgICAKLSAgICBnZW5l
cmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwg
Y291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc2xvd0Nhc2Us
IHN0dWJSb3V0aW5lKTsKLSAgICAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3Rb
bGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91
dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKLSAgICAKLSAgICBwYXRjaEp1bXBUb0dldEJ5SWRTdHVi
KGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKLSAgICAKLSAgICByZXR1
cm4gbGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOwotfQotCi12
b2lkIGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBib29sIGRvbnRDaGFuZ2VDYWxs
ID0gdHJ5QnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xv
dCwgc3R1YkluZm8pOwotICAgIGlmICghZG9udENoYW5nZUNhbGwpCi0gICAgICAgIHJlcGF0Y2hD
YWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJh
dGlvbkdldEJ5SWQpOwotfQotCi1zdGF0aWMgVl9ERkdPcGVyYXRpb25fRUpDSSBhcHByb3ByaWF0
ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRL
aW5kIHB1dEtpbmQpCi17Ci0gICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKLSAgICAgICAg
aWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0Owot
ICAgIH0KLSAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCi0gICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0OwotICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0OwotfQotCi1zdGF0aWMgVl9ERkdPcGVyYXRpb25fRUpDSSBhcHByb3ByaWF0ZUxpc3RC
dWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtp
bmQgcHV0S2luZCkKLXsKLSAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICBp
ZiAocHV0S2luZCA9PSBEaXJlY3QpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdFN0cmljdEJ1aWxkTGlzdDsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRT
dHJpY3RCdWlsZExpc3Q7Ci0gICAgfQotICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3Q7Ci0gICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Q7Ci19Ci0KLXN0YXRpYyB2
b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKLSAgICBFeGVjU3RhdGUqIGV4ZWMsCi0gICAgSlNWYWx1
ZSwKLSAgICBjb25zdCBJZGVudGlmaWVyJiwKLSAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QsCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIFB1dEtpbmQsCi0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVs
LAotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQotewotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICBHUFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNo
LmRmZy52YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycyku
Z2V0RnJlZUdQUigpOwotICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSNp
ZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgR1BSUmVnIHNjcmF0Y2hHUFIy
OwotICAgIGNvbnN0IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gdHJ1ZTsKLSNlbHNlCi0gICAg
Y29uc3QgYm9vbCB3cml0ZUJhcnJpZXJOZWVkZWQgPSBmYWxzZTsKLSNlbmRpZgotICAgIAotICAg
IE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7Ci0gICAgCi0gICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52
YWxpZEdQUlJlZyAmJiAod3JpdGVCYXJyaWVyTmVlZGVkIHx8IGlzT3V0T2ZMaW5lT2Zmc2V0KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHNjcmF0
Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQ
Uik7Ci0jZWxzZQotICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNj
cmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAg
ICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIHN0dWJKaXQucHVzaChzY3Jh
dGNoR1BSKTsKLSAgICB9Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmUg
PSBzdHViSml0LmJyYW5jaFB0cigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0
dXJlKSk7Ci0gICAgCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgc2NyYXRjaEdQUjIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2Ny
YXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUik7Ci0jZWxzZQotICAgIHNjcmF0
Y2hHUFIyID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVH
UFIsIHZhbHVlVGFnR1BSLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAgIHN0dWJKaXQucHVzaChz
Y3JhdGNoR1BSMik7Ci0gICAgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihzdHViSml0LCBi
YXNlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlB
Y2Nlc3MpOwotICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIyKTsKLSNlbmRpZgotICAgIAotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKQotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNl
dEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkp
OwotICAgIGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7
Ci0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkpKTsKLSAgICB9Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlm
IChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewotICAgICAgICBzdHViSml0
LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5z
dG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3Rv
cmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0
SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0g
ICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBzdWNjZXNzOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7Ci0gICAgCi0g
ICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAgIHN0dWJKaXQucG9wKHNjcmF0
Y2hHUFIpOwotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIAotICAg
ICAgICBiYWRTdHJ1Y3R1cmUubGluaygmc3R1YkppdCk7Ci0gICAgICAgIHN0dWJKaXQucG9wKHNj
cmF0Y2hHUFIpOwotICAgICAgICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICBmYWlsdXJlID0g
YmFkU3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1
Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1
cmUsIGZhaWx1cmVMYWJlbCk7Ci0gICAgICAgICAgICAKLSAgICBzdHViUm91dGluZSA9IEZJTkFM
SVpFX0NPREVfRk9SX0RGR19TVFVCKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJE
RkcgUHV0QnlJZCByZXBsYWNlIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAg
ICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICBzdHViSW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKLSAgICBFeGVjU3RhdGUqIGV4ZWMsCi0g
ICAgSlNWYWx1ZSwKLSAgICBjb25zdCBJZGVudGlmaWVyJiwKLSAgICBjb25zdCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QsCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIFB1dEtp
bmQgcHV0S2luZCwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwKLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4sCi0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4m
IHN0dWJSb3V0aW5lKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotCi0gICAgR1BSUmVn
IGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BS
KTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgot
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
ZGZnLnZhbHVlR1BSKTsKLSAgICAKLSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2Nh
dG9yKHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKTsKLSAgICBhbGxvY2F0b3IubG9j
ayhiYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9jYXRvci5sb2NrKHZh
bHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsKLSAgICAK
LSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7Ci0gICAgICAgICAgICAKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgQVNTRVJU
KHNjcmF0Y2hHUFIxICE9IGJhc2VHUFIpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSB2YWx1
ZUdQUik7Ci0gICAgCi0gICAgYm9vbCBuZWVkU2Vjb25kU2NyYXRjaCA9IGZhbHNlOwotICAgIGJv
b2wgbmVlZFRoaXJkU2NyYXRjaCA9IGZhbHNlOwotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BS
T0ZJTElORykKLSAgICBuZWVkU2Vjb25kU2NyYXRjaCA9IHRydWU7Ci0jZW5kaWYKLSAgICBpZiAo
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKQotICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
IHsKLSAgICAgICAgbmVlZFNlY29uZFNjcmF0Y2ggPSB0cnVlOwotICAgICAgICBuZWVkVGhpcmRT
Y3JhdGNoID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBHUFJSZWcgc2NyYXRjaEdQUjI7Ci0gICAgaWYg
KG5lZWRTZWNvbmRTY3JhdGNoKSB7Ci0gICAgICAgIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFs
bG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gYmFzZUdQ
Uik7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSB2YWx1ZUdQUik7Ci0gICAgICAgIEFT
U0VSVChzY3JhdGNoR1BSMiAhPSBzY3JhdGNoR1BSMSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNj
cmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZzsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjM7Ci0gICAg
aWYgKG5lZWRUaGlyZFNjcmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3Iu
YWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBiYXNl
R1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHZhbHVlR1BSKTsKLSAgICAgICAg
QVNTRVJUKHNjcmF0Y2hHUFIzICE9IHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0
Y2hHUFIzICE9IHNjcmF0Y2hHUFIyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUjMg
PSBJbnZhbGlkR1BSUmVnOwotICAgICAgICAgICAgCi0gICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1
c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICAgICAgICAgIAotICAgIEFTU0VSVChvbGRTdHJ1Y3R1
cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgIAot
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2xkU3RydWN0dXJl
KSkpOwotICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgb2xk
U3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAg
ICAgIAotICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBmb3IgKFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICppdDsgKytp
dCkgewotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJ
bmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUjEp
OwotICAgICAgICB9Ci0gICAgfQotCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5H
KQotICAgIEFTU0VSVChuZWVkU2Vjb25kU2NyYXRjaCk7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIy
ICE9IEludmFsaWRHUFJSZWcpOwotICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhpcyB3cml0ZSBi
YXJyaWVyIGFzIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWlyZXMgaXQKLSAg
ICBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hH
UFIxLCBzY3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwotI2VuZGlm
Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAotICAg
IGJvb2wgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkpIHsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgIENvcGllZEFsbG9jYXRvciogY29w
aWVkQWxsb2NhdG9yID0gJnZtLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAg
ICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5n
LCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFu
Y2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQ
dHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7Ci0g
ICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHVi
Sml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0
b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHVi
Sml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSks
IHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNpemVfdCBvbGRT
aXplID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUp
OwotICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAg
ICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcs
IHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5j
aFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0
cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAg
ICAgICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJK
aXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRv
ci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJK
aXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwg
c2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMSA9IG5ldyBz
dG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9sZCBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9IGF2YWlsYWJs
ZQotICAgICAgICAgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihvbGRTaXplKTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKLSAg
ICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjMsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBz
Y3JhdGNoR1BSMik7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BS
MiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIC0ob2Zmc2V0ICsgc2l6ZW9m
KEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7Ci0g
ICAgICAgIHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9IHRydWU7Ci0gICAgfQotCi0gICAgc3R1Ykpp
dC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpCi0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsg
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQot
ICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAg
c3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkpKTsKLSAgICB9Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlmIChpc0lubGlu
ZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewotICAgICAgICBzdHViSml0LnN0b3JlMzIo
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZh
bHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXNj
cmF0Y2hHUFIxSGFzU3RvcmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIo
dmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJ
bkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0K
LSNlbmRpZgotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKLSAgICAgICAgICAgIAotICAgIGlmIChhbGxvY2F0
b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgewotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNl
ZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0KTsKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQu
anVtcCgpOwotCi0gICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKLSAgICAgICAg
YWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7Ci0gICAg
ICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc3VjY2Vz
cyA9IHN0dWJKaXQuanVtcCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJh
dGlvbkNhbGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vzc0luU2xvd1BhdGg7Ci0g
ICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgc2xvd1BhdGgubGluaygmc3R1Ykpp
dCk7Ci0gICAgICAgIAotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5
UG9wcGluZyhzdHViSml0KTsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9
IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJT
aXplKCkpOwotICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNo
QnVmZmVyKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIxKTsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLCB2YWx1ZUdQUik7Ci0jZWxz
ZQotICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIp
OwotI2VuZGlmCi0gICAgICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwoKTsKLSAgICAg
ICAgYWxsb2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZmZXIoc3R1Ykpp
dCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdWNjZXNzSW5TbG93UGF0
aCA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0KLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICBpZiAoYWxsb2NhdG9yLmRp
ZFJldXNlUmVnaXN0ZXJzKCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFp
bHVyZUxhYmVsKTsKLSAgICBlbHNlCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNh
c2VzLCBmYWlsdXJlTGFiZWwpOwotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRG
aW5pc2hQdXQpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3NJblNsb3dQYXRoLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAgfQotICAgIAotICAgIHN0dWJSb3V0aW5lID0KLSAg
ICAgICAgY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgICAgICAgICBGSU5BTElaRV9ERkdfQ09E
RSgKLSAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAoIkRGRyBQ
dXRCeUlkICVzdHJhbnNpdGlvbiBzdHViICglcCAtPiAlcCkgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
IT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID8gInJlYWxsb2NhdGluZyAiIDog
IiIsCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLAotICAgICAg
ICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJl
c3MoKSkpLAotICAgICAgICAgICAgKnZtLAotICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCkt
Pm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKLSAgICAgICAgICAg
IHN0cnVjdHVyZSk7Ci19Ci0KLXN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3Qg
UHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtp
bmQgcHV0S2luZCkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9j
aygpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotCi0gICAgaWYgKCFiYXNlVmFsdWUuaXND
ZWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFz
ZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0
cnVjdHVyZSgpOwotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2
aW91c0lEKCk7Ci0gICAgCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4K
LSAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgIGlmIChzbG90LnR5
cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICBpZiAo
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3
aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQotICAgICAgICAgICAgLy8g
ZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KLSAgICAgICAgICAgIGlmIChHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyA8IDYKLSAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
Ci0gICAgICAgICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRo
ZSBzdHJ1Y3R1cmUgaGFzCi0gICAgICAgICAgICAvLyBpbmRleGluZyBzdG9yYWdlLgotICAgICAg
ICAgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChu
b3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlQ2VsbCkgPT0gSW52YWxpZFByb3RvdHlw
ZUNoYWluKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90
b3R5cGVDaGFpbihleGVjKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZW1pdFB1dFRyYW5z
aXRpb25TdHViKAotICAgICAgICAgICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3Qs
IHN0dWJJbmZvLCBwdXRLaW5kLAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2xkU3RydWN0
dXJlLCBwcm90b3R5cGVDaGFpbiwKLSAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93
Q2FzZSksCi0gICAgICAgICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsK
LSAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAotICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAg
IHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKLSAgICAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOwotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBw
dXRLaW5kKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlk
VHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVy
ZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3QpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
cGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCksIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpLCBmYWxzZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFj
ZSgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCByZXBh
dGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgYm9vbCBjYWNo
ZWQgPSB0cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3Qs
IHN0dWJJbmZvLCBwdXRLaW5kKTsKLSAgICBpZiAoIWNhY2hlZCkKLSAgICAgICAgcmVwYXRjaENh
bGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9w
cmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLX0KLQotc3RhdGlj
IGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZh
bHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCi17
Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLQotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwo
KTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKLSAg
ICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpOwotICAg
IAotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgaWYgKHNsb3Qu
YmFzZSgpID09IGJhc2VWYWx1ZSkgewotICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBs
aXN0OwotICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgICAg
ICAKLSAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVy
dHkpIHsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU2tp
cCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24n
dCBoYXZlCi0gICAgICAgICAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVu
LgotICAgICAgICAgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgotICAgICAg
ICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUg
d2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKLSAgICAgICAgICAgIC8vIGlu
ZGV4aW5nIHN0b3JhZ2UuCi0gICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJ
bmRleGluZ0hlYWRlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VD
ZWxsKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBl
Q2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0aW5nIHRoZSBzdHViLiBN
b2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCi0gICAgICAgICAgICBsaXN0ID0gUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbSgKLSAgICAgICAgICAgICAgICBwdXRLaW5kLCBzdHVi
SW5mbywKLSAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCi0gICAgICAgICAgICAg
ICAgZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5k
LAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLCBwcm90b3R5cGVDaGFp
biwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1Bh
dGhUYXJnZXQoKSksCi0gICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCi0gICAgICAgICAgICAgICAgUHV0QnlJZEFj
Y2Vzczo6dHJhbnNpdGlvbigKLSAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVj
dHVyZSwgcHJvdG90eXBlQ2hhaW4sCi0gICAgICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRv
IGNyZWF0aW5nIHRoZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCi0g
ICAgICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbSgKLSAgICAgICAg
ICAgICAgICBwdXRLaW5kLCBzdHViSW5mbywKLSAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9TbG93Q2FzZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBlbWl0UHV0UmVwbGFjZVN0
dWIoCi0gICAgICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3Qs
IHN0dWJJbmZvLCBwdXRLaW5kLAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgQ29kZUxvY2F0
aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLCBzdHViUm91dGluZSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKLSAgICAgICAgICAgICAg
ICBQdXRCeUlkQWNjZXNzOjpyZXBsYWNlKAotICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwg
c3R1YlJvdXRpbmUpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgp
KQotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkp
OwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotdm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0
UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQg
cHV0S2luZCkKLXsKLSAgICBib29sIGNhY2hlZCA9IHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhlYywg
YmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKLSAgICBp
ZiAoIWNhY2hlZCkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9u
KHNsb3QsIHB1dEtpbmQpKTsKLX0KLQotc3RhdGljIGJvb2wgdHJ5UmVwYXRjaEluKAotICAgIEV4
ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9v
bCB3YXNGb3VuZCwKLSAgICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFj
Y2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBp
ZiAod2FzRm91bmQpIHsKLSAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXRJZ25vcmVkOwotICAgIHNpemVfdCBjb3VudCA9IG5vcm1hbGl6ZVByb3Rv
dHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZSwgd2FzRm91bmQgPyBzbG90LnNsb3RC
YXNlKCkgOiBKU1ZhbHVlKCksIGlkZW50LCBvZmZzZXRJZ25vcmVkKTsKLSAgICBpZiAoY291bnQg
PT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3Q7Ci0gICAgaW50IGxpc3RJbmRleDsKLSAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNj
ZXNzTGFiZWwgPSBzdHViSW5mby5ob3RQYXRoQmVnaW47Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
c2xvd0Nhc2VMYWJlbDsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nl
c3NfdW5zZXQpIHsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgpOwotICAgICAgICBzdHViSW5mby5pbml0SW5MaXN0
KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMCk7Ci0gICAgICAgIHNsb3dDYXNlTGFiZWwgPSBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgIHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAgICAgbGlzdEluZGV4
ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nl
c3NUeXBlID09IGFjY2Vzc19pbl9saXN0KTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0ID0gc3R1YkluZm8udS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgbGlzdEluZGV4
ID0gc3R1YkluZm8udS5pbkxpc3QubGlzdFNpemU7Ci0gICAgICAgIHNsb3dDYXNlTGFiZWwgPSBD
b2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4
IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYg
KGxpc3RJbmRleCA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0
cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZTsKLSAgICAKLSAgICB7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Ci0gICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52
YWx1ZUdQUik7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICAgICAgCi0gICAg
ICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgbmVl
ZFRvUmVzdG9yZVNjcmF0Y2g7Ci0gICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJS
ZWcpIHsKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2Ny
YXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgc3R1YkppdC5wdXNoKHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7Ci0g
ICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwot
ICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgICAgIAot
ICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7Ci0gICAgICAgICAgICBKU09i
amVjdCogcHJvdG90eXBlID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9v
a3VwKGV4ZWMpKTsKLSAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAg
ICAgICAgICAgICAgICBwcm90b3R5cGUsIHByb3RvdHlwZS0+c3RydWN0dXJlKCksIGV4ZWMtPmNv
ZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgICAgICBmYWlsdXJlQ2Fz
ZXMsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsK
LSAgICAgICAgfQotICAgICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgc3R1YkppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod2FzRm91bmQpLCByZXN1bHRHUFIpOwotI2Vu
ZGlmCi0gICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWls
OwotICAgICAgICAKLSAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwot
ICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBl
eGVjLT5jb2RlQmxvY2soKSk7Ci0KLSAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVm
ZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBz
dWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOwotICAgICAgICAKLSAgICAgICAgc3R1YlJvdXRp
bmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKLSAgICAgICAgICAgIHBhdGNoQnVmZmVy
LAotICAgICAgICAgICAgKCJERkcgSW4gKGZvdW5kID0gJXMpIHN0dWIgZm9yICVzLCByZXR1cm4g
cG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHdhc0ZvdW5kID8gInllcyIgOiAibm8iLCB0b0NT
dHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgc3VjY2Vz
c0xhYmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICB9Ci0gICAgCi0gICAgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgdHJ1ZSk7Ci0gICAgc3R1Yklu
Zm8udS5pbkxpc3QubGlzdFNpemUrKzsKLSAgICAKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIoY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5ob3RQ
YXRoQmVnaW4uanVtcEF0T2Zmc2V0KDApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKSkpOwotICAgIAotICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBI
SUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7Ci19Ci0KLXZvaWQgcmVwYXRjaEluKAotICAgIEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCB3
YXNGb3VuZCwKLSAgICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKLXsKLSAgICBpZiAodHJ5UmVwYXRjaEluKGV4ZWMsIGJhc2UsIGlkZW50LCB3
YXNGb3VuZCwgc2xvdCwgc3R1YkluZm8pKQotICAgICAgICByZXR1cm47Ci0gICAgcmVwYXRjaENh
bGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0
aW9uSW4pOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihSZXBhdGNoQnVmZmVyJiByZXBh
dGNoQnVmZmVyLCBWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0
KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0
aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUo
KSk7Ci19Ci0KLXZvaWQgbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgSlNGdW5jdGlvbiogY2FsbGVl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQotewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIpOwotICAgIAotICAgIC8vIElm
IHlvdSdyZSBiZWluZyBjYWxsLWxpbmtlZCBmcm9tIGEgREZHIGNhbGxlciB0aGVuIHlvdSBvYnZp
b3VzbHkgZGlkbid0IGdldCBpbmxpbmVkLgotICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0gICAg
ICAgIGNhbGxlZUNvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAg
ICAKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCkt
PmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKLSAgICAK
LSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKLSAgICAK
LSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAgICBjYWxsTGlua0luZm8u
Y2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsTGlua0luZm8uaG90UGF0
aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAg
IGNhbGxMaW5rSW5mby5sYXN0U2VlbkNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0o
KSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKLSAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uaG90UGF0aE90aGVyLCBjb2RlUHRyKTsKLSAg
ICAKLSAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQotICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxp
bmtJbmNvbWluZ0NhbGwoZXhlYy0+Y2FsbGVyRnJhbWUoKSwgJmNhbGxMaW5rSW5mbyk7Ci0gICAg
Ci0gICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlu
a0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgbGlu
a1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNvbnN0cnVj
dCk7Ci19Ci0KLXZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotewotICAgIENvZGVC
bG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7
Ci0gICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotICAgIAotICAgIGxpbmtTbG93
Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIGtpbmQpOwotfQotCi12b2lkIGxp
bmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
LCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV4ZWN1
dGFibGVCYXNlKiBleGVjdXRhYmxlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKLXsK
LSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKTsKLSAgICAKLSAgICBDb2RlQmxvY2sqIGNh
bGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOwotICAgIFZN
KiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKLSAgICAKLSAgICBHUFJSZWcgY2FsbGVlR1BS
ID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihjYWxsTGlua0luZm8uY2FsbGVlR1BSKTsKLSAgICAKLSAg
ICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgY2FsbGVyQ29kZUJsb2NrKTsKLSAgICAKLSAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICBzdHViSml0LmJyYW5jaFRlc3Q2NCgKLSAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywgY2FsbGVlR1BSLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpKTsKLSNlbHNlCi0gICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNr
ZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KLSNlbmRpZgotICAgIAotICAgIHNsb3dQYXRo
LmFwcGVuZCgKLSAgICAgICAgc3R1YkppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxl
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOwotICAgIAotICAgIHNsb3dQYXRoLmFwcGVu
ZCgKLSAgICAgICAgc3R1YkppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUpKSk7Ci0gICAgCi0gICAgc3R1YkppdC5sb2Fk
UHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9u
OjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksCi0gICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3R1YkppdC5zdG9yZTY0KAotICAgICAgICBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihS
ZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSkpOwotI2Vsc2UKLSAgICBzdHViSml0LnN0
b3JlUHRyKAotICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAg
ICBzdHViSml0LnN0b3JlMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVy
KSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0jZW5kaWYKLSAgICAKLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIGRv
bmUgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAKLSAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsK
LSAgICBzdHViSml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSNpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7Ci0jZW5kaWYKLSAg
ICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjIpOwotICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5m
bzo6bm9uQXJnR1BSMik7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVt
cCgpOwotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY2Fs
bGVyQ29kZUJsb2NrKTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9u
UHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmso
ZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDApKTsK
LSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRDVElT
dHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgIAotICAgIFJlZlB0
cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5ldyBDbG9z
dXJlQ2FsbFN0dWJSb3V0aW5lKAotICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKLSAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgKCJERkcgY2xvc3VyZSBjYWxsIHN0dWIgZm9y
ICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldCAlcCAoJXMpIiwKLSAgICAgICAgICAgICAgICB0
b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoMCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAg
ICAgICAgICBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHRvQ1N0cmluZyhwb2ludGVyRHVt
cChjYWxsZWVDb2RlQmxvY2spKS5kYXRhKCkpKSwKLSAgICAgICAgKnZtLCBjYWxsZXJDb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIGV4ZWN1dGFibGUsIGNhbGxMaW5rSW5m
by5jb2RlT3JpZ2luKSk7Ci0gICAgCi0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNh
bGxlckNvZGVCbG9jayk7Ci0gICAgCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAo
Ci0gICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lz
dGVyKGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4pLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hC
dWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsKTsKLSAgICAKLSAgICBjYWxsTGlu
a0luZm8uc3R1YiA9IHN0dWJSb3V0aW5lLnJlbGVhc2UoKTsKLSAgICAKLSAgICBBU1NFUlQoIWNh
bGxlZUNvZGVCbG9jayB8fCBjYWxsZWVDb2RlQmxvY2stPmlzSW5jb21pbmdDYWxsQWxyZWFkeUxp
bmtlZCgmY2FsbExpbmtJbmZvKSk7Ci19Ci0KLXZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZm
ZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSk7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIHN0cnVjdHVy
ZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0
KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwotICAg
IGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRo
UGF0Y2goKSkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRv
UGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6
c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJl
bCksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2gu
ZGZnLmJhc2VHUFIpLAotICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOwot
ICAgIH0KLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3RydWN0dXJlTGFiZWwsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0
b3JlKSwgMCk7Ci0jZWxzZQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBh
dGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7Ci0j
ZW5kaWYKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNr
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLX0KLQotdm9pZCByZXNldFB1dEJ5SUQoUmVw
YXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQot
ewotICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2Vf
Y2FzdDxWX0RGR09wZXJhdGlvbl9FSkNJPihNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQo
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBW
X0RGR09wZXJhdGlvbl9FSkNJIG9wdGltaXplZEZ1bmN0aW9uOwotICAgIGlmICh1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KQotICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KQotICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6
ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0QnVpbGRMaXN0KQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJU
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8
fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RC
dWlsZExpc3QpOwotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICB9Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7Ci0gICAgQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsUHRyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwotICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVt
cFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSkgewotICAgICAgICByZXBhdGNo
QnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNo
KAotICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldp
dGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpLAotICAgICAgICAgICAg
ICAgIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOwotICAgIH0KLSAgICByZXBhdGNoQnVmZmVyLnJl
cGF0Y2goc3RydWN0dXJlTGFiZWwsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50
ZXIpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOwotI2Vsc2UKLSAgICByZXBhdGNoQnVm
ZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFM
YWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRP
clN0b3JlKSwgMCk7Ci0jZW5kaWYKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb1N0cnVjdENoZWNrKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLX0KLQotdm9pZCBy
ZXNldEluKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKLXsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5ob3RQYXRoQmVn
aW4uanVtcEF0T2Zmc2V0KDApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotfQotCi19IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdSZXBhdGNoLmgJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdS
ZXBhdGNoX2gKLSNkZWZpbmUgREZHUmVwYXRjaF9oCi0KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIK
LSNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKLQotdm9pZCByZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZv
aWQgYnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgYnVpbGRH
ZXRCeUlEUHJvdG9MaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXBhdGNoUHV0
QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKLXZvaWQgYnVpbGRQdXRC
eUlkTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0
UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKLXZvaWQgcmVwYXRj
aEluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGNvbnN0IElkZW50aWZpZXImLCBib29sIHdhc0ZvdW5k
LCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBsaW5rRm9y
KEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTRnVuY3Rpb24qIGNhbGxl
ZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLXZvaWQg
bGlua1Nsb3dGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCk7Ci12b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBD
b2RlQmxvY2sqLCBTdHJ1Y3R1cmUqLCBFeGVjdXRhYmxlQmFzZSosIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cik7Ci12b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKLXZvaWQgcmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5m
byYpOwotdm9pZCByZXNldEluKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwot
Ci19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbHNlIC8vIEVOQUJMRShERkdfSklUKQot
Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IFJlcGF0Y2hCdWZmZXI7Ci1zdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87Ci0KLW5hbWVzcGFjZSBE
RkcgewotCi1pbmxpbmUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHJlc2V0R2V0QnlJRChS
ZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KLWlubGluZSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgcmVzZXRQdXRC
eUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQotaW5saW5lIE5PX1JFVFVSTiB2b2lkIHJlc2V0SW4oUmVwYXRjaEJ1
ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQotI2VuZGlmIC8vIERGR1JlcGF0Y2hfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCShyZXZpc2lv
biAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwMiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgREZHU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yX2gKLSNkZWZpbmUgREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yX2gK
LQotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNp
bmNsdWRlICJERkdSZWdpc3RlclNldC5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0K
LW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotLy8gVGhpcyBjbGFzcyBwcm92aWRl
cyBhIGxvdy1sZXZlbCByZWdpc3RlciBhbGxvY2F0b3IgZm9yIHVzZSBpbiBzdHVicy4KLQotY2xh
c3MgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHsKLXB1YmxpYzoKLSAgICBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgICAgIDog
bV91c2VkUmVnaXN0ZXJzKHVzZWRSZWdpc3RlcnMpCi0gICAgICAgICwgbV9kaWRSZXVzZVJlZ2lz
dGVycyhmYWxzZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgdm9pZCBsb2NrKFQgcmVnKSB7IG1fbG9ja2VkUmVnaXN0ZXJzLnNldChyZWcpOyB9Ci0g
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+Ci0gICAgdHlwZW5hbWUgQmFua0lu
Zm86OlJlZ2lzdGVyVHlwZSBhbGxvY2F0ZVNjcmF0Y2goKQotICAgIHsKLSAgICAgICAgLy8gRmly
c3QgdHJ5IHRvIGFsbG9jYXRlIGEgcmVnaXN0ZXIgdGhhdCBpcyB0b3RhbGx5IGZyZWUuCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7
ICsraSkgewotICAgICAgICAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSByZWcg
PSBCYW5rSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgICAgIGlmICghbV9sb2NrZWRSZWdp
c3RlcnMuZ2V0KHJlZykKLSAgICAgICAgICAgICAgICAmJiAhbV91c2VkUmVnaXN0ZXJzLmdldChy
ZWcpCi0gICAgICAgICAgICAgICAgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXQocmVnKSkgewot
ICAgICAgICAgICAgICAgIG1fc2NyYXRjaFJlZ2lzdGVycy5zZXQocmVnKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gcmVnOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAvLyBTaW5jZSB0aGF0IGZhaWxlZCwgdHJ5IHRvIGFsbG9jYXRlIGEgcmVnaXN0ZXIgdGhh
dCBpcyBub3QgeWV0Ci0gICAgICAgIC8vIGxvY2tlZCBvciB1c2VkIGZvciBzY3JhdGNoLgotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFua0luZm86Om51bWJlck9mUmVnaXN0ZXJz
OyArK2kpIHsKLSAgICAgICAgICAgIHR5cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgcmVn
ID0gQmFua0luZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgICAgICBpZiAoIW1fbG9ja2VkUmVn
aXN0ZXJzLmdldChyZWcpICYmICFtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0KHJlZykpIHsKLSAgICAg
ICAgICAgICAgICBtX3NjcmF0Y2hSZWdpc3RlcnMuc2V0KHJlZyk7Ci0gICAgICAgICAgICAgICAg
bV9kaWRSZXVzZVJlZ2lzdGVycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlZzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gV2UgZmFpbGVk
LgotICAgICAgICBDUkFTSCgpOwotICAgICAgICAvLyBNYWtlIHNvbWUgc2lsbHkgY29tcGlsZXJz
IGhhcHB5LgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQmFua0luZm86OlJl
Z2lzdGVyVHlwZT4oLTEpOwotICAgIH0KLSAgICAKLSAgICBHUFJSZWcgYWxsb2NhdGVTY3JhdGNo
R1BSKCkgeyByZXR1cm4gYWxsb2NhdGVTY3JhdGNoPEdQUkluZm8+KCk7IH0KLSAgICBGUFJSZWcg
YWxsb2NhdGVTY3JhdGNoRlBSKCkgeyByZXR1cm4gYWxsb2NhdGVTY3JhdGNoPEZQUkluZm8+KCk7
IH0KLSAgICAKLSAgICBib29sIGRpZFJldXNlUmVnaXN0ZXJzKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2RpZFJldXNlUmVnaXN0ZXJzOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHBy
ZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQpCi0gICAg
ewotICAgICAgICBpZiAoIW1fZGlkUmV1c2VSZWdpc3RlcnMpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVy
cy5nZXRGUFJCeUluZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7
Ci0gICAgICAgICAgICAgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDgpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAg
ICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgo
aSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAg
aml0LnB1c2goR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCByZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKE1hY3JvQXNzZW1ibGVy
JiBqaXQpCi0gICAgewotICAgICAgICBpZiAoIW1fZGlkUmV1c2VSZWdpc3RlcnMpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJl
Z2lzdGVycy5nZXRHUFJCeUluZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4
KGkpKQotICAgICAgICAgICAgICAgIGppdC5wb3AoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0RlBS
QnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSkgewotICAgICAg
ICAgICAgICAgIGppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZFB0
cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDgpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIHVuc2lnbmVkIGRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpICogc2l6ZW9mKEpTVmFsdWUpOyB9
Ci0gICAgCi0gICAgdm9pZCBwcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXIoTWFj
cm9Bc3NlbWJsZXImIGppdCwgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciwgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBJbnZhbGlkR1BSUmVnKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgY291bnQg
PSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
czsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4
KGkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChH
UFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0
Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpOwotI2Vsc2UKLSAgICAgICAgICAg
ICAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBzdGF0aWNfY2FzdDxFbmNv
ZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpOwot
I2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZh
bGlkR1BSUmVnICYmICFtX2xvY2tlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpICYmICFtX3Nj
cmF0Y2hSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKLSAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNF
X0FTU0VSVChzY3JhdGNoR1BSICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAg
aWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7Ci0gICAgICAgICAgICAgICAg
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2Rl
ZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspKSwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVn
aXN0ZXIoaSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNvdW50ICogc2l6ZW9mKEpTVmFsdWUpID09IGRlc2lyZWRTY3JhdGNo
QnVmZmVyU2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihzdGF0aWNfY2FzdDxzaXplX3Q+KGNvdW50ICogc2l6ZW9mKEpTVmFsdWUpKSksIHNjcmF0Y2hH
UFIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0
Y2hCdWZmZXIoTWFjcm9Bc3NlbWJsZXImIGppdCwgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZl
ciwgR1BSUmVnIHNjcmF0Y2hHUFIgPSBJbnZhbGlkR1BSUmVnKQotICAgIHsKLSAgICAgICAgaWYg
KHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgewotICAgICAgICAgICAgLy8gRmluZCBhIHNj
cmF0Y2ggcmVnaXN0ZXIuCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgICAgIGlmIChtX2xvY2tlZFJl
Z2lzdGVycy5nZXRHUFJCeUluZGV4KGkpIHx8IG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJCeUlu
ZGV4KGkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBz
Y3JhdGNoR1BSID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3Jh
dGNoR1BSICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICAKLSAgICAgICAgaml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRy
KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSKTsKLQotICAgICAgICAvLyBSZXN0b3JlIGRvdWJs
ZSByZWdpc3RlcnMgZmlyc3QuCi0gICAgICAgIHVuc2lnbmVkIGNvdW50ID0gbV91c2VkUmVnaXN0
ZXJzLm51bWJlck9mU2V0R1BScygpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lz
dGVycy5nZXRGUFJCeUluZGV4KGkpKSB7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3Jh
dGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspKSwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICAgICAgaml0LmxvYWREb3VibGUoc2NyYXRjaEdQUiwgRlBSSW5mbzo6dG9SZWdpc3Rl
cihpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNvdW50
ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRl
eChpKSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgaml0LmxvYWQ2NChz
dGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkg
KyAoY291bnQrKyksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOwotI2Vsc2UKLSAgICAgICAgICAg
ICAgICBqaXQubG9hZDMyKHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZl
ci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0g
ICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOwotICAgIFJlZ2lzdGVyU2V0IG1fbG9ja2Vk
UmVnaXN0ZXJzOwotICAgIFJlZ2lzdGVyU2V0IG1fc2NyYXRjaFJlZ2lzdGVyczsKLSAgICBib29s
IG1fZGlkUmV1c2VSZWdpc3RlcnM7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0K
LSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotI2VuZGlmIC8vIERGR1NjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAjaW5j
bHVkZSAiREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCIKICNpbmNsdWRlICJERkdDYWxs
QXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkRGR09wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJERkdTbG93UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTQWN0
aXZhdGlvbi5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgpAQCAtMjYxLDcgKzI2Miw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICBKSVRDb21w
aWxlcjo6RGF0YUxhYmVsMzIgcGF5bG9hZFN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmUzMldp
dGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVQYXlsb2FkR1BSLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnBheWxvYWQpKSk7CiAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9q
aXQubGFiZWwoKTsKLSAgICBWX0RGR09wZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7CisgICAg
Vl9KSVRPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRDYWxsOwogICAgIGlmIChtX2ppdC5zdHJpY3RN
b2RlRm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pKSB7CiAgICAgICAgIGlmIChwdXRLaW5k
ID09IERpcmVjdCkKICAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7CkBAIC00NDAsNyArNDQxLDcgQEAgYm9vbCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBO
b2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25k
LCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5v
ZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0
aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKICAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5j
aE5vZGUtPnRha2VuQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5v
ZGUtPm5vdFRha2VuQmxvY2soKTsKQEAgLTUxMiwxMyArNTEzLDEzIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKIAogdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGU+
CiBjbGFzcyBDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yCi0gICAgOiBwdWJs
aWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0RGR09wZXJhdGlvbl9FSkosIEdQ
UlJlZz4geworICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19K
SVRPcGVyYXRpb25fRUpKLCBHUFJSZWc+IHsKIHB1YmxpYzoKICAgICBDb21wYXJlQW5kQm94Qm9v
bGVhblNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2
ZUpJVCogaml0LAotICAgICAgICBTX0RGR09wZXJhdGlvbl9FSkogZnVuY3Rpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsCisgICAgICAgIFNfSklU
T3BlcmF0aW9uX0VKSiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQ
UlJlZyBhcmcxUGF5bG9hZCwKICAgICAgICAgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5
bG9hZCkKLSAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfREZHT3Bl
cmF0aW9uX0VKSiwgR1BSUmVnPigKKyAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVt
cFR5cGUsIFNfSklUT3BlcmF0aW9uX0VKSiwgR1BSUmVnPigKICAgICAgICAgICAgIGZyb20sIGpp
dCwgZnVuY3Rpb24sIE5lZWRUb1NwaWxsLCByZXN1bHQpCiAgICAgICAgICwgbV9hcmcxVGFnKGFy
ZzFUYWcpCiAgICAgICAgICwgbV9hcmcxUGF5bG9hZChhcmcxUGF5bG9hZCkKQEAgLTU0Niw3ICs1
NDcsNyBAQCBwcml2YXRlOgogICAgIEdQUlJlZyBtX2FyZzJQYXlsb2FkOwogfTsKIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSogbm9k
ZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRp
b25fRUpKIGhlbHBlckZ1bmN0aW9uKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24gY29uZCwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewog
ICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwpAQCAtMzYwNiw3ICszNjA3LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
VHJ1c3RlZEltbTMyKEZpbmFsT2JqZWN0VHlwZSkpKTsKICAgICAgICAgbV9qaXQubW92ZSh0aGlz
VmFsdWVQYXlsb2FkR1BSLCB0ZW1wR1BSKTsKICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVU
YWdHUFIsIHRlbXBUYWdHUFIpOwotICAgICAgICBKX0RGR09wZXJhdGlvbl9FSiBmdW5jdGlvbjsK
KyAgICAgICAgSl9KSVRPcGVyYXRpb25fRUogZnVuY3Rpb247CiAgICAgICAgIGlmIChtX2ppdC5n
cmFwaCgpLmV4ZWN1dGFibGVGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmlzU3RyaWN0TW9kZSgpKQog
ICAgICAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25Ub1RoaXNTdHJpY3Q7CiAgICAgICAgIGVs
c2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaCIKICNpbmNsdWRlICJERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0
aEdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdT
bG93UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCkBAIC0yNTMsNyArMjU0LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlTwogCiAgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRv
bmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CiAgICAgCi0gICAgVl9ERkdPcGVyYXRpb25fRUpDSSBv
cHRpbWl6ZWRDYWxsOworICAgIFZfSklUT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkQ2FsbDsKICAg
ICBpZiAobV9qaXQuc3RyaWN0TW9kZUZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKSkgewog
ICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCiAgICAgICAgICAgICBvcHRpbWl6ZWRDYWxs
ID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwpAQCAtNDI4LDcgKzQyOSw3
IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVC
cmFuY2goTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBu
b2RlLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7CiAgICAgQmFzaWNC
bG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayog
bm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CkBAIC00OTgsMTIgKzQ5OSwx
MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEp1bXBUeXBlPgogY2xhc3MgQ29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdl
bmVyYXRvcgotICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19E
RkdPcGVyYXRpb25fRUpKLCBHUFJSZWc+IHsKKyAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5l
cmF0b3I8SnVtcFR5cGUsIFNfSklUT3BlcmF0aW9uX0VKSiwgR1BSUmVnPiB7CiBwdWJsaWM6CiAg
ICAgQ29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgSnVtcFR5
cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwKLSAgICAgICAgU19ERkdPcGVyYXRpb25fRUpK
IGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCi0gICAg
ICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0RGR09wZXJhdGlvbl9FSkos
IEdQUlJlZz4oCisgICAgICAgIFNfSklUT3BlcmF0aW9uX0VKSiBmdW5jdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgICAgICA6IENhbGxTbG93UGF0aEdl
bmVyYXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25fRUpKLCBHUFJSZWc+KAogICAgICAgICAg
ICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgTmVlZFRvU3BpbGwsIHJlc3VsdCkKICAgICAgICAgLCBt
X2FyZzEoYXJnMSkKICAgICAgICAgLCBtX2FyZzIoYXJnMikKQEAgLTUyNSw3ICs1MjYsNyBAQCBw
cml2YXRlOgogICAgIEdQUlJlZyBtX2FyZzI7CiB9OwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxl
cjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVu
Y3Rpb24pCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29t
cGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25k
LCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7CiAgICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC0zOTAyLDcgKzM5MDMsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKICAgICAg
ICAgICAgIFRydXN0ZWRJbW0zMihGaW5hbE9iamVjdFR5cGUpKSk7CiAgICAgICAgIG1faml0Lm1v
dmUodGhpc1ZhbHVlR1BSLCB0ZW1wR1BSKTsKLSAgICAgICAgSl9ERkdPcGVyYXRpb25fRUogZnVu
Y3Rpb247CisgICAgICAgIEpfSklUT3BlcmF0aW9uX0VKIGZ1bmN0aW9uOwogICAgICAgICBpZiAo
bV9qaXQuZ3JhcGgoKS5leGVjdXRhYmxlRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5pc1N0cmljdE1v
ZGUoKSkKICAgICAgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uVG9UaGlzU3RyaWN0OwogICAg
ICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NSwyMiArODk1
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dXNlQ2hpbGRyZW4oTm9kZSogbgogICAgIH0KIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKE1hY3JvQXNzZW1ibGVyJiBqaXQs
IEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIsIFdyaXRlQmFy
cmllclVzZUtpbmQgdXNlS2luZCkKLXsKLSAgICBVTlVTRURfUEFSQU0oaml0KTsKLSAgICBVTlVT
RURfUEFSQU0ob3duZXIpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHNjcmF0Y2gyKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7Ci0gICAgQVNTRVJU
KG93bmVyICE9IHNjcmF0Y2gxKTsKLSAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDIpOwotICAg
IEFTU0VSVChzY3JhdGNoMSAhPSBzY3JhdGNoMik7Ci0KLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklF
Ul9QUk9GSUxJTkcpCi0gICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChqaXQsIFdyaXRlQmFycmll
ckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKLSNlbmRpZgotfQotCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVH
UFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNj
cmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgVU5VU0VEX1BBUkFNKG93bmVyR1BSKTsK
QEAgLTEwMTcsNyArMTAwMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbihOb2Rl
KiBub2QKICNlbmRpZgogfQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNv
bXBhcmUoTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQorYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikK
IHsKICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5j
aCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKQEAgLTE0NjUs
NyArMTQ0OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludDMKIH0K
IAogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb21wYXJlIGlzIGZ1c2VkIHdpdGggYSBzdWJzZXF1
ZW50IGJyYW5jaC4KLWJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW5jaChO
b2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24s
IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uLCBTX0RGR09w
ZXJhdGlvbl9FSkogb3BlcmF0aW9uKQorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlQnJhbmNoKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRp
b24sIFNfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCiB7CiAgICAgLy8gRnVzZWQgY29tcGFy
ZSAmIGJyYW5jaC4KICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVw
SG9sZUJyYW5jaCgpOwpAQCAtMzg0Miw3ICszODI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFyaXRoTW9kKE5vZAogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBhcmUg
aXMgZnVzZWQgd2l0aCBhIHN1YnNlcXVlbnQgYnJhbmNoLgotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9u
LCBTX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uKQorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uLCBT
X0pJVE9wZXJhdGlvbl9FSkogb3BlcmF0aW9uKQogewogICAgIGlmIChjb21waWxlUGVlcEhvbGVC
cmFuY2gobm9kZSwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRpb24sIG9wZXJhdGlvbikpCiAgICAg
ICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYs
MTEgQEAKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQu
aCIKICNpbmNsdWRlICJERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiREZH
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCIKICNp
bmNsdWRlICJERkdWYWx1ZVNvdXJjZS5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVk
ZSAiVmFsdWVSZWNvdmVyeS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBA
IC0zMTEsOCArMzEyLDYgQEAgcHVibGljOgogICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRG
b3JNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYsIEdQUlJl
ZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIFdyaXRl
QmFycmllclVzZUtpbmQpOwotCiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BS
LCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQ
UlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IElu
dmFsaWRHUFJSZWcpOwogICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgSlND
ZWxsKiB2YWx1ZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52
YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CiAgICAgdm9p
ZCB3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVl
VXNlLCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BS
UmVnKTsKQEAgLTczOSw5ICs3MzgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBub25TcGVjdWxhdGl2
ZVBlZXBob2xlQnJhbmNoTnVsbChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wg
aW52ZXJ0ID0gZmFsc2UpOwogICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2Rl
KiwgRWRnZSBvcGVyYW5kLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICAKLSAgICB2b2lkIG5v
blNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVy
RnVuY3Rpb24pOwotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9k
ZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9F
SkogaGVscGVyRnVuY3Rpb24pOwotICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlKE5vZGUq
LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpK
IGhlbHBlckZ1bmN0aW9uKTsKKyAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2go
Tm9kZSosIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0
aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOworICAgIHZvaWQgbm9uU3Bl
Y3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOworICAgIGJv
b2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbiwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsKICAgICAKICAg
ICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlKiwgTm9kZSogYnJhbmNo
Tm9kZSwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBl
ZXBob2xlU3RyaWN0RXEoTm9kZSosIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwpAQCAtOTMxLDE2OSAr
OTMwLDE2OSBAQCBwdWJsaWM6CiAgICAgLy8gbWFjaGluZSByZWdpc3RlcnMsIGFuZCBkZWxlZ2F0
ZSB0aGUgY2FsbGluZyBjb252ZW50aW9uIHNwZWNpZmljCiAgICAgLy8gZGVjaXNpb24gYXMgdG8g
aG93IHRvIGZpbGwgdGhlIHJlZ3NpdGVycyB0byBzZXR1cEFyZ3VtZW50cyogbWV0aG9kcy4KIAot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRSBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihQX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9F
QyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBjZWxsKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgY2VsbCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShjZWxsKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFBfSklUT3BlcmF0aW9uX0VPIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IG9iamVjdCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShvYmplY3QpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU9TIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIG9iamVjdCwgc2l6ZV90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FT1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgb2JqZWN0LCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9E
RkdPcGVyYXRpb25fRU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwg
aW50MzJfdCBzaXplKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRP
cGVyYXRpb25fRU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgaW50
MzJfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FT1og
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FT1ogb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVz
dGVkSW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSkpKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9u
X0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVfdCBzaXplKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVBTIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9sZCwgc2l6ZV90IHNpemUpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2xkLCBUcnVzdGVkSW1t
UHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgc2l6ZV90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJ
VE9wZXJhdGlvbl9FUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHNpemVfdCBzaXplKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1Q
dHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVNKc3Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBzaXplX3QgaW5kZXgsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVNKc3Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBzaXplX3QgaW5kZXgsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoaW5kZXgpLCBhcmcxKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBf
REZHT3BlcmF0aW9uX0VTdCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRp
b25fRVN0IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3RaIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBhcmcyKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgYXJnMikKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSksIFRydXN0ZWRJbW0zMihhcmcyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3Ra
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVN0WiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFBfREZHT3BlcmF0aW9uX0VTdFBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVN0UFMgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNp
emUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBUcnVzdGVkSW1t
UHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTdFNTIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBpbmRleCwgc2l6ZV90IHNpemUpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3RTUyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgaW5k
ZXgsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cihpbmRleCks
IFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9w
ZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FQyBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgSlNDZWxsKiBjZWxsKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19K
SVRPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU0NlbGwqIGNlbGwpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bVB0cihjZWxsKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgSlNDZWxsKiBjZWxsKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGNlbGwpKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZH
T3BlcmF0aW9uX0VJY2Ygb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENf
SklUT3BlcmF0aW9uX0VJY2Ygb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSkpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdP
cGVyYXRpb25fRVN0IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9F
U3Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUpzc1N0IG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpzc1N0IG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSnNzSnNzIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpzc0pzcyBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3Bl
cmF0aW9uX0VKc3NKc3NKc3Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oQ19KSVRPcGVyYXRpb25fRUpzc0pzc0pzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFNfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklU
T3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSnNzX0RGR09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSnNzX0pJVE9wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUMgb3BlcmF0
aW9uLCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDSWNmIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNJY2Ygb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJh
bWUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09w
ZXJhdGlvbl9FQ0NJY2Ygb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNDSWNmIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVk
SW1tUHRyKGlubGluZUNhbGxGcmFtZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNaIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEs
IGludCBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVy
YXRpb25fRUNaIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIGludCBhcmcyKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihh
cmcyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RG
R09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0
aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9XIG9wZXJhdGlvbiwgV2F0
Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX1cgb3BlcmF0aW9uLCBXYXRjaHBvaW50U2V0KiB3YXRjaHBv
aW50U2V0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHMoVHJ1c3RlZEltbVB0
cih3YXRjaHBvaW50U2V0KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7
CkBAIC0xMTI1LDI0NCArMTEyNCwyNDQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOwogICAgIH0K
IAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fWlog
b3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0pJVE9wZXJhdGlvbl9aWiBvcGVyYXRp
b24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fREQgb3BlcmF0aW9uLCBGUFJS
ZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSwgRlBSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihEX0pJVE9wZXJhdGlvbl9ERCBvcGVyYXRpb24sIEZQUlJlZyByZXN1
bHQsIEZQUlJlZyBhcmcxLCBGUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSV9ERkdPcGVyYXRpb25fRUpzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSV9KSVRPcGVy
YXRpb25fRUpzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19E
RkdPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VaIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9ERkdPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRl
KCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHZvaWQq
IHBvaW50ZXIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHZvaWQqIHBvaW50ZXIpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihw
b2ludGVyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihaX0RGR09wZXJhdGlvbl9EIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
RlBSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJVE9w
ZXJhdGlvbl9EIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhhcmcxKTsKICAgICAgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbCA9IG1faml0LmFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICAgICAgbV9qaXQu
emVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CiAgICAg
ICAgIHJldHVybiBjYWxsOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RyaW5nSW1w
bCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cih1
aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUFaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRUFaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpzc1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSnNzWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQUyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBTIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihwb2lu
dGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU1Mgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQgc3RhcnRDb25zdGFudCwgaW50IG51bUNvbnN0YW50cykK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VTUyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludCBzdGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3Rh
bnRzKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW0zMihzdGFydENvbnN0YW50KSwgVHJ1c3RlZEltbTMyKG51bUNvbnN0YW50cykpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9ERkdPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEsIHZvaWQqIHBvaW50ZXIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FUFAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
dm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNDZWxsKiBjZWxsKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihjZWxsKSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
ICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5n
SW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIGNvbnN0IFN0
cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpJ
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIFN0cmluZ0ltcGwqIHVpZCkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSSBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBTdHJpbmdJbXBsKiB1aWQpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1
c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VEQSBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEZQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VEQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEZQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VK
QSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQSBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUCBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAg
ICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25f
RVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIGludDMyX3QgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50MzJf
dCBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KFRydXN0ZWRJbW0zMihhcmcxKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWlogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBpbnQzMl90IGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVpaIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgaW50MzJfdCBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoYXJnMSksIGFyZzIpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9ERkdPcGVyYXRpb25fRVpJY2ZaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50MzJf
dCBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgR1BSUmVnIGFyZzIpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWkljZlog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQzMl90IGFyZzEsIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoYXJnMSksIFRydXN0ZWRJbW1QdHIo
aW5saW5lQ2FsbEZyYW1lKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VKUyBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyB2YWx1ZSwgc2l6ZV90IGluZGV4KQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRUpTIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIHZhbHVlLCBzaXplX3QgaW5kZXgpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUodmFsdWUsIFRydXN0ZWRJbW1QdHIo
aW5kZXgpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9E
RkdPcGVyYXRpb25fRVN0SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFBfSklUT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Q19ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VKIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9K
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9KIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhh
cmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3Bl
cmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAK
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQUCBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQUCBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSkKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyIGltbSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bWJlcihpbW0ubV92YWx1ZSkpKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSwgR1BSUmVnIGFy
ZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
Skogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
IGltbSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoaW1tLm1fdmFsdWUpKSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNDIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRUNKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRUNKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLmdwcigpKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdP
cGVyYXRpb25fRU9aRCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgRlBSUmVn
IGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlv
bl9FT1pEIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBGUFJSZWcgYXJnMykK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBh
cmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFZfREZHT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIs
IHZvaWQqIHBvaW50ZXIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJ
VE9wZXJhdGlvbl9FSlBQIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCB2b2lk
KiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VKQ0kgb3BlcmF0aW9u
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKQ0kgb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1t
UHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhv
cGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZf
REZHT3BlcmF0aW9uX0VKSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQ
UlJlZyBhcmczKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVy
YXRpb25fRUpKSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFy
ZzMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oVl9ERkdPcGVyYXRpb25fRVBaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJ
VE9wZXJhdGlvbl9FUFpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJS
ZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oVl9KSVRPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MiwgR1BSUmVnIGFyZzMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNKSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihEX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcx
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CkBAIC0xMzg2LDcgKzEzODUsNyBAQCBwdWJsaWM6CiAjZGVmaW5l
IFNINF8zMkJJVF9EVU1NWV9BUkcKICNlbmRpZgogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihaX0RGR09wZXJhdGlvbl9EIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgRlBS
UmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJh
dGlvbl9EIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEpCiAgICAgewogICAg
ICAgICBwcmVwYXJlRm9yRXh0ZXJuYWxDYWxsKCk7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzKGFyZzEpOwpAQCAtMTM5NCwyMzMgKzEzOTMsMjMzIEBAIHB1YmxpYzoKICAgICAgICAgbV9q
aXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CiAg
ICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
SklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0
UGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCB2b2lkKiBwb2ludGVyKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVAgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgdm9pZCogcG9pbnRlcikK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVk
SW1tUHRyKHBvaW50ZXIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQ
UCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJS
ZWcgYXJnMSwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VQUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJl
ZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRy
KHBvaW50ZXIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcx
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVAg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVn
IGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSSBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJpbmdJbXBsKiB1aWQp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSSBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJpbmdJ
bXBsKiB1aWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcp
OwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0
aW9uX0VBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQs
IEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9F
QVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRUFaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVn
IHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKc3NaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKc3NaIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcp
OwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0
aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2Fk
LCB2b2lkKiBwb2ludGVyLCBzaXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCB2b2lkKiBwb2ludGVyLCBzaXplX3Qgc2l6ZSkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRy
KHBvaW50ZXIpLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCBy
ZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VTUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkLCBpbnQgc3RhcnRDb25zdGFudCwgaW50IG51bUNvbnN0YW50cykKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VTUyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBpbnQgc3RhcnRDb25zdGFu
dCwgaW50IG51bUNvbnN0YW50cykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoc3RhcnRDb25zdGFudCksIFRydXN0ZWRJbW0zMihu
dW1Db25zdGFudHMpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKUCBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcg
YXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCB2b2lkKiBwb2ludGVyKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpQIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJS
ZWcgYXJnMVBheWxvYWQsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQs
IGFyZzFUYWcsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQs
IHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRUpQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBh
cmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RUpQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQ
UlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlf
QVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCBy
ZXN1bHRUYWcpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgSlNDZWxsKiBjZWxsKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoY2VsbCkpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRh
ZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBjb25zdCBTdHJpbmdJbXBsKiB1
aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
Q0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BS
UmVnIGFyZzEsIGNvbnN0IFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJn
MVBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBT
dHJpbmdJbXBsKiB1aWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIFRydXN0
ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkkg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50MzJf
dCBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSSBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBpbnQzMl90IGFyZzFUYWcs
IEdQUlJlZyBhcmcxUGF5bG9hZCwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQ
YXlsb2FkLCBUcnVzdGVkSW1tMzIoYXJnMVRhZyksIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FREEgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRURBIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEZQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2Fk
LCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMikK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMy
QklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMik7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBH
UFJSZWcgcmVzdWx0UGF5bG9hZCwgVHJ1c3RlZEltbTMyIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5
bG9hZCwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FSkEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgVHJ1c3RlZEltbTMyIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BS
UmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzIpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcx
UGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQs
IEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBh
eWxvYWQsIGFyZzFUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVn
IGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBH
UFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VaIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludDMyX3QgYXJn
MSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0Va
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludDMy
X3QgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tMzIoYXJnMSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRVpJY2ZaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxv
YWQsIGludDMyX3QgYXJnMSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEdQUlJl
ZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRVpJY2ZaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxv
YWQsIGludDMyX3QgYXJnMSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEdQUlJl
ZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KFRydXN0ZWRJbW0zMihhcmcxKSwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpLCBhcmcy
KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VaWiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBpbnQzMl90IGFyZzEsIEdQUlJl
ZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRVpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQs
IGludDMyX3QgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpLCBhcmcyKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRUpTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgSlNWYWx1ZVJlZ3MgdmFsdWUsIHNpemVfdCBpbmRleCkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VKUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEpTVmFsdWVSZWdzIHZhbHVlLCBzaXplX3QgaW5kZXgpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgdmFsdWUu
cGF5bG9hZEdQUigpLCB2YWx1ZS50YWdHUFIoKSwgVHJ1c3RlZEltbVB0cihpbmRleCkpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAg
fQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9F
U3RKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJl
ZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3RKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3Bl
cmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJl
ZyBhcmcxUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklU
T3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQ
UlJlZyBhcmcxUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihTX0RGR09wZXJhdGlvbl9KIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFU
YWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFNfSklUT3BlcmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHMoYXJnMVBheWxvYWQsIGFyZzFUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFy
ZzFQYXlsb2FkLCBhcmcxVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVn
IGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcg
YXJnMlBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIFNINF8zMkJJ
VF9EVU1NWV9BUkcgYXJnMlBheWxvYWQsIGFyZzJUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpK
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJl
ZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJn
MlBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcsIEdQ
UlJlZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgU0g0
XzMyQklUX0RVTU1ZX0FSRyBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5
bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBpbW0pCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFn
LCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9h
ZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBpbW0pCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBh
eWxvYWQsIGFyZzFUYWcsIFNINF8zMkJJVF9EVU1NWV9BUkcgaW1tLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VK
SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcy
UGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2Fk
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJl
ZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBpbW0sIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIFNINF8zMkJJVF9EVU1NWV9BUkcgYXJnMlBheWxvYWQsIGFyZzJUYWcpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
VGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0pJVE9wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJn
MlBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSwgYXJnMlBheWxvYWQsIGFyZzJUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJl
c3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRUNKIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgSlNWYWx1ZVJlZ3MgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgR1BSUmVn
IGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMi5wYXlsb2FkR1BSKCksIGFyZzIudGFnR1BSKCkp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdC5wYXlsb2FkR1BSKCksIHJlc3VsdC50YWdHUFIoKSk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNDIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
SklUT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkQgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIEZQUlJlZyBhcmczKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oVl9KSVRPcGVyYXRpb25fRU9aRCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MiwgRlBSUmVnIGFyZzMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMyk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQog
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FSlBQ
IG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFy
ZzIsIHZvaWQqIHBvaW50ZXIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihW
X0pJVE9wZXJhdGlvbl9FSlBQIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcx
UGF5bG9hZCwgR1BSUmVnIGFyZzIsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBh
eWxvYWQsIGFyZzFUYWcsIGFyZzIsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VKQ0kgb3Bl
cmF0aW9uLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwg
U3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9K
SVRPcGVyYXRpb25fRUpDSSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBh
eWxvYWQsIEdQUlJlZyBhcmcyLCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBh
eWxvYWQsIGFyZzFUYWcsIGFyZzIsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNKSiBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkLCBHUFJS
ZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNKSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkLCBHUFJSZWcgYXJnM1RhZywgR1BSUmVn
IGFyZzNQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIGFyZzJQYXlsb2FkLCBhcmcyVGFnLCBhcmczUGF5bG9hZCwgYXJnM1RhZyk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7
CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJh
dGlvbl9FUFpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJn
M1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9KSVRPcGVyYXRpb25fRVBaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJXzMyQklU
X0RVTU1ZX0FSRyBTSDRfMzJCSVRfRFVNTVlfQVJHIGFyZzNQYXlsb2FkLCBhcmczVGFnKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAg
ICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9u
X0VPWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFn
LCBHUFJSZWcgYXJnM1BheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0pJVE9wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
LCBHUFJSZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJCSVRfRFVN
TVlfQVJHIFNINF8zMkJJVF9EVU1NWV9BUkcgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkog
b3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczVGFn
LCBHUFJSZWcgYXJnM1BheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0pJVE9wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
LCBUcnVzdGVkSW1tMzIgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJC
SVRfRFVNTVlfQVJHIFNINF8zMkJJVF9EVU1NWV9BUkcgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwog
ICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRp
b25fRUogb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFy
ZzFQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9KSVRPcGVy
YXRpb25fRUogb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVn
IGFyZzFQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwpAQCAtMTkyMyw4ICsxOTIyLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
YmV0dGVyVXNlU3RyaWN0SW50NTIoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKLSAgICBib29s
IGNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkopOwotICAgIGJv
b2wgY29tcGlsZVBlZXBIb2xlQnJhbmNoKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiwgU19ERkdPcGVyYXRp
b25fRUpKKTsKKyAgICBib29sIGNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uLCBTX0pJVE9wZXJh
dGlvbl9FSkopOworICAgIGJvb2wgY29tcGlsZVBlZXBIb2xlQnJhbmNoKE5vZGUqLCBNYWNyb0Fz
c2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRp
dGlvbiwgU19KSVRPcGVyYXRpb25fRUpKKTsKICAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZUludDMy
QnJhbmNoKE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENv
bmRpdGlvbik7CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVJbnQ1MkJyYW5jaChOb2RlKiwgTm9k
ZSogYnJhbmNoTm9kZSwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgIHZv
aWQgY29tcGlsZVBlZXBIb2xlQm9vbGVhbkJyYW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwg
SklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MywyMzggKzkz
LDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVAogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkRGRyBPU1IgZXhpdCBnZW5lcmF0aW9uIHRo
dW5rIikpOwogfQogCi1pbmxpbmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRpb24oQ0NhbGxIZWxw
ZXJzJiBqaXQsIEdQUlJlZyBwb2ludGVyR1BSKQotewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNOb25aZXJvID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxI
ZWxwZXJzOjpOb25aZXJvLCBwb2ludGVyR1BSKTsKLSAgICBqaXQuYnJlYWtwb2ludCgpOwotICAg
IGlzTm9uWmVyby5saW5rKCZqaXQpOwotICAgIGppdC5wdXNoKHBvaW50ZXJHUFIpOwotICAgIGpp
dC5sb2FkOChwb2ludGVyR1BSLCBwb2ludGVyR1BSKTsKLSAgICBqaXQucG9wKHBvaW50ZXJHUFIp
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaml0KTsKLSAgICBVTlVTRURfUEFSQU0ocG9pbnRl
ckdQUik7Ci0jZW5kaWYKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGpp
dCh2bSk7Ci0gICAgCi0gICAgLy8gV2Ugd2lsbCBqdW1wIHRvIGhlcmUgaWYgdGhlIEpJVCBjb2Rl
IHRoaW5rcyBpdCdzIG1ha2luZyBhIGNhbGwsIGJ1dCB0aGUKLSAgICAvLyBsaW5raW5nIGhlbHBl
ciAoQysrIGNvZGUpIGRlY2lkZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGluc3RlYWQuIFdlIHdp
bGwKLSAgICAvLyBoYXZlIHNhdmVkIHRoZSBjYWxsUmV0dXJuSW5kZXggaW4gdGhlIGZpcnN0IGFy
Z3VtZW50cyBvZiBKSVRTdGFja0ZyYW1lLgotICAgIC8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuIGFk
ZHJlc3Mgd2lsbCBiZSBvbiB0aGUgc3RhY2sgYXQgdGhpcyBwb2ludCwgc28gd2UKLSAgICAvLyBu
ZWVkIHRvIHJlbW92ZSBpdCBhbmQgZHJvcCBpdCBvbiB0aGUgZmxvb3IsIHNpbmNlIHdlIGRvbid0
IGNhcmUgYWJvdXQgaXQuCi0gICAgLy8gRmluYWxseSBub3RlIHRoYXQgdGhlIGNhbGwgZnJhbWUg
cmVnaXN0ZXIgcG9pbnRzIGF0IHRoZSBjYWxsZWUgZnJhbWUsIHNvCi0gICAgLy8gd2UgbmVlZCB0
byBwb3AgaXQuCi0gICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwotICAgIGppdC5sb2FkUHRyKAotICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVy
KSkgKiBKU1N0YWNrOjpDYWxsZXJGcmFtZSksCi0gICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5wZWVrNjQoR1BSSW5mbzo6bm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOwotI2Vsc2UK
LSAgICBqaXQucGVlayhHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNL
RlJBTUVfQVJHU19JTkRFWCk7Ci0jZW5kaWYKLSAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4obG9va3VwRXhj
ZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBlbWl0UG9pbnRlclZh
bGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBqaXQuY2FsbChHUFJJbmZv
Ojpub25BcmdHUFIwKTsKLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIpOwotICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7
Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVO
S19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiREZHIHRocm93
IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwotfQotCi1zdGF0aWMgdm9p
ZCBzbG93UGF0aEZvcigKLSAgICBDQ2FsbEhlbHBlcnMmIGppdCwgVk0qIHZtLCBQX0RGR09wZXJh
dGlvbl9FIHNsb3dQYXRoRnVuY3Rpb24pCi17Ci0gICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVz
c0FmdGVyQ2FsbChHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBlbWl0UG9pbnRlclZhbGlkYXRp
b24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAg
IEdQUkluZm86Om5vbkFyZ0dQUjIsCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAg
ICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBDKSk7
Ci0gICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENh
bGxGcmFtZSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBqaXQucG9rZTY0KEdQUkluZm86Om5v
blByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKLSNlbHNl
Ci0gICAgaml0LnBva2UoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFD
S0ZSQU1FX0FSR1NfSU5ERVgpOwotI2VuZGlmCi0gICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0
YXRlKCk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oc2xvd1BhdGhGdW5jdGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAg
ICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBq
aXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAKLSAgICAvLyBUaGlzIHNsb3cgY2Fs
bCB3aWxsIHJldHVybiB0aGUgYWRkcmVzcyBvZiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAgICAv
LyAxKSBFeGNlcHRpb24gdGhyb3dpbmcgdGh1bmsuCi0gICAgLy8gMikgSG9zdCBjYWxsIHJldHVy
biB2YWx1ZSByZXR1cm5lciB0aGluZ3kuCi0gICAgLy8gMykgVGhlIGZ1bmN0aW9uIHRvIGNhbGwu
Ci0gICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAg
ICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBDKSwKLSAg
ICAgICAgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQuc3RvcmVQ
dHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3Rlcikp
ICogSlNTdGFjazo6UmV0dXJuUEMpKTsKLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwotICAgIGppdC5yZXN0b3JlUmV0dXJu
QWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwot
ICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
LSAgICBqaXQuanVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvclRodW5rR2VuZXJhdG9yKAotICAgIFZNKiB2bSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotewotICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBp
cyBvbiB0aGUgc3RhY2sgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKLSAg
ICAvLyBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZSBt
YWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwKLSAgICAvLyB0byBwZXJmb3JtIGxpbmtpbmcgYW5kIGxh
enkgY29tcGlsYXRpb24gaWYgbmVjZXNzYXJ5LiBXZSBleHBlY3QgdGhlIGNhbGxlZQotICAgIC8v
IHRvIGJlIGluIG5vbkFyZ0dQUjAvbm9uQXJnR1BSMSAocGF5bG9hZC90YWcpLCB0aGUgY2FsbCBm
cmFtZSB0byBoYXZlIGFscmVhZHkKLSAgICAvLyBiZWVuIGFkanVzdGVkLCBub25QcmVzZXJ2ZWRO
b25SZXR1cm5HUFIgaG9sZHMgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGluZGV4LAotICAgIC8vIGFu
ZCBhbGwgb3RoZXIgcmVnaXN0ZXJzIHRvIGJlIGF2YWlsYWJsZSBmb3IgdXNlLiBXZSB1c2UgSklU
U3RhY2tGcmFtZTo6YXJncwotICAgIC8vIHRvIHNhdmUgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFj
cm9zcyBjYWxscy4KLSAgICAKLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKLSAgICAKLSAgICBz
bG93UGF0aEZvcihqaXQsIHZtLCBraW5kID09IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uTGlua0Nh
bGwgOiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVf
Q09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiREZHIGxpbmsgJXMgc2xvdyBw
YXRoIHRodW5rIiwga2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7
Ci19Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2
bSkKLXsKLSAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCk7
Ci19Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQotewotICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JD
b25zdHJ1Y3QpOwotfQotCi0vLyBGb3IgY2xvc3VyZSBvcHRpbWl6YXRpb25zLCB3ZSBvbmx5IGlu
Y2x1ZGUgY2FsbHMsIHNpbmNlIGlmIHlvdSdyZSB1c2luZyBjbG9zdXJlcyBmb3IKLS8vIG9iamVj
dCBjb25zdHJ1Y3Rpb24gdGhlbiB5b3UncmUgZ29pbmcgdG8gbG9zZSBiaWcgdGltZSBhbnl3YXku
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQotewotICAgIENDYWxsSGVscGVycyBqaXQodm0pOwotICAgIAotICAgIHNsb3dQYXRoRm9y
KGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbCk7Ci0gICAgCi0gICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiREZHIGxpbmsgY2xvc3VyZSBjYWxsIHNsb3cgcGF0
aCB0aHVuayIpKTsKLX0KLQotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9y
VGh1bmtHZW5lcmF0b3IoCi0gICAgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
Ci17Ci0gICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjaywgb3IgaW4gdGhl
IGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKLSAgICAvLyBqdW1wIHRvIHRoZSBjYWxsZWUs
IG9yIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdlCi0g
ICAgLy8gbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsIHRvIHRoZSBhcHByb3ByaWF0ZSBERkcgb3Bl
cmF0aW9uLgotCi0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7Ci0gICAgCi0gICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKLQotICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBh
IHN0b3J5IGZvciBlbGltaW5hdGluZyB0aGVzZSBjaGVja3MuIEluIG1hbnkgY2FzZXMsCi0gICAg
Ly8gdGhlIERGRyBrbm93cyB0aGF0IHRoZSB2YWx1ZSBpcyBkZWZpbml0ZWx5IGEgY2VsbCwgb3Ig
ZGVmaW5pdGVseSBhIGZ1bmN0aW9uLgotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc2xv
d0Nhc2UuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoVGVzdDY0KAotICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpub25BcmdHUFIwLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpKTsKLSNlbHNlCi0gICAgc2xvd0Nhc2UuYXBwZW5kKAotICAgICAgICBqaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpub25B
cmdHUFIxLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpKTsKLSNlbmRpZgotICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMik7Ci0gICAgc2xvd0Nhc2UuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNo
UHRyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIyLCBTdHJ1Y3R1cmU6OmNsYXNz
SW5mb09mZnNldCgpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihK
U0Z1bmN0aW9uOjppbmZvKCkpKSk7Ci0gICAgCi0gICAgLy8gTm93IHdlIGtub3cgd2UgaGF2ZSBh
IEpTRnVuY3Rpb24uCi0gICAgCi0gICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1
dGFibGUoKSksCi0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIHNsb3dDYXNlLmFw
cGVuZCgKLSAgICAgICAgaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpM
ZXNzVGhhbiwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAg
ICAgICBHUFJJbmZvOjpub25BcmdHUFIyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZOdW1QYXJh
bWV0ZXJzRm9yKGtpbmQpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDApKSk7Ci0gICAgCi0gICAgLy8gTm93IHdlIGtub3cgdGhhdCB3ZSBoYXZlIGEgQ29kZUJsb2Nr
LCBhbmQgd2UncmUgY29tbWl0dGVkIHRvIG1ha2luZyBhIGZhc3QKLSAgICAvLyBjYWxsLgotICAg
IAotICAgIGppdC5sb2FkUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLAotICAgICAg
ICBHUFJJbmZvOjpub25BcmdHUFIxKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5zdG9y
ZTY0KAotICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIxLAotICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNr
OjpTY29wZUNoYWluKSk7Ci0jZWxzZQotICAgIGppdC5zdG9yZVB0cigKLSAgICAgICAgR1BSSW5m
bzo6bm9uQXJnR1BSMSwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAg
ICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6U2NvcGVDaGFpbiArCi0gICAg
ICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKSk7Ci0gICAgaml0LnN0b3JlMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Ci0gICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNo
YWluICsKLSAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSkpOwotI2VuZGlmCi0gICAgCi0gICAgaml0LmxvYWRQdHIoCi0gICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIyLCBFeGVjdXRhYmxlQmFz
ZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCkpLAotICAgICAgICBHUFJJ
bmZvOjpyZWdUMCk7Ci0gICAgCi0gICAgLy8gTWFrZSBhIHRhaWwgY2FsbC4gVGhpcyB3aWxsIHJl
dHVybiBiYWNrIHRvIERGRyBjb2RlLgotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQ
UkluZm86OnJlZ1QwKTsKLSAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMCk7Ci0KLSAgICBzbG93
Q2FzZS5saW5rKCZqaXQpOwotICAgIAotICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGlu
Zywgc28gcmV2ZXJ0IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KLSAgICAKLSAgICBzbG93UGF0aEZv
cihqaXQsIHZtLCBraW5kID09IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uVmlydHVhbENhbGwgOiBv
cGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09E
RSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiREZHIHZpcnR1YWwgJXMgc2xvdyBw
YXRoIHRodW5rIiwga2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7
Ci19Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKFZN
KiB2bSkKLXsKLSAgICByZXR1cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9y
Q2FsbCk7Ci19Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Io
dm0sIENvZGVGb3JDb25zdHJ1Y3QpOwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUaHVua3MuaAkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTYgKzQwLDYgQEAgbmFtZXNwYWNl
IERGRyB7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2Vu
ZXJhdG9yKFZNKik7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qKTsKLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3Ry
dWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9z
dXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0
dWFsQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVh
bENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKik7Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE1NjQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogICAgIG1hY3JvKG9zckV4aXQsICJ3ZWJraXRfb3NyX2V4aXQiLCBmdW5jdGlv
blR5cGUodm9pZFR5cGUsIGJvb2xlYW4sIGludDMyLCBWYXJpYWRpYykpCiAKICNkZWZpbmUgRk9S
X0VBQ0hfRlVOQ1RJT05fVFlQRShtYWNybykgXAotICAgIG1hY3JvKElfREZHT3BlcmF0aW9uX0VK
c3MsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKEpf
REZHT3BlcmF0aW9uX0UsIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50UHRyKSkgXAotICAgIG1hY3Jv
KFBfREZHT3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludFB0cikp
IFwKLSAgICBtYWNybyhWX0RGR09wZXJhdGlvbl9FT1pELCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludFB0ciwgaW50UHRyLCBpbnQzMiwgZG91YmxlVHlwZSkpIFwKLSAgICBtYWNybyhWX0RGR09w
ZXJhdGlvbl9FT1pKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQz
MiwgaW50NjQpKSBcCi0gICAgbWFjcm8oWl9ERkdPcGVyYXRpb25fRCwgZnVuY3Rpb25UeXBlKGlu
dDMyLCBkb3VibGVUeXBlKSkKKyAgICBtYWNybyhJX0pJVE9wZXJhdGlvbl9FSnNzLCBmdW5jdGlv
blR5cGUoaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKKyAgICBtYWNybyhKX0pJVE9wZXJhdGlv
bl9FLCBmdW5jdGlvblR5cGUoaW50NjQsIGludFB0cikpIFwKKyAgICBtYWNybyhQX0pJVE9wZXJh
dGlvbl9FQywgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIpKSBcCisgICAgbWFj
cm8oVl9KSVRPcGVyYXRpb25fRU9aRCwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGlu
dFB0ciwgaW50MzIsIGRvdWJsZVR5cGUpKSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRU9a
SiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0ciwgaW50MzIsIGludDY0KSkg
XAorICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0QsIGZ1bmN0aW9uVHlwZShpbnQzMiwgZG91Ymxl
VHlwZSkpCiAKIGNsYXNzIEludHJpbnNpY1JlcG9zaXRvcnkgOiBwdWJsaWMgQ29tbW9uVmFsdWVz
IHsKIHB1YmxpYzoKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogI3VuZGVmIEZVTkNUSU9OX1RZ
UEVfR0VUVEVSCiAgICAgCiAjZGVmaW5lIEZVTkNUSU9OX1RZUEVfUkVTT0xWRVIodHlwZU5hbWUs
IHR5cGUpIFwKLSAgICBMVHlwZSBvcGVyYXRpb25UeXBlKERGRzo6dHlwZU5hbWUpICAgICAgICAg
XAorICAgIExUeXBlIG9wZXJhdGlvblR5cGUoSlNDOjp0eXBlTmFtZSkgICAgICAgICBcCiAgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgcmV0
dXJuIHR5cGVOYW1lKCk7ICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lv
biAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5NCw3ICsxOTk0LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMgdW5hY2NlcHRhYmx5IHNsb3cuCiAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEKICAgICAgICAgCi0gICAg
ICAgIEpfREZHT3BlcmF0aW9uX0UgZnVuY3Rpb24gPQorICAgICAgICBKX0pJVE9wZXJhdGlvbl9F
IGZ1bmN0aW9uID0KICAgICAgICAgICAgIG1fbm9kZS0+b3AoKSA9PSBDYWxsID8gb3BlcmF0aW9u
RlRMQ2FsbCA6IG9wZXJhdGlvbkZUTENvbnN0cnVjdDsKICAgICAgICAgCiAgICAgICAgIGludCBk
dW1teVRoaXNBcmd1bWVudCA9IG1fbm9kZS0+b3AoKSA9PSBDYWxsID8gMCA6IDE7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmgJKHJldmlz
aW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgewogLy8gVGFrZXMgdGhlIGNhbGwgZnJhbWUgYW5kIHRoZSBpbmRleCBvZiB0
aGUgZXhpdCwgYW5kIHJldHVybnMgdGhlIGFkZHJlc3MgdG8KIC8vIGp1bXAgdG8uCiBleHRlcm4g
IkMiIHsKLXZvaWQqIERGR19PUEVSQVRJT04gY29tcGlsZUZUTE9TUkV4aXQoRXhlY1N0YXRlKiwg
dW5zaWduZWQgZXhpdElEKSBXVEZfSU5URVJOQUw7Cit2b2lkKiBKSVRfT1BFUkFUSU9OIGNvbXBp
bGVGVExPU1JFeGl0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGV4aXRJRCkgV1RGX0lOVEVSTkFMOwog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
Myw2ICs0MTMsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRp
bmdUaGlzKDApKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgfQogCisgICAgdm9pZCB3cml0ZUJh
cnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgV3Jp
dGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG93
bmVyKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKHNjcmF0Y2gyKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOworICAgICAgICBB
U1NFUlQob3duZXIgIT0gc2NyYXRjaDEpOworICAgICAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRj
aDIpOworICAgICAgICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOworICAgICAgICAKKyNp
ZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgICAgIGVtaXRDb3VudChXcml0
ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7CisjZW5kaWYKKyAgICB9
CisKICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXBG
b3IoQ29kZUJsb2NrKik7CiAgICAgCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5NywyMyArNzk3LDIzIEBAIHZvaWQgSklUOjps
aW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNGdW4KICAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5m
by0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxsCiAgICAgICAgICAgICAgICB8fCBjYWxs
TGlua0luZm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MpOwogICAgICAg
ICBpZiAoY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGwpIHsKLSAg
ICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IpLmNvZGUoKSk7
CisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1
cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIob2xkU3R5bGVMaW5rQ2xvc3VyZUNhbGxHZW5lcmF0
b3IpLmNvZGUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0t
PmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0
Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0g
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24s
IHZtLT5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZt
LT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpKTsK
IH0KIAogdm9pZCBKSVQ6OmxpbmtTbG93Q2FsbChDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jaywg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CiAKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxs
TGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbGVyQ29kZUJsb2NrLT52bSgpLT5nZXRD
VElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBjYWxsZXJDb2RlQmxvY2st
PnZtKCktPmdldENUSVN0dWIob2xkU3R5bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3ICsyMTcs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1CiAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwogCiAgICAgZW1pdExvYWQoSlNTdGFjazo6Q2FsbGVlLCByZWdUMSwgcmVn
VDApOwotICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVy
YXRvcikuY29kZSgpKTsKKyAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIob2xkU3R5
bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayht
X2NvZGVCbG9jayk7CiAgICAgCkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGxTbG93Q2FzZShPcGNvZGVJRAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7CiAgICAgCi0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2Fs
bChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1
Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxHZW5lcmF0b3Ip
LmNvZGUoKSk7CisgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9
PSBvcF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlTGlua0NvbnN0cnVjdEdl
bmVyYXRvcikuY29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDYWxsR2VuZXJh
dG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICBl
bWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7CkBAIC0zMzUsNyArMzM1LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwoQ2FsbAogICAgIAogICAgIHBhdGNoQnVmZmVy
LmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlci5sYWJl
bEF0T2Zmc2V0KDApKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxh
YmVsKG1fdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSkpOworICAg
IHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1
YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAKICAgICBSZWZQ
dHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgQ2xv
c3VyZUNhbGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERSgKQEAgLTM1Myw3ICsz
NTMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgcmVw
YXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoCiAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0
T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2lu
KSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkp
KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgbV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwg
bV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwog
ICAgIAogICAgIGNhbGxMaW5rSW5mby0+c3R1YiA9IHN0dWJSb3V0aW5lLnJlbGVhc2UoKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTU2NDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJ
bnN0cnUKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlcjY0KEpTU3RhY2s6OkNhbGxlZSwgcmVnVDApOwotICAgIGVtaXROYWtlZENhbGwobV92
bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBlbWl0TmFr
ZWRDYWxsKG1fdm0tPmdldENUSVN0dWIob2xkU3R5bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29k
ZSgpKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CiAgICAgCkBAIC0yMzMs
NyArMjMzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRAogCiAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIAotICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXRO
YWtlZENhbGwob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gbV92bS0+Z2V0Q1RJU3R1YihsaW5r
Q29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkgOiBtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsR2Vu
ZXJhdG9yKS5jb2RlKCkpOworICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwob3Bj
b2RlSUQgPT0gb3BfY29uc3RydWN0ID8gbV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDb25z
dHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IG1fdm0tPmdldENUSVN0dWIob2xkU3R5bGVMaW5rQ2Fs
bEdlbmVyYXRvcikuY29kZSgpKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7
CiAgICAgCkBAIC0yNjMsNyArMjYzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3Vy
ZUNhbGwoQ2FsbAogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIo
Y29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25l
LCBjYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlci5sYWJlbEF0T2Zmc2V0KDApKTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKG1fdm0tPmdldENUSVN0dWIodmly
dHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywg
Q29kZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2Vu
ZXJhdG9yKS5jb2RlKCkpKTsKICAgICAKICAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGlu
ZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKICAg
ICAgICAgRklOQUxJWkVfQ09ERSgKQEAgLTI4MSw3ICsyODEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1
bXAoCiAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJl
Z2lzdGVyKGNhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luKSwKICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV92bS0+Z2V0Q1RJU3R1Yih2
aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhj
YWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV92bS0+Z2V0Q1RJU3R1YihvbGRTdHls
ZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgIAogICAgIGNhbGxMaW5rSW5mby0+
c3R1YiA9IHN0dWJSb3V0aW5lLnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9uV3JhcHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbldyYXBwZXJzLmgJKHJldmlzaW9uIDE1NjIzNikJ
KGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFwcGVycy5oOjE1
NjIzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9uV3JhcHBlcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpJVE9wZXJhdGlvbldyYXBwZXJzX2gK
KyNkZWZpbmUgSklUT3BlcmF0aW9uV3JhcHBlcnNfaAorCisjaW5jbHVkZSA8d3RmL0NvbXBpbGVy
Lmg+CisjaW5jbHVkZSA8d3RmL0lubGluZUFTTS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworI2lm
IENQVShNSVBTKQorI2lmIFdURl9NSVBTX1BJQworI2RlZmluZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5
KGZ1bmN0aW9uKSBcCisgICAgICAgICIuc2V0IG5vcmVvcmRlciIgIlxuIiBcCisgICAgICAgICIu
Y3Bsb2FkICQyNSIgIlxuIiBcCisgICAgICAgICIuc2V0IHJlb3JkZXIiICJcbiIgXAorICAgICAg
ICAibGEgJHQ5LCAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIlxuIgorI2Vsc2UKKyNkZWZp
bmUgTE9BRF9GVU5DVElPTl9UT19UOShmdW5jdGlvbikgIiIgIlxuIgorI2VuZGlmCisjZW5kaWYK
KworI2lmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFg4Nl82NCkKKworI2RlZmluZSBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJlZ2lzdGVyKSBcCisgICAgYXNt
KCBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJ
REVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
OiIgIlxuIiBcCisgICAgICAgICJtb3YgKCVyc3ApLCAlIiBTVFJJTkdJWkUocmVnaXN0ZXIpICJc
biIgXAorICAgICAgICAiam1wICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uIyNXaXRoUmV0dXJu
QWRkcmVzcykgIlxuIiBcCisgICAgKTsKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTUyhmdW5jdGlvbiwgcnNpKQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTKGZ1bmN0aW9uLCByY3gpCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkkoZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1MoZnVuY3Rpb24sIHJjeCkKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTUyhmdW5jdGlvbiwgcjgpCisKKyNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFg4NikKKwor
I2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIG9m
ZnNldCkgXAorICAgIGFzbSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZ
TUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAi
XG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgICJt
b3YgKCVlc3ApLCAlZWF4XG4iIFwKKyAgICAgICAgIm1vdiAlZWF4LCAiIFNUUklOR0laRShvZmZz
ZXQpICIoJWVzcClcbiIgXAorICAgICAgICAiam1wICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9u
IyNXaXRoUmV0dXJuQWRkcmVzcykgIlxuIiBcCisgICAgKTsKKyNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgOCkKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMTYpCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDIwKQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAyNCkKKworI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUo
QVJNX1RIVU1CMikKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRShmdW5jdGlvbikgXAorICAgIGFzbSAoIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIu
YWxpZ24gMiIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJc
biIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICAiLnRodW1iIiAiXG4i
IFwKKyAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwK
KyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgICJtb3YgYTIs
IGxyIiAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRo
UmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAgICIu
dGV4dCIgIlxuIiBcCisgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIg
XAorICAgICIudGh1bWIiICJcbiIgXAorICAgICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFS
QU0oZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4i
IFwKKyAgICAgICAgIm1vdiBhNCwgbHIiICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVS
RU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisvLyBF
bmNvZGVkSlNWYWx1ZSBpbiBKU1ZBTFVFMzJfNjQgaXMgYSA2NC1iaXQgaW50ZWdlci4gV2hlbiBi
ZWluZyBjb21waWxlZCBpbiBBUk0gRUFCSSwgaXQgbXVzdCBiZSBhbGlnbmVkIGV2ZW4tbnVtYmVy
ZWQgcmVnaXN0ZXIgKHIwLCByMiBvciBbc3BdKS4KKy8vIEFzIGEgcmVzdWx0LCByZXR1cm4gYWRk
cmVzcyB3aWxsIGJlIGF0IGEgNC1ieXRlIGZ1cnRoZXIgbG9jYXRpb24gaW4gdGhlIGZvbGxvd2lu
ZyBjYXNlcy4KKyNpZiBDT01QSUxFUl9TVVBQT1JUUyhFQUJJKSAmJiBDUFUoQVJNKQorI2RlZmlu
ZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgInN0ciBsciwgW3NwLCAjNF0i
CisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgInN0ciBsciwg
W3NwLCAjOF0iCisjZWxzZQorI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVT
U19FSkkgInN0ciBsciwgW3NwLCAjMF0iCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVS
Tl9BRERSRVNTX0VKQ0kgInN0ciBsciwgW3NwLCAjNF0iCisjZW5kaWYKKworI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCisgICAgYXNt
ICggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAiLmds
b2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVu
Y3Rpb24pICJcbiIgXAorICAgICIudGh1bWIiICJcbiIgXAorICAgICIudGh1bWJfZnVuYyAiIFRI
VU1CX0ZVTkNfUEFSQU0oZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rp
b24pICI6IiAiXG4iIFwKKyAgICAgICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1Nf
RUpJICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhS
ZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAgICIu
dGV4dCIgIlxuIiBcCisgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIg
XAorICAgICIudGh1bWIiICJcbiIgXAorICAgICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFS
QU0oZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4i
IFwKKyAgICAgICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAiXG4iIFwK
KyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVz
cyIgIlxuIiBcCisgICAgKTsKKworI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoQVJNX1RSQURJ
VElPTkFMKQorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
KGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9i
bCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0
aW9uKSAiXG4iIFwKKyAgICBJTkxJTkVfQVJNX0ZVTkNUSU9OKGZ1bmN0aW9uKSBcCisgICAgU1lN
Qk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICAibW92IGEyLCBsciIgIlxu
IiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFk
ZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAorICAgIGFzbSAoIFwKKyAgICAiLnRleHQiICJc
biIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBI
SURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgSU5MSU5FX0FSTV9GVU5DVElPTihmdW5j
dGlvbikgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAg
Im1vdiBhNCwgbHIiICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlv
bikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisvLyBFbmNvZGVkSlNWYWx1
ZSBpbiBKU1ZBTFVFMzJfNjQgaXMgYSA2NC1iaXQgaW50ZWdlci4gV2hlbiBiZWluZyBjb21waWxl
ZCBpbiBBUk0gRUFCSSwgaXQgbXVzdCBiZSBhbGlnbmVkIGV2ZW4tbnVtYmVyZWQgcmVnaXN0ZXIg
KHIwLCByMiBvciBbc3BdKS4KKy8vIEFzIGEgcmVzdWx0LCByZXR1cm4gYWRkcmVzcyB3aWxsIGJl
IGF0IGEgNC1ieXRlIGZ1cnRoZXIgbG9jYXRpb24gaW4gdGhlIGZvbGxvd2luZyBjYXNlcy4KKyNp
ZiBDT01QSUxFUl9TVVBQT1JUUyhFQUJJKSAmJiBDUFUoQVJNKQorI2RlZmluZSBJTlNUUlVDVElP
Tl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgInN0ciBsciwgW3NwLCAjNF0iCisjZGVmaW5lIElO
U1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgInN0ciBsciwgW3NwLCAjOF0iCisj
ZWxzZQorI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgInN0ciBs
ciwgW3NwLCAjMF0iCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VK
Q0kgInN0ciBsciwgW3NwLCAjNF0iCisjZW5kaWYKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAgICIu
dGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIg
XAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBJTkxJTkVfQVJNX0ZVTkNU
SU9OKGZ1bmN0aW9uKSBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAor
ICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgIlxuIiBcCisgICAg
ICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJc
biIgXAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKQ0koZnVuY3Rpb24pIFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAg
ICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1C
T0woZnVuY3Rpb24pICJcbiIgXAorICAgIElOTElORV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwK
KyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgIElOU1RSVUNU
SU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxf
UkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisK
KyNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKE1JUFMpCisKKyNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBhc20oIFwKKyAgICAi
LnRleHQiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4i
IFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhm
dW5jdGlvbikgIjoiICJcbiIgXAorICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dp
dGhSZXR1cm5BZGRyZXNzKSBcCisgICAgICAgICJtb3ZlICRhMSwgJHJhIiAiXG4iIFwKKyAgICAg
ICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxu
IiBcCisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUNJKGZ1bmN0aW9uKSBcCisgICAgYXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAi
Lmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0wo
ZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwK
KyAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAor
ICAgICAgICAibW92ZSAkYTMsICRyYSIgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJF
TkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNkZWZp
bmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAor
ICAgIGFzbSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJ
TkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAg
ICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgTE9BRF9GVU5DVElPTl9U
T19UOShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKKyAgICAgICAgInN3ICRyYSwgMjAo
JHNwKSIgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0
aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKKyAgICBhc20oIFwKKyAgICAi
LnRleHQiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4i
IFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhm
dW5jdGlvbikgIjoiICJcbiIgXAorICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dp
dGhSZXR1cm5BZGRyZXNzKSBcCisgICAgICAgICJzdyAkcmEsIDI0KCRzcCkiICJcbiIgXAorICAg
ICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAi
XG4iIFwKKyAgICApOworCisjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShTSDQpCisKKyNkZWZp
bmUgU0g0X1NDUkFUQ0hfUkVHSVNURVIgInIxMSIKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAorICAgIGFzbSggXAorICAgICIudGV4
dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAor
ICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0
aW9uKSAiOiIgIlxuIiBcCisgICAgICAgICJzdHMgcHIsIHI1IiAiXG4iIFwKKyAgICAgICAgImJy
YSAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwK
KyAgICAgICAgIm5vcCIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCisgICAgYXNtKCBcCisgICAgIi50
ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBc
CisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgInN0cyBwciwgcjciICJcbiIgXAorICAgICAgICAi
bW92LmwgMmYsICIgU0g0X1NDUkFUQ0hfUkVHSVNURVIgIlxuIiBcCisgICAgICAgICJicmFmICIg
U0g0X1NDUkFUQ0hfUkVHSVNURVIgIlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAgICAg
ICAiMTogLmJhbGlnbiA0IiAiXG4iIFwKKyAgICAgICAgIjI6IC5sb25nICIgTE9DQUxfUkVGRVJF
TkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MtMWIiICJcbiIgXAorICAgICk7CisKKyNk
ZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCBvZmZz
ZXQsIHNjcmF0Y2gpIFwKKyAgICBhc20oIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAg
ICAgICAic3RzIHByLCAiIHNjcmF0Y2ggIlxuIiBcCisgICAgICAgICJtb3YubCAiIHNjcmF0Y2gg
IiwgQCgiIFNUUklOR0laRShvZmZzZXQpICIsIHIxNSkiICJcbiIgXAorICAgICAgICAibW92Lmwg
MmYsICIgc2NyYXRjaCAiXG4iIFwKKyAgICAgICAgImJyYWYgIiBzY3JhdGNoICJcbiIgXAorICAg
ICAgICAibm9wIiAiXG4iIFwKKyAgICAgICAgIjE6IC5iYWxpZ24gNCIgIlxuIiBcCisgICAgICAg
ICIyOiAubG9uZyAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNz
LTFiIiAiXG4iIFwKKyAgICApOworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkkoZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1MoZnVuY3Rpb24sIDAsIFNINF9TQ1JBVENIX1JFR0lTVEVSKQorI2RlZmluZSBGVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCA0LCBTSDRfU0NSQVRDSF9SRUdJU1RF
UikKKworI2VuZGlmCisKKyNkZWZpbmUgUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRShmdW5jdGlvbikgXAordm9pZCogSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJl
dHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9N
X0FTTSBXVEZfSU5URVJOQUw7IFwKK0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FKGZ1bmN0aW9uKQorCisjZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0UoZnVuY3Rpb24pIFwKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rp
b24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVS
RU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCitGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRShmdW5jdGlvbikKKworI2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0
cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRF
Uk5BTDsgXAorRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlv
bikKKworI2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkko
ZnVuY3Rpb24pIFwKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKiwgUmV0
dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKK0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pCisKKyNkZWZpbmUg
Vl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAor
dm9pZCBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIp
IFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCitGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBKSVRPcGVyYXRpb25XcmFwcGVyc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9uV3JhcHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbldyYXBwZXJzLmgJKHdvcmtpbmcgY29weSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9uV3JhcHBlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTQgQEAKICNpZm5kZWYgSklUT3BlcmF0aW9uV3JhcHBl
cnNfaAogI2RlZmluZSBKSVRPcGVyYXRpb25XcmFwcGVyc19oCiAKKyNpbmNsdWRlICJKSVRPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0lubGlu
ZUFTTS5oPgogCisjaWYgQ09NUElMRVIoTVNWQykKKyNpbmNsdWRlIDxpbnRyaW4uaD4KKyNlbmRp
ZgorCiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIENQVShNSVBTKQpAQCAtNTMsMTAgKzU4LDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAibW92ICglcnNwKSwgJSIgU1RSSU5HSVpFKHJlZ2lz
dGVyKSAiXG4iIFwKICAgICAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbiMjV2l0
aFJldHVybkFkZHJlc3MpICJcbiIgXAogICAgICk7Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJzaSkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByY3gpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1MoZnVuY3Rpb24sIHI4KQorI2RlZmluZSBfUF9GVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByc2kpCisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJzaSkKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4KQorI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByY3gpCisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHI4KQogCiAjZWxpZiBDT01QSUxFUihHQ0Mp
ICYmIENQVShYODYpCiAKQEAgLTcwLDE0ICs3NiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgIm1vdiAlZWF4LCAiIFNUUklOR0laRShvZmZzZXQpICIoJWVzcClcbiIgXAogICAgICAgICAi
am1wICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgIlxuIiBc
CiAgICAgKTsKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0Uo
ZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlv
biwgOCkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShm
dW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwg
MTYpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVu
Y3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDIw
KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5j
dGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAyNCkK
KyNkZWZpbmUgX1BfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rp
b24pICAgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgOCkK
KyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rp
b24pICAgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgOCkK
KyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5j
dGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMTYp
CisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVu
Y3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDIw
KQorI2RlZmluZSBfVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShm
dW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAy
NCkKIAogI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoQVJNX1RIVU1CMikKIAotI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAorI2RlZmlu
ZSBfUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAog
ICAgIGFzbSAoIFwKICAgICAiLnRleHQiICJcbiIgXAogICAgICIuYWxpZ24gMiIgIlxuIiBcCkBA
IC05MCw3ICs5NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgImIgIiBMT0NBTF9SRUZF
UkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCiAgICAgKTsKIAotI2Rl
ZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBc
CisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0
aW9uKSBcCisgICAgX1BfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVu
Y3Rpb24pCisKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VDSShmdW5jdGlvbikgXAogICAgIGFzbSAoIFwKICAgICAiLnRleHQiICJcbiIgXAogICAgICIu
YWxpZ24gMiIgIlxuIiBcCkBAIC0xMTMsNyArMTIzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZGVm
aW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgInN0ciBsciwgW3NwLCAj
NF0iCiAjZW5kaWYKIAotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUpJKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKICAgICBhc20gKCBcCiAgICAgIi50ZXh0IiAiXG4i
IFwKICAgICAiLmFsaWduIDIiICJcbiIgXApAQCAtMTI2LDcgKzEzNiw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5B
ZGRyZXNzIiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAg
ICIudGV4dCIgIlxuIiBcCiAgICAgIi5hbGlnbiAyIiAiXG4iIFwKQEAgLTE0MSw3ICsxNTEsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoQVJNX1RSQURJ
VElPTkFMKQogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
KGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9QX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAg
Ii5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXApAQCAtMTUyLDcgKzE2Miwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rp
b24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCiAgICAgKTsKIAotI2RlZmluZSBGVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9K
X0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAg
X1BfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCisKKyNk
ZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlv
bikgXAogICAgIGFzbSAoIFwKICAgICAiLnRleHQiICJcbiIgXAogICAgICIuZ2xvYmwgIiBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKQEAgLTE3Myw3ICsxODYsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3Ry
IGxyLCBbc3AsICM0XSIKICNlbmRpZgogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAogICAgIGFzbSAoIFwKICAgICAi
LnRleHQiICJcbiIgXAogICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4i
IFwKQEAgLTE4NCw3ICsxOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgImIgIiBMT0NB
TF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCiAgICAgKTsK
IAotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5j
dGlvbikgXAorI2RlZmluZSBfVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUpDSShmdW5jdGlvbikgXAogICAgIGFzbSAoIFwKICAgICAiLnRleHQiICJcbiIgXAogICAgICIu
Z2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKQEAgLTE5Nyw3ICsyMTAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoTUlQUykKIAot
I2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikg
XAorI2RlZmluZSBfUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5j
dGlvbikgXAogICAgIGFzbSggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZ
TUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXApAQCAtMjA4LDcgKzIyMSwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0
dXJuQWRkcmVzcyIgIlxuIiBcCiAgICAgKTsKIAotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgX1BfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCisKKyNkZWZpbmUgX0pfRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAogICAgIGFz
bSggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICJcbiIgXApAQCAtMjE5LDcgKzIzNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4i
IFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkkoZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAogICAgIGFzbSggXAogICAgICIudGV4dCIgIlxuIiBc
CiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXApAQCAtMjMwLDcg
KzI0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShm
dW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5lIEZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCisjZGVm
aW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9u
KSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0yNDUsNyArMjYxLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICNkZWZpbmUgU0g0X1NDUkFUQ0hfUkVHSVNURVIgInIxMSIKIAotI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAorI2RlZmluZSBf
UF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAogICAg
IGFzbSggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkco
ZnVuY3Rpb24pICJcbiIgXApAQCAtMjU2LDcgKzI3MiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgIm5vcCIgIlxuIiBcCiAgICAgKTsKIAotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgX1BfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCisKKyNkZWZpbmUgX0pfRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAogICAgIGFz
bSggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICJcbiIgXApAQCAtMjg1LDMwICszMDQsNDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICIyOiAubG9uZyAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRy
ZXNzLTFiIiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1MoZnVuY3Rpb24sIDAsIFNINF9TQ1JBVENIX1JFR0lTVEVSKQotI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCA0LCBTSDRfU0NSQVRDSF9SRUdJ
U1RFUikKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
SShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlv
biwgMCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDQsIFNINF9TQ1JBVENIX1JFR0lTVEVSKQorCisjZWxp
ZiBDT01QSUxFUihNU1ZDKSAmJiBDUFUoWDg2KQorCisjZGVmaW5lIF9QX0ZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgdm9pZCogSklUX09QRVJB
VElPTiBmdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGZ1bmN0aW9uIyNXaXRoUmV0
dXJuQWRkcmVzcyhleGVjLCBSZXR1cm5BZGRyZXNzUHRyKCoodm9pZCoqKV9BZGRyZXNzT2ZSZXR1
cm5BZGRyZXNzKCkpKTsgfQorCisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBmdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGZ1bmN0aW9uIyNXaXRoUmV0dXJu
QWRkcmVzcyhleGVjLCBSZXR1cm5BZGRyZXNzUHRyKCoodm9pZCoqKV9BZGRyZXNzT2ZSZXR1cm5B
ZGRyZXNzKCkpKTsgfQorCisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IGZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBTdHJpbmdJbXBsKiBzdHJp
bmcpIHsgcmV0dXJuIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhleGVjLCBjZWxsLCBzdHJp
bmcsIFJldHVybkFkZHJlc3NQdHIoKih2b2lkKiopX0FkZHJlc3NPZlJldHVybkFkZHJlc3MoKSkp
OyB9CisKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
SShmdW5jdGlvbikgXAorICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24o
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSwgU3RyaW5nSW1wbCogc3RyaW5n
KSB7IHJldHVybiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoZXhlYywgdmFsdWUsIHN0cmlu
ZywgUmV0dXJuQWRkcmVzc1B0cigqKHZvaWQqKilfQWRkcmVzc09mUmV0dXJuQWRkcmVzcygpKSk7
IH0KKworI2RlZmluZSBfVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpD
SShmdW5jdGlvbikgXAorICAgIHZvaWQgSklUX09QRVJBVElPTiBmdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBKU0NlbGwqIGNlbGwsIFN0cmluZ0ltcGwqIHN0
cmluZykgeyByZXR1cm4gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMsIHZhbHVlLCBj
ZWxsLCBzdHJpbmcsIFJldHVybkFkZHJlc3NQdHIoKih2b2lkKiopX0FkZHJlc3NPZlJldHVybkFk
ZHJlc3MoKSkpOyB9CiAKICNlbmRpZgogCiAjZGVmaW5lIFBfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKIHZvaWQqIEpJVF9PUEVSQVRJT04gZnVuY3Rp
b24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVS
RU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRShmdW5jdGlvbikKK19QX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FKGZ1bmN0aW9uKQogCiAjZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
ZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIFJldHVybkFkZHJlc3NQdHIp
IFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikKK19KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKQogCiAjZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
U3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lO
VEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0
aW9uKQorX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlv
bikKIAogI2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkko
ZnVuY3Rpb24pIFwKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKiwgUmV0
dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pCitfSl9GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKQogCiAjZGVmaW5lIFZf
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKIHZv
aWQgSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCosIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBS
RUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAotRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pCitfVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMTU2MjM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOjE1NjIzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkpJVE9wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgorI2luY2x1
ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKKyNp
bmNsdWRlICJKSVRPcGVyYXRpb25XcmFwcGVycy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIK
KyNpbmNsdWRlICJSZXBhdGNoLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitleHRlcm4gIkMiIHsK
KworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgIAorICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJh
c2UpOworICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7CisgICAgSWRlbnRpZmllciBp
ZGVudCh2bSwgdWlkKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQo
ZXhlYywgaWRlbnQsIHNsb3QpKTsKK30KKworSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRUpJKG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIElk
ZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
ID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFj
Y2Vzc1R5cGUpOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFz
ZSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOworCisgICAgaWYgKGFjY2Vzc1R5
cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAg
ICAgIGJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1Yklu
Zm8pOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitKX0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNl
LCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKKworICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJl
dHVybkFkZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVl
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3Qp
OworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0
dWJJbmZvLmFjY2Vzc1R5cGUpKSB7CisgICAgICAgIGlmIChzdHViSW5mby5zZWVuKQorICAgICAg
ICAgICAgcmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1Yklu
Zm8pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShvcGVyYXRpb25Jbk9wdGltaXplKTsK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5PcHRpbWl6ZVdpdGhSZXR1
cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiBrZXks
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAK
KyAgICBpZiAoIWJhc2UtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgdm0tPnRocm93RXhjZXB0aW9u
KGV4ZWMsIGNyZWF0ZUludmFsaWRQYXJhbWV0ZXJFcnJvcihleGVjLCAiaW4iLCBiYXNlKSk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAg
IAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5n
ZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIElkZW50
aWZpZXIgaWRlbnQodm0sIGtleSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZSk7CisgICAg
Ym9vbCByZXN1bHQgPSBhc09iamVjdChiYXNlKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50
LCBzbG90KTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChhY2Nlc3NUeXBlID09IHN0dWJJbmZv
LmFjY2Vzc1R5cGUpOworICAgIAorICAgIGlmIChzdHViSW5mby5zZWVuKQorICAgICAgICByZXBh
dGNoSW4oZXhlYywgYmFzZSwgaWRlbnQsIHJlc3VsdCwgc2xvdCwgc3R1YkluZm8pOworICAgIGVs
c2UKKyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7CisgICAgCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4ocmVzdWx0KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSW4oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFN0cmlu
Z0ltcGwqIGtleSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIGlmICghYmFzZS0+aXNPYmplY3Qo
KSkgeworICAgICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlSW52YWxpZFBhcmFt
ZXRlckVycm9yKGV4ZWMsICJpbiIsIGJhc2UpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCBr
ZXkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGFzT2JqZWN0KGJhc2Up
LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZW5lcmljSW4oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2Us
IEVuY29kZWRKU1ZhbHVlIGtleSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbihleGVjLCBKU1ZhbHVl
OjpkZWNvZGUoa2V5KSwgYmFzZSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25DYWxsQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNl
LCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBmdW5jdGlvbiwgU3RyaW5nSW1wbCogdWlkKQor
eworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Cisg
ICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShmdW5jdGlvbihleGVjLCBhc09iamVjdChi
YXNlKSwgaWRlbnQpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25DYWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGdldHRl
clNldHRlcikKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y2FsbEdldHRlcihleGVjLCBiYXNlLCBnZXR0ZXJTZXR0ZXIpKTsKK30KKwordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkKQoreworICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgUHV0
UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOworICAgIGJhc2UtPm1ldGhvZFRhYmxlKCktPnB1dChiYXNlLCBleGVjLCBpZGVudCwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworfQorCit2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOworICAgIGJhc2UtPm1ldGhvZFRhYmxlKCktPnB1dChiYXNlLCBleGVjLCBpZGVudCwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworfQorCit2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCit7Cisg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRl
eHQoKSk7CisgICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOworICAgIGFzT2JqZWN0KGJhc2Up
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpLCBzbG90KTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAor
ICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qo
ZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICBBU1NFUlQo
YmFzZS0+aXNPYmplY3QoKSk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52
bSgpLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworfQorCitW
X0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRl
bnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8g
PSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNj
ZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90
IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAor
ICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBp
ZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NU
eXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChzdHViSW5mby5zZWVuKQorICAg
ICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5m
bywgTm90RGlyZWN0KTsKKyAgICBlbHNlCisgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwor
fQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCog
dWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVz
cyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7CisgICAgUHV0
UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4
dCgpKTsKKyAgICAKKyAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7
CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoc3R1Yklu
Zm8uc2VlbikKKyAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwg
c2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7CisgICAgZWxzZQorICAgICAgICBzdHViSW5mby5z
ZWVuID0gdHJ1ZTsKK30KKworVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOwordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRy
ZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwq
IGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQor
eworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Cisg
ICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0
dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICAK
KyAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERp
cmVjdChleGVjLT52bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIGlmIChhY2Nl
c3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgIHJl
cGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsK
KyAgICBlbHNlCisgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOworfQorCitWX0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RO
b25TdHJpY3RPcHRpbWl6ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlk
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7
CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNv
ZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICAKKyAgICBBU1NFUlQoYmFzZS0+aXNP
YmplY3QoKSk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVu
dCwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJh
c2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKKyAgICBlbHNlCisgICAgICAgIHN0
dWJJbmZvLnNlZW4gPSB0cnVlOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpOwordm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHVi
SW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1
ZShiYXNlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2so
KS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgCisgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVu
dCwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHVi
SW5mbywgTm90RGlyZWN0KTsKK30KKworVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KTsKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0V2l0aFJldHVybkFk
ZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2Vs
bCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
Cit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsK
KyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0
U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNWYWx1ZSBiYXNl
VmFsdWUoYmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVC
bG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICAKKyAgICBiYXNlVmFsdWUucHV0KGV4ZWMs
IGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGlj
X2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3Qs
IHN0dWJJbmZvLCBOb3REaXJlY3QpOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3RX
aXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50
KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVC
bG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKyAg
ICAKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRD
b250ZXh0KCkpOworICAgIAorICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09i
amVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7Cisg
ICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8uYWNjZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBidWlsZFB1dEJ5SWRM
aXN0KGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKK30KKworVl9G
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5n
SW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJu
QWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNz
VHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2Us
IGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICAKKyAgICBBU1NFUlQo
YmFzZS0+aXNPYmplY3QoKSk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52
bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwg
c3R1YkluZm8sIERpcmVjdCk7Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFs
bG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNl
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBFbmNvZGVkSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgPiBiYXNlLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSk7CisgICAgQVNTRVJUKCF2bS5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKS5mYXN0UGF0aFNob3Vs
ZFN1Y2NlZWQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUp
KSk7CisgICAgYmFzZS0+c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2Fy
eSh2bSwgc3RydWN0dXJlKTsKKyAgICBiYXNlLT5wdXREaXJlY3Qodm0sIG9mZnNldCwgSlNWYWx1
ZTo6ZGVjb2RlKHZhbHVlKSk7Cit9CisKK3N0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVj
U3RhdGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCit7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUo
KTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKworICAgIGV4ZWNDYWxsZWUtPnNldFNjb3Bl
KGV4ZWMtPnNjb3BlKCkpOworICAgIGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygwKTsKKworICAg
IGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CisgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwor
ICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNhbGxlZSwgY2FsbERhdGEp
OworICAgIAorICAgICAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGVKUyk7CisgICAgCisg
ICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKKyAgICAgICAgICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWNDYWxsZWUpOworICAgICAgICAgICAgZXhl
Y0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOworICAgICAgICAgICAgdm0tPmhv
c3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0
aW9uKGV4ZWNDYWxsZWUpKTsKKyAgICAgICAgICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisKKyAgICAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVl
KTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVO
b25lKTsKKyAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RB
RnVuY3Rpb25FcnJvcihleGVjLCBjYWxsZWUpKTsKKyAgICAgICAgcmV0dXJuIHZtLT5nZXRDVElT
dHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCk7CisgICAgfQorCisgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0
cnVjdCk7CisgICAgCisgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOworICAgIENvbnN0
cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERhdGEoY2FsbGVlLCBjb25zdHJ1
Y3REYXRhKTsKKyAgICAKKyAgICBBU1NFUlQoY29uc3RydWN0VHlwZSAhPSBDb25zdHJ1Y3RUeXBl
SlMpOworICAgIAorICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVIb3N0KSB7
CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWNDYWxsZWUpOwor
ICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CisgICAgICAg
IHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEu
bmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKKyAgICAgICAgaWYgKHZtLT5leGNlcHRpb24o
KSkKKyAgICAgICAgICAgIHJldHVybiB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworCisgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlw
ZU5vbmUpOworICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90QUNv
bnN0cnVjdG9yRXJyb3IoZXhlYywgY2FsbGVlKSk7CisgICAgcmV0dXJuIHZtLT5nZXRDVElTdHVi
KHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7Cit9CisKK2lubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAg
SlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpOworICAg
IEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFs
dWUpOworICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1Zh
bHVlLCBraW5kKSk7CisKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBleGVjQ2FsbGVlLT5zZXRTY29wZShjYWxs
ZWUtPnNjb3BlVW5jaGVja2VkKCkpOworICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0g
Y2FsbGVlLT5leGVjdXRhYmxlKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0
cjsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7CisgICAgaWYgKGV4ZWN1dGFibGUtPmlz
SG9zdEZ1bmN0aW9uKCkpCisgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRK
SVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOworICAgIGVsc2UgeworICAgICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAgICBKU09iamVjdCogZXJyb3IgPSBm
dW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgY2FsbGVl
LT5zY29wZSgpLCBraW5kKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICB2bS0+
dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpKTsKKyAg
ICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgfQorICAgICAgICBjb2RlQmxvY2sgPSBmdW5jdGlvbkV4ZWN1
dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKTsKKyAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpKSkKKyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFi
bGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklU
Q29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKKyAgICB9CisgICAgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWND
YWxsZWUtPnJldHVyblBDKCkpOworICAgIGlmICghY2FsbExpbmtJbmZvLnNlZW5PbmNlKCkpCisg
ICAgICAgIGNhbGxMaW5rSW5mby5zZXRTZWVuKCk7CisgICAgZWxzZQorICAgICAgICBsaW5rRm9y
KGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGtp
bmQpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlUHRyLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxs
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVl
LCBDb2RlRm9yQ2FsbCk7Cit9CisKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nv
bnN0cnVjdChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhl
Y0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCk7Cit9CisKK2lubGluZSBjaGFyKiB2aXJ0dWFsRm9y
V2l0aEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKK3sKKyAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAg
SlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpOworICAg
IGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKKyAg
ICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFz
VmFsdWUsIGtpbmQpKTsKKyAgICAKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIGV4ZWNDYWxsZWUtPnNldFNj
b3BlKGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhl
Y3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7CisgICAgaWYgKFVOTElLRUxZKCFleGVj
dXRhYmxlLT5oYXNKSVRDb2RlRm9yKGtpbmQpKSkgeworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGV4ZWN1dGFibGUpOworICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFi
bGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgZnVuY3Rpb24tPnNjb3BlKCksIGtp
bmQpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlY0NhbGxlZSwgZXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93
UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihleGVjdXRhYmxlLT5nZW5l
cmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
Cit9CisKK2lubGluZSBjaGFyKiB2aXJ0dWFsRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlv
bkNlbGxJZ25vcmVkOworICAgIHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxs
ZWUsIGtpbmQsIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCk7Cit9CisKK3N0YXRpYyBib29s
IGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBKU0Nl
bGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sK
KyAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVB
c0Z1bmN0aW9uQ2VsbCk7CisgICAgSlNGdW5jdGlvbiogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZv
LmNhbGxlZS5nZXQoKTsKKyAgICAKKyAgICBpZiAoIW9sZENhbGxlZQorICAgICAgICB8fCBvbGRD
YWxsZWUtPnN0cnVjdHVyZSgpICE9IGNhbGxlZS0+c3RydWN0dXJlKCkKKyAgICAgICAgfHwgb2xk
Q2FsbGVlLT5leGVjdXRhYmxlKCkgIT0gY2FsbGVlLT5leGVjdXRhYmxlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBBU1NFUlQoY2FsbGVlLT5leGVjdXRhYmxlKCktPmhhc0pJ
VENvZGVGb3JDYWxsKCkpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gY2Fs
bGVlLT5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JD
YWxsKCk7CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgaWYgKGNhbGxlZS0+
ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICBjb2RlQmxvY2sgPSAwOwor
ICAgIGVsc2UgeworICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4oY2FsbGVlLT5leGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgIGlm
IChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8
c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIGxpbmtDbG9zdXJlQ2FsbCgKKyAgICAgICAgZXhlY0Nh
bGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssCisgICAgICAgIGNhbGxlZS0+c3RydWN0dXJl
KCksIGNhbGxlZS0+ZXhlY3V0YWJsZSgpLCBjb2RlUHRyKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhl
Y1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGw7
CisgICAgY2hhciogcmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBD
b2RlRm9yQ2FsbCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPmdldENh
bGxMaW5rSW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsKKworICAgIGlmICghYXR0ZW1wdFRv
T3B0aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgY2Fs
bExpbmtJbmZvKSkKKyAgICAgICAgbGlua1Nsb3dGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZv
LCBDb2RlRm9yQ2FsbCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7
ICAgIAorICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKK30K
KworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSkKK3sKKyAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2Rl
Rm9yQ29uc3RydWN0KTsKK30KKworSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBsb29r
dXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgY2FsbEluZGV4KQor
eworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworCisgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4
Y2VwdGlvbigpOworICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7CisgICAgCisgICAgdW5zaWdu
ZWQgdlBDSW5kZXggPSBleGVjLT5jb2RlQmxvY2soKS0+Ynl0ZWNvZGVPZmZzZXRGb3JDYWxsQXRJ
bmRleChjYWxsSW5kZXgpOworICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVyaWNV
bndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCB2UENJbmRleCk7CisgICAgQVNTRVJUKGhh
bmRsZXIuY2F0Y2hSb3V0aW5lKTsKKyAgICByZXR1cm4gZGZnSGFuZGxlckVuY29kZWQoaGFuZGxl
ci5jYWxsRnJhbWUsIGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKK30KKworSklUSGFuZGxlckVuY29k
ZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQoreworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisg
ICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgIEFTU0VS
VChleGNlcHRpb25WYWx1ZSk7CisgICAgCisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gc3R1
YkluZm8tPmNvZGVPcmlnaW47CisgICAgd2hpbGUgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KQorICAgICAgICBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxl
cjsKKyAgICAKKyAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBnZW5lcmljVW53aW5kKHZt
LCBleGVjLCBleGNlcHRpb25WYWx1ZSwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICBB
U1NFUlQoaGFuZGxlci5jYXRjaFJvdXRpbmUpOworICAgIHJldHVybiBkZmdIYW5kbGVyRW5jb2Rl
ZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxlci5jYXRjaFJvdXRpbmUpOworfQorCit9IC8vIGV4
dGVybiAiQyIKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg3
LDcgKzU4Nyw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnMKICAg
ICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAot
SklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4
ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgY2FsbEluZGV4KQorSklUSGFuZGxlckVuY29kZWQgSklU
X09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKQEAgLTU5NSwyNSArNTk1LDcgQEAgSklUSGFuZGxlckVuY29kZWQgSklUX09Q
RVJBVElPTiBsb29rdXBFeAogICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNl
cHRpb24oKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwogICAgIAotICAgIHVuc2lnbmVk
IHZQQ0luZGV4ID0gZXhlYy0+Y29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0Rm9yQ2FsbEF0SW5k
ZXgoY2FsbEluZGV4KTsKLSAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBnZW5lcmljVW53
aW5kKHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSwgdlBDSW5kZXgpOwotICAgIEFTU0VSVChoYW5k
bGVyLmNhdGNoUm91dGluZSk7Ci0gICAgcmV0dXJuIGRmZ0hhbmRsZXJFbmNvZGVkKGhhbmRsZXIu
Y2FsbEZyYW1lLCBoYW5kbGVyLmNhdGNoUm91dGluZSk7Ci19Ci0KLUpJVEhhbmRsZXJFbmNvZGVk
IEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlckluU3R1YihFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAg
IEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICBBU1NFUlQo
ZXhjZXB0aW9uVmFsdWUpOwotICAgIAotICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IHN0dWJJ
bmZvLT5jb2RlT3JpZ2luOwotICAgIHdoaWxlIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkK
LSAgICAgICAgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7
Ci0gICAgCi0gICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Vud2luZCh2bSwg
ZXhlYywgZXhjZXB0aW9uVmFsdWUsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgRXhj
ZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0aW9u
VmFsdWUpOwogICAgIEFTU0VSVChoYW5kbGVyLmNhdGNoUm91dGluZSk7CiAgICAgcmV0dXJuIGRm
Z0hhbmRsZXJFbmNvZGVkKGhhbmRsZXIuY2FsbEZyYW1lLCBoYW5kbGVyLmNhdGNoUm91dGluZSk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2
aXNpb24gMTU2MjM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaDoxNTYyMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpJVE9wZXJhdGlvbnNfaAorI2RlZmlu
ZSBKSVRPcGVyYXRpb25zX2gKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkpT
QXJyYXkuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXIuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8u
aCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjaWYgQ0FM
TElOR19DT05WRU5USU9OX0lTX1NURENBTEwKKyNkZWZpbmUgSklUX09QRVJBVElPTiBDREVDTAor
I2Vsc2UKKyNkZWZpbmUgSklUX09QRVJBVElPTgorI2VuZGlmCisKKy8vIFRoZXNlIHR5cGVkZWZz
IHByb3ZpZGUgdHlwZWNoZWNraW5nIHdoZW4gZ2VuZXJhdGluZyBjYWxscyBvdXQgdG8gaGVscGVy
IHJvdXRpbmVzOworLy8gdGhpcyBoZWxwcyBwcmV2ZW50IGNhbGxpbmcgYSBoZWxwZXIgcm91dGlu
ZSB3aXRoIHRoZSB3cm9uZyBhcmd1bWVudHMhCisvKgorICAgIEtleToKKyAgICBWOiB2b2lkCisg
ICAgSjogSlNWYWx1ZQorICAgIFA6IHBvaW50ZXIgKHZvaWQqKQorICAgIEM6IEpTQ2VsbCoKKyAg
ICBBOiBKU0FycmF5KgorICAgIFM6IHNpemVfdAorICAgIFo6IGludDMyX3QKKyAgICBEOiBkb3Vi
bGUKKyAgICBJOiBTdHJpbmdJbXBsKgorKi8KK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwordHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUEpKEV4ZWNTdGF0ZSosIEpT
QXJyYXkqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3Bl
cmF0aW9uX0VBWikoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QpOwordHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSos
IEpTQ2VsbCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRP
cGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDSSkoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUNKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVk
SlNWYWx1ZSk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9w
ZXJhdGlvbl9FREEpKEV4ZWNTdGF0ZSosIGRvdWJsZSwgSlNBcnJheSopOwordHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUkpKEV4ZWNTdGF0ZSos
IFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpf
SklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSkEpKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0FycmF5Kik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSkkpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBTdHJpbmdJbXBsKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
KCpKX0pJVE9wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9w
ZXJhdGlvbl9FSnNzWikoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBpbnQzMl90KTsKK3R5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKUCkoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHZvaWQqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VQKShFeGVjU3RhdGUqLCB2b2lkKik7Cit0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FUFApKEV4
ZWNTdGF0ZSosIHZvaWQqLCB2b2lkKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwor
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVNT
KShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Cit0
eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FWklj
ZlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGluZUNhbGxGcmFtZSosIGludDMyX3QpOwordHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVpaKShF
eGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFU
SU9OICgqQ19KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Cit0eXBlZGVmIEpTQ2VsbCogSklU
X09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKK3R5
cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJh
dGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwordHlwZWRlZiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSWNmKShFeGVjU3RhdGUqLCBJbmxpbmVD
YWxsRnJhbWUqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRp
b25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRf
T1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpzc1N0KShFeGVjU3RhdGUqLCBKU1N0cmluZyos
IFN0cnVjdHVyZSopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJh
dGlvbl9FSnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Cit0eXBlZGVm
IEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NKc3NKc3MpKEV4ZWNT
dGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwordHlwZWRlZiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FT1opKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgaW50MzJfdCk7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0
aW9uX0VTdCkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09Q
RVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKK3R5cGVk
ZWYgZG91YmxlIEpJVF9PUEVSQVRJT04gKCpEX0pJVE9wZXJhdGlvbl9ERCkoZG91YmxlLCBkb3Vi
bGUpOwordHlwZWRlZiBkb3VibGUgSklUX09QRVJBVElPTiAoKkRfSklUT3BlcmF0aW9uX1paKShp
bnQzMl90LCBpbnQzMl90KTsKK3R5cGVkZWYgZG91YmxlIEpJVF9PUEVSQVRJT04gKCpEX0pJVE9w
ZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBpbnQzMl90
IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9EKShkb3VibGUpOwordHlwZWRlZiBzaXpl
X3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgSlNDZWxsKik7Cit0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRp
b25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgc2l6ZV90IEpJVF9P
UEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRP
cGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04g
KCpWX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFU
SU9OICgqVl9KSVRPcGVyYXRpb25fRU9aRCkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90
LCBkb3VibGUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9F
T1pKKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKK3R5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSos
IEpTQ2VsbCopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9F
Q0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7Cit0eXBlZGVmIHZv
aWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDQ0ljZikoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJB
VElPTiAoKlZfSklUT3BlcmF0aW9uX0VDSkopKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCk7Cit0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgSlNDZWxsKik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0
aW9uX0VKQ0kpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBTdHJpbmdJbXBs
Kik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VKSkopKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
OwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSlBQKShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCosIHZvaWQqKTsKK3R5cGVkZWYgdm9pZCBKSVRf
T1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMy
X3QsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRP
cGVyYXRpb25fVykoV2F0Y2hwb2ludFNldCopOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9O
ICgqUF9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVS
QVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVm
IGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FSlMpKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9K
SVRPcGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7Cit0eXBlZGVmIGNoYXIqIEpJ
VF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FT1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
c2l6ZV90KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VP
WikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKK3R5cGVkZWYgY2hhciogSklUX09Q
RVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7
Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FUykoRXhlY1N0
YXRlKiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0
aW9uX0VTSnNzKShFeGVjU3RhdGUqLCBzaXplX3QsIEpTU3RyaW5nKik7Cit0eXBlZGVmIGNoYXIq
IEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSopOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVN0Siko
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBjaGFyKiBK
SVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVN0UFMpKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIHZvaWQqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRP
cGVyYXRpb25fRVN0U1MpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90KTsK
K3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VTdFopKEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9O
ICgqUF9KSVRPcGVyYXRpb25fRVpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsKK3R5
cGVkZWYgU3RyaW5nSW1wbCogSklUX09QRVJBVElPTiAoKklfSklUT3BlcmF0aW9uX0VKc3MpKEV4
ZWNTdGF0ZSosIEpTU3RyaW5nKik7Cit0eXBlZGVmIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OICgq
SnNzX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CisKK2V4dGVybiAiQyIg
eworCisvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVy
LCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGljaCBpcworLy8gdGhlIHJldHVybiBsb2NhdGlv
biBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlv
bnMgYWJvdmUuCisKKy8vIEFjY29yZGluZyB0byBDKysgcnVsZXMsIGEgdHlwZSB1c2VkIGZvciB0
aGUgcmV0dXJuIHNpZ25hdHVyZSBvZiBmdW5jdGlvbiB3aXRoIEMgbGlua2FnZSAoaS5lLgorLy8g
J2V4dGVybiAiQyInKSBuZWVkcyB0byBiZSBQT0Q7IGhlbmNlIHB1dHRpbmcgYW55IGNvbnN0cnVj
dG9ycyBpbnRvIGl0IGNvdWxkIGNhdXNlIGVpdGhlciBjb21waWxlcgorLy8gd2FybmluZ3MsIG9y
IHdvcnNlLCBhIGNoYW5nZSBpbiB0aGUgQUJJIHVzZWQgdG8gcmV0dXJuIHRoZXNlIHR5cGVzLgor
c3RydWN0IEpJVEhhbmRsZXIgeworICAgIHVuaW9uIFVuaW9uIHsKKyAgICAgICAgc3RydWN0IFN0
cnVjdCB7CisgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWM7CisgICAgICAgICAgICB2b2lkKiBo
YW5kbGVyOworICAgICAgICB9IHM7CisgICAgICAgIHVpbnQ2NF90IGVuY29kZWQ7CisgICAgfSB1
OworfTsKKworaW5saW5lIEpJVEhhbmRsZXIgY3JlYXRlSklUSGFuZGxlcihFeGVjU3RhdGUqIGV4
ZWMsIHZvaWQqIGhhbmRsZXIpCit7CisgICAgSklUSGFuZGxlciByZXN1bHQ7CisgICAgcmVzdWx0
LnUucy5leGVjID0gZXhlYzsKKyAgICByZXN1bHQudS5zLmhhbmRsZXIgPSBoYW5kbGVyOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKKyNpZiBDUFUoWDg2XzY0KQordHlwZWRlZiBKSVRIYW5kbGVy
IEpJVEhhbmRsZXJFbmNvZGVkOworaW5saW5lIEpJVEhhbmRsZXJFbmNvZGVkIGRmZ0hhbmRsZXJF
bmNvZGVkKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogaGFuZGxlcikKK3sKKyAgICByZXR1cm4gY3Jl
YXRlSklUSGFuZGxlcihleGVjLCBoYW5kbGVyKTsKK30KKyNlbHNlCit0eXBlZGVmIHVpbnQ2NF90
IEpJVEhhbmRsZXJFbmNvZGVkOworaW5saW5lIEpJVEhhbmRsZXJFbmNvZGVkIGRmZ0hhbmRsZXJF
bmNvZGVkKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogaGFuZGxlcikKK3sKKyAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoSklUSGFuZGxlcjo6VW5pb24pID09IHNpemVvZih1aW50NjRfdCksIEpJVEhh
bmRsZXJfVW5pb25faXNfNjRiaXQpOworICAgIHJldHVybiBjcmVhdGVKSVRIYW5kbGVyKGV4ZWMs
IGhhbmRsZXIpLnUuZW5jb2RlZDsKK30KKyNlbmRpZgorSklUSGFuZGxlckVuY29kZWQgSklUX09Q
RVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSosIHVpbnQzMl90KSBXVEZf
SU5URVJOQUw7CitKSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlv
bkhhbmRsZXJJblN0dWIoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qKSBXVEZfSU5URVJO
QUw7CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdChFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXplKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IFN0cmluZ0ltcGwqKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW4o
RXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOworRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZW5lcmljSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpT
VmFsdWUpOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQ3VzdG9t
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jLCBT
dHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25DYWxsR2V0dGVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRF
Uk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBs
KikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25T
dHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJh
c2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RG
X0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRp
bWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJ
bXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RG
X0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RC
dWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwq
IGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5B
TDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVp
bGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
U3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSopIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0
YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xv
c3VyZUNhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5U
RVJOQUw7CisKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKSVRPcGVyYXRp
b25zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJ
KHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsOCArMTcwLDcgQEAgaW5saW5lIEpJVEhhbmRsZXJF
bmNvZGVkIGRmZ0hhbmRsZXJFbmNvZAogICAgIHJldHVybiBjcmVhdGVKSVRIYW5kbGVyKGV4ZWMs
IGhhbmRsZXIpLnUuZW5jb2RlZDsKIH0KICNlbmRpZgotSklUSGFuZGxlckVuY29kZWQgSklUX09Q
RVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSosIHVpbnQzMl90KSBXVEZf
SU5URVJOQUw7Ci1KSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlv
bkhhbmRsZXJJblN0dWIoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qKSBXVEZfSU5URVJO
QUw7CitKSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXIoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0lt
cGwqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldEJ5SWRCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwq
KSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNl
dC5oCShyZXZpc2lvbiAxNTYyMzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJTZXQuaDoxNTYyMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZWdpc3RlclNldF9oCisjZGVm
aW5lIFJlZ2lzdGVyU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5B
QkxFKEpJVCkKKworI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisj
aW5jbHVkZSA8d3RmL0JpdG1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMgPQorICAgIEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7CisKK3N0YXRpYyBjb25zdCB1
bnNpZ25lZCBudW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNldCA9CisgICAgKHRvdGFsTnVtYmVyT2ZS
ZWdpc3RlcnMgKyA3KSA+PiAzOworCit0eXBlZGVmIHVpbnQ4X3QgUmVnaXN0ZXJTZXRQT0RbbnVt
YmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXRdOworCitjbGFzcyBSZWdpc3RlclNldCB7CitwdWJsaWM6
CisgICAgUmVnaXN0ZXJTZXQoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVt
YmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCisgICAgICAgICAgICBtX3NldFtpXSA9IDA7
CisgICAgfQorICAgIAorICAgIFJlZ2lzdGVyU2V0KGNvbnN0IFJlZ2lzdGVyU2V0UE9EJiBvdGhl
cikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQnl0ZXNJblJlZ2lz
dGVyU2V0OyBpLS07KQorICAgICAgICAgICAgbV9zZXRbaV0gPSBvdGhlcltpXTsKKyAgICB9Cisg
ICAgCisgICAgY29uc3QgUmVnaXN0ZXJTZXRQT0QmIGFzUE9EKCkgY29uc3QgeyByZXR1cm4gbV9z
ZXQ7IH0KKyAgICAKKyAgICB2b2lkIGNvcHlJbmZvKFJlZ2lzdGVyU2V0UE9EJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQnl0ZXNJblJlZ2lz
dGVyU2V0OyBpLS07KQorICAgICAgICAgICAgb3RoZXJbaV0gPSBtX3NldFtpXTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzZXQoR1BSUmVnIHJlZykKKyAgICB7CisgICAgICAgIHNldEJpdChHUFJJ
bmZvOjp0b0luZGV4KHJlZykpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEdQUkJ5SW5kZXgo
dW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgIHNldEJpdChpbmRleCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgY2xlYXIoR1BSUmVnIHJlZykKKyAgICB7CisgICAgICAgIGNsZWFyQml0KEdQUklu
Zm86OnRvSW5kZXgocmVnKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgZ2V0KEdQUlJlZyByZWcp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZ2V0Qml0KEdQUkluZm86OnRvSW5kZXgocmVn
KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgZ2V0R1BSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIGdldEJpdChpbmRleCk7CisgICAgfQorICAgIAorICAg
IC8vIFJldHVybiB0aGUgaW5kZXgndGggZnJlZSBHUFIuCisgICAgR1BSUmVnIGdldEZyZWVHUFIo
dW5zaWduZWQgaW5kZXggPSAwKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgICAgIGlmICgh
Z2V0R1BSQnlJbmRleChpKSAmJiAhaW5kZXgtLSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR1BS
SW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW52YWxpZEdQ
UlJlZzsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoRlBSUmVnIHJlZykKKyAgICB7CisgICAg
ICAgIHNldEJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86OnRvSW5kZXgo
cmVnKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0RlBSQnlJbmRleCh1bnNpZ25lZCBpbmRl
eCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzKTsKKyAgICAgICAgc2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaW5kZXgp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKEZQUlJlZyByZWcpCisgICAgeworICAgICAg
ICBjbGVhckJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86OnRvSW5kZXgo
cmVnKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgZ2V0KEZQUlJlZyByZWcpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZ2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBS
SW5mbzo6dG9JbmRleChyZWcpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBnZXRGUFJCeUluZGV4
KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgRlBS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAgICByZXR1cm4gZ2V0Qml0KEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgaW5kZXgpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBCYW5rSW5mbz4KKyAgICB2b2lkIHNldEJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCisg
ICAgeworICAgICAgICBzZXQoQmFua0luZm86OnRvUmVnaXN0ZXIoaW5kZXgpKTsKKyAgICB9Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CisgICAgYm9vbCBnZXRCeUluZGV4
KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldChCYW5rSW5mbzo6dG9S
ZWdpc3RlcihpbmRleCkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZlNldEdQ
UnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAg
ICAgICAgICAgIGlmICghZ2V0Qml0KGkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZTZXRGUFJzKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIWdldEJp
dChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gdG90YWxOdW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAg
aWYgKCFnZXRCaXQoaSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBy
ZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
K3ByaXZhdGU6CisgICAgdm9pZCBzZXRCaXQodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChpIDwgdG90YWxOdW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgIG1fc2V0W2kgPj4gM10g
fD0gKDEgPDwgKGkgJiA3KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXJCaXQodW5zaWdu
ZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgdG90YWxOdW1iZXJPZlJlZ2lzdGVycyk7
CisgICAgICAgIG1fc2V0W2kgPj4gM10gJj0gfigxIDw8IChpICYgNykpOworICAgIH0KKyAgICAK
KyAgICBib29sIGdldEJpdCh1bnNpZ25lZCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGkgPCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuICEhKG1fc2V0W2kg
Pj4gM10gJiAoMSA8PCAoaSAmIDcpKSk7CisgICAgfQorICAgIAorICAgIFJlZ2lzdGVyU2V0UE9E
IG1fc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbHNlIC8vIEVOQUJMRShKSVQp
IC0+IHNvIGlmIEpJVCBpcyBkaXNhYmxlZAorCituYW1lc3BhY2UgSlNDIHsKKworLy8gRGVmaW5l
IFJlZ2lzdGVyU2V0UE9EIHRvIHNvbWV0aGluZyB0aGF0IGlzIGEgUE9ELCBidXQgaXMgb3RoZXJ3
aXNlIHVzZWxlc3MsCisvLyB0byBtYWtlIGl0IGVhc2llciB0byByZWZlciB0byB0aGlzIHR5cGUg
aW4gY29kZSB0aGF0IG1heSBiZSBjb21waWxlZCB3aGVuCisvLyB0aGUgREZHIGlzIGRpc2FibGVk
LgorCitzdHJ1Y3QgUmVnaXN0ZXJTZXRQT0QgeyB9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBSZWdpc3RlclNldF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTU2MjM2KQkoZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwOjE1NjIzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNDE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXBhdGNoLmgiCisK
KyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAi
Q2FsbEZyYW1lSW5saW5lcy5oIgorI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgor
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVk
ZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgorI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIK
KyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1
cmVSYXJlRGF0YUlubGluZXMuaCIKKyNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKKyNpbmNs
dWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRp
YyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZWJsb2NrLCBDb2RlTG9jYXRpb25DYWxs
IGNhbGwsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9uKQoreworICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihjb2RlYmxvY2spOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNh
bGwsIG5ld0NhbGxlZUZ1bmN0aW9uKTsKK30KKworc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxm
QWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1bmN0
aW9uUHRyICZzbG93UGF0aEZ1bmN0aW9uLCBib29sIGNvbXBhY3QpCit7CisgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisKKyAgICAvLyBPbmx5IG9wdGltaXplIG9u
Y2UhCisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBzbG93UGF0aEZ1bmN0aW9uKTsKKworICAgIC8vIFBhdGNoIHRoZSBzdHJ1Y3R1cmUgY2hlY2sg
JiB0aGUgb2Zmc2V0IG9mIHRoZSBsb2FkLgorICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRvQ2FsbCksIHN0cnVjdHVyZSk7CisgICAg
cmVwYXRjaEJ1ZmZlci5zZXRMb2FkSW5zdHJ1Y3Rpb25Jc0FjdGl2ZShzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uY29udmVydGlibGVMb2FkQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvU3RvcmFnZUxvYWQpLCBpc091dE9mTGluZU9mZnNldChvZmZzZXQpKTsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIGlmIChjb21wYWN0KQorICAgICAgICByZXBhdGNoQnVmZmVyLnJl
cGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0
aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpKTsKKyAgICBlbHNlCisgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIG9mZnNldFJl
bGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgaWYgKGNvbXBhY3QpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0
Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9Q
YXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0
UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJl
cGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgb2Zmc2V0UmVs
YXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICB9CisjZW5kaWYKK30KKworc3Rh
dGljIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgIEpTQ2VsbCogb2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCit7CisgICAgaWYg
KG9iamVjdC0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlICYmIHN0cnVjdHVyZS0+dHJhbnNpdGlv
bldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkgeworICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRy
YW5zaXRpb25XYXRjaHBvaW50KHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2NrKSk7Cisj
aWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAvLyBJZiB3ZSBleGVjdXRlIHRoaXMgY29kZSwg
dGhlIG9iamVjdCBtdXN0IGhhdmUgdGhlIHN0cnVjdHVyZSB3ZSBleHBlY3QuIEFzc2VydAorICAg
ICAgICAvLyB0aGlzIGluIGRlYnVnIG1vZGVzLgorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgb2sgPSBqaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgaml0LmJyZWFrcG9pbnQo
KTsKKyAgICAgICAgb2subGluaygmaml0KTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9iamVj
dCksIHNjcmF0Y2hHUFIpOworICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoCisgICAgICAgIGppdC5i
cmFuY2hQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSkpKTsKK30KKworc3RhdGljIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNr
KAorICAgIEpTVmFsdWUgcHJvdG90eXBlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKK3sKKyAgICBp
ZiAocHJvdG90eXBlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJU
KHByb3RvdHlwZS5pc0NlbGwoKSk7CisgICAgCisgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNo
ZWNrKAorICAgICAgICBwcm90b3R5cGUuYXNDZWxsKCksIHByb3RvdHlwZS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKCksIGNvZGVCbG9jaywgc3R1YkluZm8sIGppdCwKKyAgICAgICAgZmFpbHVyZUNhc2Vz
LCBzY3JhdGNoR1BSKTsKK30KKworc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKFJlcGF0Y2hC
dWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgY29uc3Qg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdldCkKK3sKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6
OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkpIHsKKyAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoCisgICAgICAgICAgICBSZXBhdGNoQnVmZmVy
OjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKAorICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgK
KyAgICAgICAgICAgICAgICAgICAgLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFD
aGVja0ltbVRvQ2FsbCkpLAorICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
CisgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCisgICAg
ICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksCisgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOworfQorCitzdGF0aWMgdm9pZCBlbWl0UmVz
dG9yZVNjcmF0Y2goTWFjcm9Bc3NlbWJsZXImIHN0dWJKaXQsIGJvb2wgbmVlZFRvUmVzdG9yZVNj
cmF0Y2gsIEdQUlJlZyBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYgc3VjY2Vzcywg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWls
dXJlQ2FzZXMpCit7CisgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7CisgICAgICAgIHN0
dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAgICAgICAKKyAgICAgICAgc3VjY2VzcyA9IHN0dWJK
aXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAgLy8gbGluayBmYWlsdXJlIGNhc2VzIGhlcmUs
IHNvIHdlIGNhbiBwb3Agc2NyYXRjaEdQUiwgYW5kIHRoZW4ganVtcCBiYWNrLgorICAgICAgICBm
YWlsdXJlQ2FzZXMubGluaygmc3R1YkppdCk7CisgICAgICAgIAorICAgICAgICBzdHViSml0LnBv
cChzY3JhdGNoR1BSKTsKKyAgICAgICAgCisgICAgICAgIGZhaWwgPSBzdHViSml0Lmp1bXAoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1w
KCk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmVyJiBwYXRj
aEJ1ZmZlciwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGZhaWx1cmVDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9j
YXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luKQoreworICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vz
cywgc3VjY2Vzc0xhYmVsKTsKKyAgICAgICAgCisgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNo
KSB7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbCwgc2xvd0Nhc2VCZWdpbik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gbGluayBmYWlsdXJlIGNhc2VzIGRpcmVj
dGx5IGJhY2sgdG8gbm9ybWFsIHBhdGgKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNl
cywgc2xvd0Nhc2VCZWdpbik7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChM
aW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNh
c2VzKQoreworICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9y
ZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9u
ZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbmVyYXRl
UHJvdG9DaGFpbkFjY2Vzc1N0dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNj
ZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIFJlZlB0cjxKSVRTdHVi
Um91dGluZT4mIHN0dWJSb3V0aW5lKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworCisg
ICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKKyAgICAgICAgCisgICAgR1BSUmVnIGJhc2VHUFIg
PSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKKyNpZiBV
U0UoSlNWQUxVRTMyXzY0KQorICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxH
UFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFs
dWVHUFIpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0
Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKKyAgICBib29sIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoID0gZmFsc2U7CisgICAgCisgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQ
UlJlZykgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJs
eUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKKyNlbHNlCisg
ICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFz
ZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOworI2VuZGlmCisgICAgICAgIHN0dWJKaXQu
cHVzaChzY3JhdGNoR1BSKTsKKyAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwor
ICAgIAorICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0
dXJlKSkpOworICAgIAorICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsK
KyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOworICAgIEpT
T2JqZWN0KiBwcm90b09iamVjdCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
dW50OyArK2ksICsraXQpIHsKKyAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3Ry
dWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOworICAgICAgICBhZGRTdHJ1Y3R1cmVU
cmFuc2l0aW9uQ2hlY2soCisgICAgICAgICAgICBwcm90b09iamVjdCwgcHJvdG9PYmplY3QtPnN0
cnVjdHVyZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCisgICAgICAg
ICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworICAgICAgICBjdXJyU3RydWN0dXJlID0g
aXQtPmdldCgpOworICAgIH0KKyAgICAKKyAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkg
eworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHN0dWJKaXQubG9hZDY0KHByb3RvT2JqZWN0
LT5sb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLCByZXN1bHRHUFIpOworI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHByb3RvT2JqZWN0LT5sb2NhdGlvbkZvck9mZnNldChvZmZzZXQpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCBy
ZXN1bHRUYWdHUFIpOworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2JqZWN0LT5idXR0ZXJmbHlBZGRyZXNzKCksIHJlc3Vs
dEdQUik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOworI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOworI2VuZGlmCisg
ICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKKyAgICAKKyAg
ICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0
Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CisgICAgCisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgCisg
ICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwg
c3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwp
OworICAgIAorICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCisg
ICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkRGRyBwcm90b3R5cGUgY2hhaW4gYWNjZXNz
IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgdG9DU3RyaW5nKCpl
eGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOworfQorCitzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICAv
LyBGSVhNRTogV3JpdGUgYSB0ZXN0IHRoYXQgcHJvdmVzIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJl
Y3Vyc2lvbiBoZXJlIGp1c3QKKyAgICAvLyBsaWtlIHRoZSBpbnRlcnByZXRlciBkb2VzLCB0aGVu
IGFkZCBhIGNoZWNrIGZvciByZWN1cnNpb24uCisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIAorICAg
IGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOworI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0
dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BS
KTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRj
aC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOworICAgICAgICBib29sIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlciBz
dHViSml0OworICAgICAgICAKKyAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJl
ZykgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1i
bHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7CisjZWxzZQor
ICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQ
UihiYXNlR1BSLCByZXN1bHRHUFIsIHJlc3VsdFRhZ0dQUik7CisjZW5kaWYKKyAgICAgICAgICAg
IHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3Jh
dGNoID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAgICAgICAKKyAgICAgICAgc3R1YkppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsgCisgICAgICAgIHN0dWJKaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVz
dDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1Ykpp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spKSk7CisgICAgICAgIAorICAg
ICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOworCisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICAgICAgc3R1YkppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2Ny
YXRjaEdQUiwgcmVzdWx0R1BSKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0
dWJKaXQubW92ZShzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzdHViSml0Lm1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhmZmZmZmZmZiksIHJlc3VsdFRhZ0dQUik7
IC8vIEpTVmFsdWU6OkludDMyVGFnCisjZW5kaWYKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBzdWNjZXNzLCBmYWlsOworICAgICAgICAKKyAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNo
KHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWls
LCBmYWlsdXJlQ2FzZXMpOworICAgICAgICAKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sICZzdHViSml0LCBjb2RlQmxvY2spOworICAgICAgICAKKyAgICAgICAgbGlua1Jlc3Rv
cmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1
Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CisgICAgICAgIAorICAgICAgICBzdHViSW5mby5z
dHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RGR19TVFVCKAorICAgICAgICAgICAgcGF0
Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkRGRyBHZXRCeUlkIGFycmF5IGxlbmd0aCBzdHViIGZv
ciAlcywgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMt
PmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgIAorICAgICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAgICAgICAgcmVwbGFjZVdpdGhKdW1w
KHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgLy8gRklYTUU6IHNob3VsZCBzdXBwb3J0IGxlbmd0aCBhY2Nl
c3MgZm9yIFN0cmluZy4KKworICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9y
IGltbWVkaWF0ZXMuCisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOworICAgIGlmICgh
c2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFzdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAgaWYgKHNsb3Quc2xvdEJh
c2UoKSA9PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUo
KQorICAgICAgICAgICAgfHwgIU1hY3JvQXNzZW1ibGVyOjppc0NvbXBhY3RQdHJBbGlnbmVkQWRk
cmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpKSB7CisgICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFj
Y2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCks
IG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QsIHRydWUpOworICAgICAgICBzdHViSW5mby5pbml0
R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBGSVhN
RTogb3B0aW1pemUgZ2V0dGVycyBhbmQgc2V0dGVycworICAgIGlmICghc2xvdC5pc0NhY2hlYWJs
ZVZhbHVlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgIHNpemVfdCBjb3VudCA9IG5vcm1h
bGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZVZhbHVlLCBzbG90LnNs
b3RCYXNlKCksIHByb3BlcnR5TmFtZSwgb2Zmc2V0KTsKKyAgICBpZiAoY291bnQgPT0gSW52YWxp
ZFByb3RvdHlwZUNoYWluKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJ1Y3R1cmVD
aGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwor
ICAgIAorICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHBy
b3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0Rv
bmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKKyAg
ICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAgICByZXBs
YWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOworICAgIAorICAgIHN0
dWJJbmZvLmluaXRHZXRCeUlkQ2hhaW4oKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgdHJ1ZSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJh
c2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBib29sIGNhY2hl
ZCA9IHRyeUNhY2hlR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8pOworICAgIGlmICghY2FjaGVkKQorICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5j
b2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlk
KTsKK30KKworc3RhdGljIGJvb2wgZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KAorICAgIFZN
KiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywK
KyAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqJiBwb2x5bW9ycGhpY1N0cnVjdHVy
ZUxpc3QsIGludCYgbGlzdEluZGV4LAorICAgIENvZGVMb2NhdGlvbkxhYmVsJiBzbG93Q2FzZSkK
K3sKKyAgICBzbG93Q2FzZSA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICAKKyAgICBp
ZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpIHsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgpOworICAgICAg
ICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwg
MCwgZmFsc2UpOworICAgICAgICBsaXN0SW5kZXggPSAwOworICAgIH0gZWxzZSBpZiAoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdl
ZFJvdXRpbmUoc2xvd0Nhc2UpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCksIHRydWUpOworICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0
KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSwgdHJ1ZSk7CisgICAgICAgIGxpc3RJbmRleCA9
IDE7CisgICAgfSBlbHNlIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlf
aWRfY2hhaW4pIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFzdHViSW5mby5zdHViUm91dGlu
ZSk7CisgICAgICAgIHNsb3dDYXNlID0gQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpOworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qg
PSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENo
YWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNo
YWluLmdldCgpLCB0cnVlKTsKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUuY2xlYXIoKTsK
KyAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVy
ZUxpc3QsIDEsIGZhbHNlKTsKKyAgICAgICAgbGlzdEluZGV4ID0gMTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRf
YnlfaWRfc2VsZl9saXN0KTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1
YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKKyAgICAgICAgbGlzdEluZGV4
ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemU7CisgICAgICAgIHNsb3dDYXNl
ID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKKyAgICB9CisgICAgCisgICAg
aWYgKGxpc3RJbmRleCA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChsaXN0SW5kZXggPCBQT0xZTU9S
UEhJQ19MSVNUX0NBQ0hFX1NJWkUpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9p
ZCBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2Vs
Zl9saXN0KTsKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAg
ICBpZiAoc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QuZGlkU2VsZlBhdGNoaW5nKSB7CisgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAorICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKKyAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksCisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpOworfQorCitzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURM
aXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKK3sKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKQorICAgICAgICB8fCAhc2xvdC5p
c0NhY2hlYWJsZSgpCisgICAgICAgIHx8ICFiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgp
LT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0Nl
bGwoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsK
KyAgICAKKyAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgeworICAgICAgICBp
ZiAoIXN0dWJJbmZvLnBhdGNoLmRmZy5yZWdpc3RlcnNGbHVzaGVkKSB7CisgICAgICAgICAgICAv
LyBXZSBjYW5ub3QgZG8gYXMgbXVjaCBpbmxpbmUgY2FjaGluZyBpZiB0aGUgcmVnaXN0ZXJzIHdl
cmUgbm90IGZsdXNoZWQgcHJpb3IgdG8gdGhpcyBHZXRCeUlkLiBJbiBwYXJ0aWN1bGFyLAorICAg
ICAgICAgICAgLy8gbm9uLVZhbHVlIGNhY2hlZCBwcm9wZXJ0aWVzIHJlcXVpcmUgcGxhbnRpbmcg
Y2FsbHMsIHdoaWNoIHJlcXVpcmVzIHJlZ2lzdGVycyB0byBoYXZlIGJlZW4gZmx1c2hlZC4gVGh1
cywKKyAgICAgICAgICAgIC8vIGlmIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVkLCBkb24ndCBk
byBub24tVmFsdWUgY2FjaGluZy4KKyAgICAgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVZh
bHVlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgCisg
ICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0OworICAgICAgICBpbnQgbGlzdEluZGV4OworICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCBzbG93Q2FzZTsKKworICAgICAgICBpZiAoIWdldFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCh2
bSwgY29kZUJsb2NrLCBzdHViSW5mbywgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5k
ZXgsIHNsb3dDYXNlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAg
ICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplKys7CisgICAgICAgIAorICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
ZGZnLmJhc2VHUFIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIEdQUlJlZyByZXN1
bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRh
Z0dQUik7CisjZW5kaWYKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0
RnJlZUdQUigpOworICAgICAgICAKKyAgICAgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0sIGNv
ZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0
cnVjdCA9IHN0dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOworICAgICAgICAKKyAgICAg
ICAgLy8gVGhlIHN0cmF0ZWd5IHdlIHVzZSBmb3Igc3R1YnMgaXMgYXMgZm9sbG93czoKKyAgICAg
ICAgLy8gMSkgQ2FsbCBERkcgaGVscGVyIHRoYXQgY2FsbHMgdGhlIGdldHRlci4KKyAgICAgICAg
Ly8gMikgQ2hlY2sgaWYgdGhlcmUgd2FzIGFuIGV4Y2VwdGlvbiwgYW5kIGlmIHRoZXJlIHdhcywg
Y2FsbCB5ZXQgYW5vdGhlcgorICAgICAgICAvLyAgICBoZWxwZXIuCisgICAgICAgIAorICAgICAg
ICBib29sIGlzRGlyZWN0ID0gZmFsc2U7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9w
ZXJhdGlvbkNhbGw7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhhbmRsZXJDYWxsOwor
ICAgICAgICBGdW5jdGlvblB0ciBvcGVyYXRpb25GdW5jdGlvbjsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc3VjY2VzczsKKyAgICAgICAgCisgICAgICAgIGlmIChzbG90LmlzQ2FjaGVh
YmxlR2V0dGVyKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAgICBp
ZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNj
cmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VH
UFIgIT0gc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAg
ICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKKyNl
bHNlCisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
KSwgc2NyYXRjaEdQUik7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJl
bGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CisjZW5kaWYK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRpb25DYWxsR2V0dGVyOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgK
KyAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoRnVuY3Rpb25QdHIoc2xvdC5jdXN0b21HZXR0ZXIoKSku
ZXhlY3V0YWJsZUFkZHJlc3MoKSksCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOworICAgICAgICAgICAgICAgIG9wZXJhdGlv
bkZ1bmN0aW9uID0gb3BlcmF0aW9uQ2FsbEN1c3RvbUdldHRlcjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3aGVuZXZl
ciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0dXJlLCB3ZSByZW1lbWJlciB0aGUKKyAgICAg
ICAgICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBmcm9tLiBJdCBqdXN0IHNvIGhhcHBlbnMg
dG8gYmUgdGhlIHBsYWNlIHRoYXQgd2UgYXJlIGF0CisgICAgICAgICAgICAvLyByaWdodCBub3ch
CisgICAgICAgICAgICBzdHViSml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihleGVjLT5sb2NhdGlvbkFzUmF3Qml0cygpKSwKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG9w
ZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwoKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICAgICAgc3R1YkppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwor
I2Vsc2UKKyAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBSZXN1bHRzKHJlc3VsdEdQUiwgcmVzdWx0
VGFnR1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuZW1pdEV4Y2Vw
dGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZzdHViSW5mbykp
OworICAgICAgICAgICAgaGFuZGxlckNhbGwgPSBzdHViSml0LmNhbGwoKTsKKyAgICAgICAgICAg
IHN0dWJKaXQuanVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNh
Y2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICAgICAgICAgIGlmIChi
YXNlR1BSID09IHJlc3VsdFRhZ0dQUikgeworICAgICAgICAgICAgICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgICAg
ICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOworICAgICAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAg
IH0KKyNlbmRpZgorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAg
ICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOwor
I2Vsc2UKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwg
cmVzdWx0VGFnR1BSKTsKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAgICAgIGlzRGlyZWN0ID0gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1
YkppdCwgY29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsod3Jv
bmdTdHJ1Y3QsIHNsb3dDYXNlKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9Eb25lKSk7CisgICAgICAgIGlmICghaXNEaXJlY3QpIHsKKyAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uRnVuY3Rpb24pOwor
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9u
SGFuZGxlckluU3R1Yik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxKSVRT
dHViUm91dGluZT4gc3R1YlJvdXRpbmUgPQorICAgICAgICAgICAgY3JlYXRlSklUU3R1YlJvdXRp
bmUoCisgICAgICAgICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCisgICAgICAgICAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAoIkRGRyBHZXRCeUlkIHBvbHlt
b3JwaGljIGxpc3QgYWNjZXNzIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAg
ICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpLAorICAgICAgICAgICAgICAgICp2bSwKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIo
KSB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpOworICAgICAgICAKKyAgICAgICAgcG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOworICAg
ICAgICAKKyAgICAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZv
LCBzdHViUm91dGluZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7CisgICAgfQorICAgIAorICAgIGlmIChiYXNlVmFs
dWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2Fj
aGluZygpIHx8ICFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAg
ICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4
ZWMsIGJhc2VWYWx1ZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKKyAgICBpZiAo
Y291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlw
ZUNoYWluKGV4ZWMpOworICAgIAorICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCog
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OworICAgIGludCBsaXN0SW5kZXg7CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgc2xvd0Nhc2U7CisgICAgaWYgKCFnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3Qodm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgbGlz
dEluZGV4LCBzbG93Q2FzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzdHVi
SW5mby51LmdldEJ5SWRQcm90b0xpc3QubGlzdFNpemUrKzsKKyAgICAKKyAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworICAgIAorICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFj
Y2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBz
dHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBzbG93Q2FzZSwgc3R1YlJvdXRpbmUpOwor
ICAgIAorICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUs
IHRydWUpOworICAgIAorICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHVi
SW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOworICAgIAorICAgIHJldHVybiBsaXN0SW5kZXggPCAo
UE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7Cit9CisKK3ZvaWQgYnVpbGRHZXRCeUlE
TGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQoreworICAgIGJvb2wgZG9udENoYW5nZUNhbGwgPSB0cnlCdWlsZEdldEJ5
SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7Cisg
ICAgaWYgKCFkb250Q2hhbmdlQ2FsbCkKKyAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJs
b2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Cit9
CisKK3N0YXRpYyBWX0pJVE9wZXJhdGlvbl9FSkNJIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRG
dW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKK3sK
KyAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgeworICAgICAgICBpZiAocHV0S2luZCA9PSBE
aXJlY3QpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsK
KyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7CisgICAgfQorICAgIGlmIChw
dXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RO
b25TdHJpY3Q7CisgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7Cit9CisKK3N0
YXRpYyBWX0pJVE9wZXJhdGlvbl9FSkNJIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1
bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQorewor
ICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7CisgICAgICAgIGlmIChwdXRLaW5kID09IERp
cmVjdCkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVp
bGRMaXN0OworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdDsK
KyAgICB9CisgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQorICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdDsKKyAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdDsKK30KKworc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxh
Y2VTdHViKAorICAgIEV4ZWNTdGF0ZSogZXhlYywKKyAgICBKU1ZhbHVlLAorICAgIGNvbnN0IElk
ZW50aWZpZXImLAorICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwKKyAgICBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgUHV0S2luZCwKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCisgICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNo
LmRmZy5iYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEdQUlJlZyB2YWx1ZVRh
Z0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BS
KTsKKyNlbmRpZgorICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lz
dGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Cisg
ICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworI2lmIEVOQUJMRShXUklURV9C
QVJSSUVSX1BST0ZJTElORykKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjI7CisgICAgY29uc3QgYm9v
bCB3cml0ZUJhcnJpZXJOZWVkZWQgPSB0cnVlOworI2Vsc2UKKyAgICBjb25zdCBib29sIHdyaXRl
QmFycmllck5lZWRlZCA9IGZhbHNlOworI2VuZGlmCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXIg
c3R1YkppdDsKKyAgICAKKyAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnICYmICh3
cml0ZUJhcnJpZXJOZWVkZWQgfHwgaXNPdXRPZkxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQo
KSkpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5
SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUik7CisjZWxzZQorICAg
ICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VH
UFIsIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICAgICAgbmVlZFRvUmVzdG9y
ZVNjcmF0Y2ggPSB0cnVlOworICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7CisgICAg
fQorCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmFkU3RydWN0dXJlID0gc3R1YkppdC5icmFu
Y2hQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOworICAgIAor
I2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIHNjcmF0Y2hHUFIyID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VH
UFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyNlbHNlCisgICAgc2NyYXRjaEdQUjIgPSBBc3Nl
bWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVGFn
R1BSLCBzY3JhdGNoR1BSKTsKKyNlbmRpZgorICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSMik7
CisgICAgQXNzZW1ibHlIZWxwZXJzOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2Ny
YXRjaEdQUiwgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKKyAg
ICBzdHViSml0LnBvcChzY3JhdGNoR1BSMik7CisjZW5kaWYKKyAgICAKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKKyAgICAg
ICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0
b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBz
dHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpKSk7CisgICAgfQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1
ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3R1YkppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHVi
Sml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSk7CisgICAgfQorI2VuZGlmCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vz
czsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOworICAgIAorICAgIGlmIChuZWVk
VG9SZXN0b3JlU2NyYXRjaCkgeworICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAg
ICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAgYmFkU3Ry
dWN0dXJlLmxpbmsoJnN0dWJKaXQpOworICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsK
KyAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAgZmFpbHVyZSA9IGJhZFN0cnVjdHVy
ZTsKKyAgICB9CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0
LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9Eb25lKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJl
TGFiZWwpOworICAgICAgICAgICAgCisgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZP
Ul9ERkdfU1RVQigKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiREZHIFB1dEJ5SWQg
cmVwbGFjZSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgIHRvQ1N0
cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworfQorCitzdGF0aWMgdm9pZCBl
bWl0UHV0VHJhbnNpdGlvblN0dWIoCisgICAgRXhlY1N0YXRlKiBleGVjLAorICAgIEpTVmFsdWUs
CisgICAgY29uc3QgSWRlbnRpZmllciYsCisgICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90
LAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBQdXRLaW5kIHB1dEtpbmQs
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
CisgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluLAorICAgIENvZGVMb2NhdGlvbkxh
YmVsIGZhaWx1cmVMYWJlbCwKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGlu
ZSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7CisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJS
ZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICBHUFJSZWcg
dmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQ
Uik7CisgICAgCisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5m
by5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycyk7CisgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVRhZ0dQUik7
CisjZW5kaWYKKyAgICBhbGxvY2F0b3IubG9jayh2YWx1ZUdQUik7CisgICAgCisgICAgQ0NhbGxI
ZWxwZXJzIHN0dWJKaXQodm0pOworICAgICAgICAgICAgCisgICAgR1BSUmVnIHNjcmF0Y2hHUFIx
ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIEFTU0VSVChzY3JhdGNoR1BS
MSAhPSBiYXNlR1BSKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gdmFsdWVHUFIpOworICAg
IAorICAgIGJvb2wgbmVlZFNlY29uZFNjcmF0Y2ggPSBmYWxzZTsKKyAgICBib29sIG5lZWRUaGly
ZFNjcmF0Y2ggPSBmYWxzZTsKKyNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisg
ICAgbmVlZFNlY29uZFNjcmF0Y2ggPSB0cnVlOworI2VuZGlmCisgICAgaWYgKHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkK
KyAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAg
IG5lZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsKKyAgICAgICAgbmVlZFRoaXJkU2NyYXRjaCA9IHRy
dWU7CisgICAgfQorCisgICAgR1BSUmVnIHNjcmF0Y2hHUFIyOworICAgIGlmIChuZWVkU2Vjb25k
U2NyYXRjaCkgeworICAgICAgICBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0
Y2hHUFIoKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IGJhc2VHUFIpOworICAgICAg
ICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gdmFsdWVHUFIpOworICAgICAgICBBU1NFUlQoc2NyYXRj
aEdQUjIgIT0gc2NyYXRjaEdQUjEpOworICAgIH0gZWxzZQorICAgICAgICBzY3JhdGNoR1BSMiA9
IEludmFsaWRHUFJSZWc7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzOworICAgIGlmIChuZWVkVGhp
cmRTY3JhdGNoKSB7CisgICAgICAgIHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOworICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gYmFzZUdQUik7CisgICAg
ICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSB2YWx1ZUdQUik7CisgICAgICAgIEFTU0VSVChzY3Jh
dGNoR1BSMyAhPSBzY3JhdGNoR1BSMSk7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBz
Y3JhdGNoR1BSMik7CisgICAgfSBlbHNlCisgICAgICAgIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgICAgIAorICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVy
c0J5UHVzaGluZyhzdHViSml0KTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWls
dXJlQ2FzZXM7CisgICAgICAgICAgICAKKyAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKKyAgICAKKyAgICBmYWlsdXJl
Q2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9sZFN0cnVjdHVyZSkpKTsKKyAgICAK
KyAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgICAgIG9sZFN0cnVjdHVyZS0+
c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwg
ZmFpbHVyZUNhc2VzLAorICAgICAgICBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAKKyAgICBp
ZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKKyAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiogaXQgPSBwcm90b3R5cGVDaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKKyAgICAg
ICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICAoKml0
KS0+c3RvcmVkUHJvdG90eXBlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1Ykpp
dCwgZmFpbHVyZUNhc2VzLAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAg
fQorICAgIH0KKworI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICBBU1NF
UlQobmVlZFNlY29uZFNjcmF0Y2gpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBJbnZhbGlk
R1BSUmVnKTsKKyAgICAvLyBNdXN0IGFsd2F5cyBlbWl0IHRoaXMgd3JpdGUgYmFycmllciBhcyB0
aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gaXRzZWxmIHJlcXVpcmVzIGl0CisgICAgQXNzZW1ibHlI
ZWxwZXJzOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0
Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CisjZW5kaWYKKyAgICAKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgCisgICAgYm9vbCBzY3Jh
dGNoR1BSMUhhc1N0b3JhZ2UgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewor
ICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAq
IHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0
b3IgPSAmdm0tPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOworICAgICAgICAKKyAgICAgICAgaWYg
KCFvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hH
UFIxKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0cihN
YWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1Np
emUpLCBzY3JhdGNoR1BSMSkpOworICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNo
R1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAgICAgICAgICAg
IHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJy
ZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQ
UjEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBvbGRT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAg
ICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQ
UjEpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3ViUHRyKE1h
Y3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6
ZSksIHNjcmF0Y2hHUFIxKSk7CisgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hH
UFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOworICAgICAgICAgICAg
c3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJl
bnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BS
MSk7CisgICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIxID0gbmV3IHN0b3JhZ2UsIHNj
cmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCisgICAgICAg
ICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgeworICAgICAgICAgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMywg
LShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksIHNjcmF0Y2hHUFIy
KTsKKyAgICAgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkg
KyBzaXplb2Yodm9pZCopKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKKyAgICAgICAgc2Ny
YXRjaEdQUjFIYXNTdG9yYWdlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzdHViSml0LnN0b3JlUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkK
KyAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklu
bGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCisgICAgICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBzdHViSml0LnN0
b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZz
ZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwor
ICAgIH0KKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSB7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghc2NyYXRjaEdQUjFI
YXNTdG9yYWdlKQorICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIx
KTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgfQorI2VuZGlmCisg
ICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBmYWlsdXJlOworICAgICAgICAgICAgCisgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVz
ZVJlZ2lzdGVycygpKSB7CisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJz
QnlQb3BwaW5nKHN0dWJKaXQpOworICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisK
KyAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOworICAgICAgICBhbGxvY2F0b3Iu
cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0KTsKKyAgICAgICAgZmFpbHVy
ZSA9IHN0dWJKaXQuanVtcCgpOworICAgIH0gZWxzZQorICAgICAgICBzdWNjZXNzID0gc3R1Ykpp
dC5qdW1wKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzSW5TbG93UGF0aDsKKyAgICAKKyAgICBp
ZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSkgeworICAgICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKKyAgICAg
ICAgCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0
dWJKaXQpOworICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0
Y2hCdWZmZXJGb3JTaXplKGFsbG9jYXRvci5kZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemUoKSk7Cisg
ICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXIoc3R1
YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSKTsKKyNlbHNlCisgICAgICAg
IHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUik7CisjZW5kaWYK
KyAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOworICAgICAgICBhbGxvY2F0
b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlcihzdHViSml0LCBzY3JhdGNo
QnVmZmVyLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN1Y2Nlc3NJblNsb3dQYXRoID0gc3R1Ykpp
dC5qdW1wKCk7CisgICAgfQorICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAm
c3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vz
cywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOworICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdp
c3RlcnMoKSkKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwp
OworICAgIGVsc2UKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIGZhaWx1
cmVMYWJlbCk7CisgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhvcGVyYXRpb25DYWxsLCBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dCk7
CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzc0luU2xvd1BhdGgsIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb0RvbmUpKTsKKyAgICB9CisgICAgCisgICAgc3R1YlJvdXRpbmUgPQorICAgICAgICBjcmVh
dGVKSVRTdHViUm91dGluZSgKKyAgICAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAorICAgICAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgICAgICgiREZHIFB1dEJ5SWQgJXN0
cmFuc2l0aW9uIHN0dWIgKCVwIC0+ICVwKSBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCisgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPyAicmVhbGxvY2F0aW5nICIgOiAiIiwKKyAgICAg
ICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAg
ICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisg
ICAgICAgICAgICAqdm0sCisgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVj
dXRhYmxlKCksCisgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0g
b2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAorICAgICAgICAgICAgc3RydWN0dXJl
KTsKK30KKworc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5k
KQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CisKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXND
ZWxsKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7
CisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsK
KyAgICAKKyAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgorICAgIGlmIChz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1
dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5l
ZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCisgICAgICAgICAgICAvLyBlbm91Z2ggcmVn
aXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgorICAgICAgICAgICAgaWYgKEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzIDwgNgorICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAg
ICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTa2lwIG9w
dGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVy
ZSBoYXMKKyAgICAgICAgICAgIC8vIGluZGV4aW5nIHN0b3JhZ2UuCisgICAgICAgICAgICBpZiAo
b2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZVBy
b3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBT
dHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWlu
KGV4ZWMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBlbWl0UHV0VHJhbnNpdGlvblN0dWIo
CisgICAgICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8s
IHB1dEtpbmQsCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUsIHByb3Rv
dHlwZUNoYWluLAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwKKyAg
ICAgICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOworICAgICAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAorICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAg
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9u
KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1
cmUsIHByb3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERpcmVjdCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmVwYXRjaEJ5SWRT
ZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2lu
ZCksIGZhbHNlKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKCp2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIHJlcGF0Y2hQdXRCeUlE
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBib29sIGNhY2hlZCA9IHRyeUNh
Y2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8s
IHB1dEtpbmQpOworICAgIGlmICghY2FjaGVkKQorICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5j
b2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVy
aWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworfQorCitzdGF0aWMgYm9vbCB0cnlC
dWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworCisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOworICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCk7CisgICAgCisgICAgaWYg
KCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3Ry
dWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICBpZiAoc2xvdC5iYXNlKCkgPT0g
YmFzZVZhbHVlKSB7CisgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CisgICAg
ICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CisgICAgICAgIAorICAgICAg
ICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgeworICAg
ICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTa2lwIG9wdGltaXpp
bmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKKyAg
ICAgICAgICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCisgICAgICAg
ICAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2CisgICAgICAgICAgICAgICAg
JiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKQorICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJl
YWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcworICAgICAgICAgICAgLy8gaW5kZXhpbmcgc3Rv
cmFnZS4KKyAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVh
ZGVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAobm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZUNlbGwpID09IElu
dmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0
cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhl
IG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KKyAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0Ojpmcm9tKAorICAgICAgICAgICAgICAgIHB1dEtpbmQsIHN0dWJJbmZvLAorICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKKyAgICAgICAgICAgICAgICBleGVjLCBi
YXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCisgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAorICAgICAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgp
KSwKKyAgICAgICAgICAgICAgICBzdHViUm91dGluZSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGxpc3QtPmFkZEFjY2VzcygKKyAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0cmFu
c2l0aW9uKAorICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksCisgICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90
b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcg
dGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KKyAgICAgICAgICAg
IGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKAorICAgICAgICAgICAgICAgIHB1
dEtpbmQsIHN0dWJJbmZvLAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNl
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVtaXRQdXRSZXBsYWNlU3R1YigKKyAgICAg
ICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8s
IHB1dEtpbmQsCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbChs
aXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksIHN0dWJSb3V0aW5lKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKAorICAgICAgICAgICAgICAgIFB1dEJ5SWRB
Y2Nlc3M6OnJlcGxhY2UoCisgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBzdHViUm91dGlu
ZSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIoY29kZUJsb2NrKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFD
YWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKSk7CisgICAgICAgIAorICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCisgICAgICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFw
cHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQor
eworICAgIGJvb2wgY2FjaGVkID0gdHJ5QnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUs
IHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOworICAgIGlmICghY2FjaGVk
KQorICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0
S2luZCkpOworfQorCitzdGF0aWMgYm9vbCB0cnlSZXBhdGNoSW4oCisgICAgRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIHdhc0ZvdW5k
LAorICAgIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQoreworICAgIGlmICghYmFzZS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICh3YXNGb3Vu
ZCkgeworICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgpOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldElnbm9yZWQ7CisgICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5G
b3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlLCB3YXNGb3VuZCA/IHNsb3Quc2xvdEJhc2UoKSA6IEpT
VmFsdWUoKSwgaWRlbnQsIG9mZnNldElnbm9yZWQpOworICAgIGlmIChjb3VudCA9PSBJbnZhbGlk
UHJvdG90eXBlQ2hhaW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKKyAgICBp
bnQgbGlzdEluZGV4OworICAgIAorICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9
IHN0dWJJbmZvLmhvdFBhdGhCZWdpbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxh
YmVsOworICAgIAorICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkg
eworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KCk7CisgICAgICAgIHN0dWJJbmZvLmluaXRJbkxpc3QocG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0LCAwKTsKKyAgICAgICAgc2xvd0Nhc2VMYWJlbCA9IHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOworICAgICAgICBsaXN0SW5kZXggPSAwOworICAg
IH0gZWxzZSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0g
YWNjZXNzX2luX2xpc3QpOworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHVi
SW5mby51LmluTGlzdC5zdHJ1Y3R1cmVMaXN0OworICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5m
by51LmluTGlzdC5saXN0U2l6ZTsKKyAgICAgICAgc2xvd0Nhc2VMYWJlbCA9IENvZGVMb2NhdGlv
bkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAobGlzdEluZGV4
ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5w
cm90b3R5cGVDaGFpbihleGVjKTsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lOworICAgIAorICAgIHsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxH
UFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5k
ZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOworICAgICAgICAKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzIHN0dWJKaXQodm0pOworICAgICAgICAKKyAgICAgICAgYm9vbCBuZWVkVG9SZXN0b3Jl
U2NyYXRjaDsKKyAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgeworICAg
ICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihi
YXNlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOworICAgICAgICBm
YWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7CisgICAgICAgIAorICAgICAgICBT
dHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7CisgICAgICAgICAgICBKU09iamVjdCogcHJv
dG90eXBlID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMp
KTsKKyAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKKyAgICAgICAgICAg
ICAgICBwcm90b3R5cGUsIHByb3RvdHlwZS0+c3RydWN0dXJlKCksIGV4ZWMtPmNvZGVCbG9jaygp
LCBzdHViSW5mbywgc3R1YkppdCwKKyAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKKyAgICAgICAg
fQorICAgICAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdHViSml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0Zv
dW5kKSkpLCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIod2FzRm91bmQpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAg
ICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOworICAgICAg
ICAKKyAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3Jh
dGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOworICAgICAgICAK
KyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2Rl
QmxvY2soKSk7CisKKyAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFi
ZWwsIHNsb3dDYXNlTGFiZWwpOworICAgICAgICAKKyAgICAgICAgc3R1YlJvdXRpbmUgPSBGSU5B
TElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAg
ICAgICAgKCJERkcgSW4gKGZvdW5kID0gJXMpIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAi
LAorICAgICAgICAgICAgICAgIHdhc0ZvdW5kID8gInllcyIgOiAibm8iLCB0b0NTdHJpbmcoKmV4
ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksCisgICAgICAgICAgICAgICAgc3VjY2Vzc0xhYmVsLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICB9CisgICAgCisgICAgcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgdHJ1ZSk7CisgICAgc3R1YkluZm8udS5pbkxp
c3QubGlzdFNpemUrKzsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29k
ZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5ob3RQYXRoQmVnaW4u
anVtcEF0T2Zmc2V0KDApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOworICAgIAorICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9D
QUNIRV9TSVpFIC0gMSk7Cit9CisKK3ZvaWQgcmVwYXRjaEluKAorICAgIEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCB3YXNGb3VuZCwK
KyAgICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK3sKKyAgICBpZiAodHJ5UmVwYXRjaEluKGV4ZWMsIGJhc2UsIGlkZW50LCB3YXNGb3VuZCwg
c2xvdCwgc3R1YkluZm8pKQorICAgICAgICByZXR1cm47CisgICAgcmVwYXRjaENhbGwoZXhlYy0+
Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uSW4pOwor
fQorCitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVy
LCBWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCit7CisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKKyAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdl
dENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+
Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7Cit9CisK
K3ZvaWQgbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
LCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgY29kZVB0ciwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorewor
ICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIpOworICAgIAorICAgIC8vIElmIHlvdSdyZSBi
ZWluZyBjYWxsLWxpbmtlZCBmcm9tIGEgREZHIGNhbGxlciB0aGVuIHlvdSBvYnZpb3VzbHkgZGlk
bid0IGdldCBpbmxpbmVkLgorICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCisgICAgICAgIGNhbGxl
ZUNvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAKKyAgICBD
b2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9j
aygpOworICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAKKyAgICBBU1NF
UlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKKyAgICBjYWxsTGlua0luZm8uY2FsbGVlLnNl
dChleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luLCBj
YWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOworICAgIGNhbGxMaW5r
SW5mby5sYXN0U2VlbkNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbGVy
Q29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhjYWxsTGlua0luZm8uaG90UGF0aE90aGVyLCBjb2RlUHRyKTsKKyAgICAKKyAgICBp
ZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWlu
Z0NhbGwoZXhlYy0+Y2FsbGVyRnJhbWUoKSwgJmNhbGxMaW5rSW5mbyk7CisgICAgCisgICAgaWYg
KGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2Fs
bExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVD
YWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgbGlua1Nsb3dGb3Io
cmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNvbnN0cnVjdCk7Cit9CisK
K3ZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIENvZGVCbG9jayogY2Fs
bGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CisgICAgVk0q
IHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOworICAgIAorICAgIGxpbmtTbG93Rm9yKHJlcGF0
Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIGtpbmQpOworfQorCit2b2lkIGxpbmtDbG9zdXJl
Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxv
Y2sqIGNhbGxlZUNvZGVCbG9jaywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV4ZWN1dGFibGVCYXNl
KiBleGVjdXRhYmxlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKK3sKKyAgICBBU1NF
UlQoIWNhbGxMaW5rSW5mby5zdHViKTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVC
bG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9IGNh
bGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBHUFJSZWcgY2FsbGVlR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihjYWxsTGlua0luZm8uY2FsbGVlR1BSKTsKKyAgICAKKyAgICBDQ2FsbEhl
bHBlcnMgc3R1YkppdCh2bSwgY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc2xv
d1BhdGguYXBwZW5kKAorICAgICAgICBzdHViSml0LmJyYW5jaFRlc3Q2NCgKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Tm9uWmVybywgY2FsbGVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpKTsKKyNlbHNlCisgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0
aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyNlbmRpZgorICAgIAorICAgIHNsb3dQYXRoLmFwcGVuZCgK
KyAgICAgICAgc3R1YkppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSkpOworICAgIAorICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAg
ICAgc3R1YkppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFs
LAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGV4ZWN1dGFibGUpKSk7CisgICAgCisgICAgc3R1YkppdC5sb2FkUHRyKAorICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRP
ZlNjb3BlQ2hhaW4oKSksCisgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgc3R1YkppdC5zdG9yZTY0KAorICAgICAgICBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3Rlcikg
KiBKU1N0YWNrOjpTY29wZUNoYWluKSkpOworI2Vsc2UKKyAgICBzdHViSml0LnN0b3JlUHRyKAor
ICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICBzdHViSml0
LnN0b3JlMzIoCisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3Rh
Y2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKSk7CisjZW5kaWYKKyAgICAKKyAgICBBc3NlbWJseUhlbHBlcnM6OkNhbGwg
Y2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsKKyAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgZG9u
ZSA9IHN0dWJKaXQuanVtcCgpOworICAgIAorICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOwor
ICAgIHN0dWJKaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86Om5vbkFyZ0dQUjApOworI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCisgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyNlbmRpZgorICAg
IHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6bm9uQXJnR1BS
Mik7CisgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZv
Ojpub25BcmdHUFIyKTsKKyAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQu
anVtcCgpOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwg
Y2FsbGVyQ29kZUJsb2NrKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0
aW9uUHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDAp
KTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRD
VElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIAorICAgIFJl
ZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5ldyBD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKKyAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJERkcgY2xvc3VyZSBjYWxsIHN0dWIg
Zm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldCAlcCAoJXMpIiwKKyAgICAgICAgICAgICAg
ICB0b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoMCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAg
ICAgICAgICAgICBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHRvQ1N0cmluZyhwb2ludGVy
RHVtcChjYWxsZWVDb2RlQmxvY2spKS5kYXRhKCkpKSwKKyAgICAgICAgKnZtLCBjYWxsZXJDb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIGV4ZWN1dGFibGUsIGNhbGxMaW5r
SW5mby5jb2RlT3JpZ2luKSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KGNhbGxlckNvZGVCbG9jayk7CisgICAgCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1
bXAoCisgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJl
Z2lzdGVyKGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4pLAorICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIGxpbmtTbG93Rm9yKHJlcGF0
Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsKTsKKyAgICAKKyAgICBjYWxs
TGlua0luZm8uc3R1YiA9IHN0dWJSb3V0aW5lLnJlbGVhc2UoKTsKKyAgICAKKyAgICBBU1NFUlQo
IWNhbGxlZUNvZGVCbG9jayB8fCBjYWxsZWVDb2RlQmxvY2stPmlzSW5jb21pbmdDYWxsQWxyZWFk
eUxpbmtlZCgmY2FsbExpbmtJbmZvKSk7Cit9CisKK3ZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hC
dWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk7CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIHN0cnVj
dHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zm
c2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwor
ICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJX
aXRoUGF0Y2goKSkgeworICAgICAgICByZXBhdGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVu
dFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICAgICAgUmVwYXRjaEJ1ZmZl
cjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVM
YWJlbCksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKKyAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0
Y2guZGZnLmJhc2VHUFIpLAorICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikp
OworICAgIH0KKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3RydWN0dXJlTGFiZWwsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0
YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRP
clN0b3JlKSwgMCk7CisjZWxzZQorICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7
CisjZW5kaWYKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENo
ZWNrKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKK30KKwordm9pZCByZXNldFB1dEJ5SUQo
UmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQoreworICAgIFZfSklUT3BlcmF0aW9uX0VKQ0kgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdp
c2VfY2FzdDxWX0pJVE9wZXJhdGlvbl9FSkNJPihNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJn
ZXQoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICBWX0pJVE9wZXJhdGlvbl9FSkNJIG9wdGltaXplZEZ1bmN0aW9uOworICAgIGlmICh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KQorICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICBlbHNlIGlm
ICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KQor
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRp
bWl6ZTsKKyAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0QnVpbGRMaXN0KQorICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNT
RVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3RCdWlsZExpc3QpOworICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICB9CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7CisgICAg
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOworICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2Fu
SnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSkgeworICAgICAgICByZXBh
dGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBh
dGNoKAorICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0
cldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpLAorICAgICAgICAg
ICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOworICAgIH0KKyAgICByZXBhdGNoQnVmZmVy
LnJlcGF0Y2goc3RydWN0dXJlTGFiZWwsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBv
aW50ZXIpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOworI2Vsc2UKKyAgICByZXBhdGNo
QnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsK
KyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRh
dGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExv
YWRPclN0b3JlKSwgMCk7CisjZW5kaWYKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb1N0cnVjdENoZWNrKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKK30KKwordm9p
ZCByZXNldEluKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5ob3RQYXRo
QmVnaW4uanVtcEF0T2Zmc2V0KDApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMyw4ICs1MTMsNyBAQCBzdGF0aWMgYm9v
bCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAjZW5kaWYKICAgICAgICAgICAgIHN1Y2Nl
c3MgPSBzdHViSml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhj
ZXB0aW9uQ2hlY2spOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cigmc3R1YkluZm8pKTsKKyAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVu
dHNFeGVjU3RhdGUoKTsKICAgICAgICAgICAgIGhhbmRsZXJDYWxsID0gc3R1YkppdC5jYWxsKCk7
CiAgICAgICAgICAgICBzdHViSml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKICAg
ICAgICAgfSBlbHNlIHsKQEAgLTU0OSw3ICs1NDgsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdl
dEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CiAgICAgICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvbkZ1bmN0aW9uKTsKLSAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXJJblN0dWIpOworICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVyQ2FsbCwg
bG9va3VwRXhjZXB0aW9uSGFuZGxlcik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDE1NjIzNikJKGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmg6MTU2MjM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFJlcGF0Y2hfaAorI2RlZmlu
ZSBSZXBhdGNoX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEpJ
VCkKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiwg
SlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVy
ZVN0dWJJbmZvJik7Cit2b2lkIGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7Cit2b2lkIGJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsK
K3ZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7
Cit2b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2lu
ZCk7Cit2b2lkIHJlcGF0Y2hJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBjb25zdCBJZGVudGlmaWVy
JiwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8m
KTsKK3ZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBK
U0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCk7Cit2b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQpOwordm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiwg
Q2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlKiwgRXhlY3V0YWJsZUJhc2UqLCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIpOwordm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYs
IFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwg
U3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3RydWN0
dXJlU3R1YkluZm8mKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbHNlIC8vIEVOQUJMRShK
SVQpCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgUmVwYXRjaEJ1ZmZlcjsKK3N0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKKworaW5saW5l
IE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYs
IFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Citp
bmxpbmUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVm
ZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KK2lubGluZSBOT19SRVRVUk4gdm9pZCByZXNldEluKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisjZW5kaWYgLy8gUmVwYXRjaF9o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE1NjIzNikJKGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaDoxNTYyMzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yX2gKKyNkZWZpbmUgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAi
UmVnaXN0ZXJTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgY2xhc3MgcHJvdmlk
ZXMgYSBsb3ctbGV2ZWwgcmVnaXN0ZXIgYWxsb2NhdG9yIGZvciB1c2UgaW4gc3R1YnMuCisKK2Ns
YXNzIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yKGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQorICAgICAgICA6
IG1fdXNlZFJlZ2lzdGVycyh1c2VkUmVnaXN0ZXJzKQorICAgICAgICAsIG1fZGlkUmV1c2VSZWdp
c3RlcnMoZmFsc2UpCisgICAgeworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHZvaWQgbG9jayhUIHJlZykgeyBtX2xvY2tlZFJlZ2lzdGVycy5zZXQocmVnKTsgfQor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgorICAgIHR5cGVuYW1lIEJhbmtJ
bmZvOjpSZWdpc3RlclR5cGUgYWxsb2NhdGVTY3JhdGNoKCkKKyAgICB7CisgICAgICAgIC8vIEZp
cnN0IHRyeSB0byBhbGxvY2F0ZSBhIHJlZ2lzdGVyIHRoYXQgaXMgdG90YWxseSBmcmVlLgorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFua0luZm86Om51bWJlck9mUmVnaXN0ZXJz
OyArK2kpIHsKKyAgICAgICAgICAgIHR5cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgcmVn
ID0gQmFua0luZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgICAgICBpZiAoIW1fbG9ja2VkUmVn
aXN0ZXJzLmdldChyZWcpCisgICAgICAgICAgICAgICAgJiYgIW1fdXNlZFJlZ2lzdGVycy5nZXQo
cmVnKQorICAgICAgICAgICAgICAgICYmICFtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0KHJlZykpIHsK
KyAgICAgICAgICAgICAgICBtX3NjcmF0Y2hSZWdpc3RlcnMuc2V0KHJlZyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gU2luY2UgdGhhdCBmYWlsZWQsIHRyeSB0byBhbGxvY2F0ZSBhIHJlZ2lzdGVyIHRo
YXQgaXMgbm90IHlldAorICAgICAgICAvLyBsb2NrZWQgb3IgdXNlZCBmb3Igc2NyYXRjaC4KKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbmtJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
czsgKytpKSB7CisgICAgICAgICAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIHJl
ZyA9IEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICAgICAgaWYgKCFtX2xvY2tlZFJl
Z2lzdGVycy5nZXQocmVnKSAmJiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdldChyZWcpKSB7CisgICAg
ICAgICAgICAgICAgbV9zY3JhdGNoUmVnaXN0ZXJzLnNldChyZWcpOworICAgICAgICAgICAgICAg
IG1fZGlkUmV1c2VSZWdpc3RlcnMgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiByZWc7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFdlIGZhaWxl
ZC4KKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgLy8gTWFrZSBzb21lIHNpbGx5IGNvbXBpbGVy
cyBoYXBweS4KKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIEJhbmtJbmZvOjpS
ZWdpc3RlclR5cGU+KC0xKTsKKyAgICB9CisgICAgCisgICAgR1BSUmVnIGFsbG9jYXRlU2NyYXRj
aEdQUigpIHsgcmV0dXJuIGFsbG9jYXRlU2NyYXRjaDxHUFJJbmZvPigpOyB9CisgICAgRlBSUmVn
IGFsbG9jYXRlU2NyYXRjaEZQUigpIHsgcmV0dXJuIGFsbG9jYXRlU2NyYXRjaDxGUFJJbmZvPigp
OyB9CisgICAgCisgICAgYm9vbCBkaWRSZXVzZVJlZ2lzdGVycygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9kaWRSZXVzZVJlZ2lzdGVyczsKKyAgICB9CisgICAgCisgICAgdm9pZCBw
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhNYWNyb0Fzc2VtYmxlciYgaml0KQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2RpZFJldXNlUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3NjcmF0Y2hSZWdpc3Rl
cnMuZ2V0RlBSQnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSkg
eworICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
Mig4KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAg
ICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSwgTWFjcm9Bc3NlbWJs
ZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7
ICsraSkgeworICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4
KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQorICAgICAgICAgICAgICAg
IGppdC5wdXNoKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHZvaWQgcmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhNYWNyb0Fzc2VtYmxl
ciYgaml0KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2RpZFJldXNlUmVnaXN0ZXJzKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX3NjcmF0Y2hS
ZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRl
eChpKSkKKyAgICAgICAgICAgICAgICBqaXQucG9wKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOwor
ICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEZQ
UkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKKyAgICAg
ICAgICAgICAgICBqaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIEZQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAgICAgICAgICAgICAgIGppdC5hZGRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMig4KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBkZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBt
X3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSAqIHNpemVvZihKU1ZhbHVlKTsg
fQorICAgIAorICAgIHZvaWQgcHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyKE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIsIEdQUlJlZyBz
Y3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNvdW50
ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnM7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRl
eChpKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQo
R1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3Jh
dGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspKTsKKyNlbHNlCisgICAgICAgICAg
ICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgc3RhdGljX2Nhc3Q8RW5j
b2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspKTsK
KyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52
YWxpZEdQUlJlZyAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSAmJiAhbV9z
Y3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCisgICAgICAgICAgICAgICAgc2NyYXRj
aEdQUiA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgICAg
IGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSkgeworICAgICAgICAgICAgICAg
IGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PEVuY29k
ZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjb3VudCAqIHNpemVvZihKU1ZhbHVlKSA9PSBkZXNpcmVkU2NyYXRj
aEJ1ZmZlclNpemUoKSk7CisgICAgICAgIAorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb3VudCAqIHNpemVvZihKU1ZhbHVlKSkpLCBzY3JhdGNo
R1BSKTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3Jh
dGNoQnVmZmVyKE1hY3JvQXNzZW1ibGVyJiBqaXQsIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZm
ZXIsIEdQUlJlZyBzY3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZykKKyAgICB7CisgICAgICAgIGlm
IChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIC8vIEZpbmQgYSBz
Y3JhdGNoIHJlZ2lzdGVyLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgICAgICAgICBpZiAobV9sb2NrZWRS
ZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSB8fCBtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0R1BSQnlJ
bmRleChpKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
c2NyYXRjaEdQUiA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2Ny
YXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgCisgICAgICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0
cigpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUik7CisKKyAgICAgICAgLy8gUmVzdG9yZSBkb3Vi
bGUgcmVnaXN0ZXJzIGZpcnN0LgorICAgICAgICB1bnNpZ25lZCBjb3VudCA9IG1fdXNlZFJlZ2lz
dGVycy5udW1iZXJPZlNldEdQUnMoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX3VzZWRSZWdp
c3RlcnMuZ2V0RlBSQnlJbmRleChpKSkgeworICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2Ny
YXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKHNjcmF0Y2hHUFIsIEZQUkluZm86OnRvUmVnaXN0
ZXIoaSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb3Vu
dCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5k
ZXgoaSkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGppdC5sb2FkNjQo
c3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkp
ICsgKGNvdW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNlbHNlCisgICAgICAgICAg
ICAgICAgaml0LmxvYWQzMihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZm
ZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKyksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOwor
I2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCitwcml2YXRlOgor
ICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKKyAgICBSZWdpc3RlclNldCBtX2xvY2tl
ZFJlZ2lzdGVyczsKKyAgICBSZWdpc3RlclNldCBtX3NjcmF0Y2hSZWdpc3RlcnM7CisgICAgYm9v
bCBtX2RpZFJldXNlUmVnaXN0ZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAi
VGh1bmtHZW5lcmF0b3JzLmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJK
SVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNTdGFjay5oIgogI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJTcGVjaWFsaXplZFRodW5rSklULmgiCkBAIC0zOCw3ICszOSw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgZ2VuZXJh
dGVTbG93Q2FzZUZvcihWTSogdm0sIEpTSW50ZXJmYWNlSklUJiBqaXQpCitzdGF0aWMgSlNJbnRl
cmZhY2VKSVQ6OkNhbGwgb2xkU3R5bGVHZW5lcmF0ZVNsb3dDYXNlRm9yKFZNKiB2bSwgSlNJbnRl
cmZhY2VKSVQmIGppdCkKIHsKICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
SlNTdGFjazo6Q2FsbGVyRnJhbWUsIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgaml0LmVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlNjb3BlQ2hhaW4sIEpTSW50ZXJm
YWNlSklUOjpyZWdUMiwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKQEAgLTU5LDcgKzYwLDcgQEAg
c3RhdGljIEpTSW50ZXJmYWNlSklUOjpDYWxsIGdlbmVyYXRlU2xvdwogICAgIHJldHVybiBjYWxs
Tm90SlNGdW5jdGlvbjsKIH0KIAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9y
R2VuZXJhdG9yKFZNKiB2bSwgRnVuY3Rpb25QdHIgbGF6eUxpbmssIEZ1bmN0aW9uUHRyIG5vdEpT
RnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUpCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG9sZFN0eWxlTGlua0ZvckdlbmVyYXRvcihWTSogdm0sIEZ1bmN0aW9uUHRyIGxhenlMaW5rLCBG
dW5jdGlvblB0ciBub3RKU0Z1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lKQogewogICAgIEpTSW50
ZXJmYWNlSklUIGppdCh2bSk7CiAgICAgCkBAIC04OCw3ICs4OSw3IEBAIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbGlua0ZvckdlbmUKICAgICBqaXQuanVtcChKU0ludGVyZmFjZUpJVDo6
cmVnVDApOwogICAgIAogICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7Ci0gICAgSlNJbnRlcmZhY2VK
SVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBnZW5lcmF0ZVNsb3dDYXNlRm9yKHZtLCBqaXQp
OworICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gb2xkU3R5bGVH
ZW5lcmF0ZVNsb3dDYXNlRm9yKHZtLCBqaXQpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
Y2FsbExhenlMaW5rLCBsYXp5TGluayk7CkBAIC05NywyMiArOTgsMjIgQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yR2VuZQogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCAoImxpbmsgJXMgdHJhbXBvbGluZSIsIG5hbWUpKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGxpbmtDYWxsR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBvbGRTdHlsZUxpbmtDYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlu
a0ZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2FsbCksIEZ1bmN0
aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2FsbCIpOworICAgIHJldHVybiBv
bGRTdHlsZUxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0Nh
bGwpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNhbGwiKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9sZFN0eWxlTGlua0NvbnN0cnVjdEdlbmVyYXRvcihWTSog
dm0pCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92
bV9sYXp5TGlua0NvbnN0cnVjdCksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlND
b25zdHJ1Y3QpLCAiY29uc3RydWN0Iik7CisgICAgcmV0dXJuIG9sZFN0eWxlTGlua0ZvckdlbmVy
YXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ29uc3RydWN0KSwgRnVuY3Rpb25Q
dHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCksICJjb25zdHJ1Y3QiKTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcihWTSogdm0pCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVMaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoVk0q
IHZtKQogewotICAgIHJldHVybiBsaW5rRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlf
dm1fbGF6eUxpbmtDbG9zdXJlQ2FsbCksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpTRnVu
Y3Rpb24pLCAiY2xvc3VyZSBjYWxsIik7CisgICAgcmV0dXJuIG9sZFN0eWxlTGlua0ZvckdlbmVy
YXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2xvc3VyZUNhbGwpLCBGdW5jdGlv
blB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNsb3N1cmUgY2FsbCIpOwogfQogCi1z
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JHZW5lcmF0b3IoVk0qIHZtLCBG
dW5jdGlvblB0ciBjb21waWxlLCBGdW5jdGlvblB0ciBub3RKU0Z1bmN0aW9uLCBjb25zdCBjaGFy
KiBuYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG9sZFN0eWxlVmlydHVhbEZvckdlbmVyYXRvcihWTSogdm0sIEZ1bmN0aW9uUHRy
IGNvbXBpbGUsIEZ1bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0p
OwogICAgIApAQCAtMTQ4LDcgKzE0OSw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dmlydHVhbEZvckcKICAgICBqaXQuanVtcChKU0ludGVyZmFjZUpJVDo6cmVnVDApOwogICAgIAog
ICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7Ci0gICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2FsbE5v
dEpTRnVuY3Rpb24gPSBnZW5lcmF0ZVNsb3dDYXNlRm9yKHZtLCBqaXQpOworICAgIEpTSW50ZXJm
YWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gb2xkU3R5bGVHZW5lcmF0ZVNsb3dDYXNl
Rm9yKHZtLCBqaXQpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0
LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENvbXBpbGUsIGNv
bXBpbGUpOwpAQCAtMTU3LDE0ICsxNTgsMjQ2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdmlydHVhbEZvckcKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJ2
aXJ0dWFsICVzIHRyYW1wb2xpbmUiLCBuYW1lKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB2aXJ0dWFsQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xk
U3R5bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIHZpcnR1YWxG
b3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2ppdENvbXBpbGUpLCBGdW5j
dGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNhbGwiLCBDb2RlRm9yQ2FsbCk7
CisgICAgcmV0dXJuIG9sZFN0eWxlVmlydHVhbEZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIo
Y3RpX29wX2NhbGxfaml0Q29tcGlsZSksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpTRnVu
Y3Rpb24pLCAiY2FsbCIsIENvZGVGb3JDYWxsKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG9sZFN0eWxlVmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJu
IHZpcnR1YWxGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0
Q29tcGlsZSksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QpLCAi
Y29uc3RydWN0IiwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIG9sZFN0eWxlVmlydHVh
bEZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9qaXRDb21waWxl
KSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCksICJjb25zdHJ1
Y3QiLCBDb2RlRm9yQ29uc3RydWN0KTsKK30KKworaW5saW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxp
ZGF0aW9uKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcG9pbnRlckdQUikKK3sKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGlzTm9uWmVybyA9IGppdC5icmFu
Y2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgcG9pbnRlckdQUik7CisgICAgaml0LmJy
ZWFrcG9pbnQoKTsKKyAgICBpc05vblplcm8ubGluaygmaml0KTsKKyAgICBqaXQucHVzaChwb2lu
dGVyR1BSKTsKKyAgICBqaXQubG9hZDgocG9pbnRlckdQUiwgcG9pbnRlckdQUik7CisgICAgaml0
LnBvcChwb2ludGVyR1BSKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGppdCk7CisgICAgVU5V
U0VEX1BBUkFNKHBvaW50ZXJHUFIpOworI2VuZGlmCit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qIHZtKQoreworICAg
IENDYWxsSGVscGVycyBqaXQodm0pOworICAgIAorICAgIC8vIFdlIHdpbGwganVtcCB0byBoZXJl
IGlmIHRoZSBKSVQgY29kZSB0aGlua3MgaXQncyBtYWtpbmcgYSBjYWxsLCBidXQgdGhlCisgICAg
Ly8gbGlua2luZyBoZWxwZXIgKEMrKyBjb2RlKSBkZWNpZGVkIHRvIHRocm93IGFuIGV4Y2VwdGlv
biBpbnN0ZWFkLiBXZSB3aWxsCisgICAgLy8gaGF2ZSBzYXZlZCB0aGUgY2FsbFJldHVybkluZGV4
IGluIHRoZSBmaXJzdCBhcmd1bWVudHMgb2YgSklUU3RhY2tGcmFtZS4KKyAgICAvLyBOb3RlIHRo
YXQgdGhlIHJldHVybiBhZGRyZXNzIHdpbGwgYmUgb24gdGhlIHN0YWNrIGF0IHRoaXMgcG9pbnQs
IHNvIHdlCisgICAgLy8gbmVlZCB0byByZW1vdmUgaXQgYW5kIGRyb3AgaXQgb24gdGhlIGZsb29y
LCBzaW5jZSB3ZSBkb24ndCBjYXJlIGFib3V0IGl0LgorICAgIC8vIEZpbmFsbHkgbm90ZSB0aGF0
IHRoZSBjYWxsIGZyYW1lIHJlZ2lzdGVyIHBvaW50cyBhdCB0aGUgY2FsbGVlIGZyYW1lLCBzbwor
ICAgIC8vIHdlIG5lZWQgdG8gcG9wIGl0LgorICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQubG9h
ZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6Q2FsbGVyRnJhbWUpLAorICAgICAgICBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBqaXQucGVl
azY0KEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdT
X0lOREVYKTsKKyNlbHNlCisgICAgaml0LnBlZWsoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOworI2VuZGlmCisgICAgaml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIp
OworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8
dm9pZCo+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Cisg
ICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAg
aml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9u
KGppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICBqaXQuanVtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIpOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAm
aml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCAoIlRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOworfQor
CitzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCwgVk0qIHZt
LCBQX0pJVE9wZXJhdGlvbl9FIHNsb3dQYXRoRnVuY3Rpb24pCit7CisgICAgaml0LnByZXNlcnZl
UmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBlbWl0UG9p
bnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBqaXQuc3RvcmVQ
dHIoCisgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIsCisgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6
OlJldHVyblBDKSk7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCAmdm0tPnRvcENhbGxGcmFtZSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBqaXQucG9rZTY0
KEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lO
REVYKTsKKyNlbHNlCisgICAgaml0LnBva2UoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOworI2VuZGlmCisgICAgaml0LnNldHVwQXJn
dW1lbnRzRXhlY1N0YXRlKCk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc2xvd1BhdGhGdW5jdGlvbikpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAKKyAgICAvLyBU
aGlzIHNsb3cgY2FsbCB3aWxsIHJldHVybiB0aGUgYWRkcmVzcyBvZiBvbmUgb2YgdGhlIGZvbGxv
d2luZzoKKyAgICAvLyAxKSBFeGNlcHRpb24gdGhyb3dpbmcgdGh1bmsuCisgICAgLy8gMikgSG9z
dCBjYWxsIHJldHVybiB2YWx1ZSByZXR1cm5lciB0aGluZ3kuCisgICAgLy8gMykgVGhlIGZ1bmN0
aW9uIHRvIGNhbGwuCisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJl
dHVyblBDKSwKKyAgICAgICAgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAg
ICBqaXQuc3RvcmVQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikpICogSlNTdGFjazo6UmV0dXJuUEMpKTsKKyAgICBlbWl0UG9pbnRlclZhbGlk
YXRpb24oaml0LCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5y
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25S
ZXR1cm5HUFIpOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cit9CisK
K3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvclRodW5rR2VuZXJhdG9yKAorICAg
IFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIC8vIFRoZSByZXR1
cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2sgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdp
bGwgaGVuY2UKKyAgICAvLyBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUgY2FsbCBmcmFt
ZSB3aGlsZSB3ZSBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwKKyAgICAvLyB0byBwZXJmb3JtIGxp
bmtpbmcgYW5kIGxhenkgY29tcGlsYXRpb24gaWYgbmVjZXNzYXJ5LiBXZSBleHBlY3QgdGhlIGNh
bGxlZQorICAgIC8vIHRvIGJlIGluIG5vbkFyZ0dQUjAvbm9uQXJnR1BSMSAocGF5bG9hZC90YWcp
LCB0aGUgY2FsbCBmcmFtZSB0byBoYXZlIGFscmVhZHkKKyAgICAvLyBiZWVuIGFkanVzdGVkLCBu
b25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgaG9sZHMgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGluZGV4
LAorICAgIC8vIGFuZCBhbGwgb3RoZXIgcmVnaXN0ZXJzIHRvIGJlIGF2YWlsYWJsZSBmb3IgdXNl
LiBXZSB1c2UgSklUU3RhY2tGcmFtZTo6YXJncworICAgIC8vIHRvIHNhdmUgaW1wb3J0YW50IGlu
Zm9ybWF0aW9uIGFjcm9zcyBjYWxscy4KKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsK
KyAgICAKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBraW5kID09IENvZGVGb3JDYWxsID8gb3Bl
cmF0aW9uTGlua0NhbGwgOiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KTsKKyAgICAKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICByZXR1
cm4gRklOQUxJWkVfQ09ERSgKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiTGluayAl
cyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0
cnVjdCIpKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQoreworICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVG
b3JDYWxsKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVua0dl
bmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwg
Q29kZUZvckNvbnN0cnVjdCk7Cit9CisKKy8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdl
IG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgor
Ly8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1l
IGFueXdheS4KK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVy
YXRvcihWTSogdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgCisgICAgc2xv
d1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKTsKKyAgICAKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMaW5rIGNsb3N1cmUgY2FsbCBzbG93
IHBhdGggdGh1bmsiKSk7Cit9CisKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVh
bEZvclRodW5rR2VuZXJhdG9yKAorICAgIFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQoreworICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2ssIG9yIGlu
IHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCisgICAgLy8ganVtcCB0byB0aGUgY2Fs
bGVlLCBvciBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3
ZQorICAgIC8vIG1ha2UgYSBDKysgZnVuY3Rpb24gY2FsbCB0byB0aGUgYXBwcm9wcmlhdGUgSklU
IG9wZXJhdGlvbi4KKworICAgIENDYWxsSGVscGVycyBqaXQodm0pOworICAgIAorICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7CisKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGhh
dmUgYSBzdG9yeSBmb3IgZWxpbWluYXRpbmcgdGhlc2UgY2hlY2tzLiBJbiBtYW55IGNhc2VzLAor
ICAgIC8vIHRoZSBERkcga25vd3MgdGhhdCB0aGUgdmFsdWUgaXMgZGVmaW5pdGVseSBhIGNlbGws
IG9yIGRlZmluaXRlbHkgYSBmdW5jdGlvbi4KKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAgaml0LmJyYW5jaFRlc3Q2NCgKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6bm9uQXJnR1BSMCwgR1BSSW5mbzo6dGFn
TWFza1JlZ2lzdGVyKSk7CisjZWxzZQorICAgIHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAgaml0
LmJyYW5jaDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6
bm9uQXJnR1BSMSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpKSk7CisjZW5kaWYKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEdQ
UkluZm86Om5vbkFyZ0dQUjIpOworICAgIHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAgaml0LmJy
YW5jaFB0cigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMiwgU3RydWN0dXJlOjpj
bGFzc0luZm9PZmZzZXQoKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoSlNGdW5jdGlvbjo6aW5mbygpKSkpOworICAgIAorICAgIC8vIE5vdyB3ZSBrbm93IHdlIGhh
dmUgYSBKU0Z1bmN0aW9uLgorICAgIAorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZF
eGVjdXRhYmxlKCkpLAorICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBzbG93Q2Fz
ZS5hcHBlbmQoCisgICAgICAgIGppdC5icmFuY2gzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVy
czo6TGVzc1RoYW4sCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAg
ICAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mTnVt
UGFyYW1ldGVyc0ZvcihraW5kKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigwKSkpOworICAgIAorICAgIC8vIE5vdyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSBhIENvZGVC
bG9jaywgYW5kIHdlJ3JlIGNvbW1pdHRlZCB0byBtYWtpbmcgYSBmYXN0CisgICAgLy8gY2FsbC4K
KyAgICAKKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKKyAg
ICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBqaXQu
c3RvcmU2NCgKKyAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMSwKKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNT
dGFjazo6U2NvcGVDaGFpbikpOworI2Vsc2UKKyAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgIEdQ
UkluZm86Om5vbkFyZ0dQUjEsCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAg
ICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4gKwor
ICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSkpOworICAgIGppdC5zdG9yZTMyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6U2Nv
cGVDaGFpbiArCisgICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpKTsKKyNlbmRpZgorICAgIAorICAgIGppdC5sb2FkUHRyKAorICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMiwgRXhlY3V0YWJs
ZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpKSwKKyAgICAgICAg
R1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIC8vIE1ha2UgYSB0YWlsIGNhbGwuIFRoaXMgd2ls
bCByZXR1cm4gYmFjayB0byBKSVQgY29kZS4KKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDApOworCisgICAg
c2xvd0Nhc2UubGluaygmaml0KTsKKyAgICAKKyAgICAvLyBIZXJlIHdlIGRvbid0IGtub3cgYW55
dGhpbmcsIHNvIHJldmVydCB0byB0aGUgZnVsbCBzbG93IHBhdGguCisgICAgCisgICAgc2xvd1Bh
dGhGb3Ioaml0LCB2bSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/IG9wZXJhdGlvblZpcnR1YWxDYWxs
IDogb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdCk7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIlZpcnR1YWwgJXMgc2xvdyBw
YXRoIHRodW5rIiwga2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7
Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKFZN
KiB2bSkKK3sKKyAgICByZXR1cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9y
Q2FsbCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Io
dm0sIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5n
TGVuZ3RoVHJhbXBvbGluZUdlbmVyYXRvcihWTSogdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDExICszMSwyMiBAQAogI2lmIEVOQUJMRShKSVQpCiBuYW1lc3BhY2UgSlNDIHsKIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbGlua0NvbnN0cnVjdEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHZpcnR1YWxDYWxsR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVh
bENvbnN0cnVjdEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9sZFN0eWxl
TGlua0NhbGxHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZUxp
bmtDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHls
ZUxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9s
ZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBv
bGRTdHlsZVZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKKworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSopOworCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOworCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKKwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsK
KwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3Io
Vk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKik7CiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212660</attachid>
            <date>2013-09-25 21:21:41 -0700</date>
            <delta_ts>2013-09-25 22:20:21 -0700</delta_ts>
            <desc>patch 4: more Windows build fixes. </desc>
            <filename>bug-121749.patch</filename>
            <type>text/plain</type>
            <size>481740</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2NDQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxMy0wOS0yNSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
TW92ZSBERkcgaW5saW5lIGNhY2hpbmcgbG9naWMgaW50byBqaXQvLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzQ5LgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbGFuZGluZyBodHRwOi8vdHJhYy53
ZWJraXQub3JnL2NoYW5nZXNldC8xNTYyMzUgYWZ0ZXIgcmViYXNpbmcgdG8gbGF0ZXN0CisgICAg
ICAgIHJldmlzaW9uIGFuZCBmaXhpbmcgYnVpbGQgYnJlYWthZ2VzIG9uIFdpbmRvd3MuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVzZXRTdHViSW50ZXJu
YWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICog
ZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Q2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxBcnJheUFsbG9j
YXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5oOgorICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRp
b25QdXRCeVZhbEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAg
ICAgICAoSlNDOjpERkc6Om9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUpOgor
ICAgICAgICAoSlNDOjpERkc6Om9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRG
b3JUeXBlKToKKyAgICAgICAgKiBkZmcvREZHUmVnaXN0ZXJTZXQuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1JlcGF0
Y2guaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhv
bGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1Bh
dGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
Q29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlND
OjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRC
b3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3Mu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuaDoKKyAgICAgICAgKiBmdGwvRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3Qp
OgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuaDoKKyAgICAgICAgKiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6d3JpdGVCYXJy
aWVyKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9y
KToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rU2xvd0NhbGwpOgorICAgICAgICAqIGppdC9KSVRD
YWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0
aW9uV3JhcHBlcnMuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25XcmFwcGVycy5oLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcC4KKyAg
ICAgICAgKEpTQzo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpOgorICAgICAg
ICAqIGppdC9KSVRPcGVyYXRpb25zLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oLgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmguCisgICAgICAg
ICogaml0L1JlcGF0Y2guY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwLgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAg
ICAgKiBqaXQvUmVwYXRjaC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guaC4KKyAgICAgICAgKiBqaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmguCisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6
Om9sZFN0eWxlR2VuZXJhdGVTbG93Q2FzZUZvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlTGlu
a0ZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlTGlua0NhbGxHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpvbGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpvbGRTdHlsZUxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
Om9sZFN0eWxlVmlydHVhbEZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlVmly
dHVhbENhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpvbGRTdHlsZVZpcnR1YWxDb25zdHJ1
Y3RHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjplbWl0UG9pbnRlclZhbGlkYXRpb24pOgorICAg
ICAgICAoSlNDOjp0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpzbG93UGF0aEZvcik6CisgICAgICAgIChKU0M6OmxpbmtGb3JUaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OmxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2xv
c3VyZUNhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxGb3JUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjp2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGpp
dC9UaHVua0dlbmVyYXRvcnMuaDoKKwogMjAxMy0wOS0yNSAgQnJhZHkgRWlkc29uICA8YmVpZHNv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIHRoZSBJbmRleGVkREIgYnVpbGQgb24gTWFj
LCBidXQgbGVhdmUgdGhlIGZlYXR1cmUgbm9uLWZ1bmN0aW9uYWwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw2IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1BsYW4uY3BwCiAgICAgZGZn
L0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKICAgICBkZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCi0gICAgZGZnL0RGR1JlcGF0Y2guY3BwCiAgICAgZGZnL0RGR1NT
QUNvbnZlcnNpb25QaGFzZS5jcHAKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCiAgICAg
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0yMjUsNiArMjI0LDcgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBqaXQvSklURXhjZXB0aW9ucy5jcHAKICAgICBqaXQv
SklUT3Bjb2Rlcy5jcHAKICAgICBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorICAgIGppdC9KSVRP
cGVyYXRpb25zLmNwcAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKICAgICBqaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKICAgICBqaXQvSklUU3R1YlJvdXRpbmUuY3BwCkBAIC0y
MzIsNiArMjMyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBqaXQvSklUVGh1
bmtzLmNwcAogICAgIGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAK
ICAgICBqaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAKKyAgICBqaXQvUmVwYXRjaC5j
cHAKICAgICBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAogCiAgICAgcGFyc2VyL0xleGVyLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9u
IDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0zMzksMTMgKzMzOSw5IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJC
YW5rLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJTZXQuaCBcCi0J
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcCBcCi0JU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhbmVT
dHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2NvcmVCb2FyZC5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTbG93UGF0aEdlbmVyYXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwIFwKQEAgLTYzMiw2ICs2MjgsOSBAQCBqYXZhc2NyaXB0Y29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbldyYXBwZXJzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViQ2FsbC5oIFwKQEAg
LTY1NCw2ICs2NTMsOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3IuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Rh
cmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw3ICsxODMsNiBAQCBTT1VSQ0VTICs9IFwK
ICAgICBkZmcvREZHUGxhbi5jcHAgXAogICAgIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAgXAogICAgIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIFwKLSAg
ICBkZmcvREZHUmVwYXRjaC5jcHAgXAogICAgIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
IFwKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIFwKICAgICBkZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAgXApAQCAtMjIyLDYgKzIyMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGpp
dC9KSVRFeGNlcHRpb25zLmNwcCBcCiAgICAgaml0L0pJVE9wY29kZXMuY3BwIFwKICAgICBqaXQv
SklUT3Bjb2RlczMyXzY0LmNwcCBcCisgICAgaml0L0pJVE9wZXJhdGlvbnMuY3BwIFwKICAgICBq
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIFwKICAgICBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAgXAogICAgIGppdC9KSVRTdHViUm91dGluZS5jcHAgXApAQCAtMjI5LDYgKzIyOSw3IEBA
IFNPVVJDRVMgKz0gXAogICAgIGppdC9KSVRUaHVua3MuY3BwIFwKICAgICBqaXQvSklUVG9ERkdE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIFwKICAgICBqaXQvSnVtcFJlcGxhY2VtZW50
V2F0Y2hwb2ludC5jcHAgXAorICAgIGppdC9SZXBhdGNoLmNwcCBcCiAgICAgaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAgXAogICAgIGxsaW50L0xMSW50Q0xvb3AuY3BwIFwKICAgICBsbGludC9MTElu
dERhdGEuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagko
cmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc4LDYg
KzM3OCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklURXhjZXB0aW9ucy5j
cHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVE9wY29kZXMuY3BwIiAv
Pg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGNvZGVzMzJfNjQuY3BwIiAv
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRpb25zLmNwcCIgLz4N
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUUHJvcGVydHlBY2Nlc3MuY3BwIiAv
Pg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YlJvdXRpbmUu
Y3BwIiAvPg0KQEAgLTM4NSw2ICszODYsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aml0XEpJVFRodW5rcy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJ
VFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCIgLz4NCiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxqaXRcSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFJlcGF0Y2guY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRvcnMuY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGxsaW50XExMSW50Q0xvb3AuY3BwIiAvPg0KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGxsaW50XExMSW50RGF0YS5jcHAiIC8+DQpAQCAtNzY5LDYgKzc3MSw4IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklURGlzYXNzZW1ibGVyLmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVEV4Y2VwdGlvbnMuaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUSW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRpb25XcmFwcGVycy5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRpb25zLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJDYWxsLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caml0XEpJVFN0dWJSb3V0aW5lLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caml0XEpJVFN0dWJzLmgiIC8+DQpAQCAtNzgwLDYgKzc4NCw5IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUV3JpdGVCYXJyaWVyLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XEpTSW50ZXJmYWNlSklULmgiIC8+DQogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caml0XEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVnaXN0ZXJTZXQuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxqaXRcUmVwYXRjaC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGppdFxTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcU3BlY2lhbGl6ZWRUaHVua0pJVC5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRvci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRvcnMuaCIgLz4NCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTEyMCw2ICsxMjAsMTMgQEAKIAkJMEYyNEU1NDQxN0VBOUY1OTAwQUJCMjE3IC8qIEdQUklu
Zm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRF
NTNGMTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NTUxN0YwQjcxQzAwQUJCMjE3IC8qIElu
bGluZUNhbGxGcmFtZVNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjI0RTU1MzE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0
LmNwcCAqLzsgfTsKIAkJMEYyNEU1NTYxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFt
ZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
NEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjRFNTRDMTdFRTI3NDkw
MEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRp
b25zLmNwcCAqLzsgfTsKKwkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRF
NTQ2MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggKi87IH07CisJCTBGMjRFNTRF
MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25XcmFwcGVycy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NDcxN0VFMjc0OTAwQUJCMjE3
IC8qIEpJVE9wZXJhdGlvbldyYXBwZXJzLmggKi87IH07CisJCTBGMjRFNTRGMTdFRTI3NDkwMEFC
QjIxNyAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyNEU1NDgxN0VFMjc0OTAwQUJCMjE3IC8qIFJlZ2lzdGVyU2V0LmggKi87
IH07CisJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ5MTdFRTI3NDkwMEFC
QjIxNyAvKiBSZXBhdGNoLmNwcCAqLzsgfTsKKwkJMEYyNEU1NTExN0VFMjc0OTAwQUJCMjE3IC8q
IFJlcGF0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi87IH07CisJCTBGMjRFNTUy
MTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTRCMTdFRTI3NDkwMEFC
QjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLzsgfTsKIAkJMEYyNTZDMzYxNjI3
QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2
MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJC
NjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0QwMEE3
QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVm
Q291bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMjY2LDggKzI3Myw2IEBACiAJCTBGNzY2RDM1MTVBRTI1M0IwMDhGMzYzRSAv
KiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQzMzE1QUUyNTM1MDA4RjM2M0UgLyogSnVtcFJlcGxh
Y2VtZW50V2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNzY2RDM2MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDM3MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY3NjZENDQxNUIyQTNDMDAwOEYzNjNFIC8qIERGR1JlZ2lz
dGVyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
Rjc2NkQ0MjE1QjJBM0JEMDA4RjM2M0UgLyogREZHUmVnaXN0ZXJTZXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjc2NkQ0NjE1QjM3MDFGMDA4
RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQ0NTE1QjM3MDFEMDA4RjM2M0UgLyog
REZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBs
aW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsg
fTsKIAkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUYxNDE3MkMy
RjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdD
b21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzMxLDggKzczNiw2IEBACiAJCTg2QUU2
NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QUU2NEE3MTM1RTVFMUMwMDk2MzAxMiAvKiBT
SDRBc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk4NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCNTgyMkUxNEQyMzcz
QjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLzsgfTsKIAkJODZCNTgyNjkxNEQyNzk3MDAw
QTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODYwM0NFRjIxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxp
bmcuY3BwICovOyB9OwotCQk4NkJCMDlDMDEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkJCMDlC
RTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5jcHAgKi87IH07Ci0JCTg2QkIwOUMxMTM4
RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NkJCMDlCRjEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRj
aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2
QzM2RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5
IC8qIE1hY3JvQXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVy
QVJNLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
QzU2OEREMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgKi87IH07CiAJ
CTg2QzU2OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QzU2OERFMTFBMjEzRUUw
MDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTMyMiw2ICsxMzI1LDEzIEBACiAJCTBGMjRFNTNG
MTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEdQUkluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTMx
N0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU1NDE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2Fs
bEZyYW1lU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUNhbGxG
cmFtZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI0RTU0NTE3RUUyNzQ5
MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKSVRPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyNEU1NDYxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjI0RTU0NzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9uV3Jh
cHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUT3BlcmF0aW9uV3Jh
cHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNEU1NDgxN0VFMjc0OTAw
QUJCMjE3IC8qIFJlZ2lzdGVyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlZ2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjRFNTQ5MTdF
RTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI0
RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjRF
NTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBE
RkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5o
OyBwYXRoID0gZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBH
Q0luY29taW5nUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRl
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTQ2Nyw4ICsxNDc3LDYgQEAKIAkJMEY3NjZEMzMxNUFFMjUzNTAwOEYzNjNFIC8qIEp1bXBSZXBs
YWNlbWVudFdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjc2NkQzNjE1QUU0QTFBMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
NjZEMzcxNUFFNEExQTAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjc2NkQ0MjE1QjJB
M0JEMDA4RjM2M0UgLyogREZHUmVnaXN0ZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHUmVnaXN0ZXJTZXQuaDsgcGF0aCA9IGRmZy9ERkdSZWdpc3RlclNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjc2NkQ0NTE1QjM3MDFEMDA4RjM2M0UgLyog
REZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oOyBwYXRoID0gZGZnL0RGR1NjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3
MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0
NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnlWYWxJ
bmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTI3LDggKzE5MzUsNiBAQAog
CQk4NkI1ODIyRTE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NkI1ODIyRjE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJl
ZE1NYXBBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaWVyZWRNTWFw
QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODZCQjA5QkUxMzhFMzgxQjAw
NTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHUmVwYXRjaC5jcHA7IHBhdGggPSBkZmcvREZHUmVwYXRjaC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2QkIwOUJGMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBh
dGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1JlcGF0Y2guaDsgcGF0
aCA9IGRmZy9ERkdSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QkY2
NDJBMTQ4REIyQjUwMDRERTM2QSAvKiBJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW50cmluc2ljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
QzM2RUU5MEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NkM1NjhERDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJB
Uk0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjcxMSwxNiArMjcxNywxNiBA
QAogCQkJCTBGMjRFNTNCMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuY3BwICov
LAogCQkJCTBGMjRFNTNDMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuaCAqLywK
IAkJCQkwRjI0RTUzRDE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggKi8sCi0JCQkJ
MEYyNEU1M0UxN0VBOUY1OTAwQUJCMjE3IC8qIEZQUkluZm8uaCAqLywKLQkJCQkwRjI0RTUzRjE3
RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oICovLAogCQkJCTBGNzNEN0FCMTY1QTE0MkEwMEFD
QUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLywKIAkJCQkwRjczRDdBQzE2NUEx
NDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oICovLAogCQkJCTBGRDgyRTM3
MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovLAogCQkJCUE3QjQ4REI2
MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLywKIAkJCQlBN0I0
OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovLAogCQkJCTg2
REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wu
Y3BwICovLAorCQkJCTBGMjRFNTNFMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJbmZvLmggKi8sCiAJ
CQkJMEY3NjZEMkQxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5jcHAg
Ki8sCiAJCQkJMEY3NjZEMkUxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGlu
ZS5oICovLAorCQkJCTBGMjRFNTNGMTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi8sCiAJ
CQkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwICov
LAogCQkJCTBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmgg
Ki8sCiAJCQkJMTQyOUQ5MkQwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5jcHAgKi8sCkBAIC0yNzM5
LDYgKzI3NDUsOSBAQAogCQkJCTg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVz
LmggKi8sCiAJCQkJQkNERDUxRTkwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwICov
LAogCQkJCUE3MTIzNkU0MTE5NUYzM0MwMEJEMjE3NCAvKiBKSVRPcGNvZGVzMzJfNjQuY3BwICov
LAorCQkJCTBGMjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCAqLywK
KwkJCQkwRjI0RTU0NjE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5oICovLAorCQkJ
CTBGMjRFNTQ3MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25XcmFwcGVycy5oICovLAog
CQkJCTg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8s
CiAJCQkJQTdDMUU4QzgxMTJFNzAxQzAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwICovLAogCQkJCTk2MDYyNjk1MEZCOEVDMDIwMDk3OThBQiAvKiBKSVRTdHViQ2FsbC5oICov
LApAQCAtMjc2MSw2ICsyNzcwLDEwIEBACiAJCQkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8q
IEpTSW50ZXJmYWNlSklULmggKi8sCiAJCQkJMEY3NjZEMzIxNUFFMjUzNTAwOEYzNjNFIC8qIEp1
bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwICovLAogCQkJCTBGNzY2RDMzMTVBRTI1MzUwMDhG
MzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggKi8sCisJCQkJMEYyNEU1NDgxN0VF
Mjc0OTAwQUJCMjE3IC8qIFJlZ2lzdGVyU2V0LmggKi8sCisJCQkJMEYyNEU1NDkxN0VFMjc0OTAw
QUJCMjE3IC8qIFJlcGF0Y2guY3BwICovLAorCQkJCTBGMjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAv
KiBSZXBhdGNoLmggKi8sCisJCQkJMEYyNEU1NEIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oICovLAogCQkJCUE3MDlGMkVGMTdBMEFDMDQwMDUxMkU5OCAvKiBT
bG93UGF0aENhbGwuaCAqLywKIAkJCQlBNzM4NjU1MTExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lh
bGl6ZWRUaHVua0pJVC5oICovLAogCQkJCTBGNTcyRDREMTY4NzlGREIwMEU1N0ZCRCAvKiBUaHVu
a0dlbmVyYXRvci5oICovLApAQCAtMzYxOCwxMyArMzYzMSw5IEBACiAJCQkJMEZGRkM5NTExNEVG
OTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJ
CQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5r
LmggKi8sCi0JCQkJMEY3NjZENDIxNUIyQTNCRDAwOEYzNjNFIC8qIERGR1JlZ2lzdGVyU2V0Lmgg
Ki8sCi0JCQkJODZCQjA5QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovLAot
CQkJCTg2QkIwOUJGMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggKi8sCiAJCQkJQTc3
QTQyM0MxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCAqLywKIAkJCQlBNzQx
MDE3RTE3OURBRjgwMDAyRUI4QkEgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5l
cmF0b3IuaCAqLywKIAkJCQk4NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2Fy
ZC5oICovLAotCQkJCTBGNzY2RDQ1MTVCMzcwMUQwMDhGMzYzRSAvKiBERkdTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovLAogCQkJCTBGMUUzQTUwMTUzN0MyQ0IwMDBGOTQ1NiAv
KiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovLAogCQkJCTg2RUM5REMyMTMyOERGODIwMDJCMkFE
NyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAgKi8sCkBAIC0zOTUyLDYgKzM5NjEsNyBAQAogCQkJ
CTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1NUE1REIgLyogREZHQWxsb2NhdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzM3ODEwQzE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjRFNTRFMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVy
YXRpb25XcmFwcGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5
NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTYwMTVF
MTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlT
bG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTYyLDYgKzM5NzIsNyBAQAog
CQkJCTBGRkI5MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwQjA4MzMxN0EwQjc5QjAwREFGMTRCIC8qIERGR0JpbmFyeVN3
aXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERG
R0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI0RTU1MjE3RUUyNzQ5
MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJz
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdD
YWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC00
MDM2LDE0ICs0MDQ3LDExIEBACiAJCQkJMEZCRTBGNzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVG
OTBCNzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkwRjc2NkQ0NDE1QjJBM0MwMDA4RjM2M0UgLyogREZHUmVnaXN0
ZXJTZXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2QkIwOUMxMTM4RTM4MUIwMDU2NzAyRiAvKiBE
RkdSZXBhdGNoLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUQ4OTMyQjE3RTM4NjhGMDA2NjgyNzYg
LyogSGVhcEl0ZXJhdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdBNDI0MzE3QTBC
QkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0
MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyog
REZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMTQxN0Q0MzI2QzAwQ0Ey
QzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY3NjZENDYxNUIzNzAx
RjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBs
YW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdT
bG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDMxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggaW4gSGVhZGVycyAqLywKQEAgLTQxNzgsNiAr
NDE4Niw3IEBACiAJCQkJQTdBNEFFMTAxNzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJzWDg2Q29t
bW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklU
VGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyog
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBY3RpdmF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdGMDEgLyogSlNBUElW
YWx1ZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNDQ3Myw2ICs0NDgyLDggQEAKIAkJCQkw
RkY0Mjc0MjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2V4dGVybi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGNDI3NDQxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9pbnB1dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNDI3NDgxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjI0RTU0RjE3RUUyNzQ5MDBBQkIyMTcgLyogUmVnaXN0ZXJTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ5MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZf
dHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM5MTc5OUU0QjIwMEQyODMzRCAvKiBV
RGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjQxMTdBREI1RjMw
MDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC00OTQyLDYgKzQ5NTMs
NyBAQAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0Y3MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZv
cm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGOTE3QTBCOENDMDA3NzNBRDggLyog
REZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYy
NEU1NEMxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3MDREOTA1MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEzMzE3MEQ0MEJGMDBCQjcyMkMgLyog
REZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ5NzIsNyArNDk4NCw2IEBACiAJCQkJ
QTc4QTk3N0ExNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZCRTBGNzQxNkMxREIwOTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1RDE0RUY5MEIzMDBDNzI1MzIgLyogREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJODZCQjA5
QzAxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODZFQzlERDIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAv
KiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTIzOCw2ICs1MjQ5
LDcgQEAKIAkJCQk5MzM1RjI0RDEyRTY3NjVCMDAyQjU1NTMgLyogU3RyaW5nUmVjdXJzaW9uQ2hl
Y2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0RFM0I0MzBFNkM4MzJEMDAxNDUzQTcgLyog
U3RydWN0dXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFNEVFNzBGMEVCQjdBNUIwMDU5MzRB
QSAvKiBTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjI0RTU1MDE3RUUy
NzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkYwRjJEMTE2
QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8q
IFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDE1NjQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGlu
ayhWTSYgdm0sIFJlcGF0YwogICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50
VG9CcmFuY2hQdHJXaXRoUGF0Y2goUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQ
YXRjaE9uUmVnaXN0ZXIoaG90UGF0aEJlZ2luKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQ+KGNhbGxlZUdQUiksIDApOwogICAgIGlmIChpc0RGRykgewogI2lmIEVOQUJM
RShERkdfSklUKQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRp
b24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKERGRzo6bGlua0NvbnN0
cnVjdFRodW5rR2VuZXJhdG9yKSA6IHZtLmdldENUSVN0dWIoREZHOjpsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKSkuY29kZSgpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVy
bkxvY2F0aW9uLCAoY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gdm0uZ2V0Q1RJU3R1YihsaW5rQ29u
c3RydWN0VGh1bmtHZW5lcmF0b3IpIDogdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKSkuY29kZSgpKTsKICNlbHNlCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAjZW5kaWYKICAgICB9IGVsc2UKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2Fs
bFJldHVybkxvY2F0aW9uLCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxp
bmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IHZtLmdldENUSVN0dWIobGlua0NhbGxHZW5l
cmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5M
b2NhdGlvbiwgY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gdm0uZ2V0Q1RJU3R1YihvbGRTdHlsZUxp
bmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IHZtLmdldENUSVN0dWIob2xkU3R5bGVMaW5r
Q2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICBoYXNTZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNl
OwogICAgIGNhbGxlZS5jbGVhcigpOwogICAgIHN0dWIuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTY0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1
ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKLSNpbmNsdWRlICJERkdSZXBh
dGNoLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgog
I2luY2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC01MCw2ICs0OSw3IEBACiAjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKICNpbmNsdWRl
ICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCisjaW5jbHVkZSAiUmVwYXRjaC5oIgogI2luY2x1ZGUgIlJl
cGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRl
IDxzdGRpby5oPgpAQCAtMjM4MCwxMiArMjM4MCwxMiBAQCB2b2lkIENvZGVCbG9jazo6cmVzZXRT
dHViSW50ZXJuYWwoUmVwYXRjCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUQ29kZTo6REZH
SklUOgogICAgICAgICBpZiAoaXNHZXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKQotICAgICAgICAg
ICAgREZHOjpyZXNldEdldEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOworICAgICAgICAg
ICAgcmVzZXRHZXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAgICAgICAgZWxzZSBp
ZiAoaXNQdXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKQotICAgICAgICAgICAgREZHOjpyZXNldFB1
dEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOworICAgICAgICAgICAgcmVzZXRQdXRCeUlE
KHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpc0luQWNjZXNzKGFjY2Vzc1R5cGUpKTsKLSAgICAgICAgICAgIERGRzo6
cmVzZXRJbihyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7CisgICAgICAgICAgICByZXNldEluKHJl
cGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBk
ZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwx
MiArMzEsMTIgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgot
I2luY2x1ZGUgIkRGR1JlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNp
bmNsdWRlICJKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAj
aW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgpAQCAtMjMxLDcgKzIzMSw3IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5m
byB7CiAgICAgICAgICAgICBpbnQ4X3QgdmFsdWVUYWdHUFI7CiAjZW5kaWYKICAgICAgICAgICAg
IGludDhfdCB2YWx1ZUdQUjsKLSAgICAgICAgICAgIERGRzo6UmVnaXN0ZXJTZXRQT0QgdXNlZFJl
Z2lzdGVyczsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0UE9EIHVzZWRSZWdpc3RlcnM7CiAgICAg
ICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvRG9uZTsKICAgICAgICAgICAgIGludDMyX3QgZGVs
dGFDYWxsVG9TdG9yYWdlTG9hZDsKICAgICAgICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxs
b2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxs
b2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBDYWxsQXJyYXlBbGxvY2F0
b3JTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0PiB7CiBwdWJsaWM6CiAgICAgQ2FsbEFycmF5QWxsb2NhdG9y
U2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmcm9t
LCBTcGVjdWxhdGl2ZUpJVCogaml0LCBQX0RGR09wZXJhdGlvbl9FU3RaIGZ1bmN0aW9uLAorICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwg
UF9KSVRPcGVyYXRpb25fRVN0WiBmdW5jdGlvbiwKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiwg
R1BSUmVnIHN0b3JhZ2VHUFIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgc2l6ZSkKICAg
ICAgICAgOiBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
Pihmcm9tLCBqaXQpCiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKQEAgLTY4LDcgKzY4
LDcgQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgUF9ERkdPcGVyYXRp
b25fRVN0WiBtX2Z1bmN0aW9uOworICAgIFBfSklUT3BlcmF0aW9uX0VTdFogbV9mdW5jdGlvbjsK
ICAgICBHUFJSZWcgbV9yZXN1bHRHUFI7CiAgICAgR1BSUmVnIG1fc3RvcmFnZUdQUjsKICAgICBT
dHJ1Y3R1cmUqIG1fc3RydWN0dXJlOwpAQCAtNzksNyArNzksNyBAQCBwcml2YXRlOgogY2xhc3Mg
Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yIDogcHVi
bGljIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+IHsK
IHB1YmxpYzoKICAgICBDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhH
ZW5lcmF0b3IoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmcm9tLCBTcGVjdWxh
dGl2ZUpJVCogaml0LCBQX0RGR09wZXJhdGlvbl9FU3RaIGZ1bmN0aW9uLAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgUF9KSVRPcGVy
YXRpb25fRVN0WiBmdW5jdGlvbiwKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJl
KiBjb250aWd1b3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIGFycmF5U3RvcmFnZVN0cnVjdHVyZSwg
R1BSUmVnIHNpemVHUFIpCiAgICAgICAgIDogSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yPE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdD4oZnJvbSwgaml0KQogICAgICAgICAsIG1fZnVuY3Rpb24oZnVu
Y3Rpb24pCkBAIC0xMTIsNyArMTEyLDcgQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICAKIHByaXZh
dGU6Ci0gICAgUF9ERkdPcGVyYXRpb25fRVN0WiBtX2Z1bmN0aW9uOworICAgIFBfSklUT3BlcmF0
aW9uX0VTdFogbV9mdW5jdGlvbjsKICAgICBHUFJSZWcgbV9yZXN1bHRHUFI7CiAgICAgU3RydWN0
dXJlKiBtX2NvbnRpZ3VvdXNTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBtX2FycmF5U3RvcmFn
ZVN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDEyIEBACiAjaW5jbHVk
ZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCIK
ICNpbmNsdWRlICJERkdSZWdpc3RlckJhbmsuaCIKLSNpbmNsdWRlICJERkdSZWdpc3RlclNldC5o
IgogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAi
SklUQ29kZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2Vt
Ymxlci5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJ
KHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHJpdmF0ZToKIH07
CiAKIGV4dGVybiAiQyIgewotdm9pZCBERkdfT1BFUkFUSU9OIGNvbXBpbGVPU1JFeGl0KEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBjb21waWxlT1NSRXhpdChF
eGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR09TUkV4
aXQuaCIKLSNpbmNsdWRlICJERkdSZXBhdGNoLmgiCiAjaW5jbHVkZSAiREZHVGh1bmtzLmgiCiAj
aW5jbHVkZSAiREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKICNpbmNsdWRl
ICJERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCkBAIC00
NSwyOTUgKzQ0LDIxIEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVQu
aCIKICNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9uV3Jh
cHBlcnMuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJWTS5oIgogI2lu
Y2x1ZGUgIkpTTmFtZVNjb3BlLmgiCiAjaW5jbHVkZSAiTmFtZUluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVk
ZSAiUmVwYXRjaC5oIgogI2luY2x1ZGUgIlN0cmluZ0NvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
VHlwZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CiAKICNpZiBF
TkFCTEUoSklUKQotCi0jaWYgQ1BVKE1JUFMpCi0jaWYgV1RGX01JUFNfUElDCi0jZGVmaW5lIExP
QURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24pIFwKLSAgICAgICAgIi5zZXQgbm9yZW9yZGVyIiAi
XG4iIFwKLSAgICAgICAgIi5jcGxvYWQgJDI1IiAiXG4iIFwKLSAgICAgICAgIi5zZXQgcmVvcmRl
ciIgIlxuIiBcCi0gICAgICAgICJsYSAkdDksICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAi
XG4iCi0jZWxzZQotI2RlZmluZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uKSAiIiAiXG4i
Ci0jZW5kaWYKLSNlbmRpZgotCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNpZiBDT01QSUxFUihH
Q0MpICYmIENQVShYODZfNjQpCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTKGZ1bmN0aW9uLCByZWdpc3RlcikgXAotICAgIGFzbSggXAotICAgICIuZ2xvYmwg
IiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlv
bikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAg
ICAibW92ICglcnNwKSwgJSIgU1RSSU5HSVpFKHJlZ2lzdGVyKSAiXG4iIFwKLSAgICAgICAgImpt
cCAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpICJcbiIgXAot
ICAgICk7Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1
bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24s
IHJzaSkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShm
dW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwg
cmN4KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1
bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCBy
Y3gpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1
bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHI4
KQotCi0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODYpCi0KLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCBvZmZzZXQpIFwKLSAgICBhc20o
IFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0
aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAibW92ICglZXNwKSwgJWVheFxu
IiBcCi0gICAgICAgICJtb3YgJWVheCwgIiBTVFJJTkdJWkUob2Zmc2V0KSAiKCVlc3ApXG4iIFwK
LSAgICAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJl
c3MpICJcbiIgXAotICAgICk7Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1MoZnVuY3Rpb24sIDgpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FQ0koZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Mo
ZnVuY3Rpb24sIDE2KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1
bmN0aW9uLCAyMCkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5j
dGlvbiwgMjQpCi0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9USFVNQjIpCi0KLSNk
ZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwK
LSAgICBhc20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmFsaWduIDIiICJcbiIgXAot
ICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZ
TUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgIi50aHVtYiIgIlxuIiBcCi0gICAgIi50aHVtYl9m
dW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklO
RyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAibW92IGEyLCBsciIgIlxuIiBcCi0gICAg
ICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJc
biIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAg
ICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24p
ICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICAiLnRodW1iIiAi
XG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4i
IFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgICJtb3Yg
YTQsIGxyIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJX
aXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotLy8gRW5jb2RlZEpTVmFsdWUgaW4g
SlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGludGVnZXIuIFdoZW4gYmVpbmcgY29tcGlsZWQgaW4g
QVJNIEVBQkksIGl0IG11c3QgYmUgYWxpZ25lZCBldmVuLW51bWJlcmVkIHJlZ2lzdGVyIChyMCwg
cjIgb3IgW3NwXSkuCi0vLyBBcyBhIHJlc3VsdCwgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBhdCBh
IDQtYnl0ZSBmdXJ0aGVyIGxvY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgY2FzZXMuCi0jaWYgQ09N
UElMRVJfU1VQUE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RP
UkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzRdIgotI2RlZmluZSBJTlNUUlVD
VElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzhdIgotI2Vsc2UK
LSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtz
cCwgIzBdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJz
dHIgbHIsIFtzcCwgIzRdIgotI2VuZGlmCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQi
ICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJ
TkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAg
ICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1
bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0g
ICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAiXG4iIFwKLSAgICAg
ICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxu
IiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUpDSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAg
ICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24p
ICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICAiLnRodW1iIiAi
XG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4i
IFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgIElOU1RS
VUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgIlxuIiBcCi0gICAgICAgICJiICIgTE9D
QUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7
Ci0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkKLQotI2RlZmlu
ZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAotICAg
IGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5H
KGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAg
SU5MSU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rp
b24pICI6IiAiXG4iIFwKLSAgICAgICAgIm1vdiBhMiwgbHIiICJcbiIgXAotICAgICAgICAiYiAi
IExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAg
ICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0ko
ZnVuY3Rpb24pIFwKLSAgICBhc20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2Js
ICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rp
b24pICJcbiIgXAotICAgIElOTElORV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwKLSAgICBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgICJtb3YgYTQsIGxyIiAiXG4i
IFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRk
cmVzcyIgIlxuIiBcCi0gICAgKTsKLQotLy8gRW5jb2RlZEpTVmFsdWUgaW4gSlNWQUxVRTMyXzY0
IGlzIGEgNjQtYml0IGludGVnZXIuIFdoZW4gYmVpbmcgY29tcGlsZWQgaW4gQVJNIEVBQkksIGl0
IG11c3QgYmUgYWxpZ25lZCBldmVuLW51bWJlcmVkIHJlZ2lzdGVyIChyMCwgcjIgb3IgW3NwXSku
Ci0vLyBBcyBhIHJlc3VsdCwgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBhdCBhIDQtYnl0ZSBmdXJ0
aGVyIGxvY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgY2FzZXMuCi0jaWYgQ09NUElMRVJfU1VQUE9S
VFMoRUFCSSkgJiYgQ1BVKEFSTSkKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FE
RFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzRdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9S
RVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzhdIgotI2Vsc2UKLSNkZWZpbmUgSU5T
VFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzBdIgotI2Rl
ZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwg
IzRdIgotI2VuZGlmCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAg
ICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJP
TChmdW5jdGlvbikgIlxuIiBcCi0gICAgSU5MSU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAot
ICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgSU5TVFJVQ1RJ
T05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JF
RkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0j
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9u
KSBcCi0gICAgYXNtICggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJP
TF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4i
IFwKLSAgICBJTkxJTkVfQVJNX0ZVTkNUSU9OKGZ1bmN0aW9uKSBcCi0gICAgU1lNQk9MX1NUUklO
RyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5f
QUREUkVTU19FSkNJICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlv
bikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZWxpZiBDT01QSUxFUihH
Q0MpICYmIENQVShNSVBTKQotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FKGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAg
ICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1C
T0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4i
IFwKLSAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykg
XAotICAgICAgICAibW92ZSAkYTEsICRyYSIgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVG
RVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNk
ZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikg
XAotICAgIGFzbSggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwK
LSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgTE9BRF9GVU5DVElP
Tl9UT19UOShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKLSAgICAgICAgIm1vdmUgJGEz
LCAkcmEiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldp
dGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKLSAgICBhc20oIFwKLSAgICAi
LnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4i
IFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhm
dW5jdGlvbikgIjoiICJcbiIgXAotICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dp
dGhSZXR1cm5BZGRyZXNzKSBcCi0gICAgICAgICJzdyAkcmEsIDIwKCRzcCkiICJcbiIgXAotICAg
ICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAi
XG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FSkNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAg
ICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1C
T0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4i
IFwKLSAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykg
XAotICAgICAgICAic3cgJHJhLCAyNCgkc3ApIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9S
RUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQot
I2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoU0g0KQotCi0jZGVmaW5lIFNINF9TQ1JBVENIX1JF
R0lTVEVSICJyMTEiCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0UoZnVuY3Rpb24pIFwKLSAgICBhc20oIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIu
Z2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChm
dW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAot
ICAgICAgICAic3RzIHByLCByNSIgIlxuIiBcCi0gICAgICAgICJicmEgIiBMT0NBTF9SRUZFUkVO
Q0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgICAgICJub3AiICJc
biIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAg
Ii5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9M
KGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBc
Ci0gICAgICAgICJzdHMgcHIsIHI3IiAiXG4iIFwKLSAgICAgICAgIm1vdi5sIDJmLCAiIFNINF9T
Q1JBVENIX1JFR0lTVEVSICJcbiIgXAotICAgICAgICAiYnJhZiAiIFNINF9TQ1JBVENIX1JFR0lT
VEVSICJcbiIgXAotICAgICAgICAibm9wIiAiXG4iIFwKLSAgICAgICAgIjE6IC5iYWxpZ24gNCIg
IlxuIiBcCi0gICAgICAgICIyOiAubG9uZyAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldp
dGhSZXR1cm5BZGRyZXNzLTFiIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgb2Zmc2V0LCBzY3JhdGNoKSBcCi0g
ICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklO
RyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAg
IFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgInN0cyBwciwgIiBz
Y3JhdGNoICJcbiIgXAotICAgICAgICAibW92LmwgIiBzY3JhdGNoICIsIEAoIiBTVFJJTkdJWkUo
b2Zmc2V0KSAiLCByMTUpIiAiXG4iIFwKLSAgICAgICAgIm1vdi5sIDJmLCAiIHNjcmF0Y2ggIlxu
IiBcCi0gICAgICAgICJicmFmICIgc2NyYXRjaCAiXG4iIFwKLSAgICAgICAgIm5vcCIgIlxuIiBc
Ci0gICAgICAgICIxOiAuYmFsaWduIDQiICJcbiIgXAotICAgICAgICAiMjogLmxvbmcgIiBMT0NB
TF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcy0xYiIgIlxuIiBcCi0gICAg
KTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1
bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAw
LCBTSDRfU0NSQVRDSF9SRUdJU1RFUikKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTUyhmdW5jdGlvbiwgNCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCi0KLSNlbmRpZgotCi0j
ZGVmaW5lIFBfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24p
IFwKLXZvaWQqIERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNT
dGF0ZSosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFM
OyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikKLQot
I2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rp
b24pIFwKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5B
ZGRyZXNzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRy
KSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAotRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikKLQotI2RlZmluZSBKX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9G
Uk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FSkkoZnVuY3Rpb24pCi0KLSNkZWZpbmUgVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotdm9pZCBERkdfT1BFUkFUSU9OIGZ1bmN0aW9u
IyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwg
U3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lO
VEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5j
dGlvbikKLQogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB0ZW1wbGF0ZTxib29s
IHN0cmljdD4KQEAgLTM1Nyw3ICs4Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRCeVZhbChF
eGVjU3RhdGUqIGUKIH0KIAogdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+Ci1BTFdBWVNfSU5MSU5FIHN0
YXRpYyB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbChFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0FMV0FZU19JTkxJTkUg
c3RhdGljIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwpAQCAtNDY2LDcgKzE5MSw3IEBAIGNoYXIqIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1l
bnQoCiAKIGV4dGVybiAiQyIgewogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblRvVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNDc0LDcg
KzE5OSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG8KICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3ApLnRvVGhpcyhl
eGVjLCBOb3RTdHJpY3RNb2RlKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uVG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXNTdHJp
Y3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CkBAIC00ODIsNyArMjA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25UbwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpKTsKIH0KIAotSlNDZWxsKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29u
c3RydWN0b3IsIGludDMyX3QgaW5saW5lQ2FwYWNpdHkpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3Rv
ciwgaW50MzJfdCBpbmxpbmVDYXBhY2l0eSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTQ5NSw3ICsy
MjAsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpCiAgICAgcmV0
dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3Ry
dWN0b3IpLT5hbGxvY2F0aW9uUHJvZmlsZShleGVjLCBpbmxpbmVDYXBhY2l0eSktPnN0cnVjdHVy
ZSgpKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNTAzLDcgKzIyOCw3IEBAIEpTQ2VsbCogREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdPYmplY3QKICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3Qo
ZXhlYywgc3RydWN0dXJlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25WYWx1ZUFkZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTUx
NCw3ICsyMzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0FkZChleGVjLCBvcDEsIG9wMikpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMikKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVB
ZGROb3ROdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNTQ3LDcgKzI3
Miw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlWYWwoRXgKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWwoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFByb3BlcnR5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZh
bChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvcGVydHkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC01NzgsNyArMzAzLDcg
QEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQorRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbENlbGwoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkKIHsKICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKQEAgLTYxOCwxNDAgKzM0MywxNyBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRK
U1ZhbHVlIGdldEJ5VmFsQ2VsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGJh
c2UpLmdldChleGVjLCBpbmRleCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBiYXNl
LCBpbnQzMl90IGluZGV4KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCeVZhbEFycmF5SW50KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYmFzZSwgaW50MzJfdCBp
bmRleCkKIHsKICAgICByZXR1cm4gZ2V0QnlWYWxDZWxsSW50KGV4ZWMsIGJhc2UsIGluZGV4KTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmlu
Z0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBiYXNlLCBpbnQzMl90IGluZGV4KQorRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludChFeGVj
U3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBiYXNlLCBpbnQzMl90IGluZGV4KQogewogICAgIHJldHVy
biBnZXRCeVZhbENlbGxJbnQoZXhlYywgYmFzZSwgaW5kZXgpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0g
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7Ci0gICAgUHJvcGVy
dHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xv
dCkpOwotfQotCi1KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3Bl
cmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5SWRCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgSWRlbnRpZmllciBpZGVudCh2
bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxv
Y2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKLSAgICBQcm9wZXJ0
eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdl
dChleGVjLCBpZGVudCwgc2xvdCk7Ci0KLSAgICBpZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgYnVpbGRHZXRCeUlE
TGlzdChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbyk7Ci0KLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0KLUpfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKSShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemVXaXRoUmV0dXJuQWRk
cmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVp
ZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0g
ICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0g
ICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShiYXNlKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7Ci0gICAgCi0gICAgaWYg
KGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlw
ZSkpIHsKLSAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAgICAgICAgICByZXBhdGNoR2V0
QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbyk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUNJKG9wZXJhdGlvbkluT3B0aW1pemUpOwotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0
YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIGtleSwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIGlmICghYmFzZS0+
aXNPYmplY3QoKSkgewotICAgICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlSW52
YWxpZFBhcmFtZXRlckVycm9yKGV4ZWMsICJpbiIsIGJhc2UpKTsKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVy
bkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwg
a2V5KTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlKTsKLSAgICBib29sIHJlc3VsdCA9IGFz
T2JqZWN0KGJhc2UpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOwotICAgIAot
ICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0g
ICAgCi0gICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAgICAgIHJlcGF0Y2hJbihleGVjLCBiYXNl
LCBpZGVudCwgcmVzdWx0LCBzbG90LCBzdHViSW5mbyk7Ci0gICAgZWxzZQotICAgICAgICBzdHVi
SW5mby5zZWVuID0gdHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihyZXN1bHQpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25JbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCoga2V5KQotewot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwotCi0gICAgaWYgKCFiYXNlLT5pc09iamVjdCgpKSB7Ci0gICAgICAgIHZt
LT50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVJbnZhbGlkUGFyYW1ldGVyRXJyb3IoZXhlYywg
ImluIiwgYmFzZSkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIH0KLQotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIGtleSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNPYmplY3QoYmFzZSktPmhhc1Byb3BlcnR5KGV4
ZWMsIGlkZW50KSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkdlbmVyaWNJbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUg
a2V5KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBi
YXNlKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxD
dXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jIGZ1bmN0aW9uLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGZ1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KGJhc2UpLCBpZGVudCkpOwot
fQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogZ2V0dGVyU2V0dGVyKQotewotICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsR2V0dGVyKGV4ZWMs
IGJhc2UsIGdldHRlclNldHRlcikpOwotfQotCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CkBAIC03NTksNyArMzYxLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
VmFsU3RyaQogICAgIG9wZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWw8dHJ1ZT4oZXhlYywgZW5jb2Rl
ZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzY3LDcgKzM2OSw3IEBAIHZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblMKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVy
bmFsPGZhbHNlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFs
dWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJv
cGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGws
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzc1LDcgKzM3Nyw3IEBAIHZvaWQgREZHX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFs
PHRydWU+KGV4ZWMsIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5jb2RlZFByb3BlcnR5LCBlbmNv
ZGVkVmFsdWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxs
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIGNlbGwsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzgzLDcgKzM4NSw3IEBAIHZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBvcGVyYXRpb25QdXRC
eVZhbEludGVybmFsPGZhbHNlPihleGVjLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCksIGVuY29kZWRQ
cm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC03OTgsNyArNDAwLDcg
QEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgICAgICBhcnJh
eSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04MTMsNyArNDE1
LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgICAgICBh
cnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFs
dWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04MzAsNyArNDMyLDcgQEAgdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VgogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBpbmRleCksIGpzVmFsdWUsIHNsb3QpOwogfQogCi12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZh
bHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJy
YXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMy
X3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTg0Nyw3ICs0NDks
NyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWCiAgICAgICAgIGFy
cmF5LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwganNWYWx1ZSwgc2xvdCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KiBhcnJh
eSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KiBhcnJheSkK
IHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKQEAgLTg1Niw3ICs0NTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihhcnJheS0+bGVuZ3RoKCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUsIEpT
QXJyYXkqIGFycmF5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJh
eVB1c2hEb3VibGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUsIEpTQXJyYXkqIGFycmF5
KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtODY1LDcgKzQ2Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uQXIKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKGFycmF5LT5sZW5ndGgoKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSogZXhl
YywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04NzMsNyArNDc1LDcgQEAg
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7CiB9CiAgICAgICAgIAotRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0
YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJh
eSogYXJyYXkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04ODMsNyArNDg1LDcgQEAgRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYXJyYXktPnBvcChleGVjKSk7CiB9CiAgICAgICAgIAotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNl
LCBKU0NlbGwqIGFyZ3VtZW50KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3Vt
ZW50KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtODk2LDcgKzQ5OCw3IEBAIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFz
UmVnRXhwT2JqZWN0KGJhc2UpLT5leGVjKGV4ZWMsIGlucHV0KSk7CiB9CiAgICAgICAgIAotc2l6
ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlZ0V4cFRlc3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogYXJn
dW1lbnQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC05MTEsMjM3ICs1MTMsNyBAQCBzaXplX3QgREZH
X09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0CiAgICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0
KGJhc2UpLT50ZXN0KGV4ZWMsIGlucHV0KTsKIH0KICAgICAgICAgCi12b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7
Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19Ci0KLXZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7
Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19Ci0KLXZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgp
KTsKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1
dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSks
IHNsb3QpOwotfQotCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAg
SWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxz
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIEFTU0VSVChiYXNl
LT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
IGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19Ci0KLVZfRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlm
aWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4
ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NU
eXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgCi0gICAg
YmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChh
Y2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUp
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAgICAg
IHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBO
b3REaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Ci19Ci0K
LVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkTm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQs
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAK
LSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsK
LSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKLSAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkp
OwotICAgIAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAg
ICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChzdHViSW5mby5z
ZWVuKQotICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90
LCBzdHViSW5mbywgTm90RGlyZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIHN0dWJJbmZvLnNlZW4g
PSB0cnVlOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJ
KG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci12b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi17Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1Yklu
Zm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNs
b3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAg
IEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0
KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5
cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uc2VlbikKLSAgICAgICAgcmVwYXRj
aFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwotICAg
IGVsc2UKLSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Ci19Ci0KLVZfRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAg
ICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAg
ICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJs
b2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIEFTU0VSVChiYXNlLT5pc09iamVj
dCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2
YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNj
ZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBpZiAoc3R1YkluZm8uc2VlbikKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwg
aWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc3R1Yklu
Zm8uc2VlbiA9IHRydWU7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdCk7Ci12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2Us
IFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZv
KHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJh
c2UpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5w
dXRCeUlkQ29udGV4dCgpKTsKLSAgICAKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2
YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNj
ZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZv
LCBOb3REaXJlY3QpOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHVi
SW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1
ZShiYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2Nr
KCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRl
bnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1
YkluZm8sIE5vdERpcmVjdCk7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdCk7Ci12b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdFdpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQodm0s
IHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2Nr
KCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotICAgIAot
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRl
eHQoKSk7Ci0gICAgCi0gICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0
KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAK
LSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5h
Y2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3Qo
ZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwotfQotCi1WX0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBs
KiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
LSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRy
ZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhl
Yy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIEFTU0VSVChiYXNl
LT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
IGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGlj
X2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHVi
SW5mbywgRGlyZWN0KTsKLX0KLQotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTE0OSw3ICs1MjEsNyBA
QCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzCiAgICAgcmV0dXJuIGpz
TGVzczx0cnVlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKSk7CiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q29tcGFyZUxlc3NFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTU3LDcg
KzUyOSw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXMKICAgICBy
ZXR1cm4ganNMZXNzRXE8dHJ1ZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQogCi1zaXplX3QgREZHX09QRVJBVElPTiBv
cGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitzaXplX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CkBAIC0xMTY1LDcgKzUzNyw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmVHcmUKICAgICByZXR1cm4ganNMZXNzPGZhbHNlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMiksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSk7CiB9CiAKLXNpemVfdCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CkBAIC0xMTczLDcgKzU0NSw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvbXBhcmVHcmUKICAgICByZXR1cm4ganNMZXNzRXE8ZmFsc2U+KGV4ZWMsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpKTsK
IH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MikKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIp
CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTgyLDkgKzU1NCw5IEBAIHNpemVfdCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBhcmVFcSgKIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBsZWZ0LCBKU0NlbGwqIHJpZ2h0KQogI2Vsc2UKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxs
KiByaWdodCkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKICNlbmRpZgogewog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtMTE5OCw3ICs1NzAsNyBAQCBzaXplX3QgREZH
X09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyCiAjZW5kaWYKIH0KIAotc2l6ZV90IERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitzaXpl
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MikKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTEyMTIsNyArNTg0LDcgQEAgc2l6ZV90IERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgogICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVh
bFNsb3dDYXNlSW5saW5lKGV4ZWMsIG9wMSwgb3AyKTsKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK3NpemVfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CkBAIC0xMjIzLDE5MyArNTk1LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZVN0cgogICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBzcmMx
LCBzcmMyKTsKIH0KIAotc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsK
LSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwotICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwotCi0gICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoZXhlYy0+c2Nv
cGUoKSk7Ci0gICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOwotCi0gICAgaWYgKGtpbmQg
PT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7Ci0gICAgCi0g
ICAgICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKTsKLSAgICAKLSAgICAgICAgaWYg
KGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCkgewotICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7Ci0gICAgICAgICAgICBleGVjQ2FsbGVlLT5z
ZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgICAgICB2bS0+aG9zdENhbGxSZXR1
cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0Nh
bGxlZSkpOwotICAgICAgICAgICAgaWYgKHZtLT5leGNlcHRpb24oKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLQotICAgICAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOwotICAgICAg
ICB9Ci0gICAgCi0gICAgICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOwotICAg
ICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEFGdW5jdGlvbkVy
cm9yKGV4ZWMsIGNhbGxlZSkpOwotICAgICAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAg
ICAKLSAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7Ci0gICAgQ29uc3RydWN0VHlwZSBj
b25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YShjYWxsZWUsIGNvbnN0cnVjdERhdGEpOwot
ICAgIAotICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGVKUyk7Ci0gICAg
Ci0gICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhvc3QpIHsKLSAgICAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7Ci0gICAgICAgIGV4
ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKLSAgICAgICAgdm0tPmhvc3RD
YWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVu
Y3Rpb24oZXhlY0NhbGxlZSkpOwotICAgICAgICBpZiAodm0tPmV4Y2VwdGlvbigpKQotICAgICAg
ICAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0
aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0KLSAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOwotICAgIH0K
LSAgICAKLSAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSk7Ci0g
ICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JF
cnJvcihleGVjLCBjYWxsZWUpKTsKLSAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKLX0KLQotaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0Nh
bGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBKU1ZhbHVlIGNh
bGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7Ci0gICAgSlNDZWxsKiBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7Ci0gICAg
aWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQp
KTsKLQotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVl
QXNGdW5jdGlvbkNlbGwpOwotICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGNhbGxlZS0+c2NvcGVV
bmNoZWNrZWQoKSk7Ci0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4
ZWN1dGFibGUoKTsKLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gMDsKLSAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rp
b24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3Io
a2luZCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBjYWxsZWUtPnNjb3BlKCks
IGtpbmQpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIHZtLT50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOwotICAgICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OwotICAgICAgICB9Ci0gICAgICAgIGNvZGVCbG9jayA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29k
ZUJsb2NrRm9yKGtpbmQpOwotICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkpKQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJh
dGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtp
bmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwotICAgIH0KLSAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0
dXJuUEMoKSk7Ci0gICAgaWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2UoKSkKLSAgICAgICAgY2Fs
bExpbmtJbmZvLnNldFNlZW4oKTsKLSAgICBlbHNlCi0gICAgICAgIGxpbmtGb3IoZXhlY0NhbGxl
ZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwga2luZCk7Ci0gICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7Ci19Ci0KLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRl
KiBleGVjQ2FsbGVlKQotewotICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JD
YWxsKTsKLX0KLQotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4
ZWNTdGF0ZSogZXhlY0NhbGxlZSkKLXsKLSAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBD
b2RlRm9yQ29uc3RydWN0KTsKLX0KLQotaW5saW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpT
Q2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQotewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4
ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICBKU1ZhbHVlIGNh
bGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7Ci0gICAgY2FsbGVlQXNG
dW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwotICAgIGlmIChVTkxJ
S0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKQotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSwga2lu
ZCkpOwotICAgIAotICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24q
PihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoZnVuY3Rp
b24tPnNjb3BlVW5jaGVja2VkKCkpOwotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0g
ZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhh
c0pJVENvZGVGb3Ioa2luZCkpKSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rp
b25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJs
ZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFy
ZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBmdW5jdGlvbi0+c2NvcGUoKSwga2luZCk7Ci0gICAg
ICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjQ2FsbGVlLCBlcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENv
ZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLX0KLQotaW5s
aW5lIGNoYXIqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9y
ZWQ7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwga2luZCwg
Y2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsKLX0KLQotc3RhdGljIGJvb2wgYXR0ZW1wdFRv
T3B0aW1pemVDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTQ2VsbCogY2FsbGVl
QXNGdW5jdGlvbkNlbGwsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQotewotICAgIGlmICgh
Y2FsbGVlQXNGdW5jdGlvbkNlbGwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBK
U0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25D
ZWxsKTsKLSAgICBKU0Z1bmN0aW9uKiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVlLmdl
dCgpOwotICAgIAotICAgIGlmICghb2xkQ2FsbGVlCi0gICAgICAgIHx8IG9sZENhbGxlZS0+c3Ry
dWN0dXJlKCkgIT0gY2FsbGVlLT5zdHJ1Y3R1cmUoKQotICAgICAgICB8fCBvbGRDYWxsZWUtPmV4
ZWN1dGFibGUoKSAhPSBjYWxsZWUtPmV4ZWN1dGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIEFTU0VSVChjYWxsZWUtPmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNh
bGwoKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBjYWxsZWUtPmV4ZWN1
dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAg
ICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKLSAgICBpZiAoY2FsbGVlLT5leGVjdXRhYmxl
KCktPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIGNvZGVCbG9jayA9IDA7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWxsZWUt
PmV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvckNhbGwoKTsKLSAgICAgICAgaWYgKGV4ZWNDYWxs
ZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgCi0gICAgbGlua0Nsb3N1cmVDYWxsKAotICAgICAgICBleGVjQ2FsbGVlLCBjYWxs
TGlua0luZm8sIGNvZGVCbG9jaywKLSAgICAgICAgY2FsbGVlLT5zdHJ1Y3R1cmUoKSwgY2FsbGVl
LT5leGVjdXRhYmxlKCksIGNvZGVQdHIpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUpCi17Ci0gICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKLSAgICBjaGFy
KiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxs
LCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8g
PSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZv
KGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwotCi0gICAgaWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNs
b3N1cmVDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBjYWxsTGlua0luZm8p
KQotICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIENvZGVGb3JD
YWxsKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKLXsgICAgCi0gICAg
cmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwpOwotfQotCi1jaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlKQotewotICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1
Y3QpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xNDE3LDcgKzYwMyw3IEBA
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG8KICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkudG9QcmltaXRpdmUoZXhlYykpOwog
fQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5KEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQogewog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwpAQCAtMTQyNSw3ICs2MTEsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0FycmF5KEV4CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oY29uc3Ry
dWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgYXJyYXlTdHJ1Y3R1cmUsIHN0YXRpY19jYXN0
PEpTVmFsdWUqPihidWZmZXIpLCBzaXplKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1
Y3R1cmUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlKQogewogICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpA
QCAtMTQzMyw3ICs2MTksNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5
QXJyCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oSlNBcnJheTo6Y3JlYXRlKCp2bSwg
YXJyYXlTdHJ1Y3R1cmUpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwg
aW50MzJfdCBzaXplKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgaW50MzJfdCBz
aXplKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTQ0NCwxMjIgKzYzMCwxMjIgQEAgY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdAogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
Y2hhcio+KEpTQXJyYXk6OmNyZWF0ZSgqdm0sIGFycmF5U3RydWN0dXJlLCBzaXplKSk7CiB9CiAK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBzaXpl
KQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIHNpemVfdCBzdGFydCwgc2l6ZV90IHNp
emUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oY29u
c3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgYXJyYXlTdHJ1Y3R1cmUsIGV4ZWMtPmNv
ZGVCbG9jaygpLT5jb25zdGFudEJ1ZmZlcihzdGFydCksIHNpemUpKTsKIH0KIAotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5l
d1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0ludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgp
OwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhPbmVB
cmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aE9u
ZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdp
dGhPbmVBcmd1bWVudDxKU0ludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUp
OwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6
ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhTaXplKAog
ICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3Ro
KQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNJbnQxNkFycmF5PihleGVj
LCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAg
cmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNJbnQxNkFycmF5PihleGVjLCBz
dHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3SW50MzJBcnJheVdpdGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdJbnQzMkFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRo
U2l6ZTxKU0ludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAog
ICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVu
dDxKU0ludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aFNpemUoCitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICBy
ZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTVWludDhBcnJheT4oZXhlYywgc3RydWN0dXJl
LCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJy
YXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4
QXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdU
eXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTVWludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBl
bmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4
Q2xhbXBlZEFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1Vp
bnQ4Q2xhbXBlZEFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlX
aXRoU2l6ZTxKU1VpbnQ4Q2xhbXBlZEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9
CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRo
T25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBl
ZEFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3
VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU1VpbnQ4Q2xhbXBlZEFycmF5PihleGVjLCBzdHJ1
Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3VWludDE2QXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
VWludDE2QXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhT
aXplPEpTVWludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhPbmVBcmd1bWVudCgKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoT25lQXJndW1lbnQo
CiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3Vt
ZW50PEpTVWludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhTaXplKAorY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhTaXplKAogICAgIEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewog
ICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNVaW50MzJBcnJheT4oZXhlYywgc3Ry
dWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1Vp
bnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdVaW50MzJBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0
dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNVaW50MzJBcnJheT4oZXhlYywgc3Ry
dWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0Zsb2F0MzJBcnJheVdpdGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdGbG9hdDMyQXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdp
dGhTaXplPEpTRmxvYXQzMkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50
KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoT25lQXJn
dW1lbnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9u
ZUFyZ3VtZW50PEpTRmxvYXQzMkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7
CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aFNp
emUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhTaXpl
KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVu
Z3RoKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNGbG9hdDY0QXJyYXk+
KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNGbG9hdDY0QXJy
YXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBy
ZWdleHBQdHIpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4
cChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIHJlZ2V4cFB0cikKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAg
LTE1NzIsNyArNzU4LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYy0+
dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdleHApKTsKIH0KIAotSlNDZWxsKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKQorSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTU4MSw3ICs3NjcsNyBAQCBKU0NlbGwqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0CiAgICAgcmV0dXJuIGFjdGl2YXRpb247CiB9CiAKLUpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBcmd1bWVudHMoRXhlY1N0YXRlKiBl
eGVjKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNTkyLDcgKzc3OCw3IEBAIEpTQ2Vs
bCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBcmcKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50
cygKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxpbmVkQXJndW1lbnRz
KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTE2MDQsNyArNzkwLDcgQEAgSlNDZWxs
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUlubAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBhcmd1bWVudHNDZWxsLCBKU0NlbGwqIGFjdGl2YXRpb25DZWxsKQor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBcmd1bWVudHMoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGFyZ3VtZW50c0NlbGwsIEpTQ2VsbCogYWN0aXZhdGlvbkNlbGwpCiB7CiAg
ICAgQVNTRVJUKGV4ZWMtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkpOwogICAgIGlmIChh
Y3RpdmF0aW9uQ2VsbCkgewpAQCAtMTYxNCwxNCArODAwLDE0IEBAIHZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25UZWFyT2ZmQXJndW0KICAgICBqc0Nhc3Q8QXJndW1lbnRzKj4oYXJndW1lbnRz
Q2VsbCktPnRlYXJPZmYoZXhlYyk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25U
ZWFyT2ZmSW5saW5lZEFyZ3VtZW50cygKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UZWFy
T2ZmSW5saW5lZEFyZ3VtZW50cygKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYXJndW1l
bnRzQ2VsbCwgSlNDZWxsKiBhY3RpdmF0aW9uQ2VsbCwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChhY3RpdmF0aW9uQ2VsbCwgIWFjdGl2YXRp
b25DZWxsKTsgLy8gQ3VycmVudGx5LCB3ZSBkb24ndCBpbmxpbmUgZnVuY3Rpb25zIHdpdGggYWN0
aXZhdGlvbnMuCiAgICAganNDYXN0PEFyZ3VtZW50cyo+KGFyZ3VtZW50c0NlbGwpLT50ZWFyT2Zm
KGV4ZWMsIGlubGluZUNhbGxGcmFtZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBh
cmd1bWVudHNSZWdpc3RlcikKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
R2V0QXJndW1lbnRzTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdp
c3RlcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE2MzMsNyArODE5LDcgQEAgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
YmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBp
bnQzMl90IGFyZ3VtZW50c1JlZ2lzdGVyLCBpbnQzMl90IGluZGV4KQorRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywg
aW50MzJfdCBhcmd1bWVudHNSZWdpc3RlciwgaW50MzJfdCBpbmRleCkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKQEAgLTE2NDgsNyArODM0LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJndW1lbnRzVmFsdWUuZ2V0KGV4
ZWMsIGluZGV4KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
R2V0SW5saW5lZEFyZ3VtZW50QnlWYWwoCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFsKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgaW50
MzJfdCBhcmd1bWVudHNSZWdpc3RlciwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUs
IGludDMyX3QgaW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTE2NjYsNyAr
ODUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYXJndW1lbnRzVmFsdWUuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9
CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbk5vQ2hlY2soRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbk5vQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKIHsKICAgICBBU1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxl
LT5pbmhlcml0cyhGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSkpOwogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CkBAIC0xNjc0LDcgKzg2MCw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdGdW5jdGkKICAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHN0YXRp
Y19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSksIGV4ZWMtPnNj
b3BlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1
bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUpCitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUpCiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9u
RXhlY3V0YWJsZS0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpKTsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwpAQCAtMTY4Miw3ICs4NjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5lCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0Z1
bmN0aW9uOjpjcmVhdGUoZXhlYywgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVu
Y3Rpb25FeGVjdXRhYmxlKSwgZXhlYy0+c2NvcGUoKSkpOwogfQogCi1KU0NlbGwqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGVBc0NlbGwpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5j
dGlvbkV4ZWN1dGFibGVBc0NlbGwpCiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9uRXhlY3V0YWJsZUFz
Q2VsbC0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpKTsKIApAQCAtMTY5NCwz
MyArODgwLDIyIEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGkKICAg
ICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGZ1bmN0aW9uRXhlY3V0YWJsZSwgZXhl
Yy0+c2NvcGUoKSk7CiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Jc09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZh
bHVlKQogewogICAgIHJldHVybiBqc0lzT2JqZWN0VHlwZShleGVjLCBKU1ZhbHVlOjpkZWNvZGUo
dmFsdWUpKTsKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihF
bmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklzRnVu
Y3Rpb24oRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIGpzSXNGdW5jdGlvblR5
cGUoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBv
cGVyYXRpb25UeXBlT2YoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIHZhbHVlKQorSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogdmFs
dWUpCiB7CiAgICAgcmV0dXJuIGpzVHlwZVN0cmluZ0ZvclZhbHVlKGV4ZWMsIEpTVmFsdWUodmFs
dWUpKS5hc0NlbGwoKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2Nh
dGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVl
IHZhbHVlKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotCi0gICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSA+IGJhc2UtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsK
LSAgICBBU1NFUlQoIXZtLmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpLmZhc3RQYXRoU2hvdWxkU3Vj
Y2VlZChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsK
LSAgICBiYXNlLT5zZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZt
LCBzdHJ1Y3R1cmUpOwotICAgIGJhc2UtPnB1dERpcmVjdCh2bSwgb2Zmc2V0LCBKU1ZhbHVlOjpk
ZWNvZGUodmFsdWUpKTsKLX0KLQotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQorY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0
aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTcyOSw3
ICs5MDQsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvCiAgICAg
ICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCh2bSwgMCwgMCwgaW5pdGlhbE91dE9m
TGluZUNhcGFjaXR5LCBmYWxzZSwgMCkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IG5ld1Np
emUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
KEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0x
NzM4LDcgKzkxMyw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm8K
ICAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKHZtLCAwLCAwLCBuZXdTaXpl
LCBmYWxzZSwgMCkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2Nh
dGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2Fw
YWNpdHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwpAQCAtMTc0OSw3ICs5MjQsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxs
b2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1By
b3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHNpemVfdCBu
ZXdTaXplKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5
VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwg
c2l6ZV90IG5ld1NpemUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNzU5LDcgKzkzNCw3IEBAIGNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25FbnN1cmVJbnQzMihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNzcwLDcgKzk0NSw3IEBAIGNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVuc3VyZUludDMyKHZtKS5kYXRhKCkpOwogfQogCi1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsZShFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlRG91Ymxl
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTc4
MSw3ICs5NTYsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsCiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5lbnN1cmVE
b3VibGUodm0pLmRhdGEoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5z
dXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE3OTIsNyArOTY3LDcgQEAgY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aQogICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJlQ29udGlndW91cyh2bSkuZGF0YSgpKTsK
IH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SYWdlRW5zdXJlQ29udGlndW91cyhF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUmFnZUVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CkBAIC0xODAzLDcgKzk3OCw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUmFnZUVuc3VyZUMKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
YXNPYmplY3QoY2VsbCktPnJhZ2VFbnN1cmVDb250aWd1b3VzKHZtKS5kYXRhKCkpOwogfQogCi1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJl
QXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOwpAQCAtMTgxNCw3ICs5ODksNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVu
c3VyZUFycmF5CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNl
bGwpLT5lbnN1cmVBcnJheVN0b3JhZ2Uodm0pKTsKIH0KIAotU3RyaW5nSW1wbCogREZHX09QRVJB
VElPTiBvcGVyYXRpb25SZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJp
bmcpCitTdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNT
dGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4MjIs
NyArOTk3LDcgQEAgU3RyaW5nSW1wbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbAogICAg
IHJldHVybiBzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKTsKIH0KIAotSlNTdHJpbmcqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
aW50MzJfdCBjaGFyYWN0ZXIpCitKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25TaW5n
bGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGNoYXJhY3RlcikKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKQEAgLTE4MzAsNyArMTAwNSw3IEBAIEpTU3RyaW5nKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblNpbmdsZUMKICAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmco
ZXhlYywgc3RhdGljX2Nhc3Q8VUNoYXI+KGNoYXJhY3RlcikpOwogfQogCi1KU0NlbGwqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJp
bmcqIHN0cmluZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmlu
ZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xODM4LDcgKzEw
MTMsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nCiAgICAgcmV0
dXJuIFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgc3RyaW5nKTsKIH0KIAot
SlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBjZWxsKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3Ry
aW5nT25DZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwpAQCAtMTg0Niw3ICsxMDIxLDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRv
U3RyaW5nTwogICAgIHJldHVybiBKU1ZhbHVlKGNlbGwpLnRvU3RyaW5nKGV4ZWMpOwogfQogCi1K
U0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOwpAQCAtMTg1NCw3ICsxMDI5LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blRvU3RyaW5nKAogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvU3RyaW5nKGV4
ZWMpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNT
dGF0ZSogZXhlYywgSlNTdHJpbmcqIGxlZnQsIEpTU3RyaW5nKiByaWdodCkKK0pTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTIoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyog
bGVmdCwgSlNTdHJpbmcqIHJpZ2h0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg2Miw3ICsxMDM3
LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMgogICAgIHJldHVy
biBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgbGVmdCwgcmlnaHQpOwogfQogCi1KU0NlbGwqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcq
IGEsIEpTU3RyaW5nKiBiLCBKU1N0cmluZyogYykKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25NYWtlUm9wZTMoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogYSwgSlNTdHJpbmcqIGIs
IEpTU3RyaW5nKiBjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg3MCw3ICsxMDQ1LDcgQEAgSlND
ZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMwogICAgIHJldHVybiBKU1JvcGVT
dHJpbmc6OmNyZWF0ZSh2bSwgYSwgYiwgYyk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSgKICAgICBFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgc2l6ZV90IHRhYmxlSW5kZXgpCiB7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKQEAgLTE4ODQsNyAr
MTA1OSw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEkKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KHRhYmxlLmN0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKiBzdHJpbmcpCitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIHNp
emVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyogc3RyaW5nKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAt
MTg5MiwzMiArMTA2NywxOSBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0
cmluCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihleGVjLT5jb2RlQmxvY2soKS0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0aUZvclZhbHVlKHN0cmluZy0+dmFsdWUo
ZXhlYykuaW1wbCgpKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKIH0KIAotZG91YmxlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKK2RvdWJsZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQzMl90IGIpCiB7
CiAgICAgcmV0dXJuIGZtb2QoYSwgYik7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVy
YXRpb25TdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IG9wMSkKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRl
KiBleGVjLCBpbnQzMl90IG9wMSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1cm4gSlNDOjpz
dHJpbmdGcm9tQ2hhckNvZGUoZXhlYywgb3AxKTsKIH0KIAotREZHSGFuZGxlckVuY29kZWQgREZH
X09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLQotICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRp
b24oKTsKLSAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwotICAgIAotICAgIEV4Y2VwdGlvbkhh
bmRsZXIgaGFuZGxlciA9IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsK
LSAgICBBU1NFUlQoaGFuZGxlci5jYXRjaFJvdXRpbmUpOwotICAgIHJldHVybiBkZmdIYW5kbGVy
RW5jb2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxlci5jYXRjaFJvdXRpbmUpOwotfQotCi1z
aXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZl
cnRKU1ZhbHVlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTkyNiw3ICsxMDg4LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJ
T04gZGZnQ29udmVydEpTVmFsdWVUbwogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodmFsdWUp
LnRvVUludDMyKGV4ZWMpOwogfQogCi1zaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNW
YWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcCkK
K3NpemVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAt
MTkzNCw3ICsxMDk2LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVU
bwogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wKS50b0Jvb2xlYW4oZXhlYyk7
CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25G
YWlsdXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogZGVidWdJbmZvUmF3LCB2b2lkKiBzY3JhdGNo
KQordm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1
cmUoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBkZWJ1Z0luZm9SYXcsIHZvaWQqIHNjcmF0Y2gpCiB7
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CkBAIC0xOTcyLDcgKzExMzQsNyBAQCB2b2lkIERGR19PUEVSQVRJT04g
ZGVidWdPcGVyYXRpb25QcmludFNwCiAgICAgZGF0YUxvZygiXG4iKTsKIH0KIAotZXh0ZXJuICJD
IiB2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayog
Y29kZUJsb2NrKQorZXh0ZXJuICJDIiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1p
emF0aW9uTm93KENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIC8vIEl0J3Mgc29ydCBvZiBw
cmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcg
c28gd291bGRuJ3QKICAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KQEAgLTIwMTYsNyArMTE3
OCw3IEBAIGV4dGVybiAiQyIgdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJSZW8KIH0KIAogI2lm
IEVOQUJMRShGVExfSklUKQotdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhl
Y1N0YXRlKiBleGVjKQordm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMjA3OCw3ICsxMjQwLDcgQEAgdm9pZCBE
RkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlYwogICAgICAgICBUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNvZGVCbG9jayksIHZtLT5lbnN1cmVXb3JrbGlz
dCgpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coCitjaGFy
KiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKICAgICBFeGVjU3RhdGUqIGV4ZWMs
IGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBzdHJlYW1JbmRleCkKIHsKICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKQEAgLTIxOTcsNyArMTM1OSw3IEBAIGNoYXIqIERGR19PUEVSQVRJ
T04gdHJpZ2dlck9TUkVudHJ5Tm93KAogCiAvLyBGSVhNRTogTWFrZSBjYWxscyB3b3JrIHdlbGwu
IEN1cnJlbnRseSB0aGV5J3JlIGEgcHVyZSByZWdyZXNzaW9uLgogLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25GVExDYWxsKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ2FsbChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRXhl
Y1N0YXRlKiBjYWxsZXJFeGVjID0gZXhlYy0+Y2FsbGVyRnJhbWUoKTsKICAgICAKQEAgLTIyMTcs
NyArMTM3OSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRlQKIAog
Ly8gRklYTUU6IE1ha2UgY2FsbHMgd29yayB3ZWxsLiBDdXJyZW50bHkgdGhleSdyZSBhIHB1cmUg
cmVncmVzc2lvbi4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTM2MjEKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ29uc3RydWN0
KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RlRMQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBFeGVjU3RhdGUqIGNhbGxlckV4
ZWMgPSBleGVjLT5jYWxsZXJGcmFtZSgpOwogICAgIApAQCAtMjI0MSw4NiArMTQwMyw0IEBAIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRlQKIAogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQogCi1uYW1lc3BhY2UgSlNDIHsKLQotI2lmIENPTVBJTEVSKEdDQykgJiYgQ1BV
KFg4Nl82NCkKLWFzbSAoCi0iLmdsb2JsICIgU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVy
blZhbHVlKSAiXG4iCi1ISURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1T
WU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6IiAiXG4iCi0gICAgIm1vdiA0
MCglcjEzKSwgJXIxM1xuIgotICAgICJtb3YgJXIxMywgJXJkaVxuIgotICAgICJqbXAgIiBMT0NB
TF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICJcbiIKLSk7
Ci0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODYpCi1hc20gKAotIi50ZXh0IiAiXG4iIFwK
LSIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKLUhJ
REVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKLVNZTUJPTF9TVFJJTkcoZ2V0
SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKLSAgICAibW92IDQwKCVlZGkpLCAlZWRpXG4i
Ci0gICAgIm1vdiAlZWRpLCA0KCVlc3ApXG4iCi0gICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgotKTsKLSNlbGlmIENPTVBJ
TEVSKEdDQykgJiYgQ1BVKEFSTV9USFVNQjIpCi1hc20gKAotIi50ZXh0IiAiXG4iCi0iLmFsaWdu
IDIiICJcbiIKLSIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUp
ICJcbiIKLUhJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKLSIudGh1bWIi
ICJcbiIKLSIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZ2V0SG9zdENhbGxSZXR1cm5W
YWx1ZSkgIlxuIgotU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiOiIgIlxu
IgotICAgICJsZHIgcjUsIFtyNSwgIzQwXSIgIlxuIgotICAgICJtb3YgcjAsIHI1IiAiXG4iCi0g
ICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3Rh
dGUpICJcbiIKLSk7Ci0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShBUk1fVFJBRElUSU9OQUwp
Ci1hc20gKAotIi50ZXh0IiAiXG4iCi0iLmdsb2JsICIgU1lNQk9MX1NUUklORyhnZXRIb3N0Q2Fs
bFJldHVyblZhbHVlKSAiXG4iCi1ISURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAi
XG4iCi1JTkxJTkVfQVJNX0ZVTkNUSU9OKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpCi1TWU1CT0xf
U1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6IiAiXG4iCi0gICAgImxkciByNSwgW3I1
LCAjNDBdIiAiXG4iCi0gICAgIm1vdiByMCwgcjUiICJcbiIKLSAgICAiYiAiIExPQ0FMX1JFRkVS
RU5DRShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgotKTsKLSNlbGlm
IENPTVBJTEVSKEdDQykgJiYgQ1BVKE1JUFMpCi1hc20oCi0iLnRleHQiICJcbiIKLSIuZ2xvYmwg
IiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKLUhJREVfU1lNQk9M
KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKLVNZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxS
ZXR1cm5WYWx1ZSkgIjoiICJcbiIKLSAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGdldEhvc3RDYWxs
UmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKQotICAgICJsdyAkczAsIDQwKCRzMCkiICJcbiIKLSAg
ICAibW92ZSAkYTAsICRzMCIgIlxuIgotICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGdldEhvc3RD
YWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiXG4iCi0pOwotI2VsaWYgQ09NUElMRVIoR0ND
KSAmJiBDUFUoU0g0KQotYXNtKAotIi50ZXh0IiAiXG4iCi0iLmdsb2JsICIgU1lNQk9MX1NUUklO
RyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1ISURFX1NZTUJPTChnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlKSAiXG4iCi1TWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6
IiAiXG4iCi0gICAgImFkZCAjNDAsIHIxNCIgIlxuIgotICAgICJtb3YubCBAcjE0LCByMTQiICJc
biIKLSAgICAibW92IHIxNCwgcjQiICJcbiIKLSAgICAibW92LmwgMmYsICIgU0g0X1NDUkFUQ0hf
UkVHSVNURVIgIlxuIgotICAgICJicmFmICIgU0g0X1NDUkFUQ0hfUkVHSVNURVIgIlxuIgotICAg
ICJub3AiICJcbiIKLSAgICAiMTogLmJhbGlnbiA0IiAiXG4iCi0gICAgIjI6IC5sb25nICIgTE9D
QUxfUkVGRVJFTkNFKGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiLTFiXG4i
Ci0pOwotI2VuZGlmCi0KLWV4dGVybiAiQyIgRW5jb2RlZEpTVmFsdWUgSE9TVF9DQUxMX1JFVFVS
Tl9WQUxVRV9PUFRJT04gZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIGlmICghZXhlYykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS5o
b3N0Q2FsbFJldHVyblZhbHVlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KICNlbmRpZiAv
LyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmgJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgorI2luY2x1ZGUgIkpJVE9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
MzcsMjg4ICszOCwxMjkgQEAgbmFtZXNwYWNlIERGRyB7CiAKIGV4dGVybiAiQyIgewogCi0jaWYg
Q0FMTElOR19DT05WRU5USU9OX0lTX1NURENBTEwKLSNkZWZpbmUgREZHX09QRVJBVElPTiBDREVD
TAotI2Vsc2UKLSNkZWZpbmUgREZHX09QRVJBVElPTgotI2VuZGlmCi0KLS8vIFRoZXNlIHR5cGVk
ZWZzIHByb3ZpZGUgdHlwZWNoZWNraW5nIHdoZW4gZ2VuZXJhdGluZyBjYWxscyBvdXQgdG8gaGVs
cGVyIHJvdXRpbmVzOwotLy8gdGhpcyBoZWxwcyBwcmV2ZW50IGNhbGxpbmcgYSBoZWxwZXIgcm91
dGluZSB3aXRoIHRoZSB3cm9uZyBhcmd1bWVudHMhCi0vKgotICAgIEtleToKLSAgICBWOiB2b2lk
Ci0gICAgSjogSlNWYWx1ZQotICAgIFA6IHBvaW50ZXIgKHZvaWQqKQotICAgIEM6IEpTQ2VsbCoK
LSAgICBBOiBKU0FycmF5KgotICAgIFM6IHNpemVfdAotICAgIFo6IGludDMyX3QKLSAgICBEOiBk
b3VibGUKLSAgICBJOiBTdHJpbmdJbXBsKgotKi8KLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwotdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUEpKEV4ZWNTdGF0ZSos
IEpTQXJyYXkqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZH
T3BlcmF0aW9uX0VBWikoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QpOwotdHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9E
RkdPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKLXR5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VDSSkoRXhlY1N0
YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNv
ZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RG
R09wZXJhdGlvbl9FREEpKEV4ZWNTdGF0ZSosIGRvdWJsZSwgSlNBcnJheSopOwotdHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUkpKEV4ZWNTdGF0
ZSosIFN0cmluZ0ltcGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAo
KkpfREZHT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSkEpKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0FycmF5Kik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSkkpKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlLCBTdHJpbmdJbXBsKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gKCpKX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RG
R09wZXJhdGlvbl9FSnNzWikoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBpbnQzMl90KTsKLXR5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKUCkoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHZvaWQqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VQKShFeGVjU3RhdGUqLCB2b2lkKik7Ci10
eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFAp
KEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lkKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3Qp
OwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25f
RVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7
Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
WkljZlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGluZUNhbGxGcmFtZSosIGludDMyX3QpOwot
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVpa
KShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BF
UkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIEpTQ2VsbCog
REZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsK
LXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUMpKEV4ZWNT
dGF0ZSosIEpTQ2VsbCopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09w
ZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwotdHlwZWRlZiBKU0Nl
bGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FSWNmKShFeGVjU3RhdGUqLCBJbmxp
bmVDYWxsRnJhbWUqKTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVy
YXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgSlNDZWxsKiBE
RkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUpzc1N0KShFeGVjU3RhdGUqLCBKU1N0cmlu
ZyosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09w
ZXJhdGlvbl9FSnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci10eXBl
ZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VKc3NKc3NKc3MpKEV4
ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwotdHlwZWRlZiBKU0Nl
bGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FT1opKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgaW50MzJfdCk7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3Bl
cmF0aW9uX0VTdCkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Ci10eXBlZGVmIEpTQ2VsbCogREZH
X09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKLXR5
cGVkZWYgZG91YmxlIERGR19PUEVSQVRJT04gKCpEX0RGR09wZXJhdGlvbl9ERCkoZG91YmxlLCBk
b3VibGUpOwotdHlwZWRlZiBkb3VibGUgREZHX09QRVJBVElPTiAoKkRfREZHT3BlcmF0aW9uX1pa
KShpbnQzMl90LCBpbnQzMl90KTsKLXR5cGVkZWYgZG91YmxlIERGR19PUEVSQVRJT04gKCpEX0RG
R09wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBpbnQz
Ml90IERGR19PUEVSQVRJT04gKCpaX0RGR09wZXJhdGlvbl9EKShkb3VibGUpOwotdHlwZWRlZiBz
aXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgSlNDZWxsKik7Ci10eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVy
YXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgc2l6ZV90IERG
R19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19E
RkdPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJ
T04gKCpWX0RGR09wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BF
UkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRU9aRCkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQz
Ml90LCBkb3VibGUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlv
bl9FT1pKKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsK
LXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlv
bl9FQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7Ci10eXBlZGVm
IHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDQ0ljZikoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7Ci10eXBlZGVmIHZvaWQgREZHX09Q
RVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDSkopKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAo
KlZfREZHT3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCk7Ci10eXBl
ZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgSlNDZWxsKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3Bl
cmF0aW9uX0VKQ0kpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBTdHJpbmdJ
bXBsKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VKSkop
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FSlBQKShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCosIHZvaWQqKTsKLXR5cGVkZWYgdm9pZCBE
RkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGlu
dDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9E
RkdPcGVyYXRpb25fVykoV2F0Y2hwb2ludFNldCopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFU
SU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIGNoYXIqIERGR19P
UEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci10eXBl
ZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FSlMpKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBzaXplX3QpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgq
UF9ERkdPcGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7Ci10eXBlZGVmIGNoYXIq
IERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FT1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
Kiwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9u
X0VPWikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKLXR5cGVkZWYgY2hhciogREZH
X09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVf
dCk7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUykoRXhl
Y1N0YXRlKiwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3Bl
cmF0aW9uX0VTSnNzKShFeGVjU3RhdGUqLCBzaXplX3QsIEpTU3RyaW5nKik7Ci10eXBlZGVmIGNo
YXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0
SikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBjaGFy
KiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0UFMpKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIHZvaWQqLCBzaXplX3QpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9E
RkdPcGVyYXRpb25fRVN0U1MpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90
KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdFopKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFU
SU9OICgqUF9ERkdPcGVyYXRpb25fRVpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsK
LXR5cGVkZWYgU3RyaW5nSW1wbCogREZHX09QRVJBVElPTiAoKklfREZHT3BlcmF0aW9uX0VKc3Mp
KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7Ci10eXBlZGVmIEpTU3RyaW5nKiBERkdfT1BFUkFUSU9O
ICgqSnNzX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci1KU0NlbGwqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSosIGludDMy
X3QpICBXVEZfSU5URVJOQUw7IAorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmlu
Z0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqLCBpbnQzMl90KSAgV1RGX0lOVEVSTkFMOyAKIAogLy8g
VGhlc2Ugcm91dGluZXMgYXJlIHByb3ZpZGUgY2FsbGJhY2tzIG91dCB0byBDKysgaW1wbGVtZW50
YXRpb25zIG9mIG9wZXJhdGlvbnMgdG9vIGNvbXBsZXggdG8gSklULgotSlNDZWxsKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5U
RVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3Rh
dGUqLCBKU09iamVjdCogY29uc3RydWN0b3IsIGludDMyX3QgaW5saW5lQ2FwYWNpdHkpIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpIFdURl9JTlRFUk5BTDsKLUVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwot
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlcihF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkdldEJ5VmFsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxDZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50KEV4ZWNTdGF0ZSos
IEpTQXJyYXkqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwg
aW50MzJfdCkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RG
X0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlk
QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lO
VEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJO
QUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkluT3B0aW1pemUoRXhl
Y1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25JbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7Ci1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJbihFeGVjU3RhdGUqLCBK
U0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgUHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmMsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
SlNDZWxsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25Ub1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFM
OwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheShFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHNpemVfdCwg
c2l6ZV90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Vt
cHR5QXJyYXkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3SW50OEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RG
X0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRo
T25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9J
TlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhT
aXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudChFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQz
Ml90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4
QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFs
dWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhD
bGFtcGVkQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZf
SU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFy
cmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVl
KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFy
cmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFM
OwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhPbmVBcmd1
bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFM
OwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhTaXplKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50
MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9h
dDY0QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpT
VmFsdWUpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3UmVnZXhwKEV4ZWNTdGF0ZSosIHZvaWQqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxDZWxsU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCos
IGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFM
Owotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNO
b25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc05v
blN0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1
ZSkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25B
cnJheVB1c2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5
KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25B
cnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiwgZG91YmxlIHZhbHVlLCBKU0FycmF5KikgV1RGX0lO
VEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChF
eGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiwgSlNB
cnJheSopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdU
Rl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBT
dHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRF
Uk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0
cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCop
IFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRF
Uk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRM
aXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlz
dChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwg
U3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdPYmplY3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOworSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
IGNvbnN0cnVjdG9yLCBpbnQzMl90IGlubGluZUNhcGFjaXR5KSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpcyhFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpc1N0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lO
VEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFByb3BlcnR5KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkUHJvcGVydHkpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludChFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50
MzJfdCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeVZhbFN0cmluZ0ludChFeGVjU3RhdGUqLCBKU1N0cmluZyosIGludDMyX3QpIFdURl9J
TlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9QcmltaXRp
dmUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCos
IHNpemVfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdB
cnJheUJ1ZmZlcihFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVfdCkgV1RGX0lO
VEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdFbXB0eUFycmF5KEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBX
VEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdp
dGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGlu
dDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50
MzJBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNW
YWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50
OEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVS
TkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aE9uZUFy
Z3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0
aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhPbmVBcmd1
bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFM
OworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhTaXplKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld1VpbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0Zsb2F0MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMy
X3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQz
MkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0
NjRBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRF
Uk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aE9u
ZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5U
RVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChF
eGVjU3RhdGUqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RG
X0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmlj
dChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5
b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91Ymxl
QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMy
X3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFsdWUpIFdURl9JTlRFUk5B
TDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5B
TDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91Ymxl
KEV4ZWNTdGF0ZSosIGRvdWJsZSB2YWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNB
cnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5U
RVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMo
RXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogLy8gVGhlc2UgY29t
cGFyaXNvbnMgcmV0dXJuIGEgYm9vbGVhbiB3aXRoaW4gYSBzaXplX3Qgc3VjaCB0aGF0IHRoZSB2
YWx1ZSBpcyB6ZXJvIGV4dGVuZGVkIHRvIGZpbGwgdGhlIHJlZ2lzdGVyLgotc2l6ZV90IERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwq
KSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVz
cyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25D
b21wYXJlTGVzc0VxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVS
TkFMOwotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdU
Rl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QoRXhl
Y1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJO
QUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
KSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlckVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4
ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFMOworRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEoRXhlY1N0
YXRlKiwgSlNDZWxsKiBsZWZ0LCBKU0NlbGwqIHJpZ2h0KSBXVEZfSU5URVJOQUw7CiAjZWxzZQot
c2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSos
IEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVm
dCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFMOwogI2VuZGlmCi1zaXplX3QgREZHX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsK
LXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBX
VEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4
ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlu
a0NhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRF
Uk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3Rh
dGUqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRl
QWN0aXZhdGlvbihFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLUpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxpbmVkQXJndW1lbnRzKEV4ZWNT
dGF0ZSosIElubGluZUNhbGxGcmFtZSopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCop
IFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5l
ZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUq
KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEFyZ3VtZW50c0xlbmd0aChFeGVjU3RhdGUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFs
KEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGluZUNhbGxGcmFtZSosIGludDMyX3QpIFdURl9JTlRF
Uk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRC
eVZhbChFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25Ob0NoZWNrKEV4ZWNTdGF0ZSosIEpT
Q2VsbCopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwotSlNDZWxs
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uRXhwcmVzc2lvbihFeGVjU3RhdGUq
LCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1kb3VibGUgREZHX09QRVJBVElPTiBvcGVyYXRpb25G
TW9kT25JbnRzKGludDMyX3QsIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZf
SU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Jc0Z1bmN0aW9uKEVuY29k
ZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
VHlwZU9mKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJB
VElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBK
U09iamVjdCosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RG
X0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3Rh
dGUqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRp
YWxDYXBhY2l0eShFeGVjU3RhdGUqLCBKU09iamVjdCopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3Rv
cmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7
Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUludDMyKEV4ZWNTdGF0ZSosIEpT
Q2VsbCopOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVEb3VibGUoRXhlY1N0
YXRlKiwgSlNDZWxsKik7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRp
Z3VvdXMoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blJhZ2VFbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNDZWxsKik7
Ci1TdHJpbmdJbXBsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0
ZSosIEpTU3RyaW5nKik7Ci1KU1N0cmluZyogREZHX09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVD
aGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci0KLUpTQ2VsbCogREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBTdHJ1
Y3R1cmUqKTsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZ09uQ2VsbChF
eGVjU3RhdGUqLCBKU0NlbGwqKTsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0
cmluZyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKLUpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMoRXhlY1N0YXRlKiwgSlNTdHJp
bmcqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IHNpemVfdCB0YWJsZUluZGV4KTsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNo
U3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyopOworc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZf
SU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNy
ZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50cyhF
eGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVGVhck9mZkFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0Nl
bGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZklu
bGluZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZy
YW1lKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRBcmd1bWVudHNMZW5ndGgoRXhlY1N0YXRlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRJbmxpbmVkQXJndW1lbnRC
eVZhbChFeGVjU3RhdGUqLCBpbnQzMl90LCBJbmxpbmVDYWxsRnJhbWUqLCBpbnQzMl90KSBXVEZf
SU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3Vt
ZW50QnlWYWwoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uTm9DaGVjayhFeGVjU3RhdGUq
LCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbkV4cHJlc3Npb24oRXhlY1N0
YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOworZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkg
V1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihF
bmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblR5cGVPZihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBh
Y2l0eShFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIHNpemVfdCBuZXdTaXplKSBX
VEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0
ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25S
ZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRW5zdXJlSW50MzIoRXhlY1N0YXRlKiwgSlNDZWxsKik7CitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsZShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqLCBKU0Nl
bGwqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmFnZUVuc3VyZUNvbnRpZ3VvdXMo
RXhlY1N0YXRlKiwgSlNDZWxsKik7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3Vy
ZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK1N0cmluZ0ltcGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsKK0pTU3Ry
aW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3Rh
dGUqLCBpbnQzMl90KTsKKworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmlu
Z09iamVjdChFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOworSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwor
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlKTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTIoRXhl
Y1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJp
bmcqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZv
ckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90IHRhYmxlSW5kZXgpOwor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmcoRXhlY1N0YXRlKiwgc2l6
ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIC8vIEZJ
WE1FOiBNYWtlIGNhbGxzIHdvcmsgd2VsbC4gQ3VycmVudGx5IHRoZXkncmUgYSBwdXJlIHJlZ3Jl
c3Npb24uCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIx
Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZUTENhbGwoRXhlY1N0YXRl
KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25G
VExDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25GVExDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ29uc3RydWN0KEV4ZWNTdGF0
ZSopIFdURl9JTlRFUk5BTDsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAotLy8gVGhpcyBt
ZXRob2QgaXMgdXNlZCB0byBsb29rdXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1
bHRMb2NhdGlvbiwgd2hpY2ggaXMKLS8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2Yg
dGhlIGNhbGxzIG91dCB0byBvbmUgb2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFib3ZlLgotCi0v
LyBBY2NvcmRpbmcgdG8gQysrIHJ1bGVzLCBhIHR5cGUgdXNlZCBmb3IgdGhlIHJldHVybiBzaWdu
YXR1cmUgb2YgZnVuY3Rpb24gd2l0aCBDIGxpbmthZ2UgKGkuZS4KLS8vICdleHRlcm4gIkMiJykg
bmVlZHMgdG8gYmUgUE9EOyBoZW5jZSBwdXR0aW5nIGFueSBjb25zdHJ1Y3RvcnMgaW50byBpdCBj
b3VsZCBjYXVzZSBlaXRoZXIgY29tcGlsZXIKLS8vIHdhcm5pbmdzLCBvciB3b3JzZSwgYSBjaGFu
Z2UgaW4gdGhlIEFCSSB1c2VkIHRvIHJldHVybiB0aGVzZSB0eXBlcy4KLXN0cnVjdCBERkdIYW5k
bGVyIHsKLSAgICB1bmlvbiBVbmlvbiB7Ci0gICAgICAgIHN0cnVjdCBTdHJ1Y3QgewotICAgICAg
ICAgICAgRXhlY1N0YXRlKiBleGVjOwotICAgICAgICAgICAgdm9pZCogaGFuZGxlcjsKLSAgICAg
ICAgfSBzOwotICAgICAgICB1aW50NjRfdCBlbmNvZGVkOwotICAgIH0gdTsKLX07Ci0KLWlubGlu
ZSBERkdIYW5kbGVyIGNyZWF0ZURGR0hhbmRsZXIoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBoYW5k
bGVyKQotewotICAgIERGR0hhbmRsZXIgcmVzdWx0OwotICAgIHJlc3VsdC51LnMuZXhlYyA9IGV4
ZWM7Ci0gICAgcmVzdWx0LnUucy5oYW5kbGVyID0gaGFuZGxlcjsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi0jaWYgQ1BVKFg4Nl82NCkKLXR5cGVkZWYgREZHSGFuZGxlciBERkdIYW5kbGVyRW5j
b2RlZDsKLWlubGluZSBERkdIYW5kbGVyRW5jb2RlZCBkZmdIYW5kbGVyRW5jb2RlZChFeGVjU3Rh
dGUqIGV4ZWMsIHZvaWQqIGhhbmRsZXIpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZURGR0hhbmRsZXIo
ZXhlYywgaGFuZGxlcik7Ci19Ci0jZWxzZQotdHlwZWRlZiB1aW50NjRfdCBERkdIYW5kbGVyRW5j
b2RlZDsKLWlubGluZSBERkdIYW5kbGVyRW5jb2RlZCBkZmdIYW5kbGVyRW5jb2RlZChFeGVjU3Rh
dGUqIGV4ZWMsIHZvaWQqIGhhbmRsZXIpCi17Ci0gICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKERG
R0hhbmRsZXI6OlVuaW9uKSA9PSBzaXplb2YodWludDY0X3QpLCBERkdIYW5kbGVyX1VuaW9uX2lz
XzY0Yml0KTsKLSAgICByZXR1cm4gY3JlYXRlREZHSGFuZGxlcihleGVjLCBoYW5kbGVyKS51LmVu
Y29kZWQ7Ci19Ci0jZW5kaWYKLURGR0hhbmRsZXJFbmNvZGVkIERGR19PUEVSQVRJT04gbG9va3Vw
RXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci0KIC8vIFRoZXNlIG9w
ZXJhdGlvbnMgaW1wbGVtZW50IHRoZSBpbXBsaWNpdGx5IGNhbGxlZCBUb0ludDMyIGFuZCBUb0Jv
b2xlYW4gY29udmVyc2lvbnMgZnJvbSBFUzUuCiAvLyBUaGlzIGNvbnZlcnNpb24gcmV0dXJucyBh
biBpbnQzMl90IHdpdGhpbiBhIHNpemVfdCBzdWNoIHRoYXQgdGhlIHZhbHVlIGlzIHplcm8gZXh0
ZW5kZWQgdG8gZmlsbCB0aGUgcmVnaXN0ZXIuCi1zaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252
ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5B
TDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElP
TiBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29s
ZWFuKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiAKLXZvaWQgREZH
X09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0
ZSosIHZvaWQqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVn
T3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRlKiwgdm9pZCosIHZvaWQq
KSBXVEZfSU5URVJOQUw7CiAKLXZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRp
b25Ob3coQ29kZUJsb2NrKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdn
ZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqKSBXVEZfSU5URVJOQUw7CiAKICNpZiBFTkFC
TEUoRlRMX0pJVCkKLXZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0
ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93
KEV4ZWNTdGF0ZSosIGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBzdHJlYW1JbmRleCkg
V1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0
YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlO
b3coRXhlY1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUluZGV4LCBpbnQzMl90IHN0cmVhbUluZGV4
KSBXVEZfSU5URVJOQUw7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKIH0gLy8gZXh0ZXJu
ICJDIgogCi1pbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb25OZXdUeXBlZEFycmF5
V2l0aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCitpbmxpbmUgUF9KSVRPcGVyYXRp
b25fRVN0WiBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlU
eXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBUeXBlSW50ODoKQEAg
LTM0Nyw3ICsxODksNyBAQCBpbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb25OZXdU
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWlubGluZSBQX0RGR09wZXJhdGlvbl9FU3RKIG9wZXJhdGlv
bk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUp
CitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRVN0SiBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aE9u
ZUFyZ3VtZW50Rm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlw
ZSkgewogICAgIGNhc2UgVHlwZUludDg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZWdpc3RlclNldC5oCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjE3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBERkdSZWdpc3RlclNldF9oCi0jZGVmaW5lIERGR1JlZ2lzdGVyU2V0X2gKLQotI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJGUFJJ
bmZvLmgiCi0jaW5jbHVkZSAiR1BSSW5mby5oIgotI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KLQot
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQg
dG90YWxOdW1iZXJPZlJlZ2lzdGVycyA9Ci0gICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMg
KyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51
bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0ID0KLSAgICAodG90YWxOdW1iZXJPZlJlZ2lzdGVycyAr
IDcpID4+IDM7Ci0KLXR5cGVkZWYgdWludDhfdCBSZWdpc3RlclNldFBPRFtudW1iZXJPZkJ5dGVz
SW5SZWdpc3RlclNldF07Ci0KLWNsYXNzIFJlZ2lzdGVyU2V0IHsKLXB1YmxpYzoKLSAgICBSZWdp
c3RlclNldCgpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkJ5dGVz
SW5SZWdpc3RlclNldDsgaS0tOykKLSAgICAgICAgICAgIG1fc2V0W2ldID0gMDsKLSAgICB9Ci0g
ICAgCi0gICAgUmVnaXN0ZXJTZXQoY29uc3QgUmVnaXN0ZXJTZXRQT0QmIG90aGVyKQotICAgIHsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGkt
LTspCi0gICAgICAgICAgICBtX3NldFtpXSA9IG90aGVyW2ldOwotICAgIH0KLSAgICAKLSAgICBj
b25zdCBSZWdpc3RlclNldFBPRCYgYXNQT0QoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQotICAg
IAotICAgIHZvaWQgY29weUluZm8oUmVnaXN0ZXJTZXRQT0QmIG90aGVyKSBjb25zdAotICAgIHsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGkt
LTspCi0gICAgICAgICAgICBvdGhlcltpXSA9IG1fc2V0W2ldOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIHNldChHUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgc2V0Qml0KEdQUkluZm86OnRvSW5k
ZXgocmVnKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0R1BSQnlJbmRleCh1bnNpZ25lZCBp
bmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzKTsKLSAgICAgICAgc2V0Qml0KGluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBj
bGVhcihHUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgY2xlYXJCaXQoR1BSSW5mbzo6dG9JbmRl
eChyZWcpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBnZXQoR1BSUmVnIHJlZykgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9
Ci0gICAgCi0gICAgYm9vbCBnZXRHUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwot
ICAgICAgICByZXR1cm4gZ2V0Qml0KGluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJu
IHRoZSBpbmRleCd0aCBmcmVlIEdQUi4KLSAgICBHUFJSZWcgZ2V0RnJlZUdQUih1bnNpZ25lZCBp
bmRleCA9IDApIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFnZXRHUFJCeUlu
ZGV4KGkpICYmICFpbmRleC0tKQotICAgICAgICAgICAgICAgIHJldHVybiBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHNldChGUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgc2V0Qml0
KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBzZXRGUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KQotICAgIHsK
LSAgICAgICAgQVNTRVJUKGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwotICAg
ICAgICBzZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpbmRleCk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgY2xlYXIoRlBSUmVnIHJlZykKLSAgICB7Ci0gICAgICAgIGNsZWFyQml0
KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBnZXQoRlBSUmVnIHJlZykgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBnZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjp0b0lu
ZGV4KHJlZykpOwotICAgIH0KLSAgICAKLSAgICBib29sIGdldEZQUkJ5SW5kZXgodW5zaWduZWQg
aW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaW5kZXggPCBGUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyk7Ci0gICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnMgKyBpbmRleCk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJh
bmtJbmZvPgotICAgIHZvaWQgc2V0QnlJbmRleCh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAg
ICAgIHNldChCYW5rSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOwotICAgIH0KLSAgICAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICBib29sIGdldEJ5SW5kZXgodW5zaWduZWQg
aW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0KEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGlu
ZGV4KSk7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIG51bWJlck9mU2V0R1BScygpIGNvbnN0
Ci0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAg
aWYgKCFnZXRCaXQoaSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBy
ZXN1bHQrKzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAK
LSAgICB1bnNpZ25lZCBudW1iZXJPZlNldEZQUnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5z
aWduZWQgcmVzdWx0ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmICghZ2V0Qml0KEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgaSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICByZXN1bHQrKzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZlNldFJlZ2lzdGVycygpIGNvbnN0Ci0gICAg
ewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSB0b3RhbE51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAoIWdldEJp
dChpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJlc3VsdCsrOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotcHJpdmF0ZToK
LSAgICB2b2lkIHNldEJpdCh1bnNpZ25lZCBpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGkgPCB0
b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgbV9zZXRbaSA+PiAzXSB8PSAoMSA8PCAo
aSAmIDcpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhckJpdCh1bnNpZ25lZCBpKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAg
bV9zZXRbaSA+PiAzXSAmPSB+KDEgPDwgKGkgJiA3KSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wg
Z2V0Qml0KHVuc2lnbmVkIGkpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaSA8IHRvdGFs
TnVtYmVyT2ZSZWdpc3RlcnMpOwotICAgICAgICByZXR1cm4gISEobV9zZXRbaSA+PiAzXSAmICgx
IDw8IChpICYgNykpKTsKLSAgICB9Ci0gICAgCi0gICAgUmVnaXN0ZXJTZXRQT0QgbV9zZXQ7Ci19
OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbHNlIC8vIEVOQUJMRShERkdfSklU
KSAtPiBzbyBpZiBERkcgaXMgZGlzYWJsZWQKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewotCi0vLyBEZWZpbmUgUmVnaXN0ZXJTZXRQT0QgdG8gc29tZXRoaW5nIHRoYXQgaXMgYSBQ
T0QsIGJ1dCBpcyBvdGhlcndpc2UgdXNlbGVzcywKLS8vIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJl
ZmVyIHRvIHRoaXMgdHlwZSBpbiBjb2RlIHRoYXQgbWF5IGJlIGNvbXBpbGVkIHdoZW4KLS8vIHRo
ZSBERkcgaXMgZGlzYWJsZWQuCi0KLXN0cnVjdCBSZWdpc3RlclNldFBPRCB7IH07Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5k
aWYgLy8gREZHUmVnaXN0ZXJTZXRfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQxOCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdSZXBhdGNoLmgiCi0KLSNpZiBFTkFC
TEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkNhbGxG
cmFtZUlubGluZXMuaCIKLSNpbmNsdWRlICJERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIK
LSNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgotI2luY2x1ZGUgIkRGR1RodW5rcy5oIgot
I2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKLSNpbmNsdWRlICJPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5oIgotI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVS
YXJlRGF0YUlubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQot
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1zdGF0aWMgdm9pZCByZXBhdGNoQ2Fs
bChDb2RlQmxvY2sqIGNvZGVibG9jaywgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0
ciBuZXdDYWxsZWVGdW5jdGlvbikKLXsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
Y29kZWJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsLCBuZXdDYWxsZWVGdW5j
dGlvbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcyhDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhG
dW5jdGlvbiwgYm9vbCBjb21wYWN0KQotewotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOwotCi0gICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQotICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlv
bik7Ci0KLSAgICAvLyBQYXRjaCB0aGUgc3RydWN0dXJlIGNoZWNrICYgdGhlIG9mZnNldCBvZiB0
aGUgbG9hZC4KLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBzdHJ1Y3R1cmUpOwotICAgIHJlcGF0Y2hCdWZmZXIuc2V0
TG9hZEluc3RydWN0aW9uSXNBY3RpdmUoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmNvbnZl
cnRpYmxlTG9hZEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0b3JhZ2VM
b2FkKSwgaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBpZiAoY29tcGFjdCkKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3Jh
Z2Uob2Zmc2V0KSk7Ci0gICAgZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0
b3JhZ2Uob2Zmc2V0KSk7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlmIChjb21wYWN0
KSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNl
dCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
OwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zm
c2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVk
U3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3Rv
cmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGFkZFN0cnVj
dHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
Ci0gICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWls
dXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGlmIChvYmplY3QtPnN0cnVjdHVy
ZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNT
dGlsbFZhbGlkKCkpIHsKLSAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2lu
dChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotI2lmIERGR19FTkFCTEUoSklU
X0FTU0VSVCkKLSAgICAgICAgLy8gSWYgd2UgZXhlY3V0ZSB0aGlzIGNvZGUsIHRoZSBvYmplY3Qg
bXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0LiBBc3NlcnQKLSAgICAgICAgLy8gdGhp
cyBpbiBkZWJ1ZyBtb2Rlcy4KLSAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG9rID0gaml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0gICAgICAgIGppdC5icmVha3BvaW50KCk7Ci0gICAgICAg
IG9rLmxpbmsoJmppdCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNo
R1BSKTsKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoUHRyKAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU1Zh
bHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywKLSAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKHByb3RvdHlw
ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChwcm90b3R5cGUu
aXNDZWxsKCkpOwotICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAg
ICAgcHJvdG90eXBlLmFzQ2VsbCgpLCBwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBj
b2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsCi0gICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQ
Uik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChSZXBhdGNoQnVmZmVyJiByZXBh
dGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciB0YXJnZXQpCi17Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVw
bGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVwbGFjZVdpdGhKdW1wKAotICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBh
dGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcygKLSAgICAgICAgICAgICAgICBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoCi0gICAgICAgICAg
ICAgICAgICAgIC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0Nh
bGwpKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAotICAgICAgICBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAgc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAotICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCh0YXJnZXQpKTsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVTY3JhdGNo
KE1hY3JvQXNzZW1ibGVyJiBzdHViSml0LCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBHUFJS
ZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIHN1Y2Nlc3MsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wJiBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzKQot
ewotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBzdHViSml0LnBvcChz
Y3JhdGNoR1BSKTsKLSAgICAgICAgCi0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4g
cG9wIHNjcmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFjay4KLSAgICAgICAgZmFpbHVyZUNhc2Vz
LmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQ
Uik7Ci0gICAgICAgIAotICAgICAgICBmYWlsID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgCi0gICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotfQotCi1z
dGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJv
b2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJl
Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwg
c2xvd0Nhc2VCZWdpbikKLXsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN1Y2Nlc3NM
YWJlbCk7Ci0gICAgICAgIAotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWwsIHNsb3dDYXNlQmVnaW4pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBkaXJlY3RseSBiYWNrIHRv
IG5vcm1hbCBwYXRoCi0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIHNsb3dDYXNl
QmVnaW4pOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYg
cGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAg
ICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBz
dWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9TbG93Q2FzZSkpOwotfQotCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5B
Y2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBD
b2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBz
dHViUm91dGluZSkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLQotICAgIE1hY3JvQXNz
ZW1ibGVyIHN0dWJKaXQ7Ci0gICAgICAgIAotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2Vk
UmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9
IGZhbHNlOwotICAgIAotICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNl
bGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgIHNjcmF0
Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRH
UFIsIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hH
UFIpOwotICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgfQotICAgIAot
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgCi0gICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAg
Ci0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0gICAgSlNPYmplY3QqIHByb3Rv
T2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytp
dCkgewotICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3Rv
dHlwZUZvckxvb2t1cChleGVjKSk7Ci0gICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVj
aygKLSAgICAgICAgICAgIHByb3RvT2JqZWN0LCBwcm90b09iamVjdC0+c3RydWN0dXJlKCksIGV4
ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgIGZhaWx1cmVD
YXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Ci0g
ICAgfQotICAgIAotICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKSB7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2FkNjQocHJvdG9PYmplY3QtPmxvY2F0aW9uRm9y
T2Zmc2V0KG9mZnNldCksIHJlc3VsdEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
ICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9PYmpl
Y3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkpLCByZXN1bHRHUFIpOwotICAgICAgICBzdHVi
Sml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7
Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQ
UiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBzdHViSml0Lmxv
YWRQdHIocHJvdG9PYmplY3QtPmJ1dHRlcmZseUFkZHJlc3MoKSwgcmVzdWx0R1BSKTsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIs
IG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSks
IHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwotICAgIAotICAgIGVtaXRSZXN0b3Jl
U2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2Vz
cywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKLSAgICAKLSAgICBsaW5rUmVzdG9y
ZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWls
LCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgCi0gICAg
c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKLSAgICAgICAgcGF0Y2hC
dWZmZXIsCi0gICAgICAgICgiREZHIHByb3RvdHlwZSBjaGFpbiBhY2Nlc3Mgc3R1YiBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9j
aygpKS5kYXRhKCksIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci19Ci0KLXN0
YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZh
bHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIC8vIEZJWE1FOiBXcml0
ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBjaGVjayBmb3IgcmVjdXJzaW9uIGhlcmUg
anVzdAotICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sg
Zm9yIHJlY3Vyc2lvbi4KLQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJs
b2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgCi0gICAgaWYgKGlzSlNBcnJh
eShiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKSB7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAg
R1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
ZGZnLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOwotICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVn
aXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gg
PSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2Vs
ZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1
bHRHUFIsIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0dWJKaXQucHVzaChz
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1
cmVDYXNlczsKLSAgICAgICAKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsgCi0gICAgICAgIHN0dWJKaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElzQXJy
YXkpKSk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spKSk7Ci0gICAgICAgIAotICAgICAgICBzdHViSml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigwKSkpOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1Ykpp
dC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaEdQUiwgcmVzdWx0
R1BSKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0dWJKaXQubW92ZShzY3Jh
dGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICBzdHViSml0Lm1vdmUoSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW0zMigweGZmZmZmZmZmKSwgcmVzdWx0VGFnR1BSKTsgLy8gSlNWYWx1ZTo6SW50MzJU
YWcKLSNlbmRpZgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7
Ci0gICAgICAgIAotICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0g
ICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNv
ZGVCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZm
ZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2VzcywgZmFpbCwgZmFpbHVy
ZUNhc2VzKTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJ
WkVfQ09ERV9GT1JfREZHX1NUVUIoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAg
ICAgICgiREZHIEdldEJ5SWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEo
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKLSAgICAgICAgCi0gICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOwotICAgICAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1
YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25H
ZXRCeUlkKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgbGVuZ3RoIGFjY2VzcyBmb3IgU3RyaW5nLgotCi0g
ICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KLSAgICBp
ZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTQ2Vs
bCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7Ci0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nl
c3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBPcHRp
bWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkg
ewotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCi0gICAgICAgICAgICB8fCAh
TWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNl
dFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkpIHsKLSAgICAg
ICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1
aWxkTGlzdCwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSBnZXR0ZXJz
IGFuZCBzZXR0ZXJzCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2Fj
aGVkT2Zmc2V0KCk7Ci0gICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5G
b3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJhc2UoKSwgcHJvcGVydHlO
YW1lLCBvZmZzZXQpOwotICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFp
biA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgCi0gICAgZ2VuZXJhdGVQ
cm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50
LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxU
b1Nsb3dDYXNlKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgIAotICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNo
QnVmZmVyLCBzdHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwot
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3Bl
cmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7Ci0gICAgCi0gICAgc3R1YkluZm8uaW5pdEdldEJ5SWRD
aGFpbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90
eXBlQ2hhaW4sIGNvdW50LCB0cnVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCByZXBh
dGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGJvb2wgY2FjaGVkID0gdHJ5Q2FjaGVHZXRCeUlE
KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7Ci0gICAgaWYg
KCFjYWNoZWQpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwotfQotCi1zdGF0aWMgYm9v
bCBnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QoCi0gICAgVk0qIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdComIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgaW50JiBsaXN0SW5k
ZXgsCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwmIHNsb3dDYXNlKQotewotICAgIHNsb3dDYXNlID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIAotICAgIGlmIChzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc191bnNldCkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3R1YkluZm8u
c3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRC
eUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAwLCBmYWxzZSk7Ci0gICAgICAg
IGxpc3RJbmRleCA9IDA7Ci0gICAgfSBlbHNlIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc19nZXRfYnlfaWRfc2VsZikgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3R1YkluZm8u
c3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShzbG93Q2FzZSks
IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7
Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0LCAxLCB0cnVlKTsKLSAgICAgICAgbGlzdEluZGV4ID0gMTsKLSAgICB9IGVsc2UgaWYg
KHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikgewotICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgc2xvd0Nh
c2UgPSBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
SW5mby5zdHViUm91dGluZSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCksIHRydWUpOwot
ICAgICAgICBzdHViSW5mby5zdHViUm91dGluZS5jbGVhcigpOwotICAgICAgICBzdHViSW5mby5p
bml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSwgZmFsc2UpOwot
ICAgICAgICBsaXN0SW5kZXggPSAxOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOwot
ICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxm
TGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmdldEJ5
SWRTZWxmTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgc2xvd0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJl
bChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAobGlzdEluZGV4ID09IFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIFJFTEVBU0VfQVNTRVJUKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhdGNoSnVtcFRvR2V0QnlJ
ZFN0dWIoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
SklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKQotewotICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJ
bmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOwotICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIGlmIChzdHViSW5mby51Lmdl
dEJ5SWRTZWxmTGlzdC5kaWRTZWxmUGF0Y2hpbmcpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoCi0gICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zm
c2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVj
dENoZWNrKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgcmVwbGFjZVdp
dGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSk7Ci19Ci0KLXN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmICgh
YmFzZVZhbHVlLmlzQ2VsbCgpCi0gICAgICAgIHx8ICFzbG90LmlzQ2FjaGVhYmxlKCkKLSAgICAg
ICAgfHwgIWJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNB
cmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
LSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotICAgIAotICAgIGlmIChzbG90
LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgIGlmICghc3R1YkluZm8ucGF0Y2gu
ZGZnLnJlZ2lzdGVyc0ZsdXNoZWQpIHsKLSAgICAgICAgICAgIC8vIFdlIGNhbm5vdCBkbyBhcyBt
dWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCBwcmlv
ciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRpY3VsYXIsCi0gICAgICAgICAgICAvLyBub24tVmFs
dWUgY2FjaGVkIHByb3BlcnRpZXMgcmVxdWlyZSBwbGFudGluZyBjYWxscywgd2hpY2ggcmVxdWly
ZXMgcmVnaXN0ZXJzIHRvIGhhdmUgYmVlbiBmbHVzaGVkLiBUaHVzLAotICAgICAgICAgICAgLy8g
aWYgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQsIGRvbid0IGRvIG5vbi1WYWx1ZSBjYWNoaW5n
LgotICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGlu
dCBsaXN0SW5kZXg7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlOwotCi0gICAg
ICAgIGlmICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc2xvd0Nhc2UpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgc3R1YkluZm8udS5nZXRC
eUlkU2VsZkxpc3QubGlzdFNpemUrKzsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BS
ID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19j
YXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5kZmcudmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAg
IAotICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAg
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdyb25nU3RydWN0ID0gc3R1YkppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgc3RyYXRlZ3kg
d2UgdXNlIGZvciBzdHVicyBpcyBhcyBmb2xsb3dzOgotICAgICAgICAvLyAxKSBDYWxsIERGRyBo
ZWxwZXIgdGhhdCBjYWxscyB0aGUgZ2V0dGVyLgotICAgICAgICAvLyAyKSBDaGVjayBpZiB0aGVy
ZSB3YXMgYW4gZXhjZXB0aW9uLCBhbmQgaWYgdGhlcmUgd2FzLCBjYWxsIHlldCBhbm90aGVyCi0g
ICAgICAgIC8vICAgIGhlbHBlci4KLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNEaXJlY3QgPSBm
YWxzZTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaGFuZGxlckNhbGw7Ci0gICAgICAgIEZ1bmN0aW9uUHRy
IG9wZXJhdGlvbkZ1bmN0aW9uOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNz
OwotICAgICAgICAKLSAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90
LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxl
R2V0dGVyKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlk
R1BSUmVnKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZUdQUiAhPSBzY3JhdGNoR1BSKTsK
LSAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkp
IHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2
NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShz
bG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAg
ICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNl
bmRpZgotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0
Y2hHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNl
R1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25GdW5jdGlvbiA9IG9w
ZXJhdGlvbkNhbGxHZXR0ZXI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICAgICAgICAgICAg
ICBiYXNlR1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKS5leGVjdXRhYmxlQWRkcmVzcygp
KSwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoaWRl
bnQuaW1wbCgpKSk7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRp
b25DYWxsQ3VzdG9tR2V0dGVyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRl
IGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQotICAgICAgICAgICAgLy8gcGxhY2UgdGhh
dCB3ZSBtYWRlIGl0IGZyb20uIEl0IGp1c3Qgc28gaGFwcGVucyB0byBiZSB0aGUgcGxhY2UgdGhh
dCB3ZSBhcmUgYXQKLSAgICAgICAgICAgIC8vIHJpZ2h0IG5vdyEKLSAgICAgICAgICAgIHN0dWJK
aXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KGV4ZWMtPmxvY2F0aW9uQXNSYXdCaXRzKCkpLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJK
aXQuY2FsbCgpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICAgICAg
c3R1YkppdC5zZXR1cFJlc3VsdHMocmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCi0g
ICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxw
ZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
c3R1YkppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwotICAgICAgICAgICAgaGFuZGxlckNh
bGwgPSBzdHViSml0LmNhbGwoKTsKLSAgICAgICAgICAgIHN0dWJKaXQuanVtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQ
Uik7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGlmIChiYXNlR1BSID09IHJlc3VsdFRhZ0dQUikg
ewotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkp
LCByZXN1bHRHUFIpOwotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hl
ZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdH
UFIpOwotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgp
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BS
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBz
dHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJl
bGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIs
IG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7
Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1
bXAoKTsKLSAgICAgICAgICAgIGlzRGlyZWN0ID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY29kZUJsb2NrKTsKLSAgICAg
ICAgCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsod3JvbmdTdHJ1Y3QsIHNsb3dDYXNlKTsKLSAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7Ci0g
ICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3Bl
cmF0aW9uQ2FsbCwgb3BlcmF0aW9uRnVuY3Rpb24pOwotICAgICAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlcik7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPQotICAg
ICAgICAgICAgY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgICAgICAgICAgICAgRklOQUxJWkVf
REZHX0NPREUoCi0gICAgICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAg
ICAgICAgICAoIkRGRyBHZXRCeUlkIHBvbHltb3JwaGljIGxpc3QgYWNjZXNzIGZvciAlcywgcmV0
dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29k
ZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2Fs
bFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAgICAgICAgICp2bSwKLSAg
ICAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAg
ICAgIHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkp
OwotICAgICAgICAKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUs
IHN0cnVjdHVyZSwgaXNEaXJlY3QpOwotICAgICAgICAKLSAgICAgICAgcGF0Y2hKdW1wVG9HZXRC
eUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7Ci0gICAgICAg
IHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7Ci0g
ICAgfQotICAgIAotICAgIGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8ICFzbG90LmlzQ2FjaGVhYmxlVmFs
dWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQcm90
b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2VWYWx1ZSwgc2xvdC5zbG90QmFzZSgp
LCBpZGVudCwgb2Zmc2V0KTsKLSAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWlu
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBl
Q2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgIAotICAgIFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwotICAg
IGludCBsaXN0SW5kZXg7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2U7Ci0gICAgaWYg
KCFnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qodm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdCwgbGlzdEluZGV4LCBzbG93Q2FzZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3QubGlzdFNp
emUrKzsKLSAgICAKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAg
IAotICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3Rv
dHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUp
LCBzbG93Q2FzZSwgc3R1YlJvdXRpbmUpOwotICAgIAotICAgIHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOwotICAgIAotICAgIHBhdGNoSnVtcFRv
R2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwotICAg
IAotICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0g
MSk7Ci19Ci0KLXZvaWQgYnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
YmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGJvb2wgZG9u
dENoYW5nZUNhbGwgPSB0cnlCdWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVy
dHlOYW1lLCBzbG90LCBzdHViSW5mbyk7Ci0gICAgaWYgKCFkb250Q2hhbmdlQ2FsbCkKLSAgICAg
ICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Ci19Ci0KLXN0YXRpYyBWX0RGR09wZXJhdGlvbl9FSkNJ
IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3Qg
JnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkg
ewotICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCi0gICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3Q7Ci0gICAgfQotICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0gICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3Q7Ci19Ci0KLXN0YXRpYyBWX0RGR09wZXJhdGlvbl9FSkNJIGFwcHJv
cHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAm
c2xvdCwgUHV0S2luZCBwdXRLaW5kKQotewotICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7
Ci0gICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0OwotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdDsKLSAgICB9Ci0gICAgaWYgKHB1dEtpbmQgPT0gRGly
ZWN0KQotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxk
TGlzdDsKLSAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdDsKLX0K
LQotc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywK
LSAgICBKU1ZhbHVlLAotICAgIGNvbnN0IElkZW50aWZpZXImLAotICAgIGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgUHV0
S2luZCwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBm
YWlsdXJlTGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17
Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2Vk
UmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9
IGZhbHNlOwotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUjI7Ci0gICAgY29uc3QgYm9vbCB3cml0ZUJhcnJpZXJOZWVkZWQgPSB0cnVlOwot
I2Vsc2UKLSAgICBjb25zdCBib29sIHdyaXRlQmFycmllck5lZWRlZCA9IGZhbHNlOwotI2VuZGlm
Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKLSAgICAKLSAgICBpZiAoc2NyYXRj
aEdQUiA9PSBJbnZhbGlkR1BSUmVnICYmICh3cml0ZUJhcnJpZXJOZWVkZWQgfHwgaXNPdXRPZkxp
bmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VH
UFIsIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJ
VDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOwotI2Vu
ZGlmCi0gICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAgICAgICAgc3R1Ykpp
dC5wdXNoKHNjcmF0Y2hHUFIpOwotICAgIH0KLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJh
ZFN0cnVjdHVyZSA9IHN0dWJKaXQuYnJhbmNoUHRyKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpKTsKLSAgICAKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJ
TkcpCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzY3JhdGNoR1BSMiA9IFNwZWN1bGF0aXZlSklU
OjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSNlbHNl
Ci0gICAgc2NyYXRjaEdQUjIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNl
R1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIsIHNjcmF0Y2hHUFIpOwotI2VuZGlmCi0gICAgc3R1
YkppdC5wdXNoKHNjcmF0Y2hHUFIyKTsKLSAgICBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVy
KHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJG
b3JQcm9wZXJ0eUFjY2Vzcyk7Ci0gICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUjIpOwotI2VuZGlm
Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5j
YWNoZWRPZmZzZXQoKSkpCi0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFn
ZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVT
dG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAg
ICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5l
U3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
c3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVy
ZTsKLSAgICAKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc3R1Ykpp
dC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAg
ICAgICAgCi0gICAgICAgIGJhZFN0cnVjdHVyZS5saW5rKCZzdHViSml0KTsKLSAgICAgICAgc3R1
YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAg
IGZhaWx1cmUgPSBiYWRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOwotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIHBhdGNoQnVmZmVy
LmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKLSAgICAgICAgICAgIAotICAgIHN0dWJSb3V0
aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCi0gICAgICAgIHBhdGNoQnVmZmVyLAot
ICAgICAgICAoIkRGRyBQdXRCeUlkIHJlcGxhY2Ugc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsCi0gICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAg
IHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KTsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAotICAgIEV4ZWNTdGF0
ZSogZXhlYywKLSAgICBKU1ZhbHVlLAotICAgIGNvbnN0IElkZW50aWZpZXImLAotICAgIGNvbnN0
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
Ci0gICAgUHV0S2luZCBwdXRLaW5kLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLAotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFp
biwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0K
LSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
ZGZnLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVnIHZhbHVlVGFn
R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIp
OwotI2VuZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOwotICAgIAotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpOwotICAgIGFs
bG9jYXRvci5sb2NrKGJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYWxsb2Nh
dG9yLmxvY2sodmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVH
UFIpOwotICAgIAotICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtKTsKLSAgICAgICAgICAgIAot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
LSAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hH
UFIxICE9IHZhbHVlR1BSKTsKLSAgICAKLSAgICBib29sIG5lZWRTZWNvbmRTY3JhdGNoID0gZmFs
c2U7Ci0gICAgYm9vbCBuZWVkVGhpcmRTY3JhdGNoID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRF
X0JBUlJJRVJfUFJPRklMSU5HKQotICAgIG5lZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsKLSNlbmRp
ZgotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpCi0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSkgewotICAgICAgICBuZWVkU2Vjb25kU2NyYXRjaCA9IHRydWU7Ci0gICAgICAg
IG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVlOwotICAgIH0KLQotICAgIEdQUlJlZyBzY3JhdGNoR1BS
MjsKLSAgICBpZiAobmVlZFNlY29uZFNjcmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUjIgPSBh
bGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BS
MiAhPSBiYXNlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsK
LSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnOwotICAgIEdQUlJlZyBzY3JhdGNo
R1BSMzsKLSAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BSMyA9
IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hH
UFIzICE9IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gdmFsdWVHUFIp
OwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjEpOwotICAgICAgICBB
U1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjIpOwotICAgIH0gZWxzZQotICAgICAgICBz
Y3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgICAgICAKLSAgICBhbGxvY2F0b3Iu
cHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7Ci0KLSAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgICAgICAgICAgCi0gICAgQVNTRVJU
KG9sZFN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQo
KSk7Ci0gICAgCi0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihv
bGRTdHJ1Y3R1cmUpKSk7Ci0gICAgCi0gICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAot
ICAgICAgICBvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2so
KSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgc2NyYXRjaEdQUjEp
OwotICAgICAgICAgICAgCi0gICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7Ci0gICAgICAg
IGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQo
KTsgKml0OyArK2l0KSB7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2so
Ci0gICAgICAgICAgICAgICAgKCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgICAgICAgICBz
Y3JhdGNoR1BSMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklF
Ul9QUk9GSUxJTkcpCi0gICAgQVNTRVJUKG5lZWRTZWNvbmRTY3JhdGNoKTsKLSAgICBBU1NFUlQo
c2NyYXRjaEdQUjIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0
aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1
aXJlcyBpdAotICAgIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQ
Uiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vz
cyk7Ci0jZW5kaWYKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7
Ci0gICAgCi0gICAgYm9vbCBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSBmYWxzZTsKLSAgICAKLSAg
ICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgQ29waWVkQWxs
b2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0tPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
IHsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJl
bnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChz
dHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAgICAgc3R1
YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVt
YWluaW5nKTsKLSAgICAgICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9m
KEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
c2l6ZV90IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXpl
b2YoSlNWYWx1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMp
OwotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZywgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0
dWJKaXQuYnJhbmNoU3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKSk7Ci0gICAgICAgICAgICBzdHVi
Sml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwotICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwotICAgICAg
ICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmY29w
aWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOwotICAgICAg
ICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2Yo
SlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hH
UFIxID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsIHNjcmF0Y2hHUFIy
ID0gYXZhaWxhYmxlCi0gICAgICAgICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZz
ZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZv
aWQqKSkgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSMywgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yo
dm9pZCopKSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRy
KHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLShvZmZz
ZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIx
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpKTsKLSAgICAgICAgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBzdHViSml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGlmIChpc0lubGluZU9mZnNldChz
bG90LmNhY2hlZE9mZnNldCgpKSkKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhh
c1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEp
OwotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
aWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0dWJK
aXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0
LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHko
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJK
aXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vz
czsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOwotICAgICAgICAgICAgCi0gICAg
aWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7Ci0gICAgICAgIGFsbG9jYXRvci5y
ZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOwotICAgICAgICBzdWNjZXNz
ID0gc3R1YkppdC5qdW1wKCk7Ci0KLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQp
OwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHVi
Sml0KTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0gZWxzZQotICAg
ICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzSW5T
bG93UGF0aDsKLSAgICAKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzbG93UGF0aC5s
aW5rKCZzdHViSml0KTsKLSAgICAgICAgCi0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2Vk
UmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOwotICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3Jh
dGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKGFsbG9jYXRvci5kZXNpcmVkU2Ny
YXRjaEJ1ZmZlclNpemUoKSk7Ci0gICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3Rl
cnNUb1NjcmF0Y2hCdWZmZXIoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVl
R1BSKTsKLSNlbHNlCi0gICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSLCB2
YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2Fs
bCgpOwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1
ZmZlcihzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN1Y2Nl
c3NJblNsb3dQYXRoID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfQotICAgIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIGlmIChh
bGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhm
YWlsdXJlLCBmYWlsdXJlTGFiZWwpOwotICAgIGVsc2UKLSAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhmYWlsdXJlQ2FzZXMsIGZhaWx1cmVMYWJlbCk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBvcGVyYXRpb25SZWFsbG9jYXRl
U3RvcmFnZUFuZEZpbmlzaFB1dCk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzc0lu
U2xvd1BhdGgsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICB9Ci0gICAgCi0gICAgc3R1YlJv
dXRpbmUgPQotICAgICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgICAgIEZJTkFM
SVpFX0RGR19DT0RFKAotICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAg
ICAgICgiREZHIFB1dEJ5SWQgJXN0cmFuc2l0aW9uIHN0dWIgKCVwIC0+ICVwKSBmb3IgJXMsIHJl
dHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPyAicmVhbGxv
Y2F0aW5nICIgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1
cmUsCi0gICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRh
dGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVj
dXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICAgICAqdm0sCi0gICAgICAgICAgICBleGVjLT5j
b2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAot
ICAgICAgICAgICAgc3RydWN0dXJlKTsKLX0KLQotc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlE
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBpZiAoIWJh
c2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTQ2VsbCogYmFz
ZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlQ2VsbC0+c3RydWN0dXJlKCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmUtPnByZXZpb3VzSUQoKTsKLSAgICAKLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVE
aWN0aW9uYXJ5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE9wdGltaXplIHNl
bGYgYWNjZXNzLgotICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKLSAgICAgICAg
aWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKLSAgICAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6aW5n
IHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCi0gICAg
ICAgICAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgotICAgICAgICAg
ICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgotICAgICAgICAgICAgICAgICYm
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkKLSAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFs
bG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKLSAgICAgICAgICAgIC8vIGluZGV4aW5nIHN0b3Jh
Z2UuCi0gICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRl
cigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKSA9PSBJbnZh
bGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1
Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBl
bWl0UHV0VHJhbnNpdGlvblN0dWIoCi0gICAgICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBp
ZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCi0gICAgICAgICAgICAgICAgc3RydWN0dXJl
LCBvbGRTdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAotICAgICAgICAgICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb1Nsb3dDYXNlKSwKLSAgICAgICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihj
b2RlQmxvY2spOwotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCi0gICAgICAgICAg
ICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAg
ICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAot
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKSk7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0
aW9uKHNsb3QsIHB1dEtpbmQpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkluZm8u
aW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
b2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERpcmVj
dCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVj
dHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlk
RnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdFB1
dEJ5SWRSZXBsYWNlKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJl
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBz
bG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAg
ICBib29sIGNhY2hlZCA9IHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5
TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwotICAgIGlmICghY2FjaGVkKQotICAgICAg
ICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwot
fQotCi1zdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0
UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQg
cHV0S2luZCkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxs
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZh
bHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVj
dHVyZSgpOwotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91
c0lEKCk7Ci0gICAgCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAg
ICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgIFBvbHltb3JwaGljUHV0
QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRp
bmU7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90
OjpOZXdQcm9wZXJ0eSkgewotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2Ms
IGlmIHdlIGRvbid0IGhhdmUKLSAgICAgICAgICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFr
ZSBpdCBoYXBwZW4uCi0gICAgICAgICAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMg
PCA2Ci0gICAgICAgICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAgICAgICAgICYmIG9s
ZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUg
Y2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcwotICAgICAg
ICAgICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KLSAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUt
PmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9ybWFsaXplUHJvdG90eXBlQ2hhaW4o
ZXhlYywgYmFzZUNlbGwpID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcg
dGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KLSAgICAgICAgICAg
IGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKAotICAgICAgICAgICAgICAgIHB1
dEtpbmQsIHN0dWJJbmZvLAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNl
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKLSAg
ICAgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1Yklu
Zm8sIHB1dEtpbmQsCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUsIHBy
b3RvdHlwZUNoYWluLAotICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1
cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKLSAgICAgICAgICAgICAgICBzdHViUm91dGluZSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKLSAgICAgICAgICAgICAg
ICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICAqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVj
dHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKLSAgICAgICAgICAgICAgICAgICAgc3R1
YlJvdXRpbmUpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBj
b21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBhY2Nv
cmRpbmdseS4KLSAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9t
KAotICAgICAgICAgICAgICAgIHB1dEtpbmQsIHN0dWJJbmZvLAotICAgICAgICAgICAgICAgIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGVtaXRQ
dXRSZXBsYWNlU3R1YigKLSAgICAgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5
TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCi0gICAgICAgICAgICAgICAgc3RydWN0dXJl
LCBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksIHN0dWJS
b3V0aW5lKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKAotICAg
ICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAg
ICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlLCBzdHViUm91dGluZSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobGlz
dC0+aXNGdWxsKCkpCi0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90
LCBwdXRLaW5kKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIGJvb2wgY2FjaGVkID0gdHJ5QnVpbGRQdXRCeUlk
TGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtp
bmQpOwotICAgIGlmICghY2FjaGVkKQotICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRC
eUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotfQotCi1zdGF0aWMgYm9vbCB0cnlSZXBhdGNo
SW4oCi0gICAgRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBib29sIHdhc0ZvdW5kLAotICAgIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmICghYmFzZS0+c3RydWN0dXJlKCkt
PnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIGlmICh3YXNGb3VuZCkgewotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgpOwotICAgIAot
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldElnbm9yZWQ7Ci0gICAgc2l6ZV90IGNvdW50ID0gbm9y
bWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlLCB3YXNGb3VuZCA/
IHNsb3Quc2xvdEJhc2UoKSA6IEpTVmFsdWUoKSwgaWRlbnQsIG9mZnNldElnbm9yZWQpOwotICAg
IGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdDsKLSAgICBpbnQgbGlzdEluZGV4OwotICAgIAotICAgIENvZGVMb2NhdGlv
bkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmhvdFBhdGhCZWdpbjsKLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsOwotICAgIAotICAgIGlmIChzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc191bnNldCkgewotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qg
PSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgICAgIHN0dWJJbmZv
LmluaXRJbkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAwKTsKLSAgICAgICAgc2xvd0Nh
c2VMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAg
ICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgICAg
ICBsaXN0SW5kZXggPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2luX2xpc3QpOwotICAgICAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmluTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAg
ICBsaXN0SW5kZXggPSBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgc2xvd0Nh
c2VMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlz
dFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlQ2hhaW4q
IGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIAotICAgIHsKLSAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsK
LSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3Rl
clNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAg
ICAgICAKLSAgICAgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0pOwotICAgICAgICAKLSAgICAg
ICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaDsKLSAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0g
SW52YWxpZEdQUlJlZykgewotICAgICAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklU
OjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzdHVi
Sml0LnB1c2goc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9
IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2gg
PSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWls
dXJlQ2FzZXM7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIo
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsK
LSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsK
LSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAg
ICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90
b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3RvdHlwZSwgcHJvdG90eXBlLT5zdHJ1Y3R1cmUo
KSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LAotICAgICAgICAgICAgICAg
IGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBjdXJyU3RydWN0dXJlID0g
aXQtPmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4od2FzRm91bmQpKSksIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICBz
dHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih3YXNGb3VuZCksIHJlc3Vs
dEdQUik7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1
Y2Nlc3MsIGZhaWw7Ci0gICAgICAgIAotICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1Ykpp
dCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1
cmVDYXNlcyk7Ci0gICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
JnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKLQotICAgICAgICBsaW5rUmVzdG9yZVNjcmF0
Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWls
dXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgICAgIAotICAgICAg
ICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RGR19TVFVCKAotICAgICAgICAgICAg
cGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBJbiAoZm91bmQgPSAlcykgc3R1YiBmb3Ig
JXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgd2FzRm91bmQgPyAieWVzIiA6
ICJubyIsIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwKLSAgICAgICAgICAg
ICAgICBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIH0KLSAgICAKLSAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsK
LSAgICBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZSsrOwotICAgIAotICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0
dWJJbmZvLmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoMCksIENvZGVMb2NhdGlvbkxhYmVsKHN0
dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgCi0gICAgcmV0dXJuIGxpc3RJbmRleCA8
IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKTsKLX0KLQotdm9pZCByZXBhdGNoSW4o
Ci0gICAgRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBib29sIHdhc0ZvdW5kLAotICAgIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmICh0cnlSZXBhdGNoSW4oZXhlYywgYmFz
ZSwgaWRlbnQsIHdhc0ZvdW5kLCBzbG90LCBzdHViSW5mbykpCi0gICAgICAgIHJldHVybjsKLSAg
ICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBvcGVyYXRpb25Jbik7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFJlcGF0Y2hC
dWZmZXImIHJlcGF0Y2hCdWZmZXIsIFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8s
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAgICBpZiAoa2luZCA9PSBDb2RlRm9y
Q2FsbCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVChraW5kID09IENvZGVG
b3JDb25zdHJ1Y3QpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVy
YXRvcikuY29kZSgpKTsKLX0KLQotdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKU0Z1bmN0
aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7Ci0gICAg
Ci0gICAgLy8gSWYgeW91J3JlIGJlaW5nIGNhbGwtbGlua2VkIGZyb20gYSBERkcgY2FsbGVyIHRo
ZW4geW91IG9idmlvdXNseSBkaWRuJ3QgZ2V0IGlubGluZWQuCi0gICAgaWYgKGNhbGxlZUNvZGVC
bG9jaykKLSAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9
IGZhbHNlOwotICAgIAotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2Fs
bGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52
bSgpOwotICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxv
Y2spOwotICAgIAotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwotICAgIGNh
bGxMaW5rSW5mby5jYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPnZtKCksIGNhbGxMaW5r
SW5mby5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNh
bGxlZSk7Ci0gICAgY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlLnNldChleGVjLT5jYWxsZXJG
cmFtZSgpLT52bSgpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIsIGNv
ZGVQdHIpOwotICAgIAotICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0gICAgICAgIGNhbGxlZUNv
ZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLT5jYWxsZXJGcmFtZSgpLCAmY2FsbExpbmtJ
bmZvKTsKLSAgICAKLSAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0
Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0
KTsKLSAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2Rl
Rm9yQ29uc3RydWN0KTsKLX0KLQotdm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17
Ci0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5j
b2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7Ci0gICAgCi0g
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7Ci0gICAgCi0g
ICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywga2luZCk7Ci19
Ci0KLXZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
b2RlUHRyKQotewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIpOwotICAgIAotICAgIENv
ZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2Nr
KCk7Ci0gICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIEdQUlJl
ZyBjYWxsZWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KGNhbGxMaW5rSW5mby5jYWxsZWVHUFIp
OwotICAgIAotICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBjYWxsZXJDb2RlQmxvY2spOwot
ICAgIAotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgIHN0dWJKaXQuYnJhbmNo
VGVzdDY0KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBjYWxsZWVHUFIsIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotI2Vsc2UKLSAgICAvLyBXZSB3b3VsZCBoYXZlIGFs
cmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgotI2VuZGlmCi0gICAgCi0g
ICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICBzdHViSml0LmJyYW5jaFB0cigKLSAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgCi0gICAgc2xv
d1BhdGguYXBwZW5kKAotICAgICAgICBzdHViSml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Y2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCi0gICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpKTsKLSAgICAKLSAgICBz
dHViSml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIs
IEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKLSAgICAgICAgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdHViSml0LnN0b3JlNjQo
Ci0gICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7Ci0jZWxzZQotICAg
IHN0dWJKaXQuc3RvcmVQdHIoCi0gICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hh
aW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSkpOwotICAgIHN0dWJKaXQuc3RvcmUzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSNlbmRpZgotICAgIAotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7Ci0gICAgSklUQ29tcGls
ZXI6Okp1bXAgZG9uZSA9IHN0dWJKaXQuanVtcCgpOwotICAgIAotICAgIHNsb3dQYXRoLmxpbmso
JnN0dWJKaXQpOwotICAgIHN0dWJKaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsK
LSNlbmRpZgotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2Fs
bExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMik7Ci0gICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJl
dHVybihHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93ID0g
c3R1YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZz
dHViSml0LCBjYWxsZXJDb2RlQmxvY2spOwotICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwo
dm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAg
Ci0gICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRvcHRS
ZWYobmV3IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCi0gICAgICAgIEZJTkFMSVpFX0RGR19DT0RF
KAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBjbG9zdXJlIGNh
bGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0ICVwICglcykiLAotICAgICAg
ICAgICAgICAgIHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygp
LAotICAgICAgICAgICAgICAgIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgdG9DU3RyaW5n
KHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jaykpLmRhdGEoKSkpLAotICAgICAgICAqdm0sIGNh
bGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwg
Y2FsbExpbmtJbmZvLmNvZGVPcmlnaW4pKTsKLSAgICAKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKLSAgICAKLSAgICByZXBhdGNoQnVmZmVyLnJlcGxh
Y2VXaXRoSnVtcCgKLSAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQ
YXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbiksCi0gICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgbGlua1Nsb3dG
b3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwpOwotICAgIAot
ICAgIGNhbGxMaW5rSW5mby5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwotICAgIAotICAg
IEFTU0VSVCghY2FsbGVlQ29kZUJsb2NrIHx8IGNhbGxlZUNvZGVCbG9jay0+aXNJbmNvbWluZ0Nh
bGxBbHJlYWR5TGlua2VkKCZjYWxsTGlua0luZm8pKTsKLX0KLQotdm9pZCByZXNldEdldEJ5SUQo
UmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQotewotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQ
dHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
UHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRv
Q2FsbCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJy
YW5jaFB0cldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJl
cGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICBSZXBh
dGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKHN0
cnVjdHVyZUxhYmVsKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHVi
SW5mby5wYXRjaC5kZmcuYmFzZUdQUiksCi0gICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQ
b2ludGVyKSk7Ci0gICAgfQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHJ1Y3R1cmVMYWJl
bCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOwotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2Fs
bFRvTG9hZE9yU3RvcmUpLCAwKTsKLSNlbHNlCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBh
Y3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3Rv
cmUpLCAwKTsKLSNlbmRpZgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
U3RydWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotfQotCi12b2lkIHJlc2V0
UHV0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCi17Ci0gICAgVl9ERkdPcGVyYXRpb25fRUpDSSB1bm9wdGltaXplZEZ1bmN0aW9u
ID0gYml0d2lzZV9jYXN0PFZfREZHT3BlcmF0aW9uX0VKQ0k+KE1hY3JvQXNzZW1ibGVyOjpyZWFk
Q2FsbFRhcmdldChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOwotICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkRnVuY3Rpb247Ci0gICAgaWYg
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpCi0gICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAg
IGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWls
ZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgewotICAg
ICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dE5vblN0cmljdEJ1aWxkTGlzdCk7Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgIH0KLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0aW9u
KTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRvQ2FsbCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1i
bGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7Ci0gICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQ
dHJXaXRoUGF0Y2goCi0gICAgICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxl
QnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUiksCi0g
ICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7Ci0gICAgfQotICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHJ1Y3R1cmVMYWJlbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
dW51c2VkUG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmVwYXRjaEJ1ZmZlci5y
ZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7Ci0jZWxzZQotICAg
IHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9y
ZSksIDApOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Q
YXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNlbmRpZgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwot
fQotCi12b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZv
LmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoMCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7
Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWZuZGVmIERGR1JlcGF0Y2hfaAotI2RlZmluZSBERkdSZXBhdGNoX2gKLQotI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJERkdKSVRD
b21waWxlci5oIgotI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKLQotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewotCi12b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotdm9pZCBidWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwot
dm9pZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lk
IHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwotdm9p
ZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwot
dm9pZCByZXBhdGNoSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgY29uc3QgSWRlbnRpZmllciYsIGJv
b2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12
b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5j
dGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQpOwotdm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kKTsKLXZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxM
aW5rSW5mbyYsIENvZGVCbG9jayosIFN0cnVjdHVyZSosIEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKTsKLXZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1
Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVj
dHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0
dWJJbmZvJik7Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2Vsc2UgLy8gRU5BQkxF
KERGR19KSVQpCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKLXN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQot
bmFtZXNwYWNlIERGRyB7Ci0KLWlubGluZSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgcmVz
ZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotaW5saW5lIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9p
ZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci1pbmxpbmUgTk9fUkVUVVJOIHZvaWQgcmVzZXRJ
bihSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCi0jZW5kaWYgLy8gREZHUmVwYXRjaF9oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmgJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjAyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBE
RkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAotI2RlZmluZSBERkdTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3JfaAotCi0jaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0KLSNpZiBFTkFCTEUoREZH
X0pJVCkKLQotI2luY2x1ZGUgIkRGR1JlZ2lzdGVyU2V0LmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi0vLyBUaGlzIGNs
YXNzIHByb3ZpZGVzIGEgbG93LWxldmVsIHJlZ2lzdGVyIGFsbG9jYXRvciBmb3IgdXNlIGluIHN0
dWJzLgotCi1jbGFzcyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgewotcHVibGljOgotICAgIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcihjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykK
LSAgICAgICAgOiBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKLSAgICAgICAgLCBtX2Rp
ZFJldXNlUmVnaXN0ZXJzKGZhbHNlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICB2b2lkIGxvY2soVCByZWcpIHsgbV9sb2NrZWRSZWdpc3RlcnMuc2V0
KHJlZyk7IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICB0eXBl
bmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIGFsbG9jYXRlU2NyYXRjaCgpCi0gICAgewotICAg
ICAgICAvLyBGaXJzdCB0cnkgdG8gYWxsb2NhdGUgYSByZWdpc3RlciB0aGF0IGlzIHRvdGFsbHkg
ZnJlZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbmtJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgICAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0
ZXJUeXBlIHJlZyA9IEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAgaWYgKCFt
X2xvY2tlZFJlZ2lzdGVycy5nZXQocmVnKQotICAgICAgICAgICAgICAgICYmICFtX3VzZWRSZWdp
c3RlcnMuZ2V0KHJlZykKLSAgICAgICAgICAgICAgICAmJiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdl
dChyZWcpKSB7Ci0gICAgICAgICAgICAgICAgbV9zY3JhdGNoUmVnaXN0ZXJzLnNldChyZWcpOwot
ICAgICAgICAgICAgICAgIHJldHVybiByZWc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIC8vIFNpbmNlIHRoYXQgZmFpbGVkLCB0cnkgdG8gYWxsb2NhdGUgYSBy
ZWdpc3RlciB0aGF0IGlzIG5vdCB5ZXQKLSAgICAgICAgLy8gbG9ja2VkIG9yIHVzZWQgZm9yIHNj
cmF0Y2guCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lz
dGVyVHlwZSByZWcgPSBCYW5rSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgICAgIGlmICgh
bV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlZykgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXQocmVn
KSkgewotICAgICAgICAgICAgICAgIG1fc2NyYXRjaFJlZ2lzdGVycy5zZXQocmVnKTsKLSAgICAg
ICAgICAgICAgICBtX2RpZFJldXNlUmVnaXN0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVnOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAv
LyBXZSBmYWlsZWQuCi0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIC8vIE1ha2Ugc29tZSBzaWxs
eSBjb21waWxlcnMgaGFwcHkuCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBC
YW5rSW5mbzo6UmVnaXN0ZXJUeXBlPigtMSk7Ci0gICAgfQotICAgIAotICAgIEdQUlJlZyBhbGxv
Y2F0ZVNjcmF0Y2hHUFIoKSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8R1BSSW5mbz4oKTsgfQot
ICAgIEZQUlJlZyBhbGxvY2F0ZVNjcmF0Y2hGUFIoKSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8
RlBSSW5mbz4oKTsgfQotICAgIAotICAgIGJvb2wgZGlkUmV1c2VSZWdpc3RlcnMoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkUmV1c2VSZWdpc3RlcnM7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoTWFjcm9Bc3NlbWJsZXIm
IGppdCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBG
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobV9zY3Jh
dGNoUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5
SW5kZXgoaSkpIHsKLSAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0g
ICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0
R1BSQnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKLSAgICAg
ICAgICAgICAgICBqaXQucHVzaChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICB2b2lkIHJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFj
cm9Bc3NlbWJsZXImIGppdCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9kaWRSZXVzZVJlZ2lzdGVy
cykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAo
bV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdl
dEdQUkJ5SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAgaml0LnBvcChHUFJJbmZvOjp0b1JlZ2lz
dGVyKGkpKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lz
dGVycy5nZXRGUFJCeUluZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkp
KSB7Ci0gICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAgICAgICAg
ICBqaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoOCksIE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgdW5zaWduZWQgZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgKiBzaXplb2Yo
SlNWYWx1ZSk7IH0KLSAgICAKLSAgICB2b2lkIHByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRj
aEJ1ZmZlcihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVy
LCBHUFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWcpCi0gICAgewotICAgICAgICB1bnNp
Z25lZCBjb3VudCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdl
dEdQUkJ5SW5kZXgoaSkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0PEVuY29kZWRKU1Zh
bHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSk7Ci0jZWxzZQot
ICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIHN0YXRp
Y19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChj
b3VudCsrKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzY3JhdGNo
R1BSID09IEludmFsaWRHUFJSZWcgJiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgo
aSkgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQotICAgICAgICAgICAg
ICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICB9Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0g
ICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKLSAgICAg
ICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNf
Y2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291
bnQrKykpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBS
SW5mbzo6dG9SZWdpc3RlcihpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgKiBzaXplb2YoSlNWYWx1ZSkgPT0gZGVz
aXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkpOwotICAgICAgICAKLSAgICAgICAgaml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRy
KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4oY291bnQgKiBzaXplb2YoSlNWYWx1ZSkp
KSwgc2NyYXRjaEdQUik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcmVzdG9yZVVzZWRSZWdpc3Rl
cnNGcm9tU2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBz
Y3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWcpCi0gICAgewot
ICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICAv
LyBGaW5kIGEgc2NyYXRjaCByZWdpc3Rlci4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgfHwgbV9zY3JhdGNoUmVnaXN0ZXJz
LmdldEdQUkJ5SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIAotICAgICAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3Rp
dmVMZW5ndGhQdHIoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBqaXQuc3RvcmVQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hHUFIpOwotCi0gICAgICAgIC8vIFJl
c3RvcmUgZG91YmxlIHJlZ2lzdGVycyBmaXJzdC4KLSAgICAgICAgdW5zaWduZWQgY291bnQgPSBt
X3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRHUFJzKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAo
bV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKLSAgICAgICAgICAgICAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpLCBzY3JhdGNo
R1BSKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShzY3JhdGNoR1BSLCBGUFJJbmZv
Ojp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgY291bnQgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5n
ZXRHUFJCeUluZGV4KGkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBq
aXQubG9hZDY0KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0
YUJ1ZmZlcigpKSArIChjb3VudCsrKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Ci0jZWxzZQot
ICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihz
Y3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspLCBHUFJJbmZvOjp0b1JlZ2lz
dGVyKGkpKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAot
cHJpdmF0ZToKLSAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7Ci0gICAgUmVnaXN0ZXJT
ZXQgbV9sb2NrZWRSZWdpc3RlcnM7Ci0gICAgUmVnaXN0ZXJTZXQgbV9zY3JhdGNoUmVnaXN0ZXJz
OwotICAgIGJvb2wgbV9kaWRSZXVzZVJlZ2lzdGVyczsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5kaWYgLy8gREZHU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNTY0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5
cGUuaCIKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1
ZGUgIkRGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAi
REZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5j
bHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCkBAIC0y
NjEsNyArMjYyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlTwog
ICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBwYXlsb2FkU3RvcmVXaXRoUGF0Y2ggPSBtX2pp
dC5zdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZVBheWxvYWRHUFIsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKIAogICAgIEpJVENvbXBpbGVyOjpMYWJlbCBkb25l
TGFiZWwgPSBtX2ppdC5sYWJlbCgpOwotICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVk
Q2FsbDsKKyAgICBWX0pJVE9wZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7CiAgICAgaWYgKG1f
aml0LnN0cmljdE1vZGVGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbikpIHsKICAgICAgICAg
aWYgKHB1dEtpbmQgPT0gRGlyZWN0KQogICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKQEAgLTQ0MCw3ICs0NDEsNyBAQCBib29s
IFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5v
ZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSogbm9kZSwgTm9k
ZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwg
U19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewogICAgIEJhc2ljQmxvY2sqIHRh
a2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOwogICAgIEJhc2ljQmxvY2sqIG5vdFRha2Vu
ID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwpAQCAtNTEyLDEzICs1MTMsMTMgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBKdW1wVHlwZT4KIGNsYXNzIENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IK
LSAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfREZHT3BlcmF0
aW9uX0VKSiwgR1BSUmVnPiB7CisgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1
bXBUeXBlLCBTX0pJVE9wZXJhdGlvbl9FSkosIEdQUlJlZz4gewogcHVibGljOgogICAgIENvbXBh
cmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIEp1bXBUeXBlIGZyb20s
IFNwZWN1bGF0aXZlSklUKiBqaXQsCi0gICAgICAgIFNfREZHT3BlcmF0aW9uX0VKSiBmdW5jdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwKKyAg
ICAgICAgU19KSVRPcGVyYXRpb25fRUpKIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLAogICAgICAgICBHUFJSZWcgYXJnMlRhZywgR1BS
UmVnIGFyZzJQYXlsb2FkKQotICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlw
ZSwgU19ERkdPcGVyYXRpb25fRUpKLCBHUFJSZWc+KAorICAgICAgICA6IENhbGxTbG93UGF0aEdl
bmVyYXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25fRUpKLCBHUFJSZWc+KAogICAgICAgICAg
ICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgTmVlZFRvU3BpbGwsIHJlc3VsdCkKICAgICAgICAgLCBt
X2FyZzFUYWcoYXJnMVRhZykKICAgICAgICAgLCBtX2FyZzFQYXlsb2FkKGFyZzFQYXlsb2FkKQpA
QCAtNTQ2LDcgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fYXJnMlBheWxvYWQ7CiB9
OwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFy
ZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBT
X0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCit2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxl
cjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVu
Y3Rpb24pCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC0zNjA2
LDcgKzM2MDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICBUcnVzdGVkSW1tMzIoRmluYWxPYmplY3RUeXBlKSkpOwogICAgICAgICBtX2pp
dC5tb3ZlKHRoaXNWYWx1ZVBheWxvYWRHUFIsIHRlbXBHUFIpOwogICAgICAgICBtX2ppdC5tb3Zl
KHRoaXNWYWx1ZVRhZ0dQUiwgdGVtcFRhZ0dQUik7Ci0gICAgICAgIEpfREZHT3BlcmF0aW9uX0VK
IGZ1bmN0aW9uOworICAgICAgICBKX0pJVE9wZXJhdGlvbl9FSiBmdW5jdGlvbjsKICAgICAgICAg
aWYgKG1faml0LmdyYXBoKCkuZXhlY3V0YWJsZUZvcihub2RlLT5jb2RlT3JpZ2luKS0+aXNTdHJp
Y3RNb2RlKCkpCiAgICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvblRvVGhpc1N0cmljdDsK
ICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0NhbGxBcnJheUFsbG9j
YXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2lu
Y2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKQEAgLTI1Myw3ICsyNTQsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAKICAgICBKSVRDb21waWxl
cjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKICAgICAKLSAgICBWX0RGR09wZXJh
dGlvbl9FSkNJIG9wdGltaXplZENhbGw7CisgICAgVl9KSVRPcGVyYXRpb25fRUpDSSBvcHRpbWl6
ZWRDYWxsOwogICAgIGlmIChtX2ppdC5zdHJpY3RNb2RlRm9yKG1fY3VycmVudE5vZGUtPmNvZGVP
cmlnaW4pKSB7CiAgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKICAgICAgICAgICAgIG9w
dGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CkBAIC00
MjgsNyArNDI5LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVy
RnVuY3Rpb24pCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJh
bmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsK
ICAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKICAgICBC
YXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKQEAgLTQ5
OCwxMiArNDk5LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgK
IAogdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGU+CiBjbGFzcyBDb21wYXJlQW5kQm94Qm9vbGVh
blNsb3dQYXRoR2VuZXJhdG9yCi0gICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1
bXBUeXBlLCBTX0RGR09wZXJhdGlvbl9FSkosIEdQUlJlZz4geworICAgIDogcHVibGljIENhbGxT
bG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25fRUpKLCBHUFJSZWc+IHsK
IHB1YmxpYzoKICAgICBDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yKAogICAg
ICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LAotICAgICAgICBTX0RGR09w
ZXJhdGlvbl9FSkogZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMikKLSAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfREZHT3Bl
cmF0aW9uX0VKSiwgR1BSUmVnPigKKyAgICAgICAgU19KSVRPcGVyYXRpb25fRUpKIGZ1bmN0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgICAgIDogQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0pJVE9wZXJhdGlvbl9FSkosIEdQUlJlZz4o
CiAgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBOZWVkVG9TcGlsbCwgcmVzdWx0KQog
ICAgICAgICAsIG1fYXJnMShhcmcxKQogICAgICAgICAsIG1fYXJnMihhcmcyKQpAQCAtNTI1LDcg
KzUyNiw3IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fYXJnMjsKIH07CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUqIG5vZGUsIE1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VK
SiBoZWxwZXJGdW5jdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9u
UGVlcGhvbGVDb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKICAgICBK
U1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmcyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKQEAgLTM5MDIsNyArMzkwMyw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEZpbmFsT2JqZWN0VHlwZSkpKTsKICAgICAg
ICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHRlbXBHUFIpOwotICAgICAgICBKX0RGR09wZXJh
dGlvbl9FSiBmdW5jdGlvbjsKKyAgICAgICAgSl9KSVRPcGVyYXRpb25fRUogZnVuY3Rpb247CiAg
ICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLmV4ZWN1dGFibGVGb3Iobm9kZS0+Y29kZU9yaWdpbikt
PmlzU3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25Ub1RoaXNT
dHJpY3Q7CiAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODk1LDIyICs4OTUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbihOb2RlKiBu
CiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoTWFjcm9Bc3Nl
bWJsZXImIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNo
MiwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQotewotICAgIFVOVVNFRF9QQVJBTShqaXQp
OwotICAgIFVOVVNFRF9QQVJBTShvd25lcik7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsK
LSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsK
LSAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDEpOwotICAgIEFTU0VSVChvd25lciAhPSBzY3Jh
dGNoMik7Ci0gICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNjcmF0Y2gyKTsKLQotI2lmIEVOQUJMRShX
UklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBKSVRDb21waWxlcjo6ZW1pdENvdW50KGppdCwg
V3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwotI2VuZGlmCi19
Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQ
UlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5k
LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBVTlVTRURfUEFSQU0o
b3duZXJHUFIpOwpAQCAtMTAxNyw3ICsxMDAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUluKE5vZGUqIG5vZAogI2VuZGlmCiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNw
ZWN1bGF0aXZlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENv
bmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCitib29sIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSogbm9kZSwgTWFjcm9Bc3Nl
bWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBl
ckZ1bmN0aW9uKQogewogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBl
ZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkg
ewpAQCAtMTQ2NSw3ICsxNDQ5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlSW50MwogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBhcmUgaXMgZnVzZWQgd2l0
aCBhIHN1YnNlcXVlbnQgYnJhbmNoLgotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlQnJhbmNoKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRp
b24sIFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCitib29sIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGRv
dWJsZUNvbmRpdGlvbiwgU19KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbikKIHsKICAgICAvLyBG
dXNlZCBjb21wYXJlICYgYnJhbmNoLgogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9
IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CkBAIC0zODQyLDcgKzM4MjYsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2VxdWVudCBicmFuY2guCi1ib29sIFNwZWN1
bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3Vi
bGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCitib29sIFNwZWN1bGF0
aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVD
b25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCiB7CiAgICAgaWYgKGNvbXBp
bGVQZWVwSG9sZUJyYW5jaChub2RlLCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbiwgb3BlcmF0
aW9uKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDEwICszNiwxMSBAQAogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSAi
REZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCIKLSNp
bmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHU2lsZW50UmVnaXN0ZXJTYXZl
UGxhbi5oIgogI2luY2x1ZGUgIkRGR1ZhbHVlU291cmNlLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlB1dEtpbmQu
aCIKICNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKQEAgLTMxMSw4ICszMTIsNiBAQCBwdWJsaWM6CiAgICAgICAgIHNwZWN1bGF0aW9u
V2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jdXJyZW50Tm9kZS0+Y29kZU9y
aWdpbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKE1hY3JvQXNzZW1i
bGVyJiwgR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNo
R1BSMiwgV3JpdGVCYXJyaWVyVXNlS2luZCk7Ci0KICAgICB2b2lkIHdyaXRlQmFycmllcihHUFJS
ZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVy
VXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0
Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRj
aEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVn
KTsKICAgICB2b2lkIHdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIs
IEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9
IEludmFsaWRHUFJSZWcpOwpAQCAtNzM5LDkgKzczOCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG5v
blNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKEVkZ2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNo
Tm9kZSwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CiAgICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBh
cmVOdWxsKE5vZGUqLCBFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwogICAgIAot
ICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiwgTm9kZSogYnJhbmNo
Tm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfREZHT3BlcmF0aW9u
X0VKSiBoZWxwZXJGdW5jdGlvbik7Ci0gICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
Q29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfREZH
T3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7Ci0gICAgYm9vbCBub25TcGVjdWxhdGl2ZUNv
bXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09w
ZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOworICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVw
aG9sZUJyYW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7CisgICAg
dm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlv
bik7CisgICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24p
OwogICAgIAogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUqLCBO
b2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICB2b2lkIG5vblNwZWN1
bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcShOb2RlKiwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CkBA
IC05MzEsMTY5ICs5MzAsMTY5IEBAIHB1YmxpYzoKICAgICAvLyBtYWNoaW5lIHJlZ2lzdGVycywg
YW5kIGRlbGVnYXRlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gc3BlY2lmaWMKICAgICAvLyBkZWNp
c2lvbiBhcyB0byBob3cgdG8gZmlsbCB0aGUgcmVnc2l0ZXJzIHRvIHNldHVwQXJndW1lbnRzKiBt
ZXRob2RzLgogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJh
dGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZH
T3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGNlbGwpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBjZWxsKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGNlbGwpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU8gb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0KQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRU8gb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgb2JqZWN0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKG9iamVjdCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1Mgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBzaXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VPUyBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihzaXpl
KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihQX0pJVE9wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
b2JqZWN0LCBpbnQzMl90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3Bl
cmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIGludDMy
X3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0
aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIGludDMyX3Qg
c2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShv
YmplY3QsIFRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKSkpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9E
RkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9sZCwgc2l6
ZV90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJh
dGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2xkLCBzaXplX3Qgc2l6
ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvbGQs
IFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVMgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBzaXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90
IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU0pzcyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIHNpemVfdCBpbmRleCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU0pzcyBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIHNpemVfdCBpbmRleCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihpbmRleCksIGFy
ZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQ
X0pJVE9wZXJhdGlvbl9FU3Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTdFog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFy
ZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTdFogb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGFyZzIp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3Ra
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBh
cmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbTMyKGFyZzIpKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3Bl
cmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlv
bl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0UFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3RQUyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2ludGVy
LCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIocG9pbnRlciks
IFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0U1Mgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGluZGV4LCBzaXpl
X3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0
aW9uX0VTdFNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHNpemVfdCBpbmRleCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1t
UHRyKGluZGV4KSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKENfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9u
X0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBKU0NlbGwqIGNlbGwpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTQ2Vs
bCogY2VsbCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyKGNlbGwpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU0NlbGwqIGNlbGwpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoY2VsbCkp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oQ19ERkdPcGVyYXRpb25fRUljZiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUljZiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lKSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihDX0RGR09wZXJhdGlvbl9FU3Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklU
T3BlcmF0aW9uX0VTdCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSnNzU3Qgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSnNzU3Qg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VKc3NKc3Mg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSnNzSnNzIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oQ19ERkdPcGVyYXRpb25fRUpzc0pzc0pzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSnNzSnNzSnNzIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBh
cmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oU19KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKc3NfREZHT3BlcmF0aW9uX0VaIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKc3NfSklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVn
IGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlv
bl9FQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNJY2Ygb3BlcmF0aW9uLCBHUFJSZWcg
YXJnMSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0ljZiBvcGVyYXRpb24sIEdQUlJl
ZyBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGlu
bGluZUNhbGxGcmFtZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfREZHT3BlcmF0aW9uX0VDQ0ljZiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0NJY2Ygb3BlcmF0aW9uLCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIsIFRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ1ogb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMSwgaW50IGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0pJVE9wZXJhdGlvbl9FQ1ogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgaW50IGFyZzIpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1
c3RlZEltbTMyKGFyZzIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9u
X0VDQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAK
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX1cgb3Bl
cmF0aW9uLCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fVyBvcGVyYXRpb24sIFdhdGNocG9pbnRT
ZXQqIHdhdGNocG9pbnRTZXQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhU
cnVzdGVkSW1tUHRyKHdhdGNocG9pbnRTZXQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwo
b3BlcmF0aW9uKTsKQEAgLTExMjUsMjQ0ICsxMTI0LDI0NCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJn
NSk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09w
ZXJhdGlvbl9aWiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9u
X1paIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSwgYXJnMik7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlvbl9ERCBvcGVy
YXRpb24sIEZQUlJlZyByZXN1bHQsIEZQUlJlZyBhcmcxLCBGUFJSZWcgYXJnMikKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX0REIG9wZXJhdGlvbiwg
RlBSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEZQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihJX0RGR09wZXJhdGlvbl9FSnNzIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihJX0pJVE9wZXJhdGlvbl9FSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRp
b25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0Ugb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgdm9pZCogcG9pbnRl
cikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyKHBvaW50ZXIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFpfSklUT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJn
MSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzKGFyZzEpOwogICAgICAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQuYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAg
ICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVz
dWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cmluZ0ltcGwqIHVp
ZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0RGR09wZXJhdGlvbl9FQVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FQVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSnNzWiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKc3NaIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNp
emUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
UFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCB2b2lkKiBwb2ludGVyLCBzaXplX3Qgc2l6ZSkK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVk
SW1tUHRyKHBvaW50ZXIpLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VTUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludCBzdGFydENvbnN0YW50LCBpbnQgbnVt
Q29uc3RhbnRzKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50IHN0YXJ0Q29uc3RhbnQsIGlu
dCBudW1Db25zdGFudHMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoVHJ1c3RlZEltbTMyKHN0YXJ0Q29uc3RhbnQpLCBUcnVzdGVkSW1tMzIobnVtQ29u
c3RhbnRzKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FUFAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU0NlbGwqIGNlbGwpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGNlbGwpKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBj
b25zdCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgY29uc3QgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgU3RyaW5n
SW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIFN0cmluZ0lt
cGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRURBIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRURBIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VaIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50MzJfdCBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBpbnQzMl90IGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VaWiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludDMyX3QgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWlogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQzMl90IGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcx
KSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBpbnQzMl90IGFyZzEsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBHUFJS
ZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VaSWNmWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludDMyX3QgYXJnMSwgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSwgVHJ1
c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAg
IH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25f
RUpTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHZhbHVlLCBzaXplX3QgaW5kZXgp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FSlMg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIHNpemVfdCBpbmRleCkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSh2YWx1ZSwgVHJ1
c3RlZEltbVB0cihpbmRleCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3RKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVN0SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFy
ZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVy
YXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZH
T3BlcmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0ogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oU19ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VK
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
ICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIg
aW1tKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIgaW1tKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGltbS5tX3ZhbHVlKSkpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1t
LCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihpbW0ubV92YWx1ZSkpKSwgYXJnMik7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
Q0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
Mik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMikKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIuZ3ByKCkpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihWX0RGR09wZXJhdGlvbl9FT1pEIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyLCBGUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZf
SklUT3BlcmF0aW9uX0VPWkQgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEZQ
UlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpD
SSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgU3RyaW5nSW1wbCogdWlkKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpDSSBv
cGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgU3RyaW5nSW1wbCogdWlkKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIs
IFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpKSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0pJVE9wZXJhdGlvbl9FSkpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
LCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FUFpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0pKIG9wZXJhdGlvbiwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDSkogb3BlcmF0aW9uLCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fRUogb3BlcmF0
aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTEzODYsNyArMTM4NSw3IEBAIHB1Ymxp
YzoKICNkZWZpbmUgU0g0XzMyQklUX0RVTU1ZX0FSRwogI2VuZGlmCiAKLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBGUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFpfSklUT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkK
ICAgICB7CiAgICAgICAgIHByZXBhcmVGb3JFeHRlcm5hbENhbGwoKTsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHMoYXJnMSk7CkBAIC0xMzk0LDIzMyArMTM5MywyMzMgQEAgcHVibGljOgog
ICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
cmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNF
eGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIHZvaWQqIHBvaW50
ZXIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
UCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCB2b2lk
KiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3Vs
dFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWQsIEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRy
dXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwg
R1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXls
b2FkLCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VJ
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFN0cmlu
Z0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxv
YWQsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQs
IHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0pJVE9wZXJhdGlvbl9FQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJl
ZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1
bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZH
T3BlcmF0aW9uX0VBWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpzc1ogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRUpzc1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQs
IHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBz
aXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywg
R1BSUmVnIHJlc3VsdFBheWxvYWQsIGludCBzdGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3RhbnRz
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVNT
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludCBz
dGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3RhbnRzKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihzdGFydENvbnN0YW50KSwgVHJ1
c3RlZEltbTMyKG51bUNvbnN0YW50cykpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRh
Zyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRUpQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxv
YWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIHZvaWQqIHBvaW50ZXIpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSlAgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFy
ZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBh
cmcxUGF5bG9hZCwgYXJnMVRhZywgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSlAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFn
LCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9h
ZCwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FSlAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0
UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8z
MkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzIpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBKU0NlbGwqIGNlbGwpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihjZWxsKSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIGNvbnN0IFN0
cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIo
dWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkkgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcs
IEdQUlJlZyBhcmcxUGF5bG9hZCwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJn
MVBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJn
MVRhZywgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRU
YWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3Bl
cmF0aW9uX0VKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXls
b2FkLCBpbnQzMl90IGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgU3RyaW5nSW1wbCogdWlk
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpJ
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludDMy
X3QgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1N
WV9BUkcgYXJnMVBheWxvYWQsIFRydXN0ZWRJbW0zMihhcmcxVGFnKSwgVHJ1c3RlZEltbVB0cih1
aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VEQSBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBGUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FREEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzEsIGFyZzIpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcg
YXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BS
UmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQ
UlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBUcnVzdGVkSW1tMzIgYXJnMVRhZywgR1BS
UmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBUcnVzdGVkSW1tMzIgYXJnMVRhZywgR1BSUmVnIGFyZzFQ
YXlsb2FkLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywg
YXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywg
R1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1Z
X0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0
VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXls
b2FkLCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
SklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3Vs
dFBheWxvYWQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwg
aW50MzJfdCBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgaW50MzJfdCBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwg
cmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0RGR09wZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcg
cmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcg
cmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpLCBUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxG
cmFtZSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVpaIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludDMyX3Qg
YXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoYXJnMSksIGFyZzIp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogCi0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FSlMgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBKU1ZhbHVlUmVncyB2YWx1ZSwgc2l6ZV90IGluZGV4KQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRUpTIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgdmFsdWUsIHNpemVfdCBpbmRleCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1Z
X0FSRyB2YWx1ZS5wYXlsb2FkR1BSKCksIHZhbHVlLnRhZ0dQUigpLCBUcnVzdGVkSW1tUHRyKGlu
ZGV4KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZH
T3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBh
cmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oQ19ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oQ19KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBh
cmcxVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50cyhhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9E
VU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQog
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FSkog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXls
b2FkLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJU
YWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRh
ZywgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcs
IEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcg
YXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBh
cmcxVGFnLCBTSDRfMzJCSVRfRFVNTVlfQVJHIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQ
YXlsb2FkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSkKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVn
IGFyZzFQYXlsb2FkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1Z
X0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgU0g0XzMyQklUX0RVTU1ZX0FSRyBpbW0sIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3Vs
dFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJnMlRhZywg
R1BSUmVnIGFyZzJQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJn
MlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGltbSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSwgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmcyUGF5bG9hZCwgYXJn
MlRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9CiAKLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcs
IEdQUlJlZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQs
IEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNKIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJn
Mi50YWdHUFIoKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0LnBheWxvYWRHUFIoKSwgcmVzdWx0LnRhZ0dQUigp
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywg
R1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aRCBvcGVyYXRpb24sIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMiwgRlBSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FT1pEIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyLCBGUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcz
KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3Bl
cmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2Fk
LCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMVRhZywg
R1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1Z
X0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRp
b25fRUpDSSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQ
UlJlZyBhcmcyLCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQ
UlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1Z
X0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9F
Q0pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBh
eWxvYWQsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0pKIG9wZXJhdGlvbiwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQsIEdQUlJlZyBhcmcz
VGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMlBheWxvYWQsIGFyZzJUYWcsIGFyZzNQYXlsb2Fk
LCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFZfREZHT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIs
IEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FUFpKIG9wZXJhdGlvbiwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIs
IEVBQklfMzJCSVRfRFVNTVlfQVJHIFNINF8zMkJJVF9EVU1NWV9BUkcgYXJnM1BheWxvYWQsIGFy
ZzNUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVy
YXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9E
RkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BS
UmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgRUFC
SV8zMkJJVF9EVU1NWV9BUkcgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmczUGF5bG9hZCwgYXJnM1Rh
Zyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVy
YXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZElt
bTMyIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
MiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmczUGF5bG9hZCwg
YXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihE
X0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFn
LCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihEX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcx
VGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFU
YWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC0xOTIzLDggKzE5MjIsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBiZXR0ZXJVc2VTdHJpY3RJbnQ1MihlZGdlLm5vZGUoKSk7CiAgICAgfQogICAg
IAotICAgIGJvb2wgY29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VK
Sik7Ci0gICAgYm9vbCBjb21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSosIE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uLCBT
X0RGR09wZXJhdGlvbl9FSkopOworICAgIGJvb2wgY29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24s
IFNfSklUT3BlcmF0aW9uX0VKSik7CisgICAgYm9vbCBjb21waWxlUGVlcEhvbGVCcmFuY2goTm9k
ZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkopOwogICAgIHZvaWQgY29tcGlsZVBl
ZXBIb2xlSW50MzJCcmFuY2goTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUsIEpJVENvbXBpbGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZUludDUyQnJhbmNo
KE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlv
bik7CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVCb29sZWFuQnJhbmNoKE5vZGUqLCBOb2RlKiBi
cmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAxNTY0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkzLDIzOCArOTMsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25U
CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiREZHIE9TUiBleGl0IGdl
bmVyYXRpb24gdGh1bmsiKSk7CiB9CiAKLWlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlv
bihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIpCi17Ci0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgIENDYWxsSGVscGVyczo6SnVtcCBpc05vblplcm8gPSBqaXQuYnJhbmNoVGVz
dFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHBvaW50ZXJHUFIpOwotICAgIGppdC5icmVha3Bv
aW50KCk7Ci0gICAgaXNOb25aZXJvLmxpbmsoJmppdCk7Ci0gICAgaml0LnB1c2gocG9pbnRlckdQ
Uik7Ci0gICAgaml0LmxvYWQ4KHBvaW50ZXJHUFIsIHBvaW50ZXJHUFIpOwotICAgIGppdC5wb3Ao
cG9pbnRlckdQUik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShqaXQpOwotICAgIFVOVVNFRF9Q
QVJBTShwb2ludGVyR1BSKTsKLSNlbmRpZgotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhy
b3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICBDQ2Fs
bEhlbHBlcnMgaml0KHZtKTsKLSAgICAKLSAgICAvLyBXZSB3aWxsIGp1bXAgdG8gaGVyZSBpZiB0
aGUgSklUIGNvZGUgdGhpbmtzIGl0J3MgbWFraW5nIGEgY2FsbCwgYnV0IHRoZQotICAgIC8vIGxp
bmtpbmcgaGVscGVyIChDKysgY29kZSkgZGVjaWRlZCB0byB0aHJvdyBhbiBleGNlcHRpb24gaW5z
dGVhZC4gV2Ugd2lsbAotICAgIC8vIGhhdmUgc2F2ZWQgdGhlIGNhbGxSZXR1cm5JbmRleCBpbiB0
aGUgZmlyc3QgYXJndW1lbnRzIG9mIEpJVFN0YWNrRnJhbWUuCi0gICAgLy8gTm90ZSB0aGF0IHRo
ZSByZXR1cm4gYWRkcmVzcyB3aWxsIGJlIG9uIHRoZSBzdGFjayBhdCB0aGlzIHBvaW50LCBzbyB3
ZQotICAgIC8vIG5lZWQgdG8gcmVtb3ZlIGl0IGFuZCBkcm9wIGl0IG9uIHRoZSBmbG9vciwgc2lu
Y2Ugd2UgZG9uJ3QgY2FyZSBhYm91dCBpdC4KLSAgICAvLyBGaW5hbGx5IG5vdGUgdGhhdCB0aGUg
Y2FsbCBmcmFtZSByZWdpc3RlciBwb2ludHMgYXQgdGhlIGNhbGxlZSBmcmFtZSwgc28KLSAgICAv
LyB3ZSBuZWVkIHRvIHBvcCBpdC4KLSAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgaml0LmxvYWRQdHIo
Ci0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OkNhbGxlckZyYW1lKSwKLSAgICAgICAgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaml0LnBlZWs2NChH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRF
WCk7Ci0jZWxzZQotICAgIGppdC5wZWVrKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQ
UiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKLSNlbmRpZgotICAgIGppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQq
Pihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVt
aXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5j
YWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIyKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
KCJERkcgdGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAotICAgIENDYWxsSGVscGVycyYgaml0LCBWTSogdm0s
IFBfREZHT3BlcmF0aW9uX0Ugc2xvd1BhdGhGdW5jdGlvbikKLXsKLSAgICBqaXQucHJlc2VydmVS
ZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIGVtaXRQb2lu
dGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIGppdC5zdG9yZVB0
cigKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMiwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6
UmV0dXJuUEMpKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
ICZ2bS0+dG9wQ2FsbEZyYW1lKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5wb2tlNjQo
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5E
RVgpOwotI2Vsc2UKLSAgICBqaXQucG9rZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5H
UFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7Ci0jZW5kaWYKLSAgICBqaXQuc2V0dXBBcmd1
bWVudHNFeGVjU3RhdGUoKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoYml0d2lzZV9jYXN0PHZvaWQqPihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFy
Z0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIAotICAgIC8vIFRo
aXMgc2xvdyBjYWxsIHdpbGwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIG9uZSBvZiB0aGUgZm9sbG93
aW5nOgotICAgIC8vIDEpIEV4Y2VwdGlvbiB0aHJvd2luZyB0aHVuay4KLSAgICAvLyAyKSBIb3N0
IGNhbGwgcmV0dXJuIHZhbHVlIHJldHVybmVyIHRoaW5neS4KLSAgICAvLyAzKSBUaGUgZnVuY3Rp
b24gdG8gY2FsbC4KLSAgICBqaXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6UmV0
dXJuUEMpLAotICAgICAgICBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwotICAg
IGppdC5zdG9yZVB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApLAot
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQykpOwotICAgIGVtaXRQb2ludGVyVmFsaWRh
dGlvbihqaXQsIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgaml0LnJl
c3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJl
dHVybkdQUik7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOwotICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLX0KLQot
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yVGh1bmtHZW5lcmF0b3IoCi0gICAg
Vk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgLy8gVGhlIHJldHVy
biBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjayBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2ls
bCBoZW5jZQotICAgIC8vIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1l
IHdoaWxlIHdlIG1ha2UgYSBDKysgZnVuY3Rpb24gY2FsbAotICAgIC8vIHRvIHBlcmZvcm0gbGlu
a2luZyBhbmQgbGF6eSBjb21waWxhdGlvbiBpZiBuZWNlc3NhcnkuIFdlIGV4cGVjdCB0aGUgY2Fs
bGVlCi0gICAgLy8gdG8gYmUgaW4gbm9uQXJnR1BSMC9ub25BcmdHUFIxIChwYXlsb2FkL3RhZyks
IHRoZSBjYWxsIGZyYW1lIHRvIGhhdmUgYWxyZWFkeQotICAgIC8vIGJlZW4gYWRqdXN0ZWQsIG5v
blByZXNlcnZlZE5vblJldHVybkdQUiBob2xkcyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgaW5kZXgs
Ci0gICAgLy8gYW5kIGFsbCBvdGhlciByZWdpc3RlcnMgdG8gYmUgYXZhaWxhYmxlIGZvciB1c2Uu
IFdlIHVzZSBKSVRTdGFja0ZyYW1lOjphcmdzCi0gICAgLy8gdG8gc2F2ZSBpbXBvcnRhbnQgaW5m
b3JtYXRpb24gYWNyb3NzIGNhbGxzLgotICAgIAotICAgIENDYWxsSGVscGVycyBqaXQodm0pOwot
ICAgIAotICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVy
YXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOwotICAgIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJERkcgbGlu
ayAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNv
bnN0cnVjdCIpKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5l
cmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENv
ZGVGb3JDYWxsKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVu
a0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2
bSwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KLS8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMs
IHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZv
cgotLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0byBsb3NlIGJpZyB0
aW1lIGFueXdheS4KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dl
bmVyYXRvcihWTSogdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7Ci0gICAgCi0gICAg
c2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKTsKLSAgICAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJERkcgbGluayBjbG9zdXJlIGNh
bGwgc2xvdyBwYXRoIHRodW5rIikpOwotfQotCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigKLSAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKLXsKLSAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNr
LCBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQotICAgIC8vIGp1bXAgdG8g
dGhlIGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUg
d2hpbGUgd2UKLSAgICAvLyBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGFwcHJvcHJp
YXRlIERGRyBvcGVyYXRpb24uCi0KLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKLSAgICAKLSAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOwotCi0gICAgLy8gRklYTUU6IHdlIHNo
b3VsZCBoYXZlIGEgc3RvcnkgZm9yIGVsaW1pbmF0aW5nIHRoZXNlIGNoZWNrcy4gSW4gbWFueSBj
YXNlcywKLSAgICAvLyB0aGUgREZHIGtub3dzIHRoYXQgdGhlIHZhbHVlIGlzIGRlZmluaXRlbHkg
YSBjZWxsLCBvciBkZWZpbml0ZWx5IGEgZnVuY3Rpb24uCi0gICAgCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2hUZXN0NjQoCi0gICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3RlcikpOwotI2Vsc2UKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0gICAg
ICAgIGppdC5icmFuY2gzMigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQ
UkluZm86Om5vbkFyZ0dQUjEsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotI2VuZGlmCi0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0gICAgICAg
IGppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAotICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIFN0cnVj
dHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKEpTRnVuY3Rpb246OmluZm8oKSkpKTsKLSAgICAKLSAgICAvLyBOb3cgd2Uga25v
dyB3ZSBoYXZlIGEgSlNGdW5jdGlvbi4KLSAgICAKLSAgICBqaXQubG9hZFB0cigKLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTRnVuY3Rpb246Om9m
ZnNldE9mRXhlY3V0YWJsZSgpKSwKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMik7Ci0gICAg
c2xvd0Nhc2UuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okxlc3NUaGFuLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAot
ICAgICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZz
ZXRPZk51bVBhcmFtZXRlcnNGb3Ioa2luZCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMCkpKTsKLSAgICAKLSAgICAvLyBOb3cgd2Uga25vdyB0aGF0IHdlIGhhdmUg
YSBDb2RlQmxvY2ssIGFuZCB3ZSdyZSBjb21taXR0ZWQgdG8gbWFraW5nIGEgZmFzdAotICAgIC8v
IGNhbGwuCi0gICAgCi0gICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4o
KSksCi0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgaml0LnN0b3JlNjQoCi0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEsCi0gICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIp
KSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKLSNlbHNlCi0gICAgaml0LnN0b3JlUHRyKAotICAg
ICAgICBHUFJJbmZvOjpub25BcmdHUFIxLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Ci0gICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNo
YWluICsKLSAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCi0gICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3Rh
Y2s6OlNjb3BlQ2hhaW4gKwotICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0jZW5kaWYKLSAgICAKLSAgICBqaXQubG9hZFB0
cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4
ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKSksCi0g
ICAgICAgIEdQUkluZm86OnJlZ1QwKTsKLSAgICAKLSAgICAvLyBNYWtlIGEgdGFpbCBjYWxsLiBU
aGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gREZHIGNvZGUuCi0gICAgZW1pdFBvaW50ZXJWYWxpZGF0
aW9uKGppdCwgR1BSSW5mbzo6cmVnVDApOwotICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QwKTsK
LQotICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7Ci0gICAgCi0gICAgLy8gSGVyZSB3ZSBkb24ndCBr
bm93IGFueXRoaW5nLCBzbyByZXZlcnQgdG8gdGhlIGZ1bGwgc2xvdyBwYXRoLgotICAgIAotICAg
IHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25WaXJ0
dWFsQ2FsbCA6IG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QpOwotICAgIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJERkcgdmlydHVh
bCAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNv
bnN0cnVjdCIpKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Io
dm0sIENvZGVGb3JDYWxsKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25z
dHJ1Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVu
a0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5oCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNiArNDAsNiBA
QCBuYW1lc3BhY2UgREZHIHsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0
aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSopOwotCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOwotCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLQotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLQogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2
aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNS
ZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEyICs0OCwxMiBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8ob3NyRXhpdCwgIndlYmtpdF9vc3JfZXhp
dCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgYm9vbGVhbiwgaW50MzIsIFZhcmlhZGljKSkKIAog
I2RlZmluZSBGT1JfRUFDSF9GVU5DVElPTl9UWVBFKG1hY3JvKSBcCi0gICAgbWFjcm8oSV9ERkdP
cGVyYXRpb25fRUpzcywgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIpKSBcCi0g
ICAgbWFjcm8oSl9ERkdPcGVyYXRpb25fRSwgZnVuY3Rpb25UeXBlKGludDY0LCBpbnRQdHIpKSBc
Ci0gICAgbWFjcm8oUF9ERkdPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0
ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKFZfREZHT3BlcmF0aW9uX0VPWkQsIGZ1bmN0aW9uVHlw
ZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludDMyLCBkb3VibGVUeXBlKSkgXAotICAgIG1h
Y3JvKFZfREZHT3BlcmF0aW9uX0VPWkosIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBp
bnRQdHIsIGludDMyLCBpbnQ2NCkpIFwKLSAgICBtYWNybyhaX0RGR09wZXJhdGlvbl9ELCBmdW5j
dGlvblR5cGUoaW50MzIsIGRvdWJsZVR5cGUpKQorICAgIG1hY3JvKElfSklUT3BlcmF0aW9uX0VK
c3MsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyKSkgXAorICAgIG1hY3JvKEpf
SklUT3BlcmF0aW9uX0UsIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50UHRyKSkgXAorICAgIG1hY3Jv
KFBfSklUT3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludFB0cikp
IFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FT1pELCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludFB0ciwgaW50UHRyLCBpbnQzMiwgZG91YmxlVHlwZSkpIFwKKyAgICBtYWNybyhWX0pJVE9w
ZXJhdGlvbl9FT1pKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQz
MiwgaW50NjQpKSBcCisgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRCwgZnVuY3Rpb25UeXBlKGlu
dDMyLCBkb3VibGVUeXBlKSkKIAogY2xhc3MgSW50cmluc2ljUmVwb3NpdG9yeSA6IHB1YmxpYyBD
b21tb25WYWx1ZXMgewogcHVibGljOgpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAjdW5kZWYg
RlVOQ1RJT05fVFlQRV9HRVRURVIKICAgICAKICNkZWZpbmUgRlVOQ1RJT05fVFlQRV9SRVNPTFZF
Uih0eXBlTmFtZSwgdHlwZSkgXAotICAgIExUeXBlIG9wZXJhdGlvblR5cGUoREZHOjp0eXBlTmFt
ZSkgICAgICAgICBcCisgICAgTFR5cGUgb3BlcmF0aW9uVHlwZShKU0M6OnR5cGVOYW1lKSAgICAg
ICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgICAgICByZXR1cm4gdHlwZU5hbWUoKTsgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTk0LDcgKzE5OTQsNyBAQCBwcml2
YXRlOgogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyB1bmFjY2VwdGFibHkgc2xvdy4KICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQogICAg
ICAgICAKLSAgICAgICAgSl9ERkdPcGVyYXRpb25fRSBmdW5jdGlvbiA9CisgICAgICAgIEpfSklU
T3BlcmF0aW9uX0UgZnVuY3Rpb24gPQogICAgICAgICAgICAgbV9ub2RlLT5vcCgpID09IENhbGwg
PyBvcGVyYXRpb25GVExDYWxsIDogb3BlcmF0aW9uRlRMQ29uc3RydWN0OwogICAgICAgICAKICAg
ICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gbV9ub2RlLT5vcCgpID09IENhbGwgPyAwIDog
MTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
ZXIuaAkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAvLyBUYWtlcyB0aGUgY2FsbCBmcmFtZSBhbmQgdGhl
IGluZGV4IG9mIHRoZSBleGl0LCBhbmQgcmV0dXJucyB0aGUgYWRkcmVzcyB0bwogLy8ganVtcCB0
by4KIGV4dGVybiAiQyIgewotdm9pZCogREZHX09QRVJBVElPTiBjb21waWxlRlRMT1NSRXhpdChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBleGl0SUQpIFdURl9JTlRFUk5BTDsKK3ZvaWQqIEpJVF9PUEVS
QVRJT04gY29tcGlsZUZUTE9TUkV4aXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgZXhpdElEKSBXVEZf
SU5URVJOQUw7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTU2NDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEzLDYgKzQxMywyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAoY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldEluY2x1ZGluZ1RoaXMoMCkpICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB9CiAKKyAgICB2
b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNj
cmF0Y2gyLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCisgICAgeworICAgICAgICBVTlVT
RURfUEFSQU0ob3duZXIpOworICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOworICAgICAg
ICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOworICAgICAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7
CisgICAgICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoMSk7CisgICAgICAgIEFTU0VSVChvd25l
ciAhPSBzY3JhdGNoMik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoMSAhPSBzY3JhdGNoMik7Cisg
ICAgICAgIAorI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICAgICAgZW1p
dENvdW50KFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKKyNl
bmRpZgorICAgIH0KKwogICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNv
ZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqKTsKICAgICAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk3LDIzICs3OTcsMjMgQEAg
dm9pZCBKSVQ6OmxpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBKU0Z1bgogICAgICAgICBBU1NFUlQo
Y2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGwKICAgICAgICAgICAg
ICAgIHx8IGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJn
cyk7CiAgICAgICAgIGlmIChjYWxsTGlua0luZm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6
Q2FsbCkgewotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRv
cikuY29kZSgpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDbG9zdXJl
Q2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRp
b24sIHZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29u
c3RydWN0KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1
cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcikuY29k
ZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbiwgdm0tPmdldENUSVN0dWIob2xkU3R5bGVWaXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9y
KS5jb2RlKCkpOwogfQogCiB2b2lkIEpJVDo6bGlua1Nsb3dDYWxsKENvZGVCbG9jayogY2FsbGVy
Q29kZUJsb2NrLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsKICAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKIAotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBjYWxsZXJDb2RlQmxvY2st
PnZtKCktPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxl
ckNvZGVCbG9jay0+dm0oKS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9y
KS5jb2RlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjE3LDcgKzIxNyw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnUK
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKICAgICBlbWl0TG9hZChKU1N0YWNrOjpDYWxsZWUs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHZpcnR1
YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJ
U3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxl
Q29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTMwNiw3ICszMDYsNyBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHVi
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBl
bWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0tPmdldENUSVN0dWIo
bGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2Fs
bEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxs
KG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0tPmdldENUSVN0dWIob2xkU3R5bGVMaW5r
Q29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkgOiBtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlTGlu
a0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxv
Y2spOwogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKQEAgLTMzNSw3ICszMzUs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgCiAgICAg
cGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby0+aG90UGF0
aE90aGVyLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29k
ZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29k
ZSgpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbChtX3Zt
LT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAg
IAogICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0
UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RFKApA
QCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKENh
bGwKICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKICAgICAgICAgUmVwYXRjaEJ1
ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLT5o
b3RQYXRoQmVnaW4pLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5j
b2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVy
bkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3Ip
LmNvZGUoKSk7CiAgICAgCiAgICAgY2FsbExpbmtJbmZvLT5zdHViID0gc3R1YlJvdXRpbmUucmVs
ZWFzZSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZp
c2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKEluc3RydQogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyNjQoSlNTdGFjazo6Q2FsbGVlLCByZWdUMCk7Ci0gICAgZW1pdE5h
a2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwor
ICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2Vu
ZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAg
ICAKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9w
Y29kZUlECiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgCi0gICAgbV9jYWxsU3RydWN0
dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0
aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRD
VElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IG1fdm0tPmdldENUSVN0dWIo
bGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5h
a2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKG9sZFN0
eWxlTGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihvbGRT
dHlsZUxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1f
Y29kZUJsb2NrKTsKICAgICAKQEAgLTI2Myw3ICsyNjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBG
dW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyLmxhYmVsQXRPZmZzZXQoMCkp
OwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0
Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKSk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbChtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmly
dHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIAogICAgIFJlZlB0cjxDbG9zdXJlQ2Fs
bFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJS
b3V0aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RFKApAQCAtMjgxLDcgKzI4MSw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKENhbGwKICAgICByZXBhdGNoQnVmZmVyLnJl
cGxhY2VXaXRoSnVtcCgKICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldp
dGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4pLAogICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5n
ZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElT
dHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgCiAgICAgY2Fs
bExpbmtJbmZvLT5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFwcGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9uV3JhcHBlcnMuaAkocmV2aXNp
b24gMTU2MjM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbldy
YXBwZXJzLmg6MTU2MjM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25XcmFwcGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzE2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSklUT3BlcmF0aW9u
V3JhcHBlcnNfaAorI2RlZmluZSBKSVRPcGVyYXRpb25XcmFwcGVyc19oCisKKyNpbmNsdWRlIDx3
dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCisjaWYgQ1BVKE1JUFMpCisjaWYgV1RGX01JUFNfUElDCisjZGVmaW5lIExPQURfRlVO
Q1RJT05fVE9fVDkoZnVuY3Rpb24pIFwKKyAgICAgICAgIi5zZXQgbm9yZW9yZGVyIiAiXG4iIFwK
KyAgICAgICAgIi5jcGxvYWQgJDI1IiAiXG4iIFwKKyAgICAgICAgIi5zZXQgcmVvcmRlciIgIlxu
IiBcCisgICAgICAgICJsYSAkdDksICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiXG4iCisj
ZWxzZQorI2RlZmluZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uKSAiIiAiXG4iCisjZW5k
aWYKKyNlbmRpZgorCisjaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoWDg2XzY0KQorCisjZGVmaW5l
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmVnaXN0ZXIp
IFwKKyAgICBhc20oIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxu
IiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkco
ZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgIm1vdiAoJXJzcCksICUiIFNUUklOR0laRShy
ZWdpc3RlcikgIlxuIiBcCisgICAgICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24j
I1dpdGhSZXR1cm5BZGRyZXNzKSAiXG4iIFwKKyAgICApOworI2RlZmluZSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByc2kpCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4KQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByOCkKKworI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBD
UFUoWDg2KQorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhm
dW5jdGlvbiwgb2Zmc2V0KSBcCisgICAgYXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAi
Lmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0wo
ZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwK
KyAgICAgICAgIm1vdiAoJWVzcCksICVlYXhcbiIgXAorICAgICAgICAibW92ICVlYXgsICIgU1RS
SU5HSVpFKG9mZnNldCkgIiglZXNwKVxuIiBcCisgICAgICAgICJqbXAgIiBMT0NBTF9SRUZFUkVO
Q0UoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSAiXG4iIFwKKyAgICApOworI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCA4KQorI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAxNikKKyNkZWZpbmUgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMjApCisjZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDI0KQorCisjZWxpZiBDT01QSUxFUihH
Q0MpICYmIENQVShBUk1fVEhVTUIyKQorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAgICIudGV4dCIgIlxu
IiBcCisgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhm
dW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgICIu
dGh1bWIiICJcbiIgXAorICAgICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZnVuY3Rp
b24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAg
ICAgIm1vdiBhMiwgbHIiICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5j
dGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyAgICBhc20g
KCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCisgICAgIi50aHVtYiIgIlxuIiBcCisgICAgIi50aHVtYl9mdW5jICIgVEhV
TUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIjoiICJcbiIgXAorICAgICAgICAibW92IGE0LCBsciIgIlxuIiBcCisgICAgICAgICJiICIg
TE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAg
ICk7CisKKy8vIEVuY29kZWRKU1ZhbHVlIGluIEpTVkFMVUUzMl82NCBpcyBhIDY0LWJpdCBpbnRl
Z2VyLiBXaGVuIGJlaW5nIGNvbXBpbGVkIGluIEFSTSBFQUJJLCBpdCBtdXN0IGJlIGFsaWduZWQg
ZXZlbi1udW1iZXJlZCByZWdpc3RlciAocjAsIHIyIG9yIFtzcF0pLgorLy8gQXMgYSByZXN1bHQs
IHJldHVybiBhZGRyZXNzIHdpbGwgYmUgYXQgYSA0LWJ5dGUgZnVydGhlciBsb2NhdGlvbiBpbiB0
aGUgZm9sbG93aW5nIGNhc2VzLgorI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVBQkkpICYmIENQVShB
Uk0pCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxy
LCBbc3AsICM0XSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpD
SSAic3RyIGxyLCBbc3AsICM4XSIKKyNlbHNlCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JF
VFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICMwXSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05f
U1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM0XSIKKyNlbmRpZgorCisj
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24p
IFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmFsaWduIDIiICJcbiIg
XAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURF
X1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgIi50aHVtYiIgIlxuIiBcCisgICAgIi50aHVt
Yl9mdW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NU
UklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRV
Uk5fQUREUkVTU19FSkkgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0
aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKKyAgICBhc20g
KCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCisgICAgIi50aHVtYiIgIlxuIiBcCisgICAgIi50aHVtYl9mdW5jICIgVEhV
TUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIjoiICJcbiIgXAorICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19F
SkNJICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhS
ZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQ
VShBUk1fVFJBRElUSU9OQUwpCisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwK
KyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9T
WU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIElOTElORV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24p
IFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgICJtb3Yg
YTIsIGxyIiAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJX
aXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAg
ICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJc
biIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBJTkxJTkVfQVJNX0ZV
TkNUSU9OKGZ1bmN0aW9uKSBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIg
XAorICAgICAgICAibW92IGE0LCBsciIgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJF
TkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKy8vIEVu
Y29kZWRKU1ZhbHVlIGluIEpTVkFMVUUzMl82NCBpcyBhIDY0LWJpdCBpbnRlZ2VyLiBXaGVuIGJl
aW5nIGNvbXBpbGVkIGluIEFSTSBFQUJJLCBpdCBtdXN0IGJlIGFsaWduZWQgZXZlbi1udW1iZXJl
ZCByZWdpc3RlciAocjAsIHIyIG9yIFtzcF0pLgorLy8gQXMgYSByZXN1bHQsIHJldHVybiBhZGRy
ZXNzIHdpbGwgYmUgYXQgYSA0LWJ5dGUgZnVydGhlciBsb2NhdGlvbiBpbiB0aGUgZm9sbG93aW5n
IGNhc2VzLgorI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVBQkkpICYmIENQVShBUk0pCisjZGVmaW5l
IElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICM0XSIK
KyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBb
c3AsICM4XSIKKyNlbHNlCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNT
X0VKSSAic3RyIGxyLCBbc3AsICMwXSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJO
X0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM0XSIKKyNlbmRpZgorCisjZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKKyAgICBhc20g
KCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5j
dGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIElOTElO
RV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
OiIgIlxuIiBcCisgICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAi
XG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJu
QWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAorICAgIGFzbSAoIFwKKyAgICAiLnRleHQi
ICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAg
ICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgSU5MSU5FX0FSTV9GVU5DVElPTihm
dW5jdGlvbikgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAg
ICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAiXG4iIFwKKyAgICAgICAg
ImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBc
CisgICAgKTsKKworI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoTUlQUykKKworI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAorICAgIGFz
bSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgTE9BRF9GVU5DVElPTl9UT19UOShm
dW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKKyAgICAgICAgIm1vdmUgJGExLCAkcmEiICJc
biIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5B
ZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyAgICBhc20oIFwKKyAgICAiLnRleHQiICJc
biIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBI
SURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikg
IjoiICJcbiIgXAorICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5B
ZGRyZXNzKSBcCisgICAgICAgICJtb3ZlICRhMywgJHJhIiAiXG4iIFwKKyAgICAgICAgImIgIiBM
T0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAg
KTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1
bmN0aW9uKSBcCisgICAgYXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIg
U1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24p
ICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICBMT0FE
X0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAorICAgICAgICAi
c3cgJHJhLCAyMCgkc3ApIiAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVu
Y3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAorICAgIGFz
bSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgTE9BRF9GVU5DVElPTl9UT19UOShm
dW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKKyAgICAgICAgInN3ICRyYSwgMjQoJHNwKSIg
IlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVy
bkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFNI
NCkKKworI2RlZmluZSBTSDRfU0NSQVRDSF9SRUdJU1RFUiAicjExIgorCisjZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgYXNtKCBc
CisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgInN0cyBwciwgcjUiICJcbiIgXAor
ICAgICAgICAiYnJhICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJl
c3MiICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwKKyAgICApOworCisjZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyAgICBhc20o
IFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0
aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICAic3RzIHByLCByNyIgIlxuIiBc
CisgICAgICAgICJtb3YubCAyZiwgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAiXG4iIFwKKyAgICAg
ICAgImJyYWYgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAiXG4iIFwKKyAgICAgICAgIm5vcCIgIlxu
IiBcCisgICAgICAgICIxOiAuYmFsaWduIDQiICJcbiIgXAorICAgICAgICAiMjogLmxvbmcgIiBM
T0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcy0xYiIgIlxuIiBcCisg
ICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVu
Y3Rpb24sIG9mZnNldCwgc2NyYXRjaCkgXAorICAgIGFzbSggXAorICAgICIudGV4dCIgIlxuIiBc
CisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVf
U1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIg
IlxuIiBcCisgICAgICAgICJzdHMgcHIsICIgc2NyYXRjaCAiXG4iIFwKKyAgICAgICAgIm1vdi5s
ICIgc2NyYXRjaCAiLCBAKCIgU1RSSU5HSVpFKG9mZnNldCkgIiwgcjE1KSIgIlxuIiBcCisgICAg
ICAgICJtb3YubCAyZiwgIiBzY3JhdGNoICJcbiIgXAorICAgICAgICAiYnJhZiAiIHNjcmF0Y2gg
IlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAgICAgICAiMTogLmJhbGlnbiA0IiAiXG4i
IFwKKyAgICAgICAgIjI6IC5sb25nICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJl
dHVybkFkZHJlc3MtMWIiICJcbiIgXAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCisjZGVm
aW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDQsIFNINF9TQ1JB
VENIX1JFR0lTVEVSKQorCisjZW5kaWYKKworI2RlZmluZSBQX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCit2b2lkKiBKSVRfT1BFUkFUSU9OIGZ1bmN0
aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZF
UkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAorRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCisKKyNkZWZpbmUgSl9GVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVz
c1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKK0ZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKQorCisjZGVmaW5lIEpfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAorRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9B
U00gV1RGX0lOVEVSTkFMOyBcCitGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUNJKGZ1bmN0aW9uKQorCisjZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKSShmdW5jdGlvbikgXAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5j
dGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmlu
Z0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5B
TDsgXAorRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikK
KworI2RlZmluZSBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1
bmN0aW9uKSBcCit2b2lkIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBTdHJpbmdJbXBsKiwgUmV0dXJu
QWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKK0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpJVE9wZXJhdGlvbldyYXBwZXJzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFwcGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9uV3JhcHBlcnMuaAkod29y
a2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFw
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxNCBAQAogI2lmbmRlZiBKSVRPcGVy
YXRpb25XcmFwcGVyc19oCiAjZGVmaW5lIEpJVE9wZXJhdGlvbldyYXBwZXJzX2gKIAorI2luY2x1
ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KICNpbmNsdWRl
IDx3dGYvSW5saW5lQVNNLmg+CiAKKyNpZiBDT01QSUxFUihNU1ZDKQorI2luY2x1ZGUgPGludHJp
bi5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgQ1BVKE1JUFMpCkBAIC01Mywx
MCArNTgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICJtb3YgKCVyc3ApLCAlIiBTVFJJ
TkdJWkUocmVnaXN0ZXIpICJcbiIgXAogICAgICAgICAiam1wICIgTE9DQUxfUkVGRVJFTkNFKGZ1
bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgIlxuIiBcCiAgICAgKTsKLSNkZWZpbmUgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcnNpKQotI2RlZmluZSBGVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByY3gpCi0jZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcjgpCisjZGVmaW5lIF9QX0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJzaSkKKyNkZWZpbmUgX0pfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcnNpKQorI2RlZmluZSBfSl9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByY3gpCisjZGVmaW5lIF9KX0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pICBGVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKKyNkZWZpbmUgX1Zf
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcjgpCiAKICNlbGlmIENP
TVBJTEVSKEdDQykgJiYgQ1BVKFg4NikKIApAQCAtNzAsMTQgKzc2LDE1IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAibW92ICVlYXgsICIgU1RSSU5HSVpFKG9mZnNldCkgIiglZXNwKVxuIiBc
CiAgICAgICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRy
ZXNzKSAiXG4iIFwKICAgICApOwotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTKGZ1bmN0aW9uLCA4KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
KGZ1bmN0aW9uLCAxNikKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhm
dW5jdGlvbiwgMjApCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVu
Y3Rpb24sIDI0KQorI2RlZmluZSBfUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1
bmN0aW9uLCA4KQorI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1
bmN0aW9uLCA4KQorI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1
bmN0aW9uLCAxNikKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhm
dW5jdGlvbiwgMjApCisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Mo
ZnVuY3Rpb24sIDI0KQogCiAjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShBUk1fVEhVTUIyKQog
Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9u
KSBcCisjZGVmaW5lIF9QX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1
bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5hbGlnbiAy
IiAiXG4iIFwKQEAgLTkwLDcgKzk3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAiYiAi
IExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAg
ICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0ko
ZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0UoZnVuY3Rpb24pIFwKKyAgICBfUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRShmdW5jdGlvbikKKworI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAgICIudGV4dCIgIlxu
IiBcCiAgICAgIi5hbGlnbiAyIiAiXG4iIFwKQEAgLTExMyw3ICsxMjMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3Ry
IGxyLCBbc3AsICM0XSIKICNlbmRpZgogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAogICAgIGFzbSAoIFwKICAgICAi
LnRleHQiICJcbiIgXAogICAgICIuYWxpZ24gMiIgIlxuIiBcCkBAIC0xMjYsNyArMTM2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAi
V2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAogICAgICk7CiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKKyNkZWZpbmUgX1ZfRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKICAgICBh
c20gKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmFsaWduIDIiICJcbiIgXApAQCAtMTQx
LDcgKzE1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQ
VShBUk1fVFJBRElUSU9OQUwpCiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyNkZWZpbmUgX1BfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKICAgICBhc20gKCBcCiAgICAgIi50ZXh0IiAi
XG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0x
NTIsNyArMTYyLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAiYiAiIExPQ0FMX1JFRkVS
RU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOwogCi0jZGVm
aW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwK
KyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rp
b24pIFwKKyAgICBfUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5j
dGlvbikKKworI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUNJKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXApAQCAtMTczLDcgKzE4Niw3IEBA
IG5hbWVzcGFjZSBKU0MgewogI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVT
U19FSkNJICJzdHIgbHIsIFtzcCwgIzRdIgogI2VuZGlmCiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAorI2RlZmluZSBfSl9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCiAgICAgYXNt
ICggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICJcbiIgXApAQCAtMTg0LDcgKzE5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4i
IFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkNJKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAgICIudGV4dCIgIlxu
IiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXApAQCAtMTk3
LDcgKzIxMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQ
VShNSVBTKQogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
KGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9QX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FKGZ1bmN0aW9uKSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAi
Lmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0yMDgsNyArMjIxLDEw
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlv
bikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pf
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBf
UF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikKKworI2Rl
ZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9u
KSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0yMTksNyArMjM1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFk
ZHJlc3MiICJcbiIgXAogICAgICk7CiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAorI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCiAgICAgYXNtKCBcCiAgICAgIi50
ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBc
CkBAIC0yMzAsNyArMjQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICJiICIgTE9DQUxf
UkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAogICAgICk7CiAK
LSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rp
b24pIFwKKyNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
Q0koZnVuY3Rpb24pIFwKICAgICBhc20oIFwKICAgICAiLnRleHQiICJcbiIgXAogICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKQEAgLTI0NSw3ICsyNjEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogI2RlZmluZSBTSDRfU0NSQVRDSF9SRUdJU1RFUiAicjExIgogCi0j
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBc
CisjZGVmaW5lIF9QX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0
aW9uKSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lN
Qk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0yNTYsNyArMjcyLDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAibm9wIiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pf
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBf
UF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikKKworI2Rl
ZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9u
KSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0yODUsMzAgKzMwNCw0NyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgIjI6IC5sb25nICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0
aFJldHVybkFkZHJlc3MtMWIiICJcbiIgXAogICAgICk7CiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCi0j
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9u
KSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDQsIFNINF9T
Q1JBVENIX1JFR0lTVEVSKQorI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTKGZ1bmN0aW9uLCAwLCBTSDRfU0NSQVRDSF9SRUdJU1RFUikKKyNkZWZpbmUgX1ZfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgNCwgU0g0X1NDUkFUQ0hfUkVHSVNU
RVIpCisKKyNlbGlmIENPTVBJTEVSKE1TVkMpICYmIENQVShYODYpCisKKyNkZWZpbmUgX1BfRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICB2b2lk
KiBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZnVuY3Rp
b24jI1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMsIFJldHVybkFkZHJlc3NQdHIoKih2b2lkKiopX0Fk
ZHJlc3NPZlJldHVybkFkZHJlc3MoKSkpOyB9CisKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIGZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZnVuY3Rpb24j
I1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMsIFJldHVybkFkZHJlc3NQdHIoKih2b2lkKiopX0FkZHJl
c3NPZlJldHVybkFkZHJlc3MoKSkpOyB9CisKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAorICAgIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gZnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIFN0cmlu
Z0ltcGwqIHN0cmluZykgeyByZXR1cm4gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMs
IGNlbGwsIHN0cmluZywgUmV0dXJuQWRkcmVzc1B0cigqKHZvaWQqKilfQWRkcmVzc09mUmV0dXJu
QWRkcmVzcygpKSk7IH0KKworI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCisgICAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBmdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBTdHJpbmdJ
bXBsKiBzdHJpbmcpIHsgcmV0dXJuIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhleGVjLCB2
YWx1ZSwgc3RyaW5nLCBSZXR1cm5BZGRyZXNzUHRyKCoodm9pZCoqKV9BZGRyZXNzT2ZSZXR1cm5B
ZGRyZXNzKCkpKTsgfQorCisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCisgICAgdm9pZCBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUsIEpTQ2VsbCogY2VsbCwgU3Ry
aW5nSW1wbCogc3RyaW5nKSB7IHJldHVybiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoZXhl
YywgdmFsdWUsIGNlbGwsIHN0cmluZywgUmV0dXJuQWRkcmVzc1B0cigqKHZvaWQqKilfQWRkcmVz
c09mUmV0dXJuQWRkcmVzcygpKSk7IH0KIAogI2VuZGlmCiAKICNkZWZpbmUgUF9GVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAogdm9pZCogSklUX09QRVJB
VElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVz
c1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKQorX1BfRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCiAKICNkZWZpbmUgSl9GVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAogRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJu
QWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKQorX0pfRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCiAKICNkZWZpbmUgSl9GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUq
LCBKU0NlbGwqLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9N
X0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FQ0koZnVuY3Rpb24pCitfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUNJKGZ1bmN0aW9uKQogCiAjZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKSShmdW5jdGlvbikgXAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5j
dGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmlu
Z0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5B
TDsgXAotRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikK
K19KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pCiAK
ICNkZWZpbmUgVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5j
dGlvbikgXAogdm9pZCBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5nSW1wbCosIFJldHVybkFk
ZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikKK19WX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxNTYyMzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHA6MTU2MjM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgorCisjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhz
LmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSG9zdENhbGxSZXR1cm5W
YWx1ZS5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbldyYXBwZXJzLmgiCisjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlcGF0Y2guaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2V4
dGVybiAiQyIgeworCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5
SWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQp
Cit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoYmFzZSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKKyAgICBJ
ZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFz
ZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkpOworfQorCitKX0ZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3RXaXRoUmV0
dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0lt
cGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OworCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVz
cyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShiYXNlKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7CisKKyAgICBp
ZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NU
eXBlKSkKKyAgICAgICAgYnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBz
bG90LCBzdHViSW5mbyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9
CisKK0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUpOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsK
KyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0
U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xv
dChiYXNlVmFsdWUpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBp
ZGVudCwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNj
ZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpIHsKKyAgICAgICAgaWYgKHN0dWJJbmZvLnNl
ZW4pCisgICAgICAgICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBz
bG90LCBzdHViSW5mbyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0dWJJbmZvLnNlZW4g
PSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30K
KworSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKG9wZXJhdGlvbklu
T3B0aW1pemUpOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jbk9wdGlt
aXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFN0cmlu
Z0ltcGwqIGtleSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIAorICAgIGlmICghYmFzZS0+aXNPYmplY3QoKSkgeworICAgICAgICB2bS0+dGhy
b3dFeGNlcHRpb24oZXhlYywgY3JlYXRlSW52YWxpZFBhcmFtZXRlckVycm9yKGV4ZWMsICJpbiIs
IGJhc2UpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29k
ZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwor
CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwga2V5KTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChi
YXNlKTsKKyAgICBib29sIHJlc3VsdCA9IGFzT2JqZWN0KGJhc2UpLT5nZXRQcm9wZXJ0eVNsb3Qo
ZXhlYywgaWRlbnQsIHNsb3QpOworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUg
PT0gc3R1YkluZm8uYWNjZXNzVHlwZSk7CisgICAgCisgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisg
ICAgICAgIHJlcGF0Y2hJbihleGVjLCBiYXNlLCBpZGVudCwgcmVzdWx0LCBzbG90LCBzdHViSW5m
byk7CisgICAgZWxzZQorICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKKyAgICAKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZXN1bHQpKTsKK30KKworRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
YmFzZSwgU3RyaW5nSW1wbCoga2V5KQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgaWYgKCFiYXNl
LT5pc09iamVjdCgpKSB7CisgICAgICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVJ
bnZhbGlkUGFyYW1ldGVyRXJyb3IoZXhlYywgImluIiwgYmFzZSkpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKworICAgIElkZW50aWZpZXIg
aWRlbnQodm0sIGtleSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNP
YmplY3QoYmFzZSktPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkpOworfQorCitFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJbihFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUga2V5KQoreworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluKGV4
ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBiYXNlKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIGJhc2UsIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGZ1bmN0aW9uLCBTdHJpbmdJ
bXBsKiB1aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2
bSwgdWlkKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZ1bmN0aW9uKGV4ZWMs
IGFzT2JqZWN0KGJhc2UpLCBpZGVudCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpT
Q2VsbCogZ2V0dGVyU2V0dGVyKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjYWxsR2V0dGVyKGV4ZWMsIGJhc2UsIGdldHRlclNldHRlcikpOworfQorCit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1
aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlk
KTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0
QnlJZENvbnRleHQoKSk7CisgICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMs
IGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Cit9CisKK3ZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVp
ZCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQp
OworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0
QnlJZENvbnRleHQoKSk7CisgICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMs
IGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Cit9CisKK3ZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwq
IHVpZCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1
aWQpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5w
dXRCeUlkQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7CisgICAgYXNP
YmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSksIHNsb3QpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwor
ICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xv
dCk7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1
aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNz
KTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihz
dHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKKyAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQo
KSk7CisgICAgCisgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwor
ICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHN0dWJJbmZv
LnNlZW4pCisgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNs
b3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworICAgIGVsc2UKKyAgICAgICAgc3R1YkluZm8uc2Vl
biA9IHRydWU7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
Q0kob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKTsKK3ZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBT
dHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhy
ZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNl
KTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1
dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZh
bHVlLCBzbG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGlmIChzdHViSW5mby5zZWVuKQorICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlVmFs
dWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKKyAgICBlbHNlCisgICAgICAg
IHN0dWJJbmZvLnNlZW4gPSB0cnVlOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Cit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplV2l0
aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2
bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxv
Y2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgUHV0
UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOworICAgIAorICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVjdChi
YXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgCisg
ICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNj
ZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uc2VlbikK
KyAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZv
LCBEaXJlY3QpOworICAgIGVsc2UKKyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Cit9CisK
K1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJp
bmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1
cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxz
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIEFTU0VS
VChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgIT0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uc2VlbikKKyAgICAgICAgcmVwYXRjaFB1dEJ5
SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOworICAgIGVsc2UK
KyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdCk7
Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdFdpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0s
IHVpZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2Nr
KCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIEpTVmFs
dWUgYmFzZVZhbHVlKGJhc2UpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMt
PmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICAKKyAgICBiYXNlVmFsdWUucHV0
KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgIT0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQs
IHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Qp
Owordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3RX
aXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50
KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVC
bG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBK
U1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwg
ZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIGJhc2VWYWx1
ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNzVHlw
ZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBp
ZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1
aWxkTGlzdCk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIElkZW50
aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0g
ZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vz
c1R5cGUpOworICAgIAorICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2so
KS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgCisgICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkp
OworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVl
LCBzbG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGJ1
aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3Qp
OworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QpOwordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHVi
SW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAor
ICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vz
c1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsIGlk
ZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IEVuY29kZWRKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgQVNTRVJUKHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IGJhc2UtPnN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKKyAgICBBU1NFUlQoIXZtLmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpLmZh
c3RQYXRoU2hvdWxkU3VjY2VlZChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXpl
b2YoSlNWYWx1ZSkpKTsKKyAgICBiYXNlLT5zZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFn
ZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOworICAgIGJhc2UtPnB1dERpcmVjdCh2bSwgb2Zm
c2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKK30KKworc3RhdGljIHZvaWQqIGhhbmRsZUhv
c3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5j
YWxsZXJGcmFtZSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworCisgICAgZXhlY0NhbGxl
ZS0+c2V0U2NvcGUoZXhlYy0+c2NvcGUoKSk7CisgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2Nr
KDApOworCisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKKyAgICAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CisgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY2FsbGVl
LCBjYWxsRGF0YSk7CisgICAgCisgICAgICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZUpT
KTsKKyAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCkgeworICAgICAg
ICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7CisgICAg
ICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CisgICAgICAg
ICAgICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5u
YXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOworICAgICAgICAgICAgaWYgKHZtLT5leGNlcHRp
b24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
KworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxs
UmV0dXJuVmFsdWUpOworICAgICAgICB9CisgICAgCisgICAgICAgIEFTU0VSVChjYWxsVHlwZSA9
PSBDYWxsVHlwZU5vbmUpOworICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMs
IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxlZSkpOworICAgICAgICByZXR1cm4g
dm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB9CisKKyAgICBBU1NFUlQoa2luZCA9PSBD
b2RlRm9yQ29uc3RydWN0KTsKKyAgICAKKyAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7
CisgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YShjYWxs
ZWUsIGNvbnN0cnVjdERhdGEpOworICAgIAorICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlICE9IENv
bnN0cnVjdFR5cGVKUyk7CisgICAgCisgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0
VHlwZUhvc3QpIHsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Y0NhbGxlZSk7CisgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUp
KTsKKyAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29u
c3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOworICAgICAgICBpZiAodm0t
PmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CisKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxs
UmV0dXJuVmFsdWUpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBD
b25zdHJ1Y3RUeXBlTm9uZSk7CisgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBj
cmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpKTsKKyAgICByZXR1cm4gdm0t
PmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KKworaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgRXhl
Y1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
KyAgICAKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVBc1Zh
bHVlKCk7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24o
Y2FsbGVlQXNWYWx1ZSk7CisgICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUs
IGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKKworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIGV4ZWNDYWxsZWUtPnNl
dFNjb3BlKGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKSk7CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjb2RlUHRyOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKKyAgICBpZiAoZXhl
Y3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUt
PmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7CisgICAgZWxzZSB7
CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGlj
X2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisgICAgICAgIEpTT2JqZWN0
KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2Fs
bGVlLCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAg
ICAgICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVTdGFja092ZXJmbG93RXJyb3Io
ZXhlYykpOworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICB9CisgICAgICAgIGNvZGVCbG9jayA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpOworICAgICAgICBpZiAoZXhlY0Nh
bGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4o
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0
aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5n
ZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOworICAgIH0KKyAgICBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlu
a0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7CisgICAgaWYgKCFjYWxsTGlua0luZm8uc2Vl
bk9uY2UoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnNldFNlZW4oKTsKKyAgICBlbHNlCisgICAg
ICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwg
Y29kZVB0ciwga2luZCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGVQ
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cit9CisKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAgIHJldHVybiBsaW5rRm9y
KGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICByZXR1cm4g
bGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKK30KKworaW5saW5lIGNoYXIq
IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQsIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQoreworICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CisgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVBc1Zh
bHVlKCk7CisgICAgY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFz
VmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKQorICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxl
ZSwgY2FsbGVlQXNWYWx1ZSwga2luZCkpOworICAgIAorICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9u
ID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgZXhlY0Nh
bGxlZS0+c2V0U2NvcGUoZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCkpOworICAgIEV4ZWN1dGFi
bGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKKyAgICBpZiAoVU5M
SUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CisgICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0
aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBmdW5jdGlvbi0+
c2NvcGUoKSwga2luZCk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjQ2FsbGVlLCBlcnJvcik7CisgICAgICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGV4ZWN1
dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKK30KKworaW5saW5lIGNoYXIqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgSlNDZWxsKiBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQ7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRoRnVuY3Rp
b24oZXhlY0NhbGxlZSwga2luZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsKK30KKwor
c3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWND
YWxsZWUsIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwsIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvKQoreworICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBKU0Z1bmN0aW9uKiBvbGRDYWxsZWUgPSBj
YWxsTGlua0luZm8uY2FsbGVlLmdldCgpOworICAgIAorICAgIGlmICghb2xkQ2FsbGVlCisgICAg
ICAgIHx8IG9sZENhbGxlZS0+c3RydWN0dXJlKCkgIT0gY2FsbGVlLT5zdHJ1Y3R1cmUoKQorICAg
ICAgICB8fCBvbGRDYWxsZWUtPmV4ZWN1dGFibGUoKSAhPSBjYWxsZWUtPmV4ZWN1dGFibGUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVChjYWxsZWUtPmV4ZWN1dGFi
bGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHIgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+
YWRkcmVzc0ZvckNhbGwoKTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICBp
ZiAoY2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgIGNvZGVC
bG9jayA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihjYWxsZWUtPmV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvckNhbGwoKTsK
KyAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBz
dGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgbGlua0Nsb3N1cmVDYWxsKAorICAg
ICAgICBleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVCbG9jaywKKyAgICAgICAgY2FsbGVl
LT5zdHJ1Y3R1cmUoKSwgY2FsbGVlLT5leGVjdXRhYmxlKCksIGNvZGVQdHIpOworICAgIAorICAg
IHJldHVybiB0cnVlOworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9z
dXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbDsKKyAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4
ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxv
Y2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOworCisgICAgaWYg
KCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzRnVuY3Rp
b25DZWxsLCBjYWxsTGlua0luZm8pKQorICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCBj
YWxsTGlua0luZm8sIENvZGVGb3JDYWxsKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSkKK3sgICAgCisgICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZv
ckNhbGwpOworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1
Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWND
YWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOworfQorCitKSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BF
UkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBj
YWxsSW5kZXgpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKKyAgICAK
KyAgICB1bnNpZ25lZCB2UENJbmRleCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5ieXRlY29kZU9mZnNl
dEZvckNhbGxBdEluZGV4KGNhbGxJbmRleCk7CisgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVy
ID0gZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0aW9uVmFsdWUsIHZQQ0luZGV4KTsKKyAg
ICBBU1NFUlQoaGFuZGxlci5jYXRjaFJvdXRpbmUpOworICAgIHJldHVybiBkZmdIYW5kbGVyRW5j
b2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxlci5jYXRjaFJvdXRpbmUpOworfQorCitKSVRI
YW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJJblN0dWIo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCit7CisgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7
CisgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKKyAgICAKKyAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4gPSBzdHViSW5mby0+Y29kZU9yaWdpbjsKKyAgICB3aGlsZSAoY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpCisgICAgICAgIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyOworICAgIAorICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVy
aWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgpOworICAgIEFTU0VSVChoYW5kbGVyLmNhdGNoUm91dGluZSk7CisgICAgcmV0dXJuIGRmZ0hh
bmRsZXJFbmNvZGVkKGhhbmRsZXIuY2FsbEZyYW1lLCBoYW5kbGVyLmNhdGNoUm91dGluZSk7Cit9
CisKK30gLy8gZXh0ZXJuICJDIgorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01ODcsNyArNTg3LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0
dWFsQ29ucwogICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1
Y3QpOwogfQogCi1KSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlv
bkhhbmRsZXIoRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBjYWxsSW5kZXgpCitKSVRIYW5kbGVy
RW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNTk1LDMwICs1OTUsMTA3IEBAIEpJVEhhbmRsZXJF
bmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3VwRXgKICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKICAgICAK
LSAgICB1bnNpZ25lZCB2UENJbmRleCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5ieXRlY29kZU9mZnNl
dEZvckNhbGxBdEluZGV4KGNhbGxJbmRleCk7Ci0gICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVy
ID0gZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0aW9uVmFsdWUsIHZQQ0luZGV4KTsKKyAg
ICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBnZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNl
cHRpb25WYWx1ZSk7CiAgICAgQVNTRVJUKGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKICAgICByZXR1
cm4gZGZnSGFuZGxlckVuY29kZWQoaGFuZGxlci5jYWxsRnJhbWUsIGhhbmRsZXIuY2F0Y2hSb3V0
aW5lKTsKIH0KIAotSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRp
b25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOworfSAvLyBleHRlcm4gIkMiCiAKLSAgICBKU1ZhbHVlIGV4
Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgQVNTRVJUKGV4Y2VwdGlvblZh
bHVlKTsKLSAgICAKLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBzdHViSW5mby0+Y29kZU9y
aWdpbjsKLSAgICB3aGlsZSAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNv
ZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOwotICAgIAotICAg
IEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4Y2Vw
dGlvblZhbHVlLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChoYW5kbGVy
LmNhdGNoUm91dGluZSk7Ci0gICAgcmV0dXJuIGRmZ0hhbmRsZXJFbmNvZGVkKGhhbmRsZXIuY2Fs
bEZyYW1lLCBoYW5kbGVyLmNhdGNoUm91dGluZSk7CisjaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUo
WDg2XzY0KQorYXNtICgKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJu
VmFsdWUpICJcbiIKK0hJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK1NZ
TUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKKyAgICAibW92IDQw
KCVyMTMpLCAlcjEzXG4iCisgICAgIm1vdiAlcjEzLCAlcmRpXG4iCisgICAgImptcCAiIExPQ0FM
X1JFRkVSRU5DRShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgorKTsK
KworI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoWDg2KQorYXNtICgKKyIudGV4dCIgIlxuIiBc
CisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCitI
SURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCitTWU1CT0xfU1RSSU5HKGdl
dEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6IiAiXG4iCisgICAgIm1vdiA0MCglZWRpKSwgJWVkaVxu
IgorICAgICJtb3YgJWVkaSwgNCglZXNwKVxuIgorICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0Uo
Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICJcbiIKKyk7CisKKyNlbGlmIENP
TVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9USFVNQjIpCithc20gKAorIi50ZXh0IiAiXG4iCisiLmFs
aWduIDIiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFs
dWUpICJcbiIKK0hJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKKyIudGh1
bWIiICJcbiIKKyIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZ2V0SG9zdENhbGxSZXR1
cm5WYWx1ZSkgIlxuIgorU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiOiIg
IlxuIgorICAgICJsZHIgcjUsIFtyNSwgIzQwXSIgIlxuIgorICAgICJtb3YgcjAsIHI1IiAiXG4i
CisgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVj
U3RhdGUpICJcbiIKKyk7CisKKyNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9UUkFESVRJ
T05BTCkKK2FzbSAoCisiLnRleHQiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhv
c3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK0hJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFs
dWUpICJcbiIKK0lOTElORV9BUk1fRlVOQ1RJT04oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkKK1NZ
TUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKKyAgICAibGRyIHI1
LCBbcjUsICM0MF0iICJcbiIKKyAgICAibW92IHIwLCByNSIgIlxuIgorICAgICJiICIgTE9DQUxf
UkVGRVJFTkNFKGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiXG4iCispOwor
CisjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShNSVBTKQorYXNtICgKKyIudGV4dCIgIlxuIgor
Ii5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgorSElE
RV9TWU1CT0woZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgorU1lNQk9MX1NUUklORyhnZXRI
b3N0Q2FsbFJldHVyblZhbHVlKSAiOiIgIlxuIgorICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZ2V0
SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpCisgICAgImx3ICRzMCwgNDAoJHMwKSIg
IlxuIgorICAgICJtb3ZlICRhMCwgJHMwIiAiXG4iCisgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0Uo
Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICJcbiIKKyk7CisKKyNlbGlmIENP
TVBJTEVSKEdDQykgJiYgQ1BVKFNINCkKK2FzbSAoCisiLnRleHQiICJcbiIKKyIuZ2xvYmwgIiBT
WU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK0hJREVfU1lNQk9MKGdl
dEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK1NZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1
cm5WYWx1ZSkgIjoiICJcbiIKKyAgICAiYWRkICM0MCwgcjE0IiAiXG4iCisgICAgIm1vdi5sIEBy
MTQsIHIxNCIgIlxuIgorICAgICJtb3YgcjE0LCByNCIgIlxuIgorICAgICJtb3YubCAyZiwgIiBT
SDRfU0NSQVRDSF9SRUdJU1RFUiAiXG4iCisgICAgImJyYWYgIiBTSDRfU0NSQVRDSF9SRUdJU1RF
UiAiXG4iCisgICAgIm5vcCIgIlxuIgorICAgICIxOiAuYmFsaWduIDQiICJcbiIKKyAgICAiMjog
LmxvbmcgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3Rh
dGUpICItMWJcbiIKKyk7CisKKyNlbGlmIENPTVBJTEVSKE1TVkMpICYmIENQVShYODYpCitleHRl
cm4gIkMiIHsKKyAgICBfX2RlY2xzcGVjKG5ha2VkKSBFbmNvZGVkSlNWYWx1ZSBIT1NUX0NBTExf
UkVUVVJOX1ZBTFVFX09QVElPTiBnZXRIb3N0Q2FsbFJldHVyblZhbHVlKCkKKyAgICB7CisgICAg
ICAgIF9fYXNtIHsKKyAgICAgICAgICAgIG1vdiBlZGksIFtlZGkgKyA0MF07CisgICAgICAgICAg
ICBtb3YgW2VzcCArIDRdLCBlZGk7CisgICAgICAgICAgICBqbXAgZ2V0SG9zdENhbGxSZXR1cm5W
YWx1ZVdpdGhFeGVjU3RhdGUKKyAgICAgICAgfQorICAgIH0KIH0KKyNlbmRpZgogCi19IC8vIGV4
dGVybiAiQyIKK2V4dGVybiAiQyIgRW5jb2RlZEpTVmFsdWUgSE9TVF9DQUxMX1JFVFVSTl9WQUxV
RV9PUFRJT04gZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIGlmICghZXhlYykKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS5ob3N0Q2Fs
bFJldHVyblZhbHVlKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTYyMzYpCShmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oOjE1NjIzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSklUT3BlcmF0aW9uc19oCisjZGVmaW5lIEpJVE9wZXJhdGlvbnNfaAor
CisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiSlNBcnJheS5oIgorI2luY2x1ZGUg
IkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlB1
dEtpbmQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgIldhdGNo
cG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBDQUxMSU5HX0NPTlZFTlRJT05fSVNf
U1REQ0FMTAorI2RlZmluZSBKSVRfT1BFUkFUSU9OIENERUNMCisjZWxzZQorI2RlZmluZSBKSVRf
T1BFUkFUSU9OCisjZW5kaWYKKworLy8gVGhlc2UgdHlwZWRlZnMgcHJvdmlkZSB0eXBlY2hlY2tp
bmcgd2hlbiBnZW5lcmF0aW5nIGNhbGxzIG91dCB0byBoZWxwZXIgcm91dGluZXM7CisvLyB0aGlz
IGhlbHBzIHByZXZlbnQgY2FsbGluZyBhIGhlbHBlciByb3V0aW5lIHdpdGggdGhlIHdyb25nIGFy
Z3VtZW50cyEKKy8qCisgICAgS2V5OgorICAgIFY6IHZvaWQKKyAgICBKOiBKU1ZhbHVlCisgICAg
UDogcG9pbnRlciAodm9pZCopCisgICAgQzogSlNDZWxsKgorICAgIEE6IEpTQXJyYXkqCisgICAg
Uzogc2l6ZV90CisgICAgWjogaW50MzJfdAorICAgIEQ6IGRvdWJsZQorICAgIEk6IFN0cmluZ0lt
cGwqCisqLwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVy
YXRpb25fRSkoRXhlY1N0YXRlKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gKCpKX0pJVE9wZXJhdGlvbl9FQSkoRXhlY1N0YXRlKiwgSlNBcnJheSopOwordHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUFaKShFeGVjU3Rh
dGUqLCBKU0FycmF5KiwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUNJKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJ
bXBsKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJh
dGlvbl9FQ0opKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VEQSkoRXhlY1N0
YXRlKiwgZG91YmxlLCBKU0FycmF5Kik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSSkoRXhlY1N0YXRlKiwgU3RyaW5nSW1wbCopOwordHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUopKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKQSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IEpTQXJyYXkqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklU
T3BlcmF0aW9uX0VKSSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKTsK
K3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VK
SikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKc3NaKShFeGVj
U3RhdGUqLCBKU1N0cmluZyosIGludDMyX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpQKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSwgdm9pZCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRP
cGVyYXRpb25fRVApKEV4ZWNTdGF0ZSosIHZvaWQqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VQUCkoRXhlY1N0YXRlKiwgdm9pZCosIHZv
aWQqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0
aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FU1MpKEV4ZWNTdGF0ZSosIHNpemVf
dCwgc2l6ZV90KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklU
T3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VaSWNmWikoRXhlY1N0YXRlKiwgaW50
MzJfdCwgSW5saW5lQ2FsbEZyYW1lKiwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FWlopKEV4ZWNTdGF0ZSosIGludDMyX3Qs
IGludDMyX3QpOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlv
bl9FKShFeGVjU3RhdGUqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRP
cGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwordHlwZWRlZiBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0eXBl
ZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgSlNDZWxsKik7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNf
SklUT3BlcmF0aW9uX0VJY2YpKEV4ZWNTdGF0ZSosIElubGluZUNhbGxGcmFtZSopOwordHlwZWRl
ZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9w
ZXJhdGlvbl9FSnNzU3QpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgU3RydWN0dXJlKik7Cit0eXBl
ZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NKc3MpKEV4ZWNT
dGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFU
SU9OICgqQ19KSVRPcGVyYXRpb25fRUpzc0pzc0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBK
U1N0cmluZyosIEpTU3RyaW5nKik7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNf
SklUT3BlcmF0aW9uX0VPWikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKK3R5cGVk
ZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRVN0KShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVy
YXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwordHlwZWRlZiBkb3VibGUgSklUX09QRVJB
VElPTiAoKkRfSklUT3BlcmF0aW9uX0REKShkb3VibGUsIGRvdWJsZSk7Cit0eXBlZGVmIGRvdWJs
ZSBKSVRfT1BFUkFUSU9OICgqRF9KSVRPcGVyYXRpb25fWlopKGludDMyX3QsIGludDMyX3QpOwor
dHlwZWRlZiBkb3VibGUgSklUX09QRVJBVElPTiAoKkRfSklUT3BlcmF0aW9uX0VKKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpf
SklUT3BlcmF0aW9uX0QpKGRvdWJsZSk7Cit0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgq
U19KSVRPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVk
ZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3Bl
cmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsK
K3R5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9KKShFbmNvZGVk
SlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0Up
KEV4ZWNTdGF0ZSopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlv
bl9FT1pEKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIGRvdWJsZSk7Cit0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VPWkopKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVS
QVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDSWNmKShFeGVjU3RhdGUqLCBK
U0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgq
Vl9KSVRPcGVyYXRpb25fRUNDSWNmKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqLCBJbmxp
bmVDYWxsRnJhbWUqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRp
b25fRUNKSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNaKShF
eGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9O
ICgqVl9KSVRPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUpDSSkoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCosIFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgdm9pZCBK
SVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUpKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklU
X09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VKUFApKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCB2b2lkKiwgdm9pZCopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9w
ZXJhdGlvbl9FUFpKKShFeGVjU3RhdGUqLCB2b2lkKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUp
OwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9XKShXYXRjaHBv
aW50U2V0Kik7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9F
KShFeGVjU3RhdGUqKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0
aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElP
TiAoKlBfSklUT3BlcmF0aW9uX0VKUykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVf
dCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FTykoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklU
T3BlcmF0aW9uX0VPUykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QpOwordHlwZWRlZiBj
aGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09i
amVjdCosIGludDMyX3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVy
YXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogSklU
X09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwordHlw
ZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVNKc3MpKEV4ZWNTdGF0
ZSosIHNpemVfdCwgSlNTdHJpbmcqKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBf
SklUT3BlcmF0aW9uX0VTdCkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Cit0eXBlZGVmIGNoYXIq
IEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FU3RKKShFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJ
VE9wZXJhdGlvbl9FU3RQUykoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCk7
Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FU3RTUykoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgc2l6ZV90LCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBKSVRf
T1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVN0WikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwg
aW50MzJfdCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9F
WlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIGludDMyX3QpOwordHlwZWRlZiBTdHJpbmdJbXBsKiBK
SVRfT1BFUkFUSU9OICgqSV9KSVRPcGVyYXRpb25fRUpzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcq
KTsKK3R5cGVkZWYgSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gKCpKc3NfSklUT3BlcmF0aW9uX0Va
KShFeGVjU3RhdGUqLCBpbnQzMl90KTsKKworZXh0ZXJuICJDIiB7CisKKy8vIFRoaXMgbWV0aG9k
IGlzIHVzZWQgdG8gbG9va3VwIGFuIGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9j
YXRpb24sIHdoaWNoIGlzCisvLyB0aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBj
YWxscyBvdXQgdG8gb25lIG9mIHRoZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92ZS4KKworLy8gQWNj
b3JkaW5nIHRvIEMrKyBydWxlcywgYSB0eXBlIHVzZWQgZm9yIHRoZSByZXR1cm4gc2lnbmF0dXJl
IG9mIGZ1bmN0aW9uIHdpdGggQyBsaW5rYWdlIChpLmUuCisvLyAnZXh0ZXJuICJDIicpIG5lZWRz
IHRvIGJlIFBPRDsgaGVuY2UgcHV0dGluZyBhbnkgY29uc3RydWN0b3JzIGludG8gaXQgY291bGQg
Y2F1c2UgZWl0aGVyIGNvbXBpbGVyCisvLyB3YXJuaW5ncywgb3Igd29yc2UsIGEgY2hhbmdlIGlu
IHRoZSBBQkkgdXNlZCB0byByZXR1cm4gdGhlc2UgdHlwZXMuCitzdHJ1Y3QgSklUSGFuZGxlciB7
CisgICAgdW5pb24gVW5pb24geworICAgICAgICBzdHJ1Y3QgU3RydWN0IHsKKyAgICAgICAgICAg
IEV4ZWNTdGF0ZSogZXhlYzsKKyAgICAgICAgICAgIHZvaWQqIGhhbmRsZXI7CisgICAgICAgIH0g
czsKKyAgICAgICAgdWludDY0X3QgZW5jb2RlZDsKKyAgICB9IHU7Cit9OworCitpbmxpbmUgSklU
SGFuZGxlciBjcmVhdGVKSVRIYW5kbGVyKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogaGFuZGxlcikK
K3sKKyAgICBKSVRIYW5kbGVyIHJlc3VsdDsKKyAgICByZXN1bHQudS5zLmV4ZWMgPSBleGVjOwor
ICAgIHJlc3VsdC51LnMuaGFuZGxlciA9IGhhbmRsZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworI2lmIENQVShYODZfNjQpCit0eXBlZGVmIEpJVEhhbmRsZXIgSklUSGFuZGxlckVuY29kZWQ7
CitpbmxpbmUgSklUSGFuZGxlckVuY29kZWQgZGZnSGFuZGxlckVuY29kZWQoRXhlY1N0YXRlKiBl
eGVjLCB2b2lkKiBoYW5kbGVyKQoreworICAgIHJldHVybiBjcmVhdGVKSVRIYW5kbGVyKGV4ZWMs
IGhhbmRsZXIpOworfQorI2Vsc2UKK3R5cGVkZWYgdWludDY0X3QgSklUSGFuZGxlckVuY29kZWQ7
CitpbmxpbmUgSklUSGFuZGxlckVuY29kZWQgZGZnSGFuZGxlckVuY29kZWQoRXhlY1N0YXRlKiBl
eGVjLCB2b2lkKiBoYW5kbGVyKQoreworICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihKSVRIYW5k
bGVyOjpVbmlvbikgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgSklUSGFuZGxlcl9Vbmlvbl9pc182NGJp
dCk7CisgICAgcmV0dXJuIGNyZWF0ZUpJVEhhbmRsZXIoZXhlYywgaGFuZGxlcikudS5lbmNvZGVk
OworfQorI2VuZGlmCitKSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIoRXhlY1N0YXRlKiwgdWludDMyX3QpIFdURl9JTlRFUk5BTDsKK0pJVEhhbmRs
ZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlckluU3R1YihFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyopIFdURl9JTlRFUk5BTDsKKworRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0
cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkluT3B0aW1pemUoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOworRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbihFeGVjU3RhdGUqLCBKU0NlbGwq
LCBTdHJpbmdJbXBsKik7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
bmVyaWNJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7CitFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMsIFN0cmluZ0ltcGwqKSBXVEZfSU5U
RVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdU
Rl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RG
X0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RP
cHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCog
YmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7
Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCop
IFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
SlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBX
VEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3Jh
Z2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU9mZnNldCwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25z
dHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKKworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpJVE9wZXJhdGlvbnNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3MCw4ICsxNzAsNyBAQCBpbmxpbmUgSklUSGFuZGxlckVuY29kZWQgZGZnSGFuZGxlckVu
Y29kCiAgICAgcmV0dXJuIGNyZWF0ZUpJVEhhbmRsZXIoZXhlYywgaGFuZGxlcikudS5lbmNvZGVk
OwogfQogI2VuZGlmCi1KSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIoRXhlY1N0YXRlKiwgdWludDMyX3QpIFdURl9JTlRFUk5BTDsKLUpJVEhhbmRs
ZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlckluU3R1YihFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyopIFdURl9JTlRFUk5BTDsKK0pJVEhhbmRsZXJFbmNv
ZGVkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqKSBXVEZf
SU5URVJOQUw7CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJ
ZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsK
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDE1NjIz
NikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oOjE1NjIzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFJlZ2lzdGVyU2V0X2gKKyNkZWZpbmUgUmVnaXN0ZXJTZXRfaAor
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVk
ZSAiRlBSSW5mby5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvQml0bWFw
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgdG90YWxOdW1i
ZXJPZlJlZ2lzdGVycyA9CisgICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQnl0
ZXNJblJlZ2lzdGVyU2V0ID0KKyAgICAodG90YWxOdW1iZXJPZlJlZ2lzdGVycyArIDcpID4+IDM7
CisKK3R5cGVkZWYgdWludDhfdCBSZWdpc3RlclNldFBPRFtudW1iZXJPZkJ5dGVzSW5SZWdpc3Rl
clNldF07CisKK2NsYXNzIFJlZ2lzdGVyU2V0IHsKK3B1YmxpYzoKKyAgICBSZWdpc3RlclNldCgp
CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkJ5dGVzSW5SZWdpc3Rl
clNldDsgaS0tOykKKyAgICAgICAgICAgIG1fc2V0W2ldID0gMDsKKyAgICB9CisgICAgCisgICAg
UmVnaXN0ZXJTZXQoY29uc3QgUmVnaXN0ZXJTZXRQT0QmIG90aGVyKQorICAgIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCisgICAg
ICAgICAgICBtX3NldFtpXSA9IG90aGVyW2ldOworICAgIH0KKyAgICAKKyAgICBjb25zdCBSZWdp
c3RlclNldFBPRCYgYXNQT0QoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorICAgIAorICAgIHZv
aWQgY29weUluZm8oUmVnaXN0ZXJTZXRQT0QmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCisgICAg
ICAgICAgICBvdGhlcltpXSA9IG1fc2V0W2ldOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChH
UFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgc2V0Qml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0R1BSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsK
KyAgICAgICAgc2V0Qml0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcihHUFJS
ZWcgcmVnKQorICAgIHsKKyAgICAgICAgY2xlYXJCaXQoR1BSSW5mbzo6dG9JbmRleChyZWcpKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBnZXQoR1BSUmVnIHJlZykgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBnZXRCaXQoR1BSSW5mbzo6dG9JbmRleChyZWcpKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBnZXRHUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAgICBy
ZXR1cm4gZ2V0Qml0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJuIHRoZSBpbmRl
eCd0aCBmcmVlIEdQUi4KKyAgICBHUFJSZWcgZ2V0RnJlZUdQUih1bnNpZ25lZCBpbmRleCA9IDAp
IGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFnZXRHUFJCeUluZGV4KGkpICYm
ICFpbmRleC0tKQorICAgICAgICAgICAgICAgIHJldHVybiBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNldChGUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgc2V0Qml0KEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzZXRGUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAgICBzZXRC
aXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpbmRleCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgY2xlYXIoRlBSUmVnIHJlZykKKyAgICB7CisgICAgICAgIGNsZWFyQml0KEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBnZXQoRlBSUmVnIHJlZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBn
ZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjp0b0luZGV4KHJlZykp
OworICAgIH0KKyAgICAKKyAgICBib29sIGdldEZQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVycyk7CisgICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMg
KyBpbmRleCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgor
ICAgIHZvaWQgc2V0QnlJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHNldChC
YW5rSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBCYW5rSW5mbz4KKyAgICBib29sIGdldEJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2V0KEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7Cisg
ICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mU2V0R1BScygpIGNvbnN0CisgICAgewor
ICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBH
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFnZXRC
aXQoaSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXN1bHQrKzsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB1bnNp
Z25lZCBudW1iZXJPZlNldEZQUnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVz
dWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnM7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghZ2V0Qml0KEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzICsgaSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBy
ZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBudW1iZXJPZlNldFJlZ2lzdGVycygpIGNvbnN0CisgICAgeworICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0b3RhbE51
bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIWdldEJpdChpKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lk
IHNldEJpdCh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJl
ck9mUmVnaXN0ZXJzKTsKKyAgICAgICAgbV9zZXRbaSA+PiAzXSB8PSAoMSA8PCAoaSAmIDcpKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhckJpdCh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICAgICAgbV9zZXRbaSA+
PiAzXSAmPSB+KDEgPDwgKGkgJiA3KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgZ2V0Qml0KHVu
c2lnbmVkIGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaSA8IHRvdGFsTnVtYmVyT2ZS
ZWdpc3RlcnMpOworICAgICAgICByZXR1cm4gISEobV9zZXRbaSA+PiAzXSAmICgxIDw8IChpICYg
NykpKTsKKyAgICB9CisgICAgCisgICAgUmVnaXN0ZXJTZXRQT0QgbV9zZXQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2Vsc2UgLy8gRU5BQkxFKEpJVCkgLT4gc28gaWYgSklUIGlzIGRp
c2FibGVkCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBEZWZpbmUgUmVnaXN0ZXJTZXRQT0QgdG8g
c29tZXRoaW5nIHRoYXQgaXMgYSBQT0QsIGJ1dCBpcyBvdGhlcndpc2UgdXNlbGVzcywKKy8vIHRv
IG1ha2UgaXQgZWFzaWVyIHRvIHJlZmVyIHRvIHRoaXMgdHlwZSBpbiBjb2RlIHRoYXQgbWF5IGJl
IGNvbXBpbGVkIHdoZW4KKy8vIHRoZSBERkcgaXMgZGlzYWJsZWQuCisKK3N0cnVjdCBSZWdpc3Rl
clNldFBPRCB7IH07CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKKworI2VuZGlmIC8vIFJlZ2lzdGVyU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNTYyMzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHA6MTU2MjM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlcGF0Y2guaCIKKworI2lmIEVOQUJMRShKSVQpCisK
KyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWxsRnJhbWVJbmxpbmVzLmgi
CisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0LmgiCisjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgorI2luY2x1ZGUgIlNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5o
IgorI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIHZvaWQgcmVwYXRjaENhbGwo
Q29kZUJsb2NrKiBjb2RlYmxvY2ssIENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIg
bmV3Q2FsbGVlRnVuY3Rpb24pCit7CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVibG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rp
b24pOworfQorCitzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVu
Y3Rpb24sIGJvb2wgY29tcGFjdCkKK3sKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
Y29kZUJsb2NrKTsKKworICAgIC8vIE9ubHkgb3B0aW1pemUgb25jZSEKKyAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHNsb3dQYXRoRnVuY3Rpb24p
OworCisgICAgLy8gUGF0Y2ggdGhlIHN0cnVjdHVyZSBjaGVjayAmIHRoZSBvZmZzZXQgb2YgdGhl
IGxvYWQuCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNoZWNrSW1tVG9DYWxsKSwgc3RydWN0dXJlKTsKKyAgICByZXBhdGNoQnVmZmVyLnNldExv
YWRJbnN0cnVjdGlvbklzQWN0aXZlKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5jb252ZXJ0
aWJsZUxvYWRBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdG9yYWdlTG9h
ZCksIGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
aWYgKGNvbXBhY3QpCisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdl
KG9mZnNldCkpOworICAgIGVsc2UKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9y
YWdlKG9mZnNldCkpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBpZiAoY29tcGFjdCkg
eworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsK
KyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
UGF5bG9hZExvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNl
dCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0
b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMudGFnKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3Jh
Z2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpOworICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1
cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAor
ICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVy
ZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKK3sKKyAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUo
KSA9PSBzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3Rp
bGxWYWxpZCgpKSB7CisgICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQo
c3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVE
CisgICAgICAgIC8vIElmIHdlIGV4ZWN1dGUgdGhpcyBjb2RlLCB0aGUgb2JqZWN0IG11c3QgaGF2
ZSB0aGUgc3RydWN0dXJlIHdlIGV4cGVjdC4gQXNzZXJ0CisgICAgICAgIC8vIHRoaXMgaW4gZGVi
dWcgbW9kZXMuCisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG9iamVjdCksIHNjcmF0Y2hHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9
IGppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSkpOworICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICBvay5saW5r
KCZqaXQpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Cisg
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZCgKKyAgICAgICAgaml0LmJyYW5jaFB0cigKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOworfQorCitz
dGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgSlNWYWx1ZSBwcm90
b3R5cGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
CisgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWls
dXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAgIGlmIChwcm90b3R5cGUuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgp
KTsKKyAgICAKKyAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgICAgIHByb3Rv
dHlwZS5hc0NlbGwoKSwgcHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2Nr
LCBzdHViSW5mbywgaml0LAorICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworfQor
CitzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZl
ciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgdGFyZ2V0KQoreworICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRj
aGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSkgeworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGxh
Y2VXaXRoSnVtcCgKKyAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVC
cmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoCisgICAgICAgICAgICAgICAgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICAg
ICAtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKSksCisg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKKyAgICAgICAgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKKyAgICAgICAgICAgIHN0dWJJbmZvLnBh
dGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwodGFyZ2V0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRSZXN0b3JlU2NyYXRjaChNYWNyb0Fz
c2VtYmxlciYgc3R1YkppdCwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgR1BSUmVnIHNjcmF0
Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCYgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKK3sKKyAgICBp
ZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKKyAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQ
Uik7CisgICAgICAgIAorICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAg
IAorICAgICAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgaGVyZSwgc28gd2UgY2FuIHBvcCBzY3Jh
dGNoR1BSLCBhbmQgdGhlbiBqdW1wIGJhY2suCisgICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZz
dHViSml0KTsKKyAgICAgICAgCisgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAg
ICAgICAKKyAgICAgICAgZmFpbCA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKK30KKworc3RhdGljIHZv
aWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRU
b1Jlc3RvcmVTY3JhdGNoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzLCBD
b2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNl
QmVnaW4pCit7CisgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdWNjZXNzTGFiZWwpOwor
ICAgICAgICAKKyAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKKyAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgZGlyZWN0bHkgYmFjayB0byBub3JtYWwg
cGF0aAorICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBzbG93Q2FzZUJlZ2luKTsK
K30KKworc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVm
ZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZh
aWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMpCit7CisgICAgbGlua1Jl
c3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2Vzcywg
ZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpKTsKK30KKworc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1
YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJl
Q2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0
aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRp
bmUpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlciBz
dHViSml0OworICAgICAgICAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJl
Zz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2guZGZnLnZhbHVlVGFnR1BSKTsKKyNlbmRpZgorICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVy
cykuZ2V0RnJlZUdQUigpOworICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsK
KyAgICAKKyAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2Ny
YXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgc2NyYXRjaEdQUiA9
IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIsIHJl
c3VsdFRhZ0dQUik7CisjZW5kaWYKKyAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOwor
ICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7CisgICAgfQorICAgIAorICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CisgICAgCisgICAgZmFpbHVyZUNh
c2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7CisgICAgCisgICAg
U3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7CisgICAgSlNPYmplY3QqIHByb3RvT2JqZWN0
ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewor
ICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZv
ckxvb2t1cChleGVjKSk7CisgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKKyAg
ICAgICAgICAgIHByb3RvT2JqZWN0LCBwcm90b09iamVjdC0+c3RydWN0dXJlKCksIGV4ZWMtPmNv
ZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwKKyAgICAgICAgICAgIGZhaWx1cmVDYXNlcywg
c2NyYXRjaEdQUik7CisgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7CisgICAgfQor
ICAgIAorICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKSB7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgc3R1YkppdC5sb2FkNjQocHJvdG9PYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0
KG9mZnNldCksIHJlc3VsdEdQUik7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBz
dHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QtPmxv
Y2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkpLCByZXN1bHRHUFIpOworICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CisgICAg
ICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJl
c3VsdEdQUik7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBzdHViSml0LmxvYWRQdHIo
cHJvdG9PYmplY3QtPmJ1dHRlcmZseUFkZHJlc3MoKSwgcmVzdWx0R1BSKTsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSksIHJlc3VsdEdQUik7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAg
ICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNl
dEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3Vs
dFRhZ0dQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CisjZW5kaWYKKyAgICB9CisKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOworICAgIAorICAgIGVtaXRSZXN0b3JlU2NyYXRj
aChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFp
bCwgZmFpbHVyZUNhc2VzKTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
JnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICAKKyAgICBsaW5rUmVzdG9yZVNjcmF0
Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWls
dXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7CisgICAgCisgICAgc3R1YlJv
dXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKKyAgICAgICAgcGF0Y2hCdWZmZXIs
CisgICAgICAgICgiREZHIHByb3RvdHlwZSBjaGFpbiBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJldHVy
biBwb2ludCAlcCIsCisgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5k
YXRhKCksIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Cit9CisKK3N0YXRpYyBi
b29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRl
c3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBjaGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAor
ICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJl
Y3Vyc2lvbi4KKworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7
CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGlzSlNBcnJheShiYXNl
VmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7
CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC5kZmcuYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgR1BSUmVn
IHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZh
bHVlVGFnR1BSKTsKKyNlbmRpZgorICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJz
KS5nZXRGcmVlR1BSKCk7CisgICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7CisgICAgICAgIAor
ICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNj
cmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICBzY3JhdGNo
R1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQ
UiwgcmVzdWx0VGFnR1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNh
c2VzOworICAgICAgIAorICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOyAK
KyAgICAgICAgc3R1YkppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkp
KTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihJbmRleGluZ1NoYXBlTWFzaykpKTsKKyAgICAgICAgCisgICAgICAgIHN0dWJKaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDApKSk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdHViSml0Lm9y
NjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIp
OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgc3R1YkppdC5tb3ZlKHNjcmF0Y2hH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigweGZmZmZmZmZmKSwgcmVzdWx0VGFnR1BSKTsgLy8gSlNWYWx1ZTo6SW50MzJU
YWcKKyNlbmRpZgorCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7
CisgICAgICAgIAorICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Cisg
ICAgICAgIAorICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNv
ZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZm
ZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2VzcywgZmFpbCwgZmFpbHVy
ZUNhc2VzKTsKKyAgICAgICAgCisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJ
WkVfQ09ERV9GT1JfREZHX1NUVUIoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAg
ICAgICgiREZHIEdldEJ5SWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLAorICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEo
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKKyAgICAgICAgCisgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOworICAgICAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1
YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKKyAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25H
ZXRCeUlkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgbGVuZ3RoIGFjY2VzcyBmb3IgU3RyaW5nLgorCisg
ICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KKyAgICBp
ZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTQ2Vs
bCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nl
c3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPcHRp
bWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkg
eworICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCisgICAgICAgICAgICB8fCAh
TWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNl
dFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkpIHsKKyAgICAg
ICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1
aWxkTGlzdCwgdHJ1ZSk7CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSBnZXR0ZXJz
IGFuZCBzZXR0ZXJzCisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2Fj
aGVkT2Zmc2V0KCk7CisgICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5G
b3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJhc2UoKSwgcHJvcGVydHlO
YW1lLCBvZmZzZXQpOworICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFp
biA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgCisgICAgZ2VuZXJhdGVQ
cm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50
LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxU
b1Nsb3dDYXNlKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUpOworICAgIAorICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOworICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNo
QnVmZmVyLCBzdHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwor
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3Bl
cmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7CisgICAgCisgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRD
aGFpbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90
eXBlQ2hhaW4sIGNvdW50LCB0cnVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCByZXBh
dGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGJvb2wgY2FjaGVkID0gdHJ5Q2FjaGVHZXRCeUlE
KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7CisgICAgaWYg
KCFjYWNoZWQpCisgICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworfQorCitzdGF0aWMgYm9v
bCBnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QoCisgICAgVk0qIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdComIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgaW50JiBsaXN0SW5k
ZXgsCisgICAgQ29kZUxvY2F0aW9uTGFiZWwmIHNsb3dDYXNlKQoreworICAgIHNsb3dDYXNlID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOworICAgIAorICAgIGlmIChzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc191bnNldCkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3R1YkluZm8u
c3R1YlJvdXRpbmUpOworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCk7CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRC
eUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAwLCBmYWxzZSk7CisgICAgICAg
IGxpc3RJbmRleCA9IDA7CisgICAgfSBlbHNlIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc19nZXRfYnlfaWRfc2VsZikgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3R1YkluZm8u
c3R1YlJvdXRpbmUpOworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShzbG93Q2FzZSks
IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7
CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0LCAxLCB0cnVlKTsKKyAgICAgICAgbGlzdEluZGV4ID0gMTsKKyAgICB9IGVsc2UgaWYg
KHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAgICAgc2xvd0Nh
c2UgPSBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
SW5mby5zdHViUm91dGluZSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCksIHRydWUpOwor
ICAgICAgICBzdHViSW5mby5zdHViUm91dGluZS5jbGVhcigpOworICAgICAgICBzdHViSW5mby5p
bml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSwgZmFsc2UpOwor
ICAgICAgICBsaXN0SW5kZXggPSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOwor
ICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxm
TGlzdC5zdHJ1Y3R1cmVMaXN0OworICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmdldEJ5
SWRTZWxmTGlzdC5saXN0U2l6ZTsKKyAgICAgICAgc2xvd0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJl
bChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpOworICAgIH0KKyAgICAKKyAgICBpZiAobGlzdEluZGV4ID09IFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIFJFTEVBU0VfQVNTRVJUKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHBhdGNoSnVtcFRvR2V0QnlJ
ZFN0dWIoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
SklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJ
bmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOworICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOworICAgIGlmIChzdHViSW5mby51Lmdl
dEJ5SWRTZWxmTGlzdC5kaWRTZWxmUGF0Y2hpbmcpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoCisgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zm
c2V0KAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVj
dENoZWNrKSwKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgcmVwbGFjZVdp
dGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSk7Cit9CisKK3N0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmICgh
YmFzZVZhbHVlLmlzQ2VsbCgpCisgICAgICAgIHx8ICFzbG90LmlzQ2FjaGVhYmxlKCkKKyAgICAg
ICAgfHwgIWJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNB
cmVDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOworICAgIAorICAgIGlmIChzbG90
LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7CisgICAgICAgIGlmICghc3R1YkluZm8ucGF0Y2gu
ZGZnLnJlZ2lzdGVyc0ZsdXNoZWQpIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbm5vdCBkbyBhcyBt
dWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCBwcmlv
ciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRpY3VsYXIsCisgICAgICAgICAgICAvLyBub24tVmFs
dWUgY2FjaGVkIHByb3BlcnRpZXMgcmVxdWlyZSBwbGFudGluZyBjYWxscywgd2hpY2ggcmVxdWly
ZXMgcmVnaXN0ZXJzIHRvIGhhdmUgYmVlbiBmbHVzaGVkLiBUaHVzLAorICAgICAgICAgICAgLy8g
aWYgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQsIGRvbid0IGRvIG5vbi1WYWx1ZSBjYWNoaW5n
LgorICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7CisgICAgICAgIGlu
dCBsaXN0SW5kZXg7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlOworCisgICAg
ICAgIGlmICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc2xvd0Nhc2UpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgc3R1YkluZm8udS5nZXRC
eUlkU2VsZkxpc3QubGlzdFNpemUrKzsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlR1BS
ID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7CisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19j
YXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKKyNlbmRpZgorICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5kZmcudmFsdWVHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7CisgICAgICAg
IAorICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAg
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdyb25nU3RydWN0ID0gc3R1YkppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgc3RyYXRlZ3kg
d2UgdXNlIGZvciBzdHVicyBpcyBhcyBmb2xsb3dzOgorICAgICAgICAvLyAxKSBDYWxsIERGRyBo
ZWxwZXIgdGhhdCBjYWxscyB0aGUgZ2V0dGVyLgorICAgICAgICAvLyAyKSBDaGVjayBpZiB0aGVy
ZSB3YXMgYW4gZXhjZXB0aW9uLCBhbmQgaWYgdGhlcmUgd2FzLCBjYWxsIHlldCBhbm90aGVyCisg
ICAgICAgIC8vICAgIGhlbHBlci4KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNEaXJlY3QgPSBm
YWxzZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaGFuZGxlckNhbGw7CisgICAgICAgIEZ1bmN0aW9uUHRy
IG9wZXJhdGlvbkZ1bmN0aW9uOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNz
OworICAgICAgICAKKyAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90
LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKKyAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxl
R2V0dGVyKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZUdQUiAhPSBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkp
IHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2
NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShz
bG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOworI2Vsc2UKKyAgICAgICAgICAgICAg
ICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKKyNl
bmRpZgorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0
Y2hHUFIpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNl
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25GdW5jdGlvbiA9IG9w
ZXJhdGlvbkNhbGxHZXR0ZXI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgICAg
ICBiYXNlR1BSLAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKS5leGVjdXRhYmxlQWRkcmVzcygp
KSwKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoaWRl
bnQuaW1wbCgpKSk7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRp
b25DYWxsQ3VzdG9tR2V0dGVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRl
IGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQorICAgICAgICAgICAgLy8gcGxhY2UgdGhh
dCB3ZSBtYWRlIGl0IGZyb20uIEl0IGp1c3Qgc28gaGFwcGVucyB0byBiZSB0aGUgcGxhY2UgdGhh
dCB3ZSBhcmUgYXQKKyAgICAgICAgICAgIC8vIHJpZ2h0IG5vdyEKKyAgICAgICAgICAgIHN0dWJK
aXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KGV4ZWMtPmxvY2F0aW9uQXNSYXdCaXRzKCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJK
aXQuY2FsbCgpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBzdHViSml0Lm1vdmUo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICAgICAg
c3R1YkppdC5zZXR1cFJlc3VsdHMocmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOworI2VuZGlmCisg
ICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxw
ZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
c3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSk7CisgICAgICAgICAgICBoYW5k
bGVyQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOworICAgICAgICAgICAgc3R1YkppdC5qdW1wKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVz
dWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgaWYgKGJhc2VHUFIgPT0gcmVzdWx0VGFn
R1BSKSB7CisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3Vs
dFRhZ0dQUik7CisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1
bHRHUFIpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2Fk
NjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICAgICAg
ICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOworICAg
ICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0
R1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgc3VjY2VzcyA9IHN0dWJK
aXQuanVtcCgpOworICAgICAgICAgICAgaXNEaXJlY3QgPSB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBjb2RlQmxvY2spOwor
ICAgICAgICAKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayh3cm9uZ1N0cnVjdCwgc2xvd0Nhc2Up
OworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUp
KTsKKyAgICAgICAgaWYgKCFpc0RpcmVjdCkgeworICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhvcGVyYXRpb25DYWxsLCBvcGVyYXRpb25GdW5jdGlvbik7CisgICAgICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZSA9CisgICAgICAgICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAgICAgICAg
ICBGSU5BTElaRV9ERkdfQ09ERSgKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisg
ICAgICAgICAgICAgICAgICAgICgiREZHIEdldEJ5SWQgcG9seW1vcnBoaWMgbGlzdCBhY2Nlc3Mg
Zm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgICAgICAgICAgdG9DU3RyaW5n
KCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAgICAgICAg
ICAgKnZtLAorICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisg
ICAgICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpIHx8IHNsb3QuaXNDYWNoZWFi
bGVDdXN0b20oKSk7CisgICAgICAgIAorICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qt
Pmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHViUm91dGluZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7CisgICAgICAgIAorICAgICAgICBwYXRj
aEp1bXBUb0dldEJ5SWRTdHViKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUgLSAxKTsKKyAgICB9CisgICAgCisgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlKCktPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgfHwgIXNsb3QuaXND
YWNoZWFibGVWYWx1ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgIHNpemVfdCBjb3VudCA9IG5v
cm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZVZhbHVlLCBzbG90
LnNsb3RCYXNlKCksIGlkZW50LCBvZmZzZXQpOworICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJv
dG90eXBlQ2hhaW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cnVjdHVyZUNoYWlu
KiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAg
CisgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVy
ZUxpc3Q7CisgICAgaW50IGxpc3RJbmRleDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2Fz
ZTsKKyAgICBpZiAoIWdldFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCh2bSwgY29kZUJsb2NrLCBz
dHViSW5mbywgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCBsaXN0SW5kZXgsIHNsb3dDYXNlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3Rv
TGlzdC5saXN0U2l6ZSsrOworICAgIAorICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJv
dXRpbmU7CisgICAgCisgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHVi
SW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvRG9uZSksIHNsb3dDYXNlLCBzdHViUm91dGluZSk7CisgICAgCisgICAgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgdHJ1ZSk7CisgICAgCisgICAg
cGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5n
ZXQoKSk7CisgICAgCisgICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NB
Q0hFX1NJWkUgLSAxKTsKK30KKwordm9pZCBidWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7Cisg
ICAgYm9vbCBkb250Q2hhbmdlQ2FsbCA9IHRyeUJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZh
bHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKTsKKyAgICBpZiAoIWRvbnRDaGFuZ2VD
YWxsKQorICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKK30KKworc3RhdGljIFZfSklUT3Bl
cmF0aW9uX0VKQ0kgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQoreworICAgIGlmIChzbG90LmlzU3Ry
aWN0TW9kZSgpKSB7CisgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0OworICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdDsKKyAgICB9CisgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQor
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKKyAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsKK30KKworc3RhdGljIFZfSklUT3BlcmF0aW9u
X0VKQ0kgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJv
cGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgaWYgKHNsb3QuaXNTdHJp
Y3RNb2RlKCkpIHsKKyAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQorICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3Q7CisgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0OworICAgIH0KKyAgICBpZiAocHV0
S2luZCA9PSBEaXJlY3QpCisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0QnVpbGRMaXN0OworICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVp
bGRMaXN0OworfQorCitzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCisgICAgRXhlY1N0
YXRlKiBleGVjLAorICAgIEpTVmFsdWUsCisgICAgY29uc3QgSWRlbnRpZmllciYsCisgICAgY29u
c3QgUHV0UHJvcGVydHlTbG90JiBzbG90LAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywKKyAgICBQdXRLaW5kLAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGZhaWx1cmVMYWJlbCwKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHVi
Um91dGluZSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOworI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgR1BS
UmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFs
dWVHUFIpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0
Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKKyAgICBib29sIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoID0gZmFsc2U7CisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKKyAgICBjb25zdCBib29sIHdyaXRlQmFycmllck5lZWRl
ZCA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gZmFs
c2U7CisjZW5kaWYKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OworICAgIAorICAg
IGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcgJiYgKHdyaXRlQmFycmllck5lZWRlZCB8
fCBpc091dE9mTGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkpIHsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3Jh
dGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSKTsKKyNlbHNlCisgICAgICAgIHNjcmF0Y2hHUFIgPSBB
c3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVl
VGFnR1BSKTsKKyNlbmRpZgorICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Cisg
ICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmUgPSBzdHViSml0LmJyYW5jaFB0cigKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CisgICAgCisjaWYgRU5BQkxFKFdSSVRFX0JB
UlJJRVJfUFJPRklMSU5HKQorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc2NyYXRjaEdQUjIgPSBB
c3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0
Y2hHUFIpOworI2Vsc2UKKyAgICBzY3JhdGNoR1BSMiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0
U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIsIHNjcmF0Y2hHUFIpOwor
I2VuZGlmCisgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIyKTsKKyAgICBBc3NlbWJseUhlbHBl
cnM6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BS
MiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAgIHN0dWJKaXQucG9wKHNjcmF0
Y2hHUFIyKTsKKyNlbmRpZgorICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQorICAgICAgICBzdHViSml0LnN0b3JlNjQo
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgIGVsc2UgeworICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJm
bHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICB9CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9m
ZnNldCgpKSkgeworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAr
IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkg
KyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRh
ZykpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRh
Z0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJm
bHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICB9CisjZW5kaWYK
KyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOworICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZhaWx1cmU7CisgICAgCisgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7
CisgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAgICAgICBzdWNjZXNzID0gc3R1
YkppdC5qdW1wKCk7CisgICAgICAgIAorICAgICAgICBiYWRTdHJ1Y3R1cmUubGluaygmc3R1Ykpp
dCk7CisgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAgICAgICBmYWlsdXJlID0g
c3R1YkppdC5qdW1wKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQu
anVtcCgpOworICAgICAgICBmYWlsdXJlID0gYmFkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygp
KTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7CisgICAgICAgICAg
ICAKKyAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RGR19TVFVCKAorICAgICAg
ICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJERkcgUHV0QnlJZCByZXBsYWNlIHN0dWIgZm9yICVz
LCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxv
Y2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgK
KyAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVj
dXRhYmxlQWRkcmVzcygpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1
YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsCisgICAgSlNWYWx1ZSwKKyAgICBjb25zdCBJZGVudGlm
aWVyJiwKKyAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsCisgICAgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLAorICAgIFB1dEtpbmQgcHV0S2luZCwKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKKyAgICBTdHJ1Y3R1cmVDaGFp
biogcHJvdG90eXBlQ2hhaW4sCisgICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAor
ICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQoreworICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+
KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
IEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
ZGZnLnZhbHVlVGFnR1BSKTsKKyNlbmRpZgorICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19j
YXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKKyAgICAKKyAgICBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVn
aXN0ZXJzKTsKKyAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlVGFnR1BSKTsKKyNlbmRpZgorICAgIGFsbG9j
YXRvci5sb2NrKHZhbHVlR1BSKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7
CisgICAgICAgICAgICAKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2Nh
dGVTY3JhdGNoR1BSKCk7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIxICE9IGJhc2VHUFIpOworICAg
IEFTU0VSVChzY3JhdGNoR1BSMSAhPSB2YWx1ZUdQUik7CisgICAgCisgICAgYm9vbCBuZWVkU2Vj
b25kU2NyYXRjaCA9IGZhbHNlOworICAgIGJvb2wgbmVlZFRoaXJkU2NyYXRjaCA9IGZhbHNlOwor
I2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICBuZWVkU2Vjb25kU2NyYXRj
aCA9IHRydWU7CisjZW5kaWYKKyAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAmJiBvbGRTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgbmVlZFNlY29uZFNjcmF0Y2gg
PSB0cnVlOworICAgICAgICBuZWVkVGhpcmRTY3JhdGNoID0gdHJ1ZTsKKyAgICB9CisKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUjI7CisgICAgaWYgKG5lZWRTZWNvbmRTY3JhdGNoKSB7CisgICAgICAg
IHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBB
U1NFUlQoc2NyYXRjaEdQUjIgIT0gYmFzZUdQUik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BS
MiAhPSB2YWx1ZUdQUik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBzY3JhdGNoR1BS
MSk7CisgICAgfSBlbHNlCisgICAgICAgIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZzsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUjM7CisgICAgaWYgKG5lZWRUaGlyZFNjcmF0Y2gpIHsKKyAgICAg
ICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAg
IEFTU0VSVChzY3JhdGNoR1BSMyAhPSBiYXNlR1BSKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hH
UFIzICE9IHZhbHVlR1BSKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHNjcmF0Y2hH
UFIxKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHNjcmF0Y2hHUFIyKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgc2NyYXRjaEdQUjMgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAg
CisgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQp
OworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAgICAgICAg
ICAgIAorICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFz
QmVlbkludmFsaWRhdGVkKCkpOworICAgIAorICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1Ykpp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIob2xkU3RydWN0dXJlKSkpOworICAgIAorICAgIGFkZFN0cnVjdHVyZVRy
YW5zaXRpb25DaGVjaygKKyAgICAgICAgb2xkU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSwg
ZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCisgICAg
ICAgIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIAorICAgIGlmIChwdXRLaW5kID09IE5vdERp
cmVjdCkgeworICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHByb3Rv
dHlwZUNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkgeworICAgICAgICAgICAgYWRkU3RydWN0dXJl
VHJhbnNpdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgICgqaXQpLT5zdG9yZWRQcm90b3R5cGUo
KSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCisg
ICAgICAgICAgICAgICAgc2NyYXRjaEdQUjEpOworICAgICAgICB9CisgICAgfQorCisjaWYgRU5B
QkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgIEFTU0VSVChuZWVkU2Vjb25kU2NyYXRj
aCk7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IEludmFsaWRHUFJSZWcpOworICAgIC8vIE11
c3QgYWx3YXlzIGVtaXQgdGhpcyB3cml0ZSBiYXJyaWVyIGFzIHRoZSBzdHJ1Y3R1cmUgdHJhbnNp
dGlvbiBpdHNlbGYgcmVxdWlyZXMgaXQKKyAgICBBc3NlbWJseUhlbHBlcnM6OndyaXRlQmFycmll
cihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmll
ckZvclByb3BlcnR5QWNjZXNzKTsKKyNlbmRpZgorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93UGF0aDsKKyAgICAKKyAgICBib29sIHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9
IGZhbHNlOworICAgIAorICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0g
b2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgIHNpemVfdCBuZXdT
aXplID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwor
ICAgICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2bS0+aGVhcC5zdG9y
YWdlQWxsb2NhdG9yKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKCZjb3BpZWRB
bGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAg
c2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpTaWdu
ZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKSk7
CisgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2Nh
dG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOworICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2Ny
YXRjaEdQUjEpOworICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFi
c29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2Ny
YXRjaEdQUjEpOworICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdTaXpl
ID4gb2xkU2l6ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFs
bG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBz
bG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25l
ZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsK
KyAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0
b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CisgICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3Jh
dGNoR1BSMSk7CisgICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJz
b2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3Jh
dGNoR1BSMSk7CisgICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIC8v
IFdlIGhhdmUgc2NyYXRjaEdQUjEgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3Rv
cmFnZSwgc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUKKyAgICAgICAgICAgIGZvciAocHRyZGlmZl90
IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7IG9m
ZnNldCArPSBzaXplb2Yodm9pZCopKSB7CisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIzLCAtKG9mZnNldCArIHNpemVvZihK
U1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAg
IHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2hHUFIxLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0dWJKaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUjEsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworICAgICAgICBzY3JhdGNoR1BSMUhhc1N0b3JhZ2Ug
PSB0cnVlOworICAgIH0KKworICAgIHN0dWJKaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQorICAgICAgICBzdHViSml0LnN0
b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgIGVsc2UgeworICAgICAgICBp
ZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgfQorI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkp
IHsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJ
bklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7
CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0
SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCisgICAgICAg
ICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBzdHViSml0
LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBv
ZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkp
KTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBzdWNjZXNzOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7Cisg
ICAgICAgICAgICAKKyAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKKyAg
ICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7
CisgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKKworICAgICAgICBmYWlsdXJlQ2Fz
ZXMubGluaygmc3R1YkppdCk7CisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOworICAgICAgICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7
CisgICAgfSBlbHNlCisgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25DYWxsOworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHN1Y2Nlc3NJblNsb3dQYXRoOworICAgIAorICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Cisg
ICAgICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOworICAgICAgICAKKyAgICAgICAgYWxsb2Nh
dG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7CisgICAgICAgIFNj
cmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxs
b2NhdG9yLmRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZSgpKTsKKyAgICAgICAgYWxsb2NhdG9yLnBy
ZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlcihzdHViSml0LCBzY3JhdGNoQnVmZmVy
LCBzY3JhdGNoR1BSMSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3R1YkppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzbG90LmNhY2hl
ZE9mZnNldCgpKSwgdmFsdWVHUFIpOworI2Vsc2UKKyAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNl
dCgpKSwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSKTsKKyNlbmRpZgorICAgICAgICBvcGVyYXRpb25D
YWxsID0gc3R1YkppdC5jYWxsKCk7CisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lz
dGVyc0Zyb21TY3JhdGNoQnVmZmVyKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIx
KTsKKyAgICAgICAgc3VjY2Vzc0luU2xvd1BhdGggPSBzdHViSml0Lmp1bXAoKTsKKyAgICB9Cisg
ICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2Rl
QmxvY2soKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9E
b25lKSk7CisgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQorICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7CisgICAgZWxzZQorICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgZmFpbHVyZUxhYmVsKTsKKyAgICBpZiAo
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSkgeworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9w
ZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KTsKKyAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhzdWNjZXNzSW5TbG93UGF0aCwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOworICAgIH0K
KyAgICAKKyAgICBzdHViUm91dGluZSA9CisgICAgICAgIGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAor
ICAgICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCisgICAgICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIsCisgICAgICAgICAgICAgICAgKCJERkcgUHV0QnlJZCAlc3RyYW5zaXRpb24gc3R1YiAoJXAg
LT4gJXApIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSA/ICJyZWFsbG9jYXRpbmcgIiA6ICIiLAorICAgICAgICAgICAgICAgICAgICBvbGRT
dHJ1Y3R1cmUsIHN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVj
LT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAgICAgICp2bSwKKyAg
ICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAg
ICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCksCisgICAgICAgICAgICBzdHJ1Y3R1cmUpOworfQorCitzdGF0aWMgYm9v
bCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKworICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpOworICAgIAorICAgIGlmICghc2xv
dC5pc0NhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0cnVjdHVy
ZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VW
YWx1ZSkgeworICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQ
cm9wZXJ0eSkgeworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdl
IGRvbid0IGhhdmUKKyAgICAgICAgICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBo
YXBwZW4uCisgICAgICAgICAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2Cisg
ICAgICAgICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAgICAgICAgICYmIG9sZFN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3
aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcworICAgICAgICAgICAg
Ly8gaW5kZXhpbmcgc3RvcmFnZS4KKyAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxk
SGF2ZUluZGV4aW5nSGVhZGVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywg
YmFzZUNlbGwpID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90
b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKKyAgICAgICAgICAgICAgICBl
eGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwKKyAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sCisgICAgICAg
ICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLAorICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLnN0dWJSb3V0aW5lKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJl
bGluaygKKyAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9TdHJ1Y3RDaGVjayksCisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1Yklu
Zm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVp
bGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4s
IHB1dEtpbmQgPT0gRGlyZWN0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKworICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2Nr
LCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBhcHByb3ByaWF0ZUxp
c3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSwgZmFsc2UpOworICAgICAg
ICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2lu
ZCBwdXRLaW5kKQoreworICAgIGJvb2wgY2FjaGVkID0gdHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGJh
c2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7CisgICAgaWYg
KCFjYWNoZWQpCisgICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihz
bG90LCBwdXRLaW5kKSk7Cit9CisKK3N0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
ZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisKKyAgICBpZiAo
IWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTQ2VsbCog
YmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsKKyAgICAKKyAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFi
bGVEaWN0aW9uYXJ5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE9wdGltaXpl
IHNlbGYgYWNjZXNzLgorICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKKyAgICAg
ICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKKyAgICAgICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzbG90LnR5cGUoKSA9
PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CisgICAgICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3
ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQorICAgICAgICAgICAgLy8gZW5vdWdo
IHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KKyAgICAgICAgICAgIGlmIChHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycyA8IDYKKyAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCisgICAg
ICAgICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2tp
cCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1
Y3R1cmUgaGFzCisgICAgICAgICAgICAvLyBpbmRleGluZyBzdG9yYWdlLgorICAgICAgICAgICAg
aWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub3JtYWxp
emVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlQ2VsbCkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWlu
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVD
aGFpbihleGVjKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1p
dHRlZCB0byBjcmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGlu
Z2x5LgorICAgICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20oCisg
ICAgICAgICAgICAgICAgcHV0S2luZCwgc3R1YkluZm8sCisgICAgICAgICAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZW1pdFB1dFRy
YW5zaXRpb25TdHViKAorICAgICAgICAgICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlO
YW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IG9sZFN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sCisgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLAorICAgICAgICAgICAgICAg
IHN0dWJSb3V0aW5lKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNz
KAorICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24oCisgICAgICAgICAg
ICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAorICAgICAg
ICAgICAgICAgICAgICBzdHViUm91dGluZSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0byBjcmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0
aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5LgorICAgICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGlj
UHV0QnlJZExpc3Q6OmZyb20oCisgICAgICAgICAgICAgICAgcHV0S2luZCwgc3R1YkluZm8sCisg
ICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZW1pdFB1dFJlcGxhY2VTdHViKAorICAgICAgICAgICAgICAgIGV4ZWMsIGJh
c2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwKKyAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0
aFRhcmdldCgpKSwgc3R1YlJvdXRpbmUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsaXN0
LT5hZGRBY2Nlc3MoCisgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6cmVwbGFjZSgKKyAg
ICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHN0dWJSb3V0aW5lKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwor
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
anVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwg
Q29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0
QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgYnVpbGRQdXRC
eUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgYm9vbCBjYWNoZWQg
PSB0cnlCdWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90
LCBzdHViSW5mbywgcHV0S2luZCk7CisgICAgaWYgKCFjYWNoZWQpCisgICAgICAgIHJlcGF0Y2hD
YWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJv
cHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Cit9CisKK3N0YXRp
YyBib29sIHRyeVJlcGF0Y2hJbigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgd2FzRm91bmQsCisgICAgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKCFi
YXNlLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHdhc0ZvdW5kKSB7CisgICAgICAgIGlmICgh
c2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3Ry
dWN0dXJlKCk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0SWdub3JlZDsKKyAgICBz
aXplX3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMs
IGJhc2UsIHdhc0ZvdW5kID8gc2xvdC5zbG90QmFzZSgpIDogSlNWYWx1ZSgpLCBpZGVudCwgb2Zm
c2V0SWdub3JlZCk7CisgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OworICAgIGludCBsaXN0SW5kZXg7CisgICAg
CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsID0gc3R1YkluZm8uaG90UGF0aEJl
Z2luOworICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWw7CisgICAgCisgICAgaWYg
KHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KSB7CisgICAgICAgIHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKTsK
KyAgICAgICAgc3R1YkluZm8uaW5pdEluTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDAp
OworICAgICAgICBzbG93Q2FzZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoCisgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9T
bG93Q2FzZSk7CisgICAgICAgIGxpc3RJbmRleCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfaW5fbGlzdCk7Cisg
ICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuaW5MaXN0LnN0cnVj
dHVyZUxpc3Q7CisgICAgICAgIGxpc3RJbmRleCA9IHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXpl
OworICAgICAgICBzbG93Q2FzZUxhYmVsID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNT
dHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChsaXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElT
VF9DQUNIRV9TSVpFKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMp
OworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CisgICAgCisgICAgewor
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2guZGZnLmJhc2VHUFIpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5n
ZXRGcmVlR1BSKCk7CisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7
CisgICAgICAgIAorICAgICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoOworICAgICAgICBp
ZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICBzY3JhdGNoR1BS
ID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7CisgICAgICAgICAgICBuZWVk
VG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbmVl
ZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQo
c3R1YkppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHN0cnVjdHVyZSkpKTsKKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVj
dHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0g
Y2hhaW4tPmhlYWQoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyAr
K2ksICsraXQpIHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChj
dXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOworICAgICAgICAgICAgYWRk
U3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgIHByb3RvdHlwZSwgcHJv
dG90eXBlLT5zdHJ1Y3R1cmUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0
LAorICAgICAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOworICAgICAgICB9CisgICAgICAgIAorI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4od2FzRm91bmQpKSksIHJlc3VsdEdQUik7
CisjZWxzZQorICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
Mih3YXNGb3VuZCksIHJlc3VsdEdQUik7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7CisgICAgICAgIAorICAgICAgICBlbWl0UmVz
dG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1
Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CisgICAgICAgIAorICAgICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKKworICAgICAg
ICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBz
dWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7
CisgICAgICAgIAorICAgICAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RGR19T
VFVCKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkRGRyBJbiAoZm91
bmQgPSAlcykgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgICAg
d2FzRm91bmQgPyAieWVzIiA6ICJubyIsIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRh
dGEoKSwKKyAgICAgICAgICAgICAgICBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OworICAgIH0KKyAgICAKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdElu
ZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwg
c3RydWN0dXJlLCB0cnVlKTsKKyAgICBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZSsrOworICAg
IAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOworICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoMCksIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgCisgICAg
cmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKTsKK30K
Kwordm9pZCByZXBhdGNoSW4oCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIHdhc0ZvdW5kLAorICAgIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmICh0cnlS
ZXBhdGNoSW4oZXhlYywgYmFzZSwgaWRlbnQsIHdhc0ZvdW5kLCBzbG90LCBzdHViSW5mbykpCisg
ICAgICAgIHJldHVybjsKKyAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25Jbik7Cit9CisKK3N0YXRpYyB2b2lkIGxp
bmtTbG93Rm9yKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFZNKiB2bSwgQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhj
YWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2Fs
bFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFT
U0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxD
b25zdHJ1Y3RUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKK30KKwordm9pZCBsaW5rRm9yKEV4ZWNT
dGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVl
Q29kZUJsb2NrLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2Rl
UHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgQVNTRVJUKCFjYWxsTGlu
a0luZm8uc3R1Yik7CisgICAgCisgICAgLy8gSWYgeW91J3JlIGJlaW5nIGNhbGwtbGlua2VkIGZy
b20gYSBERkcgY2FsbGVyIHRoZW4geW91IG9idmlvdXNseSBkaWRuJ3QgZ2V0IGlubGluZWQuCisg
ICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5tX3Nob3Vs
ZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgIAorICAgIENvZGVCbG9jayogY2FsbGVyQ29k
ZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CisgICAgVk0qIHZtID0g
Y2FsbGVyQ29kZUJsb2NrLT52bSgpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjYWxsZXJDb2RlQmxvY2spOworICAgIAorICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlz
TGlua2VkKCkpOworICAgIGNhbGxMaW5rSW5mby5jYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1l
KCktPnZtKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CisgICAgY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVl
LnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBjYWxsZWUpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by5ob3RQYXRoT3RoZXIsIGNvZGVQdHIpOworICAgIAorICAgIGlmIChjYWxsZWVDb2RlQmxvY2sp
CisgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLT5jYWxsZXJG
cmFtZSgpLCAmY2FsbExpbmtJbmZvKTsKKyAgICAKKyAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2Fs
bCkgeworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvciku
Y29kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoa2luZCA9
PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwg
Y2FsbExpbmtJbmZvLCBDb2RlRm9yQ29uc3RydWN0KTsKK30KKwordm9pZCBsaW5rU2xvd0ZvcihF
eGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCit7CisgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVj
LT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxv
Y2stPnZtKCk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNv
ZGVCbG9jayk7CisgICAgCisgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxM
aW5rSW5mbywga2luZCk7Cit9CisKK3ZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhl
YywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2Nr
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQoreworICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0
dWIpOworICAgIAorICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVy
RnJhbWUoKS0+Y29kZUJsb2NrKCk7CisgICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgp
OworICAgIAorICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KGNhbGxM
aW5rSW5mby5jYWxsZWVHUFIpOworICAgIAorICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBj
YWxsZXJDb2RlQmxvY2spOworICAgIAorICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1Bh
dGg7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzbG93UGF0aC5hcHBlbmQoCisgICAg
ICAgIHN0dWJKaXQuYnJhbmNoVGVzdDY0KAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25a
ZXJvLCBjYWxsZWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworI2Vsc2UKKyAgICAv
LyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxs
LgorI2VuZGlmCisgICAgCisgICAgc2xvd1BhdGguYXBwZW5kKAorICAgICAgICBzdHViSml0LmJy
YW5jaFB0cigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUp
KSk7CisgICAgCisgICAgc2xvd1BhdGguYXBwZW5kKAorICAgICAgICBzdHViSml0LmJyYW5jaFB0
cigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFi
bGUoKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJs
ZSkpKTsKKyAgICAKKyAgICBzdHViSml0LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKKyAg
ICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICBzdHViSml0LnN0b3JlNjQoCisgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAorICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hh
aW4pKSk7CisjZWxzZQorICAgIHN0dWJKaXQuc3RvcmVQdHIoCisgICAgICAgIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAq
IEpTU3RhY2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgIHN0dWJKaXQuc3RvcmUzMigKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbikgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyNl
bmRpZgorICAgIAorICAgIEFzc2VtYmx5SGVscGVyczo6Q2FsbCBjYWxsID0gc3R1YkppdC5uZWFy
Q2FsbCgpOworICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBkb25lID0gc3R1YkppdC5qdW1wKCk7
CisgICAgCisgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7CisgICAgc3R1YkppdC5tb3ZlKGNh
bGxlZUdQUiwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIEdQUkluZm86Om5vbkFyZ0dQUjEpOworI2VuZGlmCisgICAgc3R1YkppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBzdHViSml0LnJl
c3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAg
IEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93ID0gc3R1YkppdC5qdW1wKCk7CisgICAgCisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBjYWxsZXJDb2RlQmxvY2spOwor
ICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVj
dXRhYmxlQWRkcmVzcygpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0lu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoMCkpOworICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIodmlydHVhbENhbGxU
aHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgCisgICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1
YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3IENsb3N1cmVDYWxsU3R1YlJvdXRp
bmUoCisgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIs
CisgICAgICAgICAgICAoIkRGRyBjbG9zdXJlIGNhbGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCwgdGFyZ2V0ICVwICglcykiLAorICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqY2FsbGVy
Q29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIGNvZGVQdHIu
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgdG9DU3RyaW5nKHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9j
aykpLmRhdGEoKSkpLAorICAgICAgICAqdm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4pKTsK
KyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsK
KyAgICAKKyAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKKyAgICAgICAgUmVwYXRj
aEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZv
LmhvdFBhdGhCZWdpbiksCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKSk7CisgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxM
aW5rSW5mbywgQ29kZUZvckNhbGwpOworICAgIAorICAgIGNhbGxMaW5rSW5mby5zdHViID0gc3R1
YlJvdXRpbmUucmVsZWFzZSgpOworICAgIAorICAgIEFTU0VSVCghY2FsbGVlQ29kZUJsb2NrIHx8
IGNhbGxlZUNvZGVCbG9jay0+aXNJbmNvbWluZ0NhbGxBbHJlYWR5TGlua2VkKCZjYWxsTGlua0lu
Zm8pKTsKK30KKwordm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZl
ciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KTsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRvQ2FsbCk7CisgICAgaWYgKE1hY3JvQXNzZW1i
bGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7CisgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQ
dHJXaXRoUGF0Y2goCisgICAgICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxl
QnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUiksCisg
ICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7CisgICAgfQorICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHJ1Y3R1cmVMYWJlbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
dW51c2VkUG9pbnRlcikpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgcmVwYXRjaEJ1ZmZlci5y
ZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKKyNlbHNl
CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFn
TG9hZE9yU3RvcmUpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKKyNlbmRpZgorICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9TbG93Q2FzZSkpOworfQorCit2b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBh
dGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgVl9KSVRPcGVy
YXRpb25fRUpDSSB1bm9wdGltaXplZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfSklUT3BlcmF0
aW9uX0VKQ0k+KE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIFZfSklUT3BlcmF0aW9uX0VK
Q0kgb3B0aW1pemVkRnVuY3Rpb247CisgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3RCdWlsZExpc3QpCisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpCisgICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgIGVsc2UgaWYg
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExp
c3QpCisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdE9wdGltaXplOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdCk7CisgICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9w
dGltaXplOworICAgIH0KKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0aW9uKTsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0lt
bVRvQ2FsbCk7CisgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJs
ZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICBS
ZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNz
KHN0cnVjdHVyZUxhYmVsKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAor
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihz
dHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUiksCisgICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVz
ZWRQb2ludGVyKSk7CisgICAgfQorICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHJ1Y3R1cmVM
YWJlbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxU
b0xvYWRPclN0b3JlKSwgMCk7CisjZWxzZQorICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKKyNl
bmRpZgorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sp
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworfQorCit2b2lkIHJlc2V0SW4oUmVwYXRjaEJ1
ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQo
MCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2lu
ZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEzLDggKzUxMyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExp
c3QoRXhlY1N0YXQKICNlbmRpZgogICAgICAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuZW1pdEV4
Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZzdHViSW5m
bykpOworICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAg
ICAgICAgICAgaGFuZGxlckNhbGwgPSBzdHViSml0LmNhbGwoKTsKICAgICAgICAgICAgIHN0dWJK
aXQuanVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwogICAgICAgICB9IGVsc2UgewpAQCAt
NTQ5LDcgKzU0OCw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQK
ICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7
CiAgICAgICAgIGlmICghaXNEaXJlY3QpIHsKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
b3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uRnVuY3Rpb24pOwotICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlckluU3R1Yik7CisgICAg
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5k
bGVyKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZSA9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2
aXNpb24gMTU2MjM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaDox
NTYyMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgUmVwYXRjaF9oCisjZGVmaW5lIFJlcGF0Y2hfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlND
IHsKKwordm9pZCByZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQg
YnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgYnVpbGRHZXRC
eUlEUHJvdG9MaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXBhdGNoUHV0QnlJ
RChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVy
dHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKK3ZvaWQgYnVpbGRQdXRCeUlk
TGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKK3ZvaWQgcmVwYXRjaElu
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGNvbnN0IElkZW50aWZpZXImLCBib29sIHdhc0ZvdW5kLCBj
b25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCBsaW5rRm9yKEV4
ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTRnVuY3Rpb24qIGNhbGxlZSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKK3ZvaWQgbGlu
a1Nsb3dGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCk7Cit2b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2Rl
QmxvY2sqLCBTdHJ1Y3R1cmUqLCBFeGVjdXRhYmxlQmFzZSosIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cik7Cit2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8m
KTsKK3ZvaWQgcmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
Owordm9pZCByZXNldEluKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vsc2UgLy8gRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBSZXBhdGNoQnVmZmVy
Oworc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOworCitpbmxpbmUgTk9fUkVUVVJOX0RVRV9UT19D
UkFTSCB2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8m
KSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KK2lubGluZSBOT19SRVRVUk5fRFVF
X1RPX0NSQVNIIHZvaWQgcmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQoraW5saW5lIE5PX1JFVFVS
TiB2b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKKyNlbmRpZiAvLyBSZXBhdGNoX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkocmV2
aXNpb24gMTU2MjM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5oOjE1NjIzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAorI2RlZmluZSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoSklUKQorCisj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhIGxvdy1sZXZlbCByZWdp
c3RlciBhbGxvY2F0b3IgZm9yIHVzZSBpbiBzdHVicy4KKworY2xhc3MgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCisgICAgICAgIDogbV91c2VkUmVnaXN0ZXJzKHVz
ZWRSZWdpc3RlcnMpCisgICAgICAgICwgbV9kaWRSZXVzZVJlZ2lzdGVycyhmYWxzZSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBsb2NrKFQg
cmVnKSB7IG1fbG9ja2VkUmVnaXN0ZXJzLnNldChyZWcpOyB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQmFua0luZm8+CisgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSBh
bGxvY2F0ZVNjcmF0Y2goKQorICAgIHsKKyAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIGFsbG9jYXRl
IGEgcmVnaXN0ZXIgdGhhdCBpcyB0b3RhbGx5IGZyZWUuCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBCYW5rSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICAg
ICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSByZWcgPSBCYW5rSW5mbzo6dG9SZWdp
c3RlcihpKTsKKyAgICAgICAgICAgIGlmICghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlZykKKyAg
ICAgICAgICAgICAgICAmJiAhbV91c2VkUmVnaXN0ZXJzLmdldChyZWcpCisgICAgICAgICAgICAg
ICAgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgIG1f
c2NyYXRjaFJlZ2lzdGVycy5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVnOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBTaW5jZSB0aGF0
IGZhaWxlZCwgdHJ5IHRvIGFsbG9jYXRlIGEgcmVnaXN0ZXIgdGhhdCBpcyBub3QgeWV0CisgICAg
ICAgIC8vIGxvY2tlZCBvciB1c2VkIGZvciBzY3JhdGNoLgorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgQmFua0luZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAg
ICAgIHR5cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgcmVnID0gQmFua0luZm86OnRvUmVn
aXN0ZXIoaSk7CisgICAgICAgICAgICBpZiAoIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChyZWcpICYm
ICFtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICBtX3NjcmF0
Y2hSZWdpc3RlcnMuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgbV9kaWRSZXVzZVJlZ2lzdGVy
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlZzsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2UgZmFpbGVkLgorICAgICAgICBDUkFTSCgp
OworICAgICAgICAvLyBNYWtlIHNvbWUgc2lsbHkgY29tcGlsZXJzIGhhcHB5LgorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZT4oLTEpOwor
ICAgIH0KKyAgICAKKyAgICBHUFJSZWcgYWxsb2NhdGVTY3JhdGNoR1BSKCkgeyByZXR1cm4gYWxs
b2NhdGVTY3JhdGNoPEdQUkluZm8+KCk7IH0KKyAgICBGUFJSZWcgYWxsb2NhdGVTY3JhdGNoRlBS
KCkgeyByZXR1cm4gYWxsb2NhdGVTY3JhdGNoPEZQUkluZm8+KCk7IH0KKyAgICAKKyAgICBib29s
IGRpZFJldXNlUmVnaXN0ZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RpZFJl
dXNlUmVnaXN0ZXJzOworICAgIH0KKyAgICAKKyAgICB2b2lkIHByZXNlcnZlUmV1c2VkUmVnaXN0
ZXJzQnlQdXNoaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQpCisgICAgeworICAgICAgICBpZiAoIW1f
ZGlkUmV1c2VSZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsr
aSkgeworICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkp
ICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7CisgICAgICAgICAgICAgICAg
aml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDgpLCBNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJs
ZShGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgICAg
ICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0
ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCisgICAgICAgICAgICAgICAgaml0LnB1c2goR1BSSW5mbzo6
dG9SZWdpc3RlcihpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCByZXN0b3Jl
UmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQpCisgICAgeworICAg
ICAgICBpZiAoIW1fZGlkUmV1c2VSZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
czsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJCeUlu
ZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQorICAgICAgICAgICAg
ICAgIGppdC5wb3AoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAg
ICAgICAgICAgIGlmIChtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSAmJiBtX3Vz
ZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSkgeworICAgICAgICAgICAgICAgIGppdC5sb2Fk
RG91YmxlKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgRlBSSW5mbzo6dG9S
ZWdpc3RlcihpKSk7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDgpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGRlc2ly
ZWRTY3JhdGNoQnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycy5udW1i
ZXJPZlNldFJlZ2lzdGVycygpICogc2l6ZW9mKEpTVmFsdWUpOyB9CisgICAgCisgICAgdm9pZCBw
cmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXIoTWFjcm9Bc3NlbWJsZXImIGppdCwg
U2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciwgR1BSUmVnIHNjcmF0Y2hHUFIgPSBJbnZhbGlk
R1BSUmVnKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAg
ICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKSB7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjp0b1JlZ2lzdGVy
KGkpLCBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZm
ZXIoKSkgKyAoY291bnQrKykpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihH
UFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0
Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpOworI2VuZGlmCisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnICYmICFtX2xv
Y2tlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpICYmICFtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0
R1BSQnlJbmRleChpKSkKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gR1BSSW5mbzo6dG9S
ZWdpc3RlcihpKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoR1BS
ICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVy
cy5nZXRGUFJCeUluZGV4KGkpKSB7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNo
QnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNv
dW50ICogc2l6ZW9mKEpTVmFsdWUpID09IGRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZSgpKTsKKyAg
ICAgICAgCisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNj
cmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGpp
dC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxzaXpl
X3Q+KGNvdW50ICogc2l6ZW9mKEpTVmFsdWUpKSksIHNjcmF0Y2hHUFIpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZmZXIoTWFjcm9Bc3Nl
bWJsZXImIGppdCwgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciwgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBJbnZhbGlkR1BSUmVnKQorICAgIHsKKyAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52
YWxpZEdQUlJlZykgeworICAgICAgICAgICAgLy8gRmluZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsg
aS0tOykgeworICAgICAgICAgICAgICAgIGlmIChtX2xvY2tlZFJlZ2lzdGVycy5nZXRHUFJCeUlu
ZGV4KGkpIHx8IG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gR1BSSW5m
bzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoR1BSICE9IEludmFsaWRH
UFJSZWcpOworICAgICAgICAKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBz
Y3JhdGNoR1BSKTsKKworICAgICAgICAvLyBSZXN0b3JlIGRvdWJsZSByZWdpc3RlcnMgZmlyc3Qu
CisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gbV91c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0R1BS
cygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
czsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4
KGkpKSB7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVm
ZmVyKCkpICsgKGNvdW50KyspKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0Lmxv
YWREb3VibGUoc2NyYXRjaEdQUiwgRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAg
ICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkgeworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChzdGF0aWNfY2FzdDxFbmNvZGVk
SlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKyksIEdQUklu
Zm86OnRvUmVnaXN0ZXIoaSkpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBqaXQubG9hZDMyKHN0
YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSAr
IChjb3VudCsrKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisjZW5kaWYKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgUmVnaXN0ZXJTZXQgbV91
c2VkUmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyU2V0IG1fbG9ja2VkUmVnaXN0ZXJzOworICAgIFJl
Z2lzdGVyU2V0IG1fc2NyYXRjaFJlZ2lzdGVyczsKKyAgICBib29sIG1fZGlkUmV1c2VSZWdpc3Rl
cnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisK
KyNlbmRpZiAvLyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAxNTY0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIK
IAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlNw
ZWNpYWxpemVkVGh1bmtKSVQuaCIKQEAgLTM4LDcgKzM5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLXN0YXRpYyBKU0ludGVyZmFjZUpJVDo6Q2FsbCBnZW5lcmF0ZVNsb3dDYXNlRm9yKFZNKiB2
bSwgSlNJbnRlcmZhY2VKSVQmIGppdCkKK3N0YXRpYyBKU0ludGVyZmFjZUpJVDo6Q2FsbCBvbGRT
dHlsZUdlbmVyYXRlU2xvd0Nhc2VGb3IoVk0qIHZtLCBKU0ludGVyZmFjZUpJVCYgaml0KQogewog
ICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFt
ZSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFpbiwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyLCBKU0lu
dGVyZmFjZUpJVDo6cmVnVDIpOwpAQCAtNTksNyArNjAsNyBAQCBzdGF0aWMgSlNJbnRlcmZhY2VK
SVQ6OkNhbGwgZ2VuZXJhdGVTbG93CiAgICAgcmV0dXJuIGNhbGxOb3RKU0Z1bmN0aW9uOwogfQog
Ci1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JHZW5lcmF0b3IoVk0qIHZtLCBG
dW5jdGlvblB0ciBsYXp5TGluaywgRnVuY3Rpb25QdHIgbm90SlNGdW5jdGlvbiwgY29uc3QgY2hh
ciogbmFtZSkKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVMaW5rRm9yR2Vu
ZXJhdG9yKFZNKiB2bSwgRnVuY3Rpb25QdHIgbGF6eUxpbmssIEZ1bmN0aW9uUHRyIG5vdEpTRnVu
Y3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsK
ICAgICAKQEAgLTg4LDcgKzg5LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5r
Rm9yR2VuZQogICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CiAgICAgCiAgICAg
c2xvd0Nhc2UubGluaygmaml0KTsKLSAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90SlNG
dW5jdGlvbiA9IGdlbmVyYXRlU2xvd0Nhc2VGb3Iodm0sIGppdCk7CisgICAgSlNJbnRlcmZhY2VK
SVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBvbGRTdHlsZUdlbmVyYXRlU2xvd0Nhc2VGb3Io
dm0sIGppdCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdM
T0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsTGF6eUxpbmssIGxhenlM
aW5rKTsKQEAgLTk3LDIyICs5OCwyMiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxp
bmtGb3JHZW5lCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgibGluayAl
cyB0cmFtcG9saW5lIiwgbmFtZSkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nh
bGxHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9sZFN0eWxlTGlua0Nh
bGxHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rRm9yR2VuZXJhdG9yKHZtLCBG
dW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDYWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxf
Tm90SlNGdW5jdGlvbiksICJjYWxsIik7CisgICAgcmV0dXJuIG9sZFN0eWxlTGlua0ZvckdlbmVy
YXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2FsbCksIEZ1bmN0aW9uUHRyKGN0
aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2FsbCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGlua0NvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgb2xkU3R5bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4g
bGlua0ZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ29uc3RydWN0
KSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCksICJjb25zdHJ1
Y3QiKTsKKyAgICByZXR1cm4gb2xkU3R5bGVMaW5rRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0
cihjdGlfdm1fbGF6eUxpbmtDb25zdHJ1Y3QpLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0
X05vdEpTQ29uc3RydWN0KSwgImNvbnN0cnVjdCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBvbGRTdHlsZUxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJu
IGxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0Nsb3N1cmVD
YWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjbG9zdXJlIGNh
bGwiKTsKKyAgICByZXR1cm4gb2xkU3R5bGVMaW5rRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0
cihjdGlfdm1fbGF6eUxpbmtDbG9zdXJlQ2FsbCksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX05v
dEpTRnVuY3Rpb24pLCAiY2xvc3VyZSBjYWxsIik7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgdmlydHVhbEZvckdlbmVyYXRvcihWTSogdm0sIEZ1bmN0aW9uUHRyIGNvbXBpbGUs
IEZ1bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVW
aXJ0dWFsRm9yR2VuZXJhdG9yKFZNKiB2bSwgRnVuY3Rpb25QdHIgY29tcGlsZSwgRnVuY3Rpb25Q
dHIgbm90SlNGdW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CiAgICAgCkBAIC0xNDgsNyAr
MTQ5LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yRwogICAgIGpp
dC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CiAgICAgCiAgICAgc2xvd0Nhc2UubGluaygm
aml0KTsKLSAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IGdlbmVy
YXRlU2xvd0Nhc2VGb3Iodm0sIGppdCk7CisgICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2FsbE5v
dEpTRnVuY3Rpb24gPSBvbGRTdHlsZUdlbmVyYXRlU2xvd0Nhc2VGb3Iodm0sIGppdCk7CiAgICAg
CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7
CiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQ29tcGlsZSwgY29tcGlsZSk7CkBAIC0xNTcsMTQg
KzE1OCwyNDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yRwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoInZpcnR1YWwgJXMgdHJhbXBvbGlu
ZSIsIG5hbWUpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsR2VuZXJh
dG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZVZpcnR1YWxDYWxsR2Vu
ZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gdmlydHVhbEZvckdlbmVyYXRvcih2bSwgRnVu
Y3Rpb25QdHIoY3RpX29wX2NhbGxfaml0Q29tcGlsZSksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxs
X05vdEpTRnVuY3Rpb24pLCAiY2FsbCIsIENvZGVGb3JDYWxsKTsKKyAgICByZXR1cm4gb2xkU3R5
bGVWaXJ0dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9qaXRDb21w
aWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjYWxsIiwgQ29k
ZUZvckNhbGwpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdEdl
bmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVWaXJ0dWFsQ29u
c3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gdmlydHVhbEZvckdlbmVyYXRv
cih2bSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9qaXRDb21waWxlKSwgRnVuY3Rpb25Q
dHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCksICJjb25zdHJ1Y3QiLCBDb2RlRm9y
Q29uc3RydWN0KTsKKyAgICByZXR1cm4gb2xkU3R5bGVWaXJ0dWFsRm9yR2VuZXJhdG9yKHZtLCBG
dW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpLCBGdW5jdGlvblB0cihjdGlf
b3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KSwgImNvbnN0cnVjdCIsIENvZGVGb3JDb25zdHJ1
Y3QpOworfQorCitpbmxpbmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRpb24oQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBwb2ludGVyR1BSKQoreworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgaXNOb25aZXJvID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxw
ZXJzOjpOb25aZXJvLCBwb2ludGVyR1BSKTsKKyAgICBqaXQuYnJlYWtwb2ludCgpOworICAgIGlz
Tm9uWmVyby5saW5rKCZqaXQpOworICAgIGppdC5wdXNoKHBvaW50ZXJHUFIpOworICAgIGppdC5s
b2FkOChwb2ludGVyR1BSLCBwb2ludGVyR1BSKTsKKyAgICBqaXQucG9wKHBvaW50ZXJHUFIpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaml0KTsKKyAgICBVTlVTRURfUEFSQU0ocG9pbnRlckdQ
Uik7CisjZW5kaWYKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdCh2
bSk7CisgICAgCisgICAgLy8gV2Ugd2lsbCBqdW1wIHRvIGhlcmUgaWYgdGhlIEpJVCBjb2RlIHRo
aW5rcyBpdCdzIG1ha2luZyBhIGNhbGwsIGJ1dCB0aGUKKyAgICAvLyBsaW5raW5nIGhlbHBlciAo
QysrIGNvZGUpIGRlY2lkZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGluc3RlYWQuIFdlIHdpbGwK
KyAgICAvLyBoYXZlIHNhdmVkIHRoZSBjYWxsUmV0dXJuSW5kZXggaW4gdGhlIGZpcnN0IGFyZ3Vt
ZW50cyBvZiBKSVRTdGFja0ZyYW1lLgorICAgIC8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuIGFkZHJl
c3Mgd2lsbCBiZSBvbiB0aGUgc3RhY2sgYXQgdGhpcyBwb2ludCwgc28gd2UKKyAgICAvLyBuZWVk
IHRvIHJlbW92ZSBpdCBhbmQgZHJvcCBpdCBvbiB0aGUgZmxvb3IsIHNpbmNlIHdlIGRvbid0IGNh
cmUgYWJvdXQgaXQuCisgICAgLy8gRmluYWxseSBub3RlIHRoYXQgdGhlIGNhbGwgZnJhbWUgcmVn
aXN0ZXIgcG9pbnRzIGF0IHRoZSBjYWxsZWUgZnJhbWUsIHNvCisgICAgLy8gd2UgbmVlZCB0byBw
b3AgaXQuCisgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpu
b25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
KiBKU1N0YWNrOjpDYWxsZXJGcmFtZSksCisgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGppdC5wZWVrNjQoR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOworI2Vsc2UKKyAg
ICBqaXQucGVlayhHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJB
TUVfQVJHU19JTkRFWCk7CisjZW5kaWYKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4obG9va3VwRXhjZXB0
aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlk
YXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpu
b25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Cisg
ICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19J
RCk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiVGhyb3cgZXhjZXB0
aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNsb3dQ
YXRoRm9yKAorICAgIENDYWxsSGVscGVycyYgaml0LCBWTSogdm0sIFBfSklUT3BlcmF0aW9uX0Ug
c2xvd1BhdGhGdW5jdGlvbikKK3sKKyAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQs
IEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgR1BSSW5m
bzo6bm9uQXJnR1BSMiwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAg
ICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6UmV0dXJuUEMpKTsKKyAgICBq
aXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1l
KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGppdC5wb2tlNjQoR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOworI2Vsc2UKKyAgICBq
aXQucG9rZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVf
QVJHU19JTkRFWCk7CisjZW5kaWYKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsK
KyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZv
aWQqPihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQ
b2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGppdC5jYWxs
KEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIAorICAgIC8vIFRoaXMgc2xvdyBjYWxsIHdpbGwg
cmV0dXJuIHRoZSBhZGRyZXNzIG9mIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgIC8vIDEpIEV4
Y2VwdGlvbiB0aHJvd2luZyB0aHVuay4KKyAgICAvLyAyKSBIb3N0IGNhbGwgcmV0dXJuIHZhbHVl
IHJldHVybmVyIHRoaW5neS4KKyAgICAvLyAzKSBUaGUgZnVuY3Rpb24gdG8gY2FsbC4KKyAgICBq
aXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6UmV0dXJuUEMpLAorICAgICAgICBH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5zdG9yZVB0cigKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApLAorICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0
YWNrOjpSZXR1cm5QQykpOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86
Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgZW1p
dFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIGpp
dC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKK30KKworc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsaW5rRm9yVGh1bmtHZW5lcmF0b3IoCisgICAgVk0qIHZtLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRo
ZSBzdGFjayBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQorICAgIC8vIHNh
dmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdlIG1ha2UgYSBD
KysgZnVuY3Rpb24gY2FsbAorICAgIC8vIHRvIHBlcmZvcm0gbGlua2luZyBhbmQgbGF6eSBjb21w
aWxhdGlvbiBpZiBuZWNlc3NhcnkuIFdlIGV4cGVjdCB0aGUgY2FsbGVlCisgICAgLy8gdG8gYmUg
aW4gbm9uQXJnR1BSMC9ub25BcmdHUFIxIChwYXlsb2FkL3RhZyksIHRoZSBjYWxsIGZyYW1lIHRv
IGhhdmUgYWxyZWFkeQorICAgIC8vIGJlZW4gYWRqdXN0ZWQsIG5vblByZXNlcnZlZE5vblJldHVy
bkdQUiBob2xkcyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgaW5kZXgsCisgICAgLy8gYW5kIGFsbCBv
dGhlciByZWdpc3RlcnMgdG8gYmUgYXZhaWxhYmxlIGZvciB1c2UuIFdlIHVzZSBKSVRTdGFja0Zy
YW1lOjphcmdzCisgICAgLy8gdG8gc2F2ZSBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWNyb3NzIGNh
bGxzLgorICAgIAorICAgIENDYWxsSGVscGVycyBqaXQodm0pOworICAgIAorICAgIHNsb3dQYXRo
Rm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25MaW5rQ2FsbCA6IG9w
ZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAor
ICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJMaW5rICVzIHNsb3cgcGF0aCB0aHVuayIs
IGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIgOiAiY29uc3RydWN0IikpOworfQorCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAg
cmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwpOworfQorCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sK
KyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsK
K30KKworLy8gRm9yIGNsb3N1cmUgb3B0aW1pemF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNhbGxz
LCBzaW5jZSBpZiB5b3UncmUgdXNpbmcgY2xvc3VyZXMgZm9yCisvLyBvYmplY3QgY29uc3RydWN0
aW9uIHRoZW4geW91J3JlIGdvaW5nIHRvIGxvc2UgYmlnIHRpbWUgYW55d2F5LgorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICAKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBv
cGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwpOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCAoIkxpbmsgY2xvc3VyZSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKK30K
Kworc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Io
CisgICAgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgLy8gVGhl
IHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjaywgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIu
IFdlIHdpbGwgaGVuY2UKKyAgICAvLyBqdW1wIHRvIHRoZSBjYWxsZWUsIG9yIHNhdmUgdGhlIHJl
dHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdlCisgICAgLy8gbWFrZSBhIEMr
KyBmdW5jdGlvbiBjYWxsIHRvIHRoZSBhcHByb3ByaWF0ZSBKSVQgb3BlcmF0aW9uLgorCisgICAg
Q0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBz
bG93Q2FzZTsKKworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBhIHN0b3J5IGZvciBlbGlt
aW5hdGluZyB0aGVzZSBjaGVja3MuIEluIG1hbnkgY2FzZXMsCisgICAgLy8gdGhlIERGRyBrbm93
cyB0aGF0IHRoZSB2YWx1ZSBpcyBkZWZpbml0ZWx5IGEgY2VsbCwgb3IgZGVmaW5pdGVseSBhIGZ1
bmN0aW9uLgorICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc2xvd0Nhc2UuYXBwZW5kKAor
ICAgICAgICBqaXQuYnJhbmNoVGVzdDY0KAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25a
ZXJvLCBHUFJJbmZvOjpub25BcmdHUFIwLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyNl
bHNlCisgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpub25BcmdHUFIxLAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyNl
bmRpZgorICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25B
cmdHUFIwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7
CisgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAgICBqaXQuYnJhbmNoUHRyKAorICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIyLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwK
KyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihKU0Z1bmN0aW9uOjppbmZv
KCkpKSk7CisgICAgCisgICAgLy8gTm93IHdlIGtub3cgd2UgaGF2ZSBhIEpTRnVuY3Rpb24uCisg
ICAgCisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCisgICAg
ICAgIEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAg
aml0LmJyYW5jaDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpu
b25BcmdHUFIyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9yKGtpbmQp
KSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgCisg
ICAgLy8gTm93IHdlIGtub3cgdGhhdCB3ZSBoYXZlIGEgQ29kZUJsb2NrLCBhbmQgd2UncmUgY29t
bWl0dGVkIHRvIG1ha2luZyBhIGZhc3QKKyAgICAvLyBjYWxsLgorICAgIAorICAgIGppdC5sb2Fk
UHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLAorICAgICAgICBHUFJJbmZvOjpub25B
cmdHUFIxKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGppdC5zdG9yZTY0KAorICAgICAgICBH
UFJJbmZvOjpub25BcmdHUFIxLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAg
ICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWluKSk7
CisjZWxzZQorICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMSwK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikpICogSlNTdGFjazo6U2NvcGVDaGFpbiArCisgICAgICAgICAgICBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAg
aml0LnN0b3JlMzIoCisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWluICsKKyAgICAgICAg
ICAgIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkp
OworI2VuZGlmCisgICAgCisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRD
b2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCkpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgCisgICAgLy8gTWFrZSBhIHRhaWwgY2FsbC4gVGhpcyB3aWxsIHJldHVybiBiYWNrIHRvIEpJ
VCBjb2RlLgorICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1QwKTsK
KyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMCk7CisKKyAgICBzbG93Q2FzZS5saW5rKCZqaXQp
OworICAgIAorICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2ZXJ0IHRv
IHRoZSBmdWxsIHNsb3cgcGF0aC4KKyAgICAKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBraW5k
ID09IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uVmlydHVhbENhbGwgOiBvcGVyYXRpb25WaXJ0dWFs
Q29uc3RydWN0KTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKKyAgICAgICAgcGF0
Y2hCdWZmZXIsCisgICAgICAgICgiVmlydHVhbCAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09
IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVjdCIpKTsKK30KKworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVy
biB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsKTsKK30KKworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCit7
CisgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVj
dCk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHJpbmdMZW5ndGhUcmFtcG9saW5lR2Vu
ZXJhdG9yKFZNKiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuaAkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEgKzMxLDIyIEBACiAj
aWYgRU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0MgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bGlua0NhbGxHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3Ry
dWN0R2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxs
R2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxHZW5lcmF0
b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9y
KFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVMaW5rQ2FsbEdlbmVyYXRvcihW
TSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9sZFN0eWxlTGlua0NvbnN0cnVjdEdlbmVyYXRv
cihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9sZFN0eWxlTGlua0Nsb3N1cmVDYWxsR2Vu
ZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVWaXJ0dWFsQ2FsbEdl
bmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9sZFN0eWxlVmlydHVhbENvbnN0
cnVjdEdlbmVyYXRvcihWTSopOworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKik7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlu
a0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKik7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBs
aW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSopOworCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOworCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBvbGluZUdlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212665</attachid>
            <date>2013-09-25 22:20:21 -0700</date>
            <delta_ts>2013-09-26 11:04:44 -0700</delta_ts>
            <desc>patch 5: one more Windows build fix.</desc>
            <filename>bug-121749.patch</filename>
            <type>text/plain</type>
            <size>481910</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2NDQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxMy0wOS0yNSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
TW92ZSBERkcgaW5saW5lIGNhY2hpbmcgbG9naWMgaW50byBqaXQvLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzQ5LgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbGFuZGluZyBodHRwOi8vdHJhYy53
ZWJraXQub3JnL2NoYW5nZXNldC8xNTYyMzUgYWZ0ZXIgcmViYXNpbmcgdG8gbGF0ZXN0CisgICAg
ICAgIHJldmlzaW9uIGFuZCBmaXhpbmcgYnVpbGQgYnJlYWthZ2VzIG9uIFdpbmRvd3MuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVzZXRTdHViSW50ZXJu
YWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICog
ZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Q2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxBcnJheUFsbG9j
YXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5oOgorICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRp
b25QdXRCeVZhbEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAg
ICAgICAoSlNDOjpERkc6Om9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUpOgor
ICAgICAgICAoSlNDOjpERkc6Om9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRG
b3JUeXBlKToKKyAgICAgICAgKiBkZmcvREZHUmVnaXN0ZXJTZXQuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1JlcGF0
Y2guaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhv
bGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1Bh
dGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
Q29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlND
OjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRC
b3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3Mu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuaDoKKyAgICAgICAgKiBmdGwvRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3Qp
OgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuaDoKKyAgICAgICAgKiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6d3JpdGVCYXJy
aWVyKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9y
KToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rU2xvd0NhbGwpOgorICAgICAgICAqIGppdC9KSVRD
YWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0
aW9uV3JhcHBlcnMuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25XcmFwcGVycy5oLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcC4KKyAg
ICAgICAgKEpTQzo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpOgorICAgICAg
ICAqIGppdC9KSVRPcGVyYXRpb25zLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oLgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmguCisgICAgICAg
ICogaml0L1JlcGF0Y2guY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwLgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAg
ICAgKiBqaXQvUmVwYXRjaC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guaC4KKyAgICAgICAgKiBqaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmguCisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6
Om9sZFN0eWxlR2VuZXJhdGVTbG93Q2FzZUZvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlTGlu
a0ZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlTGlua0NhbGxHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpvbGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpvbGRTdHlsZUxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
Om9sZFN0eWxlVmlydHVhbEZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlVmly
dHVhbENhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpvbGRTdHlsZVZpcnR1YWxDb25zdHJ1
Y3RHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjplbWl0UG9pbnRlclZhbGlkYXRpb24pOgorICAg
ICAgICAoSlNDOjp0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpzbG93UGF0aEZvcik6CisgICAgICAgIChKU0M6OmxpbmtGb3JUaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OmxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2xv
c3VyZUNhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxGb3JUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjp2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGpp
dC9UaHVua0dlbmVyYXRvcnMuaDoKKwogMjAxMy0wOS0yNSAgQnJhZHkgRWlkc29uICA8YmVpZHNv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIHRoZSBJbmRleGVkREIgYnVpbGQgb24gTWFj
LCBidXQgbGVhdmUgdGhlIGZlYXR1cmUgbm9uLWZ1bmN0aW9uYWwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw2IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1BsYW4uY3BwCiAgICAgZGZn
L0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKICAgICBkZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCi0gICAgZGZnL0RGR1JlcGF0Y2guY3BwCiAgICAgZGZnL0RGR1NT
QUNvbnZlcnNpb25QaGFzZS5jcHAKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCiAgICAg
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0yMjUsNiArMjI0LDcgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBqaXQvSklURXhjZXB0aW9ucy5jcHAKICAgICBqaXQv
SklUT3Bjb2Rlcy5jcHAKICAgICBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorICAgIGppdC9KSVRP
cGVyYXRpb25zLmNwcAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKICAgICBqaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKICAgICBqaXQvSklUU3R1YlJvdXRpbmUuY3BwCkBAIC0y
MzIsNiArMjMyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBqaXQvSklUVGh1
bmtzLmNwcAogICAgIGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAK
ICAgICBqaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAKKyAgICBqaXQvUmVwYXRjaC5j
cHAKICAgICBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAogCiAgICAgcGFyc2VyL0xleGVyLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9u
IDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0zMzksMTMgKzMzOSw5IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJC
YW5rLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJTZXQuaCBcCi0J
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcCBcCi0JU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhbmVT
dHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2NvcmVCb2FyZC5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTbG93UGF0aEdlbmVyYXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwIFwKQEAgLTYzMiw2ICs2MjgsOSBAQCBqYXZhc2NyaXB0Y29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbldyYXBwZXJzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViQ2FsbC5oIFwKQEAg
LTY1NCw2ICs2NTMsOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3IuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Rh
cmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw3ICsxODMsNiBAQCBTT1VSQ0VTICs9IFwK
ICAgICBkZmcvREZHUGxhbi5jcHAgXAogICAgIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAgXAogICAgIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIFwKLSAg
ICBkZmcvREZHUmVwYXRjaC5jcHAgXAogICAgIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
IFwKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIFwKICAgICBkZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAgXApAQCAtMjIyLDYgKzIyMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGpp
dC9KSVRFeGNlcHRpb25zLmNwcCBcCiAgICAgaml0L0pJVE9wY29kZXMuY3BwIFwKICAgICBqaXQv
SklUT3Bjb2RlczMyXzY0LmNwcCBcCisgICAgaml0L0pJVE9wZXJhdGlvbnMuY3BwIFwKICAgICBq
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIFwKICAgICBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAgXAogICAgIGppdC9KSVRTdHViUm91dGluZS5jcHAgXApAQCAtMjI5LDYgKzIyOSw3IEBA
IFNPVVJDRVMgKz0gXAogICAgIGppdC9KSVRUaHVua3MuY3BwIFwKICAgICBqaXQvSklUVG9ERkdE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIFwKICAgICBqaXQvSnVtcFJlcGxhY2VtZW50
V2F0Y2hwb2ludC5jcHAgXAorICAgIGppdC9SZXBhdGNoLmNwcCBcCiAgICAgaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAgXAogICAgIGxsaW50L0xMSW50Q0xvb3AuY3BwIFwKICAgICBsbGludC9MTElu
dERhdGEuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagko
cmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc4LDYg
KzM3OCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklURXhjZXB0aW9ucy5j
cHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVE9wY29kZXMuY3BwIiAv
Pg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGNvZGVzMzJfNjQuY3BwIiAv
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRpb25zLmNwcCIgLz4N
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUUHJvcGVydHlBY2Nlc3MuY3BwIiAv
Pg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YlJvdXRpbmUu
Y3BwIiAvPg0KQEAgLTM4NSw2ICszODYsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aml0XEpJVFRodW5rcy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJ
VFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCIgLz4NCiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxqaXRcSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFJlcGF0Y2guY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRvcnMuY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGxsaW50XExMSW50Q0xvb3AuY3BwIiAvPg0KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGxsaW50XExMSW50RGF0YS5jcHAiIC8+DQpAQCAtNzY5LDYgKzc3MSw4IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklURGlzYXNzZW1ibGVyLmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVEV4Y2VwdGlvbnMuaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUSW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRpb25XcmFwcGVycy5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRpb25zLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJDYWxsLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caml0XEpJVFN0dWJSb3V0aW5lLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caml0XEpJVFN0dWJzLmgiIC8+DQpAQCAtNzgwLDYgKzc4NCw5IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUV3JpdGVCYXJyaWVyLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XEpTSW50ZXJmYWNlSklULmgiIC8+DQogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caml0XEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVnaXN0ZXJTZXQuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxqaXRcUmVwYXRjaC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGppdFxTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcU3BlY2lhbGl6ZWRUaHVua0pJVC5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRvci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRvcnMuaCIgLz4NCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTEyMCw2ICsxMjAsMTMgQEAKIAkJMEYyNEU1NDQxN0VBOUY1OTAwQUJCMjE3IC8qIEdQUklu
Zm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRF
NTNGMTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NTUxN0YwQjcxQzAwQUJCMjE3IC8qIElu
bGluZUNhbGxGcmFtZVNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjI0RTU1MzE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0
LmNwcCAqLzsgfTsKIAkJMEYyNEU1NTYxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFt
ZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
NEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjRFNTRDMTdFRTI3NDkw
MEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRp
b25zLmNwcCAqLzsgfTsKKwkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRF
NTQ2MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggKi87IH07CisJCTBGMjRFNTRF
MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25XcmFwcGVycy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NDcxN0VFMjc0OTAwQUJCMjE3
IC8qIEpJVE9wZXJhdGlvbldyYXBwZXJzLmggKi87IH07CisJCTBGMjRFNTRGMTdFRTI3NDkwMEFC
QjIxNyAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyNEU1NDgxN0VFMjc0OTAwQUJCMjE3IC8qIFJlZ2lzdGVyU2V0LmggKi87
IH07CisJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ5MTdFRTI3NDkwMEFC
QjIxNyAvKiBSZXBhdGNoLmNwcCAqLzsgfTsKKwkJMEYyNEU1NTExN0VFMjc0OTAwQUJCMjE3IC8q
IFJlcGF0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi87IH07CisJCTBGMjRFNTUy
MTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTRCMTdFRTI3NDkwMEFC
QjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLzsgfTsKIAkJMEYyNTZDMzYxNjI3
QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2
MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJC
NjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0QwMEE3
QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVm
Q291bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMjY2LDggKzI3Myw2IEBACiAJCTBGNzY2RDM1MTVBRTI1M0IwMDhGMzYzRSAv
KiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQzMzE1QUUyNTM1MDA4RjM2M0UgLyogSnVtcFJlcGxh
Y2VtZW50V2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNzY2RDM2MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDM3MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY3NjZENDQxNUIyQTNDMDAwOEYzNjNFIC8qIERGR1JlZ2lz
dGVyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
Rjc2NkQ0MjE1QjJBM0JEMDA4RjM2M0UgLyogREZHUmVnaXN0ZXJTZXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjc2NkQ0NjE1QjM3MDFGMDA4
RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQ0NTE1QjM3MDFEMDA4RjM2M0UgLyog
REZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBs
aW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsg
fTsKIAkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUYxNDE3MkMy
RjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdD
b21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzMxLDggKzczNiw2IEBACiAJCTg2QUU2
NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QUU2NEE3MTM1RTVFMUMwMDk2MzAxMiAvKiBT
SDRBc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk4NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCNTgyMkUxNEQyMzcz
QjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLzsgfTsKIAkJODZCNTgyNjkxNEQyNzk3MDAw
QTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODYwM0NFRjIxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxp
bmcuY3BwICovOyB9OwotCQk4NkJCMDlDMDEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkJCMDlC
RTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5jcHAgKi87IH07Ci0JCTg2QkIwOUMxMTM4
RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NkJCMDlCRjEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRj
aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2
QzM2RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5
IC8qIE1hY3JvQXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVy
QVJNLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
QzU2OEREMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgKi87IH07CiAJ
CTg2QzU2OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QzU2OERFMTFBMjEzRUUw
MDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTMyMiw2ICsxMzI1LDEzIEBACiAJCTBGMjRFNTNG
MTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEdQUkluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTMx
N0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU1NDE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2Fs
bEZyYW1lU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUNhbGxG
cmFtZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI0RTU0NTE3RUUyNzQ5
MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKSVRPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyNEU1NDYxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjI0RTU0NzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9uV3Jh
cHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUT3BlcmF0aW9uV3Jh
cHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNEU1NDgxN0VFMjc0OTAw
QUJCMjE3IC8qIFJlZ2lzdGVyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlZ2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjRFNTQ5MTdF
RTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI0
RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjRF
NTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBE
RkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5o
OyBwYXRoID0gZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBH
Q0luY29taW5nUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRl
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTQ2Nyw4ICsxNDc3LDYgQEAKIAkJMEY3NjZEMzMxNUFFMjUzNTAwOEYzNjNFIC8qIEp1bXBSZXBs
YWNlbWVudFdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjc2NkQzNjE1QUU0QTFBMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
NjZEMzcxNUFFNEExQTAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjc2NkQ0MjE1QjJB
M0JEMDA4RjM2M0UgLyogREZHUmVnaXN0ZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHUmVnaXN0ZXJTZXQuaDsgcGF0aCA9IGRmZy9ERkdSZWdpc3RlclNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjc2NkQ0NTE1QjM3MDFEMDA4RjM2M0UgLyog
REZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oOyBwYXRoID0gZGZnL0RGR1NjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3
MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0
NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnlWYWxJ
bmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTI3LDggKzE5MzUsNiBAQAog
CQk4NkI1ODIyRTE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NkI1ODIyRjE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJl
ZE1NYXBBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaWVyZWRNTWFw
QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODZCQjA5QkUxMzhFMzgxQjAw
NTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHUmVwYXRjaC5jcHA7IHBhdGggPSBkZmcvREZHUmVwYXRjaC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2QkIwOUJGMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBh
dGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1JlcGF0Y2guaDsgcGF0
aCA9IGRmZy9ERkdSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QkY2
NDJBMTQ4REIyQjUwMDRERTM2QSAvKiBJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW50cmluc2ljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
QzM2RUU5MEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NkM1NjhERDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJB
Uk0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjcxMSwxNiArMjcxNywxNiBA
QAogCQkJCTBGMjRFNTNCMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuY3BwICov
LAogCQkJCTBGMjRFNTNDMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuaCAqLywK
IAkJCQkwRjI0RTUzRDE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggKi8sCi0JCQkJ
MEYyNEU1M0UxN0VBOUY1OTAwQUJCMjE3IC8qIEZQUkluZm8uaCAqLywKLQkJCQkwRjI0RTUzRjE3
RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oICovLAogCQkJCTBGNzNEN0FCMTY1QTE0MkEwMEFD
QUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLywKIAkJCQkwRjczRDdBQzE2NUEx
NDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oICovLAogCQkJCTBGRDgyRTM3
MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovLAogCQkJCUE3QjQ4REI2
MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLywKIAkJCQlBN0I0
OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovLAogCQkJCTg2
REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wu
Y3BwICovLAorCQkJCTBGMjRFNTNFMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJbmZvLmggKi8sCiAJ
CQkJMEY3NjZEMkQxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5jcHAg
Ki8sCiAJCQkJMEY3NjZEMkUxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGlu
ZS5oICovLAorCQkJCTBGMjRFNTNGMTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi8sCiAJ
CQkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwICov
LAogCQkJCTBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmgg
Ki8sCiAJCQkJMTQyOUQ5MkQwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5jcHAgKi8sCkBAIC0yNzM5
LDYgKzI3NDUsOSBAQAogCQkJCTg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVz
LmggKi8sCiAJCQkJQkNERDUxRTkwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwICov
LAogCQkJCUE3MTIzNkU0MTE5NUYzM0MwMEJEMjE3NCAvKiBKSVRPcGNvZGVzMzJfNjQuY3BwICov
LAorCQkJCTBGMjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCAqLywK
KwkJCQkwRjI0RTU0NjE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5oICovLAorCQkJ
CTBGMjRFNTQ3MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25XcmFwcGVycy5oICovLAog
CQkJCTg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8s
CiAJCQkJQTdDMUU4QzgxMTJFNzAxQzAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwICovLAogCQkJCTk2MDYyNjk1MEZCOEVDMDIwMDk3OThBQiAvKiBKSVRTdHViQ2FsbC5oICov
LApAQCAtMjc2MSw2ICsyNzcwLDEwIEBACiAJCQkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8q
IEpTSW50ZXJmYWNlSklULmggKi8sCiAJCQkJMEY3NjZEMzIxNUFFMjUzNTAwOEYzNjNFIC8qIEp1
bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwICovLAogCQkJCTBGNzY2RDMzMTVBRTI1MzUwMDhG
MzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggKi8sCisJCQkJMEYyNEU1NDgxN0VF
Mjc0OTAwQUJCMjE3IC8qIFJlZ2lzdGVyU2V0LmggKi8sCisJCQkJMEYyNEU1NDkxN0VFMjc0OTAw
QUJCMjE3IC8qIFJlcGF0Y2guY3BwICovLAorCQkJCTBGMjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAv
KiBSZXBhdGNoLmggKi8sCisJCQkJMEYyNEU1NEIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oICovLAogCQkJCUE3MDlGMkVGMTdBMEFDMDQwMDUxMkU5OCAvKiBT
bG93UGF0aENhbGwuaCAqLywKIAkJCQlBNzM4NjU1MTExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lh
bGl6ZWRUaHVua0pJVC5oICovLAogCQkJCTBGNTcyRDREMTY4NzlGREIwMEU1N0ZCRCAvKiBUaHVu
a0dlbmVyYXRvci5oICovLApAQCAtMzYxOCwxMyArMzYzMSw5IEBACiAJCQkJMEZGRkM5NTExNEVG
OTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJ
CQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5r
LmggKi8sCi0JCQkJMEY3NjZENDIxNUIyQTNCRDAwOEYzNjNFIC8qIERGR1JlZ2lzdGVyU2V0Lmgg
Ki8sCi0JCQkJODZCQjA5QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovLAot
CQkJCTg2QkIwOUJGMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggKi8sCiAJCQkJQTc3
QTQyM0MxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCAqLywKIAkJCQlBNzQx
MDE3RTE3OURBRjgwMDAyRUI4QkEgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5l
cmF0b3IuaCAqLywKIAkJCQk4NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2Fy
ZC5oICovLAotCQkJCTBGNzY2RDQ1MTVCMzcwMUQwMDhGMzYzRSAvKiBERkdTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovLAogCQkJCTBGMUUzQTUwMTUzN0MyQ0IwMDBGOTQ1NiAv
KiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovLAogCQkJCTg2RUM5REMyMTMyOERGODIwMDJCMkFE
NyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAgKi8sCkBAIC0zOTUyLDYgKzM5NjEsNyBAQAogCQkJ
CTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1NUE1REIgLyogREZHQWxsb2NhdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzM3ODEwQzE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjRFNTRFMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVy
YXRpb25XcmFwcGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5
NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTYwMTVF
MTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlT
bG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTYyLDYgKzM5NzIsNyBAQAog
CQkJCTBGRkI5MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwQjA4MzMxN0EwQjc5QjAwREFGMTRCIC8qIERGR0JpbmFyeVN3
aXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERG
R0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI0RTU1MjE3RUUyNzQ5
MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJz
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdD
YWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC00
MDM2LDE0ICs0MDQ3LDExIEBACiAJCQkJMEZCRTBGNzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVG
OTBCNzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkwRjc2NkQ0NDE1QjJBM0MwMDA4RjM2M0UgLyogREZHUmVnaXN0
ZXJTZXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2QkIwOUMxMTM4RTM4MUIwMDU2NzAyRiAvKiBE
RkdSZXBhdGNoLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUQ4OTMyQjE3RTM4NjhGMDA2NjgyNzYg
LyogSGVhcEl0ZXJhdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdBNDI0MzE3QTBC
QkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0
MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyog
REZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMTQxN0Q0MzI2QzAwQ0Ey
QzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY3NjZENDYxNUIzNzAx
RjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBs
YW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdT
bG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDMxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggaW4gSGVhZGVycyAqLywKQEAgLTQxNzgsNiAr
NDE4Niw3IEBACiAJCQkJQTdBNEFFMTAxNzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJzWDg2Q29t
bW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklU
VGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyog
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBY3RpdmF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdGMDEgLyogSlNBUElW
YWx1ZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNDQ3Myw2ICs0NDgyLDggQEAKIAkJCQkw
RkY0Mjc0MjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2V4dGVybi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGNDI3NDQxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9pbnB1dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNDI3NDgxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjI0RTU0RjE3RUUyNzQ5MDBBQkIyMTcgLyogUmVnaXN0ZXJTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ5MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZf
dHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM5MTc5OUU0QjIwMEQyODMzRCAvKiBV
RGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjQxMTdBREI1RjMw
MDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC00OTQyLDYgKzQ5NTMs
NyBAQAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0Y3MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZv
cm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGOTE3QTBCOENDMDA3NzNBRDggLyog
REZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYy
NEU1NEMxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3MDREOTA1MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEzMzE3MEQ0MEJGMDBCQjcyMkMgLyog
REZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ5NzIsNyArNDk4NCw2IEBACiAJCQkJ
QTc4QTk3N0ExNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZCRTBGNzQxNkMxREIwOTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1RDE0RUY5MEIzMDBDNzI1MzIgLyogREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJODZCQjA5
QzAxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODZFQzlERDIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAv
KiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTIzOCw2ICs1MjQ5
LDcgQEAKIAkJCQk5MzM1RjI0RDEyRTY3NjVCMDAyQjU1NTMgLyogU3RyaW5nUmVjdXJzaW9uQ2hl
Y2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0RFM0I0MzBFNkM4MzJEMDAxNDUzQTcgLyog
U3RydWN0dXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFNEVFNzBGMEVCQjdBNUIwMDU5MzRB
QSAvKiBTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjI0RTU1MDE3RUUy
NzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkYwRjJEMTE2
QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8q
IFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDE1NjQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGlu
ayhWTSYgdm0sIFJlcGF0YwogICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50
VG9CcmFuY2hQdHJXaXRoUGF0Y2goUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQ
YXRjaE9uUmVnaXN0ZXIoaG90UGF0aEJlZ2luKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQ+KGNhbGxlZUdQUiksIDApOwogICAgIGlmIChpc0RGRykgewogI2lmIEVOQUJM
RShERkdfSklUKQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRp
b24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKERGRzo6bGlua0NvbnN0
cnVjdFRodW5rR2VuZXJhdG9yKSA6IHZtLmdldENUSVN0dWIoREZHOjpsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKSkuY29kZSgpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVy
bkxvY2F0aW9uLCAoY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gdm0uZ2V0Q1RJU3R1YihsaW5rQ29u
c3RydWN0VGh1bmtHZW5lcmF0b3IpIDogdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKSkuY29kZSgpKTsKICNlbHNlCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAjZW5kaWYKICAgICB9IGVsc2UKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2Fs
bFJldHVybkxvY2F0aW9uLCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxp
bmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IHZtLmdldENUSVN0dWIobGlua0NhbGxHZW5l
cmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5M
b2NhdGlvbiwgY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gdm0uZ2V0Q1RJU3R1YihvbGRTdHlsZUxp
bmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IHZtLmdldENUSVN0dWIob2xkU3R5bGVMaW5r
Q2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICBoYXNTZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNl
OwogICAgIGNhbGxlZS5jbGVhcigpOwogICAgIHN0dWIuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTY0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1
ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKLSNpbmNsdWRlICJERkdSZXBh
dGNoLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgog
I2luY2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC01MCw2ICs0OSw3IEBACiAjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKICNpbmNsdWRl
ICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCisjaW5jbHVkZSAiUmVwYXRjaC5oIgogI2luY2x1ZGUgIlJl
cGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRl
IDxzdGRpby5oPgpAQCAtMjM4MCwxMiArMjM4MCwxMiBAQCB2b2lkIENvZGVCbG9jazo6cmVzZXRT
dHViSW50ZXJuYWwoUmVwYXRjCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUQ29kZTo6REZH
SklUOgogICAgICAgICBpZiAoaXNHZXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKQotICAgICAgICAg
ICAgREZHOjpyZXNldEdldEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOworICAgICAgICAg
ICAgcmVzZXRHZXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAgICAgICAgZWxzZSBp
ZiAoaXNQdXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKQotICAgICAgICAgICAgREZHOjpyZXNldFB1
dEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOworICAgICAgICAgICAgcmVzZXRQdXRCeUlE
KHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpc0luQWNjZXNzKGFjY2Vzc1R5cGUpKTsKLSAgICAgICAgICAgIERGRzo6
cmVzZXRJbihyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7CisgICAgICAgICAgICByZXNldEluKHJl
cGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBk
ZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwx
MiArMzEsMTIgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgot
I2luY2x1ZGUgIkRGR1JlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNp
bmNsdWRlICJKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAj
aW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgpAQCAtMjMxLDcgKzIzMSw3IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5m
byB7CiAgICAgICAgICAgICBpbnQ4X3QgdmFsdWVUYWdHUFI7CiAjZW5kaWYKICAgICAgICAgICAg
IGludDhfdCB2YWx1ZUdQUjsKLSAgICAgICAgICAgIERGRzo6UmVnaXN0ZXJTZXRQT0QgdXNlZFJl
Z2lzdGVyczsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0UE9EIHVzZWRSZWdpc3RlcnM7CiAgICAg
ICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvRG9uZTsKICAgICAgICAgICAgIGludDMyX3QgZGVs
dGFDYWxsVG9TdG9yYWdlTG9hZDsKICAgICAgICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxs
b2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxs
b2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBDYWxsQXJyYXlBbGxvY2F0
b3JTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0PiB7CiBwdWJsaWM6CiAgICAgQ2FsbEFycmF5QWxsb2NhdG9y
U2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmcm9t
LCBTcGVjdWxhdGl2ZUpJVCogaml0LCBQX0RGR09wZXJhdGlvbl9FU3RaIGZ1bmN0aW9uLAorICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwg
UF9KSVRPcGVyYXRpb25fRVN0WiBmdW5jdGlvbiwKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiwg
R1BSUmVnIHN0b3JhZ2VHUFIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgc2l6ZSkKICAg
ICAgICAgOiBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
Pihmcm9tLCBqaXQpCiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKQEAgLTY4LDcgKzY4
LDcgQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgUF9ERkdPcGVyYXRp
b25fRVN0WiBtX2Z1bmN0aW9uOworICAgIFBfSklUT3BlcmF0aW9uX0VTdFogbV9mdW5jdGlvbjsK
ICAgICBHUFJSZWcgbV9yZXN1bHRHUFI7CiAgICAgR1BSUmVnIG1fc3RvcmFnZUdQUjsKICAgICBT
dHJ1Y3R1cmUqIG1fc3RydWN0dXJlOwpAQCAtNzksNyArNzksNyBAQCBwcml2YXRlOgogY2xhc3Mg
Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yIDogcHVi
bGljIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+IHsK
IHB1YmxpYzoKICAgICBDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhH
ZW5lcmF0b3IoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmcm9tLCBTcGVjdWxh
dGl2ZUpJVCogaml0LCBQX0RGR09wZXJhdGlvbl9FU3RaIGZ1bmN0aW9uLAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgUF9KSVRPcGVy
YXRpb25fRVN0WiBmdW5jdGlvbiwKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJl
KiBjb250aWd1b3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIGFycmF5U3RvcmFnZVN0cnVjdHVyZSwg
R1BSUmVnIHNpemVHUFIpCiAgICAgICAgIDogSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yPE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdD4oZnJvbSwgaml0KQogICAgICAgICAsIG1fZnVuY3Rpb24oZnVu
Y3Rpb24pCkBAIC0xMTIsNyArMTEyLDcgQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICAKIHByaXZh
dGU6Ci0gICAgUF9ERkdPcGVyYXRpb25fRVN0WiBtX2Z1bmN0aW9uOworICAgIFBfSklUT3BlcmF0
aW9uX0VTdFogbV9mdW5jdGlvbjsKICAgICBHUFJSZWcgbV9yZXN1bHRHUFI7CiAgICAgU3RydWN0
dXJlKiBtX2NvbnRpZ3VvdXNTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBtX2FycmF5U3RvcmFn
ZVN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDEyIEBACiAjaW5jbHVk
ZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCIK
ICNpbmNsdWRlICJERkdSZWdpc3RlckJhbmsuaCIKLSNpbmNsdWRlICJERkdSZWdpc3RlclNldC5o
IgogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAi
SklUQ29kZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2Vt
Ymxlci5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJ
KHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHJpdmF0ZToKIH07
CiAKIGV4dGVybiAiQyIgewotdm9pZCBERkdfT1BFUkFUSU9OIGNvbXBpbGVPU1JFeGl0KEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBjb21waWxlT1NSRXhpdChF
eGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR09TUkV4
aXQuaCIKLSNpbmNsdWRlICJERkdSZXBhdGNoLmgiCiAjaW5jbHVkZSAiREZHVGh1bmtzLmgiCiAj
aW5jbHVkZSAiREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKICNpbmNsdWRl
ICJERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCkBAIC00
NSwyOTUgKzQ0LDIxIEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVQu
aCIKICNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9uV3Jh
cHBlcnMuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJWTS5oIgogI2lu
Y2x1ZGUgIkpTTmFtZVNjb3BlLmgiCiAjaW5jbHVkZSAiTmFtZUluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVk
ZSAiUmVwYXRjaC5oIgogI2luY2x1ZGUgIlN0cmluZ0NvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
VHlwZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CiAKICNpZiBF
TkFCTEUoSklUKQotCi0jaWYgQ1BVKE1JUFMpCi0jaWYgV1RGX01JUFNfUElDCi0jZGVmaW5lIExP
QURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24pIFwKLSAgICAgICAgIi5zZXQgbm9yZW9yZGVyIiAi
XG4iIFwKLSAgICAgICAgIi5jcGxvYWQgJDI1IiAiXG4iIFwKLSAgICAgICAgIi5zZXQgcmVvcmRl
ciIgIlxuIiBcCi0gICAgICAgICJsYSAkdDksICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAi
XG4iCi0jZWxzZQotI2RlZmluZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uKSAiIiAiXG4i
Ci0jZW5kaWYKLSNlbmRpZgotCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNpZiBDT01QSUxFUihH
Q0MpICYmIENQVShYODZfNjQpCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTKGZ1bmN0aW9uLCByZWdpc3RlcikgXAotICAgIGFzbSggXAotICAgICIuZ2xvYmwg
IiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlv
bikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAg
ICAibW92ICglcnNwKSwgJSIgU1RSSU5HSVpFKHJlZ2lzdGVyKSAiXG4iIFwKLSAgICAgICAgImpt
cCAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpICJcbiIgXAot
ICAgICk7Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1
bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24s
IHJzaSkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShm
dW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwg
cmN4KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1
bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCBy
Y3gpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1
bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHI4
KQotCi0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODYpCi0KLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCBvZmZzZXQpIFwKLSAgICBhc20o
IFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0
aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAibW92ICglZXNwKSwgJWVheFxu
IiBcCi0gICAgICAgICJtb3YgJWVheCwgIiBTVFJJTkdJWkUob2Zmc2V0KSAiKCVlc3ApXG4iIFwK
LSAgICAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJl
c3MpICJcbiIgXAotICAgICk7Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1MoZnVuY3Rpb24sIDgpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FQ0koZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Mo
ZnVuY3Rpb24sIDE2KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1
bmN0aW9uLCAyMCkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5j
dGlvbiwgMjQpCi0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9USFVNQjIpCi0KLSNk
ZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwK
LSAgICBhc20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmFsaWduIDIiICJcbiIgXAot
ICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZ
TUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgIi50aHVtYiIgIlxuIiBcCi0gICAgIi50aHVtYl9m
dW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklO
RyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAibW92IGEyLCBsciIgIlxuIiBcCi0gICAg
ICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJc
biIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAg
ICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24p
ICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICAiLnRodW1iIiAi
XG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4i
IFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgICJtb3Yg
YTQsIGxyIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJX
aXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotLy8gRW5jb2RlZEpTVmFsdWUgaW4g
SlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGludGVnZXIuIFdoZW4gYmVpbmcgY29tcGlsZWQgaW4g
QVJNIEVBQkksIGl0IG11c3QgYmUgYWxpZ25lZCBldmVuLW51bWJlcmVkIHJlZ2lzdGVyIChyMCwg
cjIgb3IgW3NwXSkuCi0vLyBBcyBhIHJlc3VsdCwgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBhdCBh
IDQtYnl0ZSBmdXJ0aGVyIGxvY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgY2FzZXMuCi0jaWYgQ09N
UElMRVJfU1VQUE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RP
UkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzRdIgotI2RlZmluZSBJTlNUUlVD
VElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzhdIgotI2Vsc2UK
LSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtz
cCwgIzBdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJz
dHIgbHIsIFtzcCwgIzRdIgotI2VuZGlmCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQi
ICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJ
TkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAg
ICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1
bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0g
ICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAiXG4iIFwKLSAgICAg
ICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxu
IiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUpDSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAg
ICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24p
ICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICAiLnRodW1iIiAi
XG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4i
IFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgIElOU1RS
VUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgIlxuIiBcCi0gICAgICAgICJiICIgTE9D
QUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7
Ci0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkKLQotI2RlZmlu
ZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAotICAg
IGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5H
KGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAg
SU5MSU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rp
b24pICI6IiAiXG4iIFwKLSAgICAgICAgIm1vdiBhMiwgbHIiICJcbiIgXAotICAgICAgICAiYiAi
IExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAg
ICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0ko
ZnVuY3Rpb24pIFwKLSAgICBhc20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2Js
ICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rp
b24pICJcbiIgXAotICAgIElOTElORV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwKLSAgICBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgICJtb3YgYTQsIGxyIiAiXG4i
IFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRk
cmVzcyIgIlxuIiBcCi0gICAgKTsKLQotLy8gRW5jb2RlZEpTVmFsdWUgaW4gSlNWQUxVRTMyXzY0
IGlzIGEgNjQtYml0IGludGVnZXIuIFdoZW4gYmVpbmcgY29tcGlsZWQgaW4gQVJNIEVBQkksIGl0
IG11c3QgYmUgYWxpZ25lZCBldmVuLW51bWJlcmVkIHJlZ2lzdGVyIChyMCwgcjIgb3IgW3NwXSku
Ci0vLyBBcyBhIHJlc3VsdCwgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBhdCBhIDQtYnl0ZSBmdXJ0
aGVyIGxvY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgY2FzZXMuCi0jaWYgQ09NUElMRVJfU1VQUE9S
VFMoRUFCSSkgJiYgQ1BVKEFSTSkKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FE
RFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzRdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9S
RVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzhdIgotI2Vsc2UKLSNkZWZpbmUgSU5T
VFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzBdIgotI2Rl
ZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwg
IzRdIgotI2VuZGlmCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAg
ICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJP
TChmdW5jdGlvbikgIlxuIiBcCi0gICAgSU5MSU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAot
ICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgSU5TVFJVQ1RJ
T05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JF
RkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0j
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9u
KSBcCi0gICAgYXNtICggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJP
TF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4i
IFwKLSAgICBJTkxJTkVfQVJNX0ZVTkNUSU9OKGZ1bmN0aW9uKSBcCi0gICAgU1lNQk9MX1NUUklO
RyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5f
QUREUkVTU19FSkNJICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlv
bikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZWxpZiBDT01QSUxFUihH
Q0MpICYmIENQVShNSVBTKQotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FKGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAg
ICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1C
T0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4i
IFwKLSAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykg
XAotICAgICAgICAibW92ZSAkYTEsICRyYSIgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVG
RVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNk
ZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikg
XAotICAgIGFzbSggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwK
LSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgTE9BRF9GVU5DVElP
Tl9UT19UOShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKLSAgICAgICAgIm1vdmUgJGEz
LCAkcmEiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldp
dGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKLSAgICBhc20oIFwKLSAgICAi
LnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4i
IFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhm
dW5jdGlvbikgIjoiICJcbiIgXAotICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dp
dGhSZXR1cm5BZGRyZXNzKSBcCi0gICAgICAgICJzdyAkcmEsIDIwKCRzcCkiICJcbiIgXAotICAg
ICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAi
XG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FSkNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAg
ICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1C
T0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4i
IFwKLSAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykg
XAotICAgICAgICAic3cgJHJhLCAyNCgkc3ApIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9S
RUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQot
I2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoU0g0KQotCi0jZGVmaW5lIFNINF9TQ1JBVENIX1JF
R0lTVEVSICJyMTEiCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0UoZnVuY3Rpb24pIFwKLSAgICBhc20oIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIu
Z2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChm
dW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAot
ICAgICAgICAic3RzIHByLCByNSIgIlxuIiBcCi0gICAgICAgICJicmEgIiBMT0NBTF9SRUZFUkVO
Q0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgICAgICJub3AiICJc
biIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAg
Ii5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9M
KGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBc
Ci0gICAgICAgICJzdHMgcHIsIHI3IiAiXG4iIFwKLSAgICAgICAgIm1vdi5sIDJmLCAiIFNINF9T
Q1JBVENIX1JFR0lTVEVSICJcbiIgXAotICAgICAgICAiYnJhZiAiIFNINF9TQ1JBVENIX1JFR0lT
VEVSICJcbiIgXAotICAgICAgICAibm9wIiAiXG4iIFwKLSAgICAgICAgIjE6IC5iYWxpZ24gNCIg
IlxuIiBcCi0gICAgICAgICIyOiAubG9uZyAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldp
dGhSZXR1cm5BZGRyZXNzLTFiIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgb2Zmc2V0LCBzY3JhdGNoKSBcCi0g
ICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklO
RyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAg
IFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgInN0cyBwciwgIiBz
Y3JhdGNoICJcbiIgXAotICAgICAgICAibW92LmwgIiBzY3JhdGNoICIsIEAoIiBTVFJJTkdJWkUo
b2Zmc2V0KSAiLCByMTUpIiAiXG4iIFwKLSAgICAgICAgIm1vdi5sIDJmLCAiIHNjcmF0Y2ggIlxu
IiBcCi0gICAgICAgICJicmFmICIgc2NyYXRjaCAiXG4iIFwKLSAgICAgICAgIm5vcCIgIlxuIiBc
Ci0gICAgICAgICIxOiAuYmFsaWduIDQiICJcbiIgXAotICAgICAgICAiMjogLmxvbmcgIiBMT0NB
TF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcy0xYiIgIlxuIiBcCi0gICAg
KTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1
bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAw
LCBTSDRfU0NSQVRDSF9SRUdJU1RFUikKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTUyhmdW5jdGlvbiwgNCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCi0KLSNlbmRpZgotCi0j
ZGVmaW5lIFBfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24p
IFwKLXZvaWQqIERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNT
dGF0ZSosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFM
OyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikKLQot
I2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rp
b24pIFwKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5B
ZGRyZXNzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRy
KSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAotRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikKLQotI2RlZmluZSBKX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9G
Uk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FSkkoZnVuY3Rpb24pCi0KLSNkZWZpbmUgVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotdm9pZCBERkdfT1BFUkFUSU9OIGZ1bmN0aW9u
IyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwg
U3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lO
VEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5j
dGlvbikKLQogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB0ZW1wbGF0ZTxib29s
IHN0cmljdD4KQEAgLTM1Nyw3ICs4Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRCeVZhbChF
eGVjU3RhdGUqIGUKIH0KIAogdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+Ci1BTFdBWVNfSU5MSU5FIHN0
YXRpYyB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbChFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0FMV0FZU19JTkxJTkUg
c3RhdGljIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwpAQCAtNDY2LDcgKzE5MSw3IEBAIGNoYXIqIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1l
bnQoCiAKIGV4dGVybiAiQyIgewogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblRvVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNDc0LDcg
KzE5OSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG8KICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3ApLnRvVGhpcyhl
eGVjLCBOb3RTdHJpY3RNb2RlKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uVG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXNTdHJp
Y3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CkBAIC00ODIsNyArMjA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25UbwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpKTsKIH0KIAotSlNDZWxsKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29u
c3RydWN0b3IsIGludDMyX3QgaW5saW5lQ2FwYWNpdHkpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3Rv
ciwgaW50MzJfdCBpbmxpbmVDYXBhY2l0eSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTQ5NSw3ICsy
MjAsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpCiAgICAgcmV0
dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3Ry
dWN0b3IpLT5hbGxvY2F0aW9uUHJvZmlsZShleGVjLCBpbmxpbmVDYXBhY2l0eSktPnN0cnVjdHVy
ZSgpKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNTAzLDcgKzIyOCw3IEBAIEpTQ2VsbCogREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdPYmplY3QKICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3Qo
ZXhlYywgc3RydWN0dXJlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25WYWx1ZUFkZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTUx
NCw3ICsyMzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0FkZChleGVjLCBvcDEsIG9wMikpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMikKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVB
ZGROb3ROdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNTQ3LDcgKzI3
Miw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlWYWwoRXgKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWwoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFByb3BlcnR5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZh
bChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvcGVydHkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC01NzgsNyArMzAzLDcg
QEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQorRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbENlbGwoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkKIHsKICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKQEAgLTYxOCwxNDAgKzM0MywxNyBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRK
U1ZhbHVlIGdldEJ5VmFsQ2VsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGJh
c2UpLmdldChleGVjLCBpbmRleCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBiYXNl
LCBpbnQzMl90IGluZGV4KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCeVZhbEFycmF5SW50KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYmFzZSwgaW50MzJfdCBp
bmRleCkKIHsKICAgICByZXR1cm4gZ2V0QnlWYWxDZWxsSW50KGV4ZWMsIGJhc2UsIGluZGV4KTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmlu
Z0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBiYXNlLCBpbnQzMl90IGluZGV4KQorRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludChFeGVj
U3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBiYXNlLCBpbnQzMl90IGluZGV4KQogewogICAgIHJldHVy
biBnZXRCeVZhbENlbGxJbnQoZXhlYywgYmFzZSwgaW5kZXgpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0g
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7Ci0gICAgUHJvcGVy
dHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xv
dCkpOwotfQotCi1KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3Bl
cmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5SWRCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgSWRlbnRpZmllciBpZGVudCh2
bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxv
Y2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKLSAgICBQcm9wZXJ0
eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdl
dChleGVjLCBpZGVudCwgc2xvdCk7Ci0KLSAgICBpZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgYnVpbGRHZXRCeUlE
TGlzdChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbyk7Ci0KLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0KLUpfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKSShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemVXaXRoUmV0dXJuQWRk
cmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVp
ZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0g
ICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0g
ICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1Yklu
Zm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShiYXNlKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7Ci0gICAgCi0gICAgaWYg
KGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlw
ZSkpIHsKLSAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAgICAgICAgICByZXBhdGNoR2V0
QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbyk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUNJKG9wZXJhdGlvbkluT3B0aW1pemUpOwotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0
YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIGtleSwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIGlmICghYmFzZS0+
aXNPYmplY3QoKSkgewotICAgICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlSW52
YWxpZFBhcmFtZXRlckVycm9yKGV4ZWMsICJpbiIsIGJhc2UpKTsKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVy
bkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwg
a2V5KTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlKTsKLSAgICBib29sIHJlc3VsdCA9IGFz
T2JqZWN0KGJhc2UpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOwotICAgIAot
ICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0g
ICAgCi0gICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAgICAgIHJlcGF0Y2hJbihleGVjLCBiYXNl
LCBpZGVudCwgcmVzdWx0LCBzbG90LCBzdHViSW5mbyk7Ci0gICAgZWxzZQotICAgICAgICBzdHVi
SW5mby5zZWVuID0gdHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihyZXN1bHQpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25JbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCoga2V5KQotewot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwotCi0gICAgaWYgKCFiYXNlLT5pc09iamVjdCgpKSB7Ci0gICAgICAgIHZt
LT50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVJbnZhbGlkUGFyYW1ldGVyRXJyb3IoZXhlYywg
ImluIiwgYmFzZSkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIH0KLQotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIGtleSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNPYmplY3QoYmFzZSktPmhhc1Byb3BlcnR5KGV4
ZWMsIGlkZW50KSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkdlbmVyaWNJbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUg
a2V5KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBi
YXNlKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxD
dXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jIGZ1bmN0aW9uLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGZ1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KGJhc2UpLCBpZGVudCkpOwot
fQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogZ2V0dGVyU2V0dGVyKQotewotICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsR2V0dGVyKGV4ZWMs
IGJhc2UsIGdldHRlclNldHRlcikpOwotfQotCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CkBAIC03NTksNyArMzYxLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
VmFsU3RyaQogICAgIG9wZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWw8dHJ1ZT4oZXhlYywgZW5jb2Rl
ZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzY3LDcgKzM2OSw3IEBAIHZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblMKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVy
bmFsPGZhbHNlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFs
dWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJv
cGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGws
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzc1LDcgKzM3Nyw3IEBAIHZvaWQgREZHX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFs
PHRydWU+KGV4ZWMsIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5jb2RlZFByb3BlcnR5LCBlbmNv
ZGVkVmFsdWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxs
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIGNlbGwsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzgzLDcgKzM4NSw3IEBAIHZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBvcGVyYXRpb25QdXRC
eVZhbEludGVybmFsPGZhbHNlPihleGVjLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCksIGVuY29kZWRQ
cm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC03OTgsNyArNDAwLDcg
QEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgICAgICBhcnJh
eSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04MTMsNyArNDE1
LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgICAgICBh
cnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFs
dWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04MzAsNyArNDMyLDcgQEAgdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VgogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBpbmRleCksIGpzVmFsdWUsIHNsb3QpOwogfQogCi12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZh
bHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJy
YXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMy
X3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTg0Nyw3ICs0NDks
NyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWCiAgICAgICAgIGFy
cmF5LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwganNWYWx1ZSwgc2xvdCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KiBhcnJh
eSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KiBhcnJheSkK
IHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKQEAgLTg1Niw3ICs0NTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihhcnJheS0+bGVuZ3RoKCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUsIEpT
QXJyYXkqIGFycmF5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJh
eVB1c2hEb3VibGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUsIEpTQXJyYXkqIGFycmF5
KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtODY1LDcgKzQ2Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uQXIKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKGFycmF5LT5sZW5ndGgoKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSogZXhl
YywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04NzMsNyArNDc1LDcgQEAg
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7CiB9CiAgICAgICAgIAotRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0
YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJh
eSogYXJyYXkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04ODMsNyArNDg1LDcgQEAgRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYXJyYXktPnBvcChleGVjKSk7CiB9CiAgICAgICAgIAotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNl
LCBKU0NlbGwqIGFyZ3VtZW50KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3Vt
ZW50KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtODk2LDcgKzQ5OCw3IEBAIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFz
UmVnRXhwT2JqZWN0KGJhc2UpLT5leGVjKGV4ZWMsIGlucHV0KSk7CiB9CiAgICAgICAgIAotc2l6
ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlZ0V4cFRlc3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogYXJn
dW1lbnQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC05MTEsMjM3ICs1MTMsNyBAQCBzaXplX3QgREZH
X09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0CiAgICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0
KGJhc2UpLT50ZXN0KGV4ZWMsIGlucHV0KTsKIH0KICAgICAgICAgCi12b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7
Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19Ci0KLXZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7
Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19Ci0KLXZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgp
KTsKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1
dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSks
IHNsb3QpOwotfQotCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAg
SWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxz
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIEFTU0VSVChiYXNl
LT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
IGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19Ci0KLVZfRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlm
aWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4
ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NU
eXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgCi0gICAg
YmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlmIChh
Y2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUp
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAgICAg
IHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBO
b3REaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Ci19Ci0K
LVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkTm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQs
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAK
LSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsK
LSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKLSAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkp
OwotICAgIAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAg
ICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChzdHViSW5mby5z
ZWVuKQotICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90
LCBzdHViSW5mbywgTm90RGlyZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIHN0dWJJbmZvLnNlZW4g
PSB0cnVlOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJ
KG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci12b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi17Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1Yklu
Zm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNs
b3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAg
IEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0
KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5
cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uc2VlbikKLSAgICAgICAgcmVwYXRj
aFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwotICAg
IGVsc2UKLSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Ci19Ci0KLVZfRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAg
ICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAg
ICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5m
by5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJs
b2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIEFTU0VSVChiYXNlLT5pc09iamVj
dCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2
YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNj
ZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBpZiAoc3R1YkluZm8uc2VlbikKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwg
aWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc3R1Yklu
Zm8uc2VlbiA9IHRydWU7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdCk7Ci12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2Us
IFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZv
KHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJh
c2UpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5w
dXRCeUlkQ29udGV4dCgpKTsKLSAgICAKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2
YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNj
ZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZv
LCBOb3REaXJlY3QpOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHVi
SW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1
ZShiYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2Nr
KCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRl
bnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1
YkluZm8sIE5vdERpcmVjdCk7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdCk7Ci12b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdFdpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQodm0s
IHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2Nr
KCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotICAgIAot
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRl
eHQoKSk7Ci0gICAgCi0gICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOwotICAgIGFzT2JqZWN0
KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAK
LSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5h
Y2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3Qo
ZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwotfQotCi1WX0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBs
KiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
LSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRy
ZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhl
Yy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIEFTU0VSVChiYXNl
LT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
IGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGlj
X2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHVi
SW5mbywgRGlyZWN0KTsKLX0KLQotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTE0OSw3ICs1MjEsNyBA
QCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzCiAgICAgcmV0dXJuIGpz
TGVzczx0cnVlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKSk7CiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q29tcGFyZUxlc3NFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTU3LDcg
KzUyOSw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXMKICAgICBy
ZXR1cm4ganNMZXNzRXE8dHJ1ZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQogCi1zaXplX3QgREZHX09QRVJBVElPTiBv
cGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitzaXplX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CkBAIC0xMTY1LDcgKzUzNyw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmVHcmUKICAgICByZXR1cm4ganNMZXNzPGZhbHNlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMiksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSk7CiB9CiAKLXNpemVfdCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CkBAIC0xMTczLDcgKzU0NSw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvbXBhcmVHcmUKICAgICByZXR1cm4ganNMZXNzRXE8ZmFsc2U+KGV4ZWMsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpKTsK
IH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MikKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIp
CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTgyLDkgKzU1NCw5IEBAIHNpemVfdCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBhcmVFcSgKIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBsZWZ0LCBKU0NlbGwqIHJpZ2h0KQogI2Vsc2UKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxs
KiByaWdodCkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKICNlbmRpZgogewog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtMTE5OCw3ICs1NzAsNyBAQCBzaXplX3QgREZH
X09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyCiAjZW5kaWYKIH0KIAotc2l6ZV90IERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitzaXpl
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MikKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTEyMTIsNyArNTg0LDcgQEAgc2l6ZV90IERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgogICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVh
bFNsb3dDYXNlSW5saW5lKGV4ZWMsIG9wMSwgb3AyKTsKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK3NpemVfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CkBAIC0xMjIzLDE5MyArNTk1LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZVN0cgogICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBzcmMx
LCBzcmMyKTsKIH0KIAotc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsK
LSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwotICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwotCi0gICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoZXhlYy0+c2Nv
cGUoKSk7Ci0gICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOwotCi0gICAgaWYgKGtpbmQg
PT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7Ci0gICAgCi0g
ICAgICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKTsKLSAgICAKLSAgICAgICAgaWYg
KGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCkgewotICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7Ci0gICAgICAgICAgICBleGVjQ2FsbGVlLT5z
ZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgICAgICB2bS0+aG9zdENhbGxSZXR1
cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0Nh
bGxlZSkpOwotICAgICAgICAgICAgaWYgKHZtLT5leGNlcHRpb24oKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLQotICAgICAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOwotICAgICAg
ICB9Ci0gICAgCi0gICAgICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOwotICAg
ICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEFGdW5jdGlvbkVy
cm9yKGV4ZWMsIGNhbGxlZSkpOwotICAgICAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAg
ICAKLSAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7Ci0gICAgQ29uc3RydWN0VHlwZSBj
b25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YShjYWxsZWUsIGNvbnN0cnVjdERhdGEpOwot
ICAgIAotICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGVKUyk7Ci0gICAg
Ci0gICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhvc3QpIHsKLSAgICAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7Ci0gICAgICAgIGV4
ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKLSAgICAgICAgdm0tPmhvc3RD
YWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVu
Y3Rpb24oZXhlY0NhbGxlZSkpOwotICAgICAgICBpZiAodm0tPmV4Y2VwdGlvbigpKQotICAgICAg
ICAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0
aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0KLSAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOwotICAgIH0K
LSAgICAKLSAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSk7Ci0g
ICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JF
cnJvcihleGVjLCBjYWxsZWUpKTsKLSAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKLX0KLQotaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0Nh
bGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBKU1ZhbHVlIGNh
bGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7Ci0gICAgSlNDZWxsKiBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7Ci0gICAg
aWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQp
KTsKLQotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVl
QXNGdW5jdGlvbkNlbGwpOwotICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGNhbGxlZS0+c2NvcGVV
bmNoZWNrZWQoKSk7Ci0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4
ZWN1dGFibGUoKTsKLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gMDsKLSAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rp
b24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3Io
a2luZCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBjYWxsZWUtPnNjb3BlKCks
IGtpbmQpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIHZtLT50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOwotICAgICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OwotICAgICAgICB9Ci0gICAgICAgIGNvZGVCbG9jayA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29k
ZUJsb2NrRm9yKGtpbmQpOwotICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkpKQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJh
dGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtp
bmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwotICAgIH0KLSAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0
dXJuUEMoKSk7Ci0gICAgaWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2UoKSkKLSAgICAgICAgY2Fs
bExpbmtJbmZvLnNldFNlZW4oKTsKLSAgICBlbHNlCi0gICAgICAgIGxpbmtGb3IoZXhlY0NhbGxl
ZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwga2luZCk7Ci0gICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7Ci19Ci0KLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRl
KiBleGVjQ2FsbGVlKQotewotICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JD
YWxsKTsKLX0KLQotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4
ZWNTdGF0ZSogZXhlY0NhbGxlZSkKLXsKLSAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBD
b2RlRm9yQ29uc3RydWN0KTsKLX0KLQotaW5saW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpT
Q2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQotewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4
ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICBKU1ZhbHVlIGNh
bGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7Ci0gICAgY2FsbGVlQXNG
dW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwotICAgIGlmIChVTkxJ
S0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKQotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSwga2lu
ZCkpOwotICAgIAotICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24q
PihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoZnVuY3Rp
b24tPnNjb3BlVW5jaGVja2VkKCkpOwotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0g
ZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhh
c0pJVENvZGVGb3Ioa2luZCkpKSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rp
b25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJs
ZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFy
ZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBmdW5jdGlvbi0+c2NvcGUoKSwga2luZCk7Ci0gICAg
ICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjQ2FsbGVlLCBlcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENv
ZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLX0KLQotaW5s
aW5lIGNoYXIqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9y
ZWQ7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwga2luZCwg
Y2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsKLX0KLQotc3RhdGljIGJvb2wgYXR0ZW1wdFRv
T3B0aW1pemVDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTQ2VsbCogY2FsbGVl
QXNGdW5jdGlvbkNlbGwsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQotewotICAgIGlmICgh
Y2FsbGVlQXNGdW5jdGlvbkNlbGwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBK
U0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25D
ZWxsKTsKLSAgICBKU0Z1bmN0aW9uKiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVlLmdl
dCgpOwotICAgIAotICAgIGlmICghb2xkQ2FsbGVlCi0gICAgICAgIHx8IG9sZENhbGxlZS0+c3Ry
dWN0dXJlKCkgIT0gY2FsbGVlLT5zdHJ1Y3R1cmUoKQotICAgICAgICB8fCBvbGRDYWxsZWUtPmV4
ZWN1dGFibGUoKSAhPSBjYWxsZWUtPmV4ZWN1dGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIEFTU0VSVChjYWxsZWUtPmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNh
bGwoKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBjYWxsZWUtPmV4ZWN1
dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAg
ICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKLSAgICBpZiAoY2FsbGVlLT5leGVjdXRhYmxl
KCktPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIGNvZGVCbG9jayA9IDA7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWxsZWUt
PmV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvckNhbGwoKTsKLSAgICAgICAgaWYgKGV4ZWNDYWxs
ZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgCi0gICAgbGlua0Nsb3N1cmVDYWxsKAotICAgICAgICBleGVjQ2FsbGVlLCBjYWxs
TGlua0luZm8sIGNvZGVCbG9jaywKLSAgICAgICAgY2FsbGVlLT5zdHJ1Y3R1cmUoKSwgY2FsbGVl
LT5leGVjdXRhYmxlKCksIGNvZGVQdHIpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUpCi17Ci0gICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKLSAgICBjaGFy
KiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxs
LCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8g
PSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZv
KGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwotCi0gICAgaWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNs
b3N1cmVDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBjYWxsTGlua0luZm8p
KQotICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIENvZGVGb3JD
YWxsKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKLXsgICAgCi0gICAg
cmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwpOwotfQotCi1jaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlKQotewotICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1
Y3QpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xNDE3LDcgKzYwMyw3IEBA
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG8KICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkudG9QcmltaXRpdmUoZXhlYykpOwog
fQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5KEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQogewog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwpAQCAtMTQyNSw3ICs2MTEsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0FycmF5KEV4CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oY29uc3Ry
dWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgYXJyYXlTdHJ1Y3R1cmUsIHN0YXRpY19jYXN0
PEpTVmFsdWUqPihidWZmZXIpLCBzaXplKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1
Y3R1cmUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlKQogewogICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpA
QCAtMTQzMyw3ICs2MTksNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5
QXJyCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oSlNBcnJheTo6Y3JlYXRlKCp2bSwg
YXJyYXlTdHJ1Y3R1cmUpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwg
aW50MzJfdCBzaXplKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgaW50MzJfdCBz
aXplKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTQ0NCwxMjIgKzYzMCwxMjIgQEAgY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdAogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
Y2hhcio+KEpTQXJyYXk6OmNyZWF0ZSgqdm0sIGFycmF5U3RydWN0dXJlLCBzaXplKSk7CiB9CiAK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBzaXpl
KQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIHNpemVfdCBzdGFydCwgc2l6ZV90IHNp
emUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oY29u
c3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgYXJyYXlTdHJ1Y3R1cmUsIGV4ZWMtPmNv
ZGVCbG9jaygpLT5jb25zdGFudEJ1ZmZlcihzdGFydCksIHNpemUpKTsKIH0KIAotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5l
d1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0ludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgp
OwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhPbmVB
cmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aE9u
ZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdp
dGhPbmVBcmd1bWVudDxKU0ludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUp
OwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6
ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhTaXplKAog
ICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3Ro
KQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNJbnQxNkFycmF5PihleGVj
LCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAg
cmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNJbnQxNkFycmF5PihleGVjLCBz
dHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3SW50MzJBcnJheVdpdGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdJbnQzMkFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRo
U2l6ZTxKU0ludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAog
ICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVu
dDxKU0ludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aFNpemUoCitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICBy
ZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTVWludDhBcnJheT4oZXhlYywgc3RydWN0dXJl
LCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJy
YXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4
QXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdU
eXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTVWludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBl
bmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4
Q2xhbXBlZEFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1Vp
bnQ4Q2xhbXBlZEFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlX
aXRoU2l6ZTxKU1VpbnQ4Q2xhbXBlZEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9
CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRo
T25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBl
ZEFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3
VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU1VpbnQ4Q2xhbXBlZEFycmF5PihleGVjLCBzdHJ1
Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3VWludDE2QXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
VWludDE2QXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhT
aXplPEpTVWludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhPbmVBcmd1bWVudCgKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoT25lQXJndW1lbnQo
CiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3Vt
ZW50PEpTVWludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhTaXplKAorY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhTaXplKAogICAgIEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewog
ICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNVaW50MzJBcnJheT4oZXhlYywgc3Ry
dWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1Vp
bnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdVaW50MzJBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0
dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNVaW50MzJBcnJheT4oZXhlYywgc3Ry
dWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0Zsb2F0MzJBcnJheVdpdGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdGbG9hdDMyQXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdp
dGhTaXplPEpTRmxvYXQzMkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50
KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoT25lQXJn
dW1lbnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9u
ZUFyZ3VtZW50PEpTRmxvYXQzMkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7
CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aFNp
emUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhTaXpl
KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVu
Z3RoKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNGbG9hdDY0QXJyYXk+
KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNGbG9hdDY0QXJy
YXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBy
ZWdleHBQdHIpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4
cChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIHJlZ2V4cFB0cikKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAg
LTE1NzIsNyArNzU4LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYy0+
dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdleHApKTsKIH0KIAotSlNDZWxsKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKQorSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVj
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTU4MSw3ICs3NjcsNyBAQCBKU0NlbGwqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0CiAgICAgcmV0dXJuIGFjdGl2YXRpb247CiB9CiAKLUpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBcmd1bWVudHMoRXhlY1N0YXRlKiBl
eGVjKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNTkyLDcgKzc3OCw3IEBAIEpTQ2Vs
bCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBcmcKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50
cygKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxpbmVkQXJndW1lbnRz
KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTE2MDQsNyArNzkwLDcgQEAgSlNDZWxs
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUlubAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBhcmd1bWVudHNDZWxsLCBKU0NlbGwqIGFjdGl2YXRpb25DZWxsKQor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBcmd1bWVudHMoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGFyZ3VtZW50c0NlbGwsIEpTQ2VsbCogYWN0aXZhdGlvbkNlbGwpCiB7CiAg
ICAgQVNTRVJUKGV4ZWMtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkpOwogICAgIGlmIChh
Y3RpdmF0aW9uQ2VsbCkgewpAQCAtMTYxNCwxNCArODAwLDE0IEBAIHZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25UZWFyT2ZmQXJndW0KICAgICBqc0Nhc3Q8QXJndW1lbnRzKj4oYXJndW1lbnRz
Q2VsbCktPnRlYXJPZmYoZXhlYyk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25U
ZWFyT2ZmSW5saW5lZEFyZ3VtZW50cygKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UZWFy
T2ZmSW5saW5lZEFyZ3VtZW50cygKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYXJndW1l
bnRzQ2VsbCwgSlNDZWxsKiBhY3RpdmF0aW9uQ2VsbCwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChhY3RpdmF0aW9uQ2VsbCwgIWFjdGl2YXRp
b25DZWxsKTsgLy8gQ3VycmVudGx5LCB3ZSBkb24ndCBpbmxpbmUgZnVuY3Rpb25zIHdpdGggYWN0
aXZhdGlvbnMuCiAgICAganNDYXN0PEFyZ3VtZW50cyo+KGFyZ3VtZW50c0NlbGwpLT50ZWFyT2Zm
KGV4ZWMsIGlubGluZUNhbGxGcmFtZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBh
cmd1bWVudHNSZWdpc3RlcikKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
R2V0QXJndW1lbnRzTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdp
c3RlcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE2MzMsNyArODE5LDcgQEAgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
YmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBp
bnQzMl90IGFyZ3VtZW50c1JlZ2lzdGVyLCBpbnQzMl90IGluZGV4KQorRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywg
aW50MzJfdCBhcmd1bWVudHNSZWdpc3RlciwgaW50MzJfdCBpbmRleCkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKQEAgLTE2NDgsNyArODM0LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJndW1lbnRzVmFsdWUuZ2V0KGV4
ZWMsIGluZGV4KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
R2V0SW5saW5lZEFyZ3VtZW50QnlWYWwoCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFsKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgaW50
MzJfdCBhcmd1bWVudHNSZWdpc3RlciwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUs
IGludDMyX3QgaW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTE2NjYsNyAr
ODUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYXJndW1lbnRzVmFsdWUuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9
CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbk5vQ2hlY2soRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbk5vQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKIHsKICAgICBBU1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxl
LT5pbmhlcml0cyhGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSkpOwogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CkBAIC0xNjc0LDcgKzg2MCw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdGdW5jdGkKICAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHN0YXRp
Y19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSksIGV4ZWMtPnNj
b3BlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1
bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUpCitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUpCiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9u
RXhlY3V0YWJsZS0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpKTsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwpAQCAtMTY4Miw3ICs4NjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5lCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0Z1
bmN0aW9uOjpjcmVhdGUoZXhlYywgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVu
Y3Rpb25FeGVjdXRhYmxlKSwgZXhlYy0+c2NvcGUoKSkpOwogfQogCi1KU0NlbGwqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGVBc0NlbGwpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5j
dGlvbkV4ZWN1dGFibGVBc0NlbGwpCiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9uRXhlY3V0YWJsZUFz
Q2VsbC0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpKTsKIApAQCAtMTY5NCwz
MyArODgwLDIyIEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGkKICAg
ICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGZ1bmN0aW9uRXhlY3V0YWJsZSwgZXhl
Yy0+c2NvcGUoKSk7CiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Jc09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZh
bHVlKQogewogICAgIHJldHVybiBqc0lzT2JqZWN0VHlwZShleGVjLCBKU1ZhbHVlOjpkZWNvZGUo
dmFsdWUpKTsKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihF
bmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklzRnVu
Y3Rpb24oRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIGpzSXNGdW5jdGlvblR5
cGUoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBv
cGVyYXRpb25UeXBlT2YoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIHZhbHVlKQorSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogdmFs
dWUpCiB7CiAgICAgcmV0dXJuIGpzVHlwZVN0cmluZ0ZvclZhbHVlKGV4ZWMsIEpTVmFsdWUodmFs
dWUpKS5hc0NlbGwoKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2Nh
dGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVl
IHZhbHVlKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotCi0gICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSA+IGJhc2UtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsK
LSAgICBBU1NFUlQoIXZtLmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpLmZhc3RQYXRoU2hvdWxkU3Vj
Y2VlZChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsK
LSAgICBiYXNlLT5zZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZt
LCBzdHJ1Y3R1cmUpOwotICAgIGJhc2UtPnB1dERpcmVjdCh2bSwgb2Zmc2V0LCBKU1ZhbHVlOjpk
ZWNvZGUodmFsdWUpKTsKLX0KLQotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQorY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0
aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTcyOSw3
ICs5MDQsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvCiAgICAg
ICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCh2bSwgMCwgMCwgaW5pdGlhbE91dE9m
TGluZUNhcGFjaXR5LCBmYWxzZSwgMCkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IG5ld1Np
emUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
KEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0x
NzM4LDcgKzkxMyw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm8K
ICAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKHZtLCAwLCAwLCBuZXdTaXpl
LCBmYWxzZSwgMCkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2Nh
dGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2Fw
YWNpdHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwpAQCAtMTc0OSw3ICs5MjQsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxs
b2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1By
b3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHNpemVfdCBu
ZXdTaXplKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5
VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwg
c2l6ZV90IG5ld1NpemUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNzU5LDcgKzkzNCw3IEBAIGNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25FbnN1cmVJbnQzMihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNzcwLDcgKzk0NSw3IEBAIGNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVuc3VyZUludDMyKHZtKS5kYXRhKCkpOwogfQogCi1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsZShFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlRG91Ymxl
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTc4
MSw3ICs5NTYsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsCiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5lbnN1cmVE
b3VibGUodm0pLmRhdGEoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5z
dXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE3OTIsNyArOTY3LDcgQEAgY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aQogICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJlQ29udGlndW91cyh2bSkuZGF0YSgpKTsK
IH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SYWdlRW5zdXJlQ29udGlndW91cyhF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUmFnZUVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CkBAIC0xODAzLDcgKzk3OCw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUmFnZUVuc3VyZUMKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
YXNPYmplY3QoY2VsbCktPnJhZ2VFbnN1cmVDb250aWd1b3VzKHZtKS5kYXRhKCkpOwogfQogCi1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJl
QXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOwpAQCAtMTgxNCw3ICs5ODksNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVu
c3VyZUFycmF5CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNl
bGwpLT5lbnN1cmVBcnJheVN0b3JhZ2Uodm0pKTsKIH0KIAotU3RyaW5nSW1wbCogREZHX09QRVJB
VElPTiBvcGVyYXRpb25SZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJp
bmcpCitTdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNT
dGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4MjIs
NyArOTk3LDcgQEAgU3RyaW5nSW1wbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbAogICAg
IHJldHVybiBzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKTsKIH0KIAotSlNTdHJpbmcqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
aW50MzJfdCBjaGFyYWN0ZXIpCitKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25TaW5n
bGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGNoYXJhY3RlcikKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKQEAgLTE4MzAsNyArMTAwNSw3IEBAIEpTU3RyaW5nKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblNpbmdsZUMKICAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmco
ZXhlYywgc3RhdGljX2Nhc3Q8VUNoYXI+KGNoYXJhY3RlcikpOwogfQogCi1KU0NlbGwqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJp
bmcqIHN0cmluZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmlu
ZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xODM4LDcgKzEw
MTMsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nCiAgICAgcmV0
dXJuIFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgc3RyaW5nKTsKIH0KIAot
SlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBjZWxsKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3Ry
aW5nT25DZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwpAQCAtMTg0Niw3ICsxMDIxLDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRv
U3RyaW5nTwogICAgIHJldHVybiBKU1ZhbHVlKGNlbGwpLnRvU3RyaW5nKGV4ZWMpOwogfQogCi1K
U0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOwpAQCAtMTg1NCw3ICsxMDI5LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blRvU3RyaW5nKAogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvU3RyaW5nKGV4
ZWMpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNT
dGF0ZSogZXhlYywgSlNTdHJpbmcqIGxlZnQsIEpTU3RyaW5nKiByaWdodCkKK0pTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTIoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyog
bGVmdCwgSlNTdHJpbmcqIHJpZ2h0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg2Miw3ICsxMDM3
LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMgogICAgIHJldHVy
biBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgbGVmdCwgcmlnaHQpOwogfQogCi1KU0NlbGwqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcq
IGEsIEpTU3RyaW5nKiBiLCBKU1N0cmluZyogYykKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25NYWtlUm9wZTMoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogYSwgSlNTdHJpbmcqIGIs
IEpTU3RyaW5nKiBjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg3MCw3ICsxMDQ1LDcgQEAgSlND
ZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMwogICAgIHJldHVybiBKU1JvcGVT
dHJpbmc6OmNyZWF0ZSh2bSwgYSwgYiwgYyk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSgKICAgICBFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgc2l6ZV90IHRhYmxlSW5kZXgpCiB7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKQEAgLTE4ODQsNyAr
MTA1OSw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEkKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KHRhYmxlLmN0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKiBzdHJpbmcpCitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIHNp
emVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyogc3RyaW5nKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAt
MTg5MiwzMiArMTA2NywxOSBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0
cmluCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihleGVjLT5jb2RlQmxvY2soKS0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0aUZvclZhbHVlKHN0cmluZy0+dmFsdWUo
ZXhlYykuaW1wbCgpKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKIH0KIAotZG91YmxlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKK2RvdWJsZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQzMl90IGIpCiB7
CiAgICAgcmV0dXJuIGZtb2QoYSwgYik7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVy
YXRpb25TdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IG9wMSkKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRl
KiBleGVjLCBpbnQzMl90IG9wMSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICByZXR1cm4gSlNDOjpz
dHJpbmdGcm9tQ2hhckNvZGUoZXhlYywgb3AxKTsKIH0KIAotREZHSGFuZGxlckVuY29kZWQgREZH
X09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLQotICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRp
b24oKTsKLSAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwotICAgIAotICAgIEV4Y2VwdGlvbkhh
bmRsZXIgaGFuZGxlciA9IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsK
LSAgICBBU1NFUlQoaGFuZGxlci5jYXRjaFJvdXRpbmUpOwotICAgIHJldHVybiBkZmdIYW5kbGVy
RW5jb2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxlci5jYXRjaFJvdXRpbmUpOwotfQotCi1z
aXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZl
cnRKU1ZhbHVlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTkyNiw3ICsxMDg4LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJ
T04gZGZnQ29udmVydEpTVmFsdWVUbwogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodmFsdWUp
LnRvVUludDMyKGV4ZWMpOwogfQogCi1zaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNW
YWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcCkK
K3NpemVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAt
MTkzNCw3ICsxMDk2LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVU
bwogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wKS50b0Jvb2xlYW4oZXhlYyk7
CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25G
YWlsdXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogZGVidWdJbmZvUmF3LCB2b2lkKiBzY3JhdGNo
KQordm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1
cmUoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBkZWJ1Z0luZm9SYXcsIHZvaWQqIHNjcmF0Y2gpCiB7
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CkBAIC0xOTcyLDcgKzExMzQsNyBAQCB2b2lkIERGR19PUEVSQVRJT04g
ZGVidWdPcGVyYXRpb25QcmludFNwCiAgICAgZGF0YUxvZygiXG4iKTsKIH0KIAotZXh0ZXJuICJD
IiB2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayog
Y29kZUJsb2NrKQorZXh0ZXJuICJDIiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1p
emF0aW9uTm93KENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIC8vIEl0J3Mgc29ydCBvZiBw
cmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcg
c28gd291bGRuJ3QKICAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KQEAgLTIwMTYsNyArMTE3
OCw3IEBAIGV4dGVybiAiQyIgdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJSZW8KIH0KIAogI2lm
IEVOQUJMRShGVExfSklUKQotdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhl
Y1N0YXRlKiBleGVjKQordm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMjA3OCw3ICsxMjQwLDcgQEAgdm9pZCBE
RkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlYwogICAgICAgICBUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNvZGVCbG9jayksIHZtLT5lbnN1cmVXb3JrbGlz
dCgpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coCitjaGFy
KiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKICAgICBFeGVjU3RhdGUqIGV4ZWMs
IGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBzdHJlYW1JbmRleCkKIHsKICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKQEAgLTIxOTcsNyArMTM1OSw3IEBAIGNoYXIqIERGR19PUEVSQVRJ
T04gdHJpZ2dlck9TUkVudHJ5Tm93KAogCiAvLyBGSVhNRTogTWFrZSBjYWxscyB3b3JrIHdlbGwu
IEN1cnJlbnRseSB0aGV5J3JlIGEgcHVyZSByZWdyZXNzaW9uLgogLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25GVExDYWxsKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ2FsbChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRXhl
Y1N0YXRlKiBjYWxsZXJFeGVjID0gZXhlYy0+Y2FsbGVyRnJhbWUoKTsKICAgICAKQEAgLTIyMTcs
NyArMTM3OSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRlQKIAog
Ly8gRklYTUU6IE1ha2UgY2FsbHMgd29yayB3ZWxsLiBDdXJyZW50bHkgdGhleSdyZSBhIHB1cmUg
cmVncmVzc2lvbi4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTM2MjEKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ29uc3RydWN0
KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RlRMQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBFeGVjU3RhdGUqIGNhbGxlckV4
ZWMgPSBleGVjLT5jYWxsZXJGcmFtZSgpOwogICAgIApAQCAtMjI0MSw4NiArMTQwMyw0IEBAIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRlQKIAogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQogCi1uYW1lc3BhY2UgSlNDIHsKLQotI2lmIENPTVBJTEVSKEdDQykgJiYgQ1BV
KFg4Nl82NCkKLWFzbSAoCi0iLmdsb2JsICIgU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVy
blZhbHVlKSAiXG4iCi1ISURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1T
WU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6IiAiXG4iCi0gICAgIm1vdiA0
MCglcjEzKSwgJXIxM1xuIgotICAgICJtb3YgJXIxMywgJXJkaVxuIgotICAgICJqbXAgIiBMT0NB
TF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICJcbiIKLSk7
Ci0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODYpCi1hc20gKAotIi50ZXh0IiAiXG4iIFwK
LSIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKLUhJ
REVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKLVNZTUJPTF9TVFJJTkcoZ2V0
SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKLSAgICAibW92IDQwKCVlZGkpLCAlZWRpXG4i
Ci0gICAgIm1vdiAlZWRpLCA0KCVlc3ApXG4iCi0gICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgotKTsKLSNlbGlmIENPTVBJ
TEVSKEdDQykgJiYgQ1BVKEFSTV9USFVNQjIpCi1hc20gKAotIi50ZXh0IiAiXG4iCi0iLmFsaWdu
IDIiICJcbiIKLSIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUp
ICJcbiIKLUhJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKLSIudGh1bWIi
ICJcbiIKLSIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZ2V0SG9zdENhbGxSZXR1cm5W
YWx1ZSkgIlxuIgotU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiOiIgIlxu
IgotICAgICJsZHIgcjUsIFtyNSwgIzQwXSIgIlxuIgotICAgICJtb3YgcjAsIHI1IiAiXG4iCi0g
ICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3Rh
dGUpICJcbiIKLSk7Ci0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShBUk1fVFJBRElUSU9OQUwp
Ci1hc20gKAotIi50ZXh0IiAiXG4iCi0iLmdsb2JsICIgU1lNQk9MX1NUUklORyhnZXRIb3N0Q2Fs
bFJldHVyblZhbHVlKSAiXG4iCi1ISURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAi
XG4iCi1JTkxJTkVfQVJNX0ZVTkNUSU9OKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpCi1TWU1CT0xf
U1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6IiAiXG4iCi0gICAgImxkciByNSwgW3I1
LCAjNDBdIiAiXG4iCi0gICAgIm1vdiByMCwgcjUiICJcbiIKLSAgICAiYiAiIExPQ0FMX1JFRkVS
RU5DRShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgotKTsKLSNlbGlm
IENPTVBJTEVSKEdDQykgJiYgQ1BVKE1JUFMpCi1hc20oCi0iLnRleHQiICJcbiIKLSIuZ2xvYmwg
IiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKLUhJREVfU1lNQk9M
KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKLVNZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxS
ZXR1cm5WYWx1ZSkgIjoiICJcbiIKLSAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGdldEhvc3RDYWxs
UmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKQotICAgICJsdyAkczAsIDQwKCRzMCkiICJcbiIKLSAg
ICAibW92ZSAkYTAsICRzMCIgIlxuIgotICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGdldEhvc3RD
YWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiXG4iCi0pOwotI2VsaWYgQ09NUElMRVIoR0ND
KSAmJiBDUFUoU0g0KQotYXNtKAotIi50ZXh0IiAiXG4iCi0iLmdsb2JsICIgU1lNQk9MX1NUUklO
RyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1ISURFX1NZTUJPTChnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlKSAiXG4iCi1TWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6
IiAiXG4iCi0gICAgImFkZCAjNDAsIHIxNCIgIlxuIgotICAgICJtb3YubCBAcjE0LCByMTQiICJc
biIKLSAgICAibW92IHIxNCwgcjQiICJcbiIKLSAgICAibW92LmwgMmYsICIgU0g0X1NDUkFUQ0hf
UkVHSVNURVIgIlxuIgotICAgICJicmFmICIgU0g0X1NDUkFUQ0hfUkVHSVNURVIgIlxuIgotICAg
ICJub3AiICJcbiIKLSAgICAiMTogLmJhbGlnbiA0IiAiXG4iCi0gICAgIjI6IC5sb25nICIgTE9D
QUxfUkVGRVJFTkNFKGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiLTFiXG4i
Ci0pOwotI2VuZGlmCi0KLWV4dGVybiAiQyIgRW5jb2RlZEpTVmFsdWUgSE9TVF9DQUxMX1JFVFVS
Tl9WQUxVRV9PUFRJT04gZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIGlmICghZXhlYykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS5o
b3N0Q2FsbFJldHVyblZhbHVlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KICNlbmRpZiAv
LyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmgJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgorI2luY2x1ZGUgIkpJVE9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
MzcsMjg4ICszOCwxMjkgQEAgbmFtZXNwYWNlIERGRyB7CiAKIGV4dGVybiAiQyIgewogCi0jaWYg
Q0FMTElOR19DT05WRU5USU9OX0lTX1NURENBTEwKLSNkZWZpbmUgREZHX09QRVJBVElPTiBDREVD
TAotI2Vsc2UKLSNkZWZpbmUgREZHX09QRVJBVElPTgotI2VuZGlmCi0KLS8vIFRoZXNlIHR5cGVk
ZWZzIHByb3ZpZGUgdHlwZWNoZWNraW5nIHdoZW4gZ2VuZXJhdGluZyBjYWxscyBvdXQgdG8gaGVs
cGVyIHJvdXRpbmVzOwotLy8gdGhpcyBoZWxwcyBwcmV2ZW50IGNhbGxpbmcgYSBoZWxwZXIgcm91
dGluZSB3aXRoIHRoZSB3cm9uZyBhcmd1bWVudHMhCi0vKgotICAgIEtleToKLSAgICBWOiB2b2lk
Ci0gICAgSjogSlNWYWx1ZQotICAgIFA6IHBvaW50ZXIgKHZvaWQqKQotICAgIEM6IEpTQ2VsbCoK
LSAgICBBOiBKU0FycmF5KgotICAgIFM6IHNpemVfdAotICAgIFo6IGludDMyX3QKLSAgICBEOiBk
b3VibGUKLSAgICBJOiBTdHJpbmdJbXBsKgotKi8KLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwotdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUEpKEV4ZWNTdGF0ZSos
IEpTQXJyYXkqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZH
T3BlcmF0aW9uX0VBWikoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QpOwotdHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9E
RkdPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKLXR5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VDSSkoRXhlY1N0
YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNv
ZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RG
R09wZXJhdGlvbl9FREEpKEV4ZWNTdGF0ZSosIGRvdWJsZSwgSlNBcnJheSopOwotdHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUkpKEV4ZWNTdGF0
ZSosIFN0cmluZ0ltcGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAo
KkpfREZHT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSkEpKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0FycmF5Kik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSkkpKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlLCBTdHJpbmdJbXBsKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gKCpKX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RG
R09wZXJhdGlvbl9FSnNzWikoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBpbnQzMl90KTsKLXR5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKUCkoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHZvaWQqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VQKShFeGVjU3RhdGUqLCB2b2lkKik7Ci10
eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFAp
KEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lkKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3Qp
OwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25f
RVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7
Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
WkljZlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGluZUNhbGxGcmFtZSosIGludDMyX3QpOwot
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVpa
KShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BF
UkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIEpTQ2VsbCog
REZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsK
LXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUMpKEV4ZWNT
dGF0ZSosIEpTQ2VsbCopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09w
ZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwotdHlwZWRlZiBKU0Nl
bGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FSWNmKShFeGVjU3RhdGUqLCBJbmxp
bmVDYWxsRnJhbWUqKTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVy
YXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgSlNDZWxsKiBE
RkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUpzc1N0KShFeGVjU3RhdGUqLCBKU1N0cmlu
ZyosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09w
ZXJhdGlvbl9FSnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci10eXBl
ZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VKc3NKc3NKc3MpKEV4
ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwotdHlwZWRlZiBKU0Nl
bGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FT1opKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgaW50MzJfdCk7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3Bl
cmF0aW9uX0VTdCkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Ci10eXBlZGVmIEpTQ2VsbCogREZH
X09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKLXR5
cGVkZWYgZG91YmxlIERGR19PUEVSQVRJT04gKCpEX0RGR09wZXJhdGlvbl9ERCkoZG91YmxlLCBk
b3VibGUpOwotdHlwZWRlZiBkb3VibGUgREZHX09QRVJBVElPTiAoKkRfREZHT3BlcmF0aW9uX1pa
KShpbnQzMl90LCBpbnQzMl90KTsKLXR5cGVkZWYgZG91YmxlIERGR19PUEVSQVRJT04gKCpEX0RG
R09wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBpbnQz
Ml90IERGR19PUEVSQVRJT04gKCpaX0RGR09wZXJhdGlvbl9EKShkb3VibGUpOwotdHlwZWRlZiBz
aXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgSlNDZWxsKik7Ci10eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVy
YXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgc2l6ZV90IERG
R19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19E
RkdPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJ
T04gKCpWX0RGR09wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BF
UkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRU9aRCkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQz
Ml90LCBkb3VibGUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlv
bl9FT1pKKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsK
LXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlv
bl9FQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7Ci10eXBlZGVm
IHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDQ0ljZikoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7Ci10eXBlZGVmIHZvaWQgREZHX09Q
RVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDSkopKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAo
KlZfREZHT3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCk7Ci10eXBl
ZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgSlNDZWxsKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3Bl
cmF0aW9uX0VKQ0kpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBTdHJpbmdJ
bXBsKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VKSkop
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FSlBQKShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCosIHZvaWQqKTsKLXR5cGVkZWYgdm9pZCBE
RkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGlu
dDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9E
RkdPcGVyYXRpb25fVykoV2F0Y2hwb2ludFNldCopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFU
SU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIGNoYXIqIERGR19P
UEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci10eXBl
ZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FSlMpKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBzaXplX3QpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgq
UF9ERkdPcGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7Ci10eXBlZGVmIGNoYXIq
IERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FT1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
Kiwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9u
X0VPWikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKLXR5cGVkZWYgY2hhciogREZH
X09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVf
dCk7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUykoRXhl
Y1N0YXRlKiwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3Bl
cmF0aW9uX0VTSnNzKShFeGVjU3RhdGUqLCBzaXplX3QsIEpTU3RyaW5nKik7Ci10eXBlZGVmIGNo
YXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0
SikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBjaGFy
KiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0UFMpKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIHZvaWQqLCBzaXplX3QpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9E
RkdPcGVyYXRpb25fRVN0U1MpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90
KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdFopKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFU
SU9OICgqUF9ERkdPcGVyYXRpb25fRVpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsK
LXR5cGVkZWYgU3RyaW5nSW1wbCogREZHX09QRVJBVElPTiAoKklfREZHT3BlcmF0aW9uX0VKc3Mp
KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7Ci10eXBlZGVmIEpTU3RyaW5nKiBERkdfT1BFUkFUSU9O
ICgqSnNzX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci1KU0NlbGwqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSosIGludDMy
X3QpICBXVEZfSU5URVJOQUw7IAorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmlu
Z0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqLCBpbnQzMl90KSAgV1RGX0lOVEVSTkFMOyAKIAogLy8g
VGhlc2Ugcm91dGluZXMgYXJlIHByb3ZpZGUgY2FsbGJhY2tzIG91dCB0byBDKysgaW1wbGVtZW50
YXRpb25zIG9mIG9wZXJhdGlvbnMgdG9vIGNvbXBsZXggdG8gSklULgotSlNDZWxsKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5U
RVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3Rh
dGUqLCBKU09iamVjdCogY29uc3RydWN0b3IsIGludDMyX3QgaW5saW5lQ2FwYWNpdHkpIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpIFdURl9JTlRFUk5BTDsKLUVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwot
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlcihF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkdldEJ5VmFsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxDZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50KEV4ZWNTdGF0ZSos
IEpTQXJyYXkqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwg
aW50MzJfdCkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RG
X0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlk
QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lO
VEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJO
QUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkluT3B0aW1pemUoRXhl
Y1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25JbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7Ci1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJbihFeGVjU3RhdGUqLCBK
U0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgUHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmMsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
SlNDZWxsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25Ub1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFM
OwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheShFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHNpemVfdCwg
c2l6ZV90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Vt
cHR5QXJyYXkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3SW50OEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RG
X0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRo
T25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9J
TlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhT
aXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudChFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQz
Ml90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4
QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFs
dWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhD
bGFtcGVkQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZf
SU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFy
cmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVl
KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFy
cmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFM
OwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhPbmVBcmd1
bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFM
OwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhTaXplKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50
MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9h
dDY0QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpT
VmFsdWUpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3UmVnZXhwKEV4ZWNTdGF0ZSosIHZvaWQqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxDZWxsU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCos
IGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFM
Owotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNO
b25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc05v
blN0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1
ZSkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25B
cnJheVB1c2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5
KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25B
cnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiwgZG91YmxlIHZhbHVlLCBKU0FycmF5KikgV1RGX0lO
VEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChF
eGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiwgSlNB
cnJheSopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdU
Rl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBT
dHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRF
Uk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0
cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCop
IFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRF
Uk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRM
aXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlz
dChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwg
U3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdPYmplY3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOworSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
IGNvbnN0cnVjdG9yLCBpbnQzMl90IGlubGluZUNhcGFjaXR5KSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpcyhFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpc1N0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lO
VEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFByb3BlcnR5KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkUHJvcGVydHkpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludChFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50
MzJfdCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeVZhbFN0cmluZ0ludChFeGVjU3RhdGUqLCBKU1N0cmluZyosIGludDMyX3QpIFdURl9J
TlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9QcmltaXRp
dmUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCos
IHNpemVfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdB
cnJheUJ1ZmZlcihFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVfdCkgV1RGX0lO
VEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdFbXB0eUFycmF5KEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBX
VEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdp
dGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGlu
dDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50
MzJBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNW
YWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50
OEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVS
TkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aE9uZUFy
Z3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0
aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhPbmVBcmd1
bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFM
OworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhTaXplKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld1VpbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0Zsb2F0MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMy
X3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQz
MkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0
NjRBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRF
Uk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aE9u
ZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5U
RVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChF
eGVjU3RhdGUqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RG
X0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmlj
dChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5
b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91Ymxl
QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMy
X3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFsdWUpIFdURl9JTlRFUk5B
TDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5B
TDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91Ymxl
KEV4ZWNTdGF0ZSosIGRvdWJsZSB2YWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNB
cnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5U
RVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMo
RXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogLy8gVGhlc2UgY29t
cGFyaXNvbnMgcmV0dXJuIGEgYm9vbGVhbiB3aXRoaW4gYSBzaXplX3Qgc3VjaCB0aGF0IHRoZSB2
YWx1ZSBpcyB6ZXJvIGV4dGVuZGVkIHRvIGZpbGwgdGhlIHJlZ2lzdGVyLgotc2l6ZV90IERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwq
KSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVz
cyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25D
b21wYXJlTGVzc0VxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVS
TkFMOwotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdU
Rl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QoRXhl
Y1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJO
QUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
KSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlckVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4
ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFMOworRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEoRXhlY1N0
YXRlKiwgSlNDZWxsKiBsZWZ0LCBKU0NlbGwqIHJpZ2h0KSBXVEZfSU5URVJOQUw7CiAjZWxzZQot
c2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSos
IEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVm
dCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFMOwogI2VuZGlmCi1zaXplX3QgREZHX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsK
LXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBX
VEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4
ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlu
a0NhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRF
Uk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3Rh
dGUqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRl
QWN0aXZhdGlvbihFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLUpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxpbmVkQXJndW1lbnRzKEV4ZWNT
dGF0ZSosIElubGluZUNhbGxGcmFtZSopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCop
IFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5l
ZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUq
KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEFyZ3VtZW50c0xlbmd0aChFeGVjU3RhdGUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFs
KEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGluZUNhbGxGcmFtZSosIGludDMyX3QpIFdURl9JTlRF
Uk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRC
eVZhbChFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25Ob0NoZWNrKEV4ZWNTdGF0ZSosIEpT
Q2VsbCopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwotSlNDZWxs
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uRXhwcmVzc2lvbihFeGVjU3RhdGUq
LCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1kb3VibGUgREZHX09QRVJBVElPTiBvcGVyYXRpb25G
TW9kT25JbnRzKGludDMyX3QsIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZf
SU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Jc0Z1bmN0aW9uKEVuY29k
ZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
VHlwZU9mKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJB
VElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBK
U09iamVjdCosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RG
X0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3Rh
dGUqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRp
YWxDYXBhY2l0eShFeGVjU3RhdGUqLCBKU09iamVjdCopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3Rv
cmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7
Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUludDMyKEV4ZWNTdGF0ZSosIEpT
Q2VsbCopOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVEb3VibGUoRXhlY1N0
YXRlKiwgSlNDZWxsKik7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRp
Z3VvdXMoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blJhZ2VFbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNDZWxsKik7
Ci1TdHJpbmdJbXBsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0
ZSosIEpTU3RyaW5nKik7Ci1KU1N0cmluZyogREZHX09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVD
aGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci0KLUpTQ2VsbCogREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBTdHJ1
Y3R1cmUqKTsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZ09uQ2VsbChF
eGVjU3RhdGUqLCBKU0NlbGwqKTsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0
cmluZyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKLUpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMoRXhlY1N0YXRlKiwgSlNTdHJp
bmcqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IHNpemVfdCB0YWJsZUluZGV4KTsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNo
U3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyopOworc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZf
SU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNy
ZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50cyhF
eGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVGVhck9mZkFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0Nl
bGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZklu
bGluZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZy
YW1lKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRBcmd1bWVudHNMZW5ndGgoRXhlY1N0YXRlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRJbmxpbmVkQXJndW1lbnRC
eVZhbChFeGVjU3RhdGUqLCBpbnQzMl90LCBJbmxpbmVDYWxsRnJhbWUqLCBpbnQzMl90KSBXVEZf
SU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3Vt
ZW50QnlWYWwoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uTm9DaGVjayhFeGVjU3RhdGUq
LCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbkV4cHJlc3Npb24oRXhlY1N0
YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOworZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkg
V1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihF
bmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblR5cGVPZihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBh
Y2l0eShFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIHNpemVfdCBuZXdTaXplKSBX
VEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0
ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25S
ZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRW5zdXJlSW50MzIoRXhlY1N0YXRlKiwgSlNDZWxsKik7CitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsZShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqLCBKU0Nl
bGwqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmFnZUVuc3VyZUNvbnRpZ3VvdXMo
RXhlY1N0YXRlKiwgSlNDZWxsKik7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3Vy
ZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK1N0cmluZ0ltcGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsKK0pTU3Ry
aW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3Rh
dGUqLCBpbnQzMl90KTsKKworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmlu
Z09iamVjdChFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOworSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwor
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlKTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTIoRXhl
Y1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJp
bmcqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZv
ckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90IHRhYmxlSW5kZXgpOwor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmcoRXhlY1N0YXRlKiwgc2l6
ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIC8vIEZJ
WE1FOiBNYWtlIGNhbGxzIHdvcmsgd2VsbC4gQ3VycmVudGx5IHRoZXkncmUgYSBwdXJlIHJlZ3Jl
c3Npb24uCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIx
Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZUTENhbGwoRXhlY1N0YXRl
KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25G
VExDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25GVExDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ29uc3RydWN0KEV4ZWNTdGF0
ZSopIFdURl9JTlRFUk5BTDsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAotLy8gVGhpcyBt
ZXRob2QgaXMgdXNlZCB0byBsb29rdXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1
bHRMb2NhdGlvbiwgd2hpY2ggaXMKLS8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2Yg
dGhlIGNhbGxzIG91dCB0byBvbmUgb2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFib3ZlLgotCi0v
LyBBY2NvcmRpbmcgdG8gQysrIHJ1bGVzLCBhIHR5cGUgdXNlZCBmb3IgdGhlIHJldHVybiBzaWdu
YXR1cmUgb2YgZnVuY3Rpb24gd2l0aCBDIGxpbmthZ2UgKGkuZS4KLS8vICdleHRlcm4gIkMiJykg
bmVlZHMgdG8gYmUgUE9EOyBoZW5jZSBwdXR0aW5nIGFueSBjb25zdHJ1Y3RvcnMgaW50byBpdCBj
b3VsZCBjYXVzZSBlaXRoZXIgY29tcGlsZXIKLS8vIHdhcm5pbmdzLCBvciB3b3JzZSwgYSBjaGFu
Z2UgaW4gdGhlIEFCSSB1c2VkIHRvIHJldHVybiB0aGVzZSB0eXBlcy4KLXN0cnVjdCBERkdIYW5k
bGVyIHsKLSAgICB1bmlvbiBVbmlvbiB7Ci0gICAgICAgIHN0cnVjdCBTdHJ1Y3QgewotICAgICAg
ICAgICAgRXhlY1N0YXRlKiBleGVjOwotICAgICAgICAgICAgdm9pZCogaGFuZGxlcjsKLSAgICAg
ICAgfSBzOwotICAgICAgICB1aW50NjRfdCBlbmNvZGVkOwotICAgIH0gdTsKLX07Ci0KLWlubGlu
ZSBERkdIYW5kbGVyIGNyZWF0ZURGR0hhbmRsZXIoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBoYW5k
bGVyKQotewotICAgIERGR0hhbmRsZXIgcmVzdWx0OwotICAgIHJlc3VsdC51LnMuZXhlYyA9IGV4
ZWM7Ci0gICAgcmVzdWx0LnUucy5oYW5kbGVyID0gaGFuZGxlcjsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi0jaWYgQ1BVKFg4Nl82NCkKLXR5cGVkZWYgREZHSGFuZGxlciBERkdIYW5kbGVyRW5j
b2RlZDsKLWlubGluZSBERkdIYW5kbGVyRW5jb2RlZCBkZmdIYW5kbGVyRW5jb2RlZChFeGVjU3Rh
dGUqIGV4ZWMsIHZvaWQqIGhhbmRsZXIpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZURGR0hhbmRsZXIo
ZXhlYywgaGFuZGxlcik7Ci19Ci0jZWxzZQotdHlwZWRlZiB1aW50NjRfdCBERkdIYW5kbGVyRW5j
b2RlZDsKLWlubGluZSBERkdIYW5kbGVyRW5jb2RlZCBkZmdIYW5kbGVyRW5jb2RlZChFeGVjU3Rh
dGUqIGV4ZWMsIHZvaWQqIGhhbmRsZXIpCi17Ci0gICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKERG
R0hhbmRsZXI6OlVuaW9uKSA9PSBzaXplb2YodWludDY0X3QpLCBERkdIYW5kbGVyX1VuaW9uX2lz
XzY0Yml0KTsKLSAgICByZXR1cm4gY3JlYXRlREZHSGFuZGxlcihleGVjLCBoYW5kbGVyKS51LmVu
Y29kZWQ7Ci19Ci0jZW5kaWYKLURGR0hhbmRsZXJFbmNvZGVkIERGR19PUEVSQVRJT04gbG9va3Vw
RXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci0KIC8vIFRoZXNlIG9w
ZXJhdGlvbnMgaW1wbGVtZW50IHRoZSBpbXBsaWNpdGx5IGNhbGxlZCBUb0ludDMyIGFuZCBUb0Jv
b2xlYW4gY29udmVyc2lvbnMgZnJvbSBFUzUuCiAvLyBUaGlzIGNvbnZlcnNpb24gcmV0dXJucyBh
biBpbnQzMl90IHdpdGhpbiBhIHNpemVfdCBzdWNoIHRoYXQgdGhlIHZhbHVlIGlzIHplcm8gZXh0
ZW5kZWQgdG8gZmlsbCB0aGUgcmVnaXN0ZXIuCi1zaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252
ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5B
TDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElP
TiBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29s
ZWFuKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiAKLXZvaWQgREZH
X09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0
ZSosIHZvaWQqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVn
T3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRlKiwgdm9pZCosIHZvaWQq
KSBXVEZfSU5URVJOQUw7CiAKLXZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRp
b25Ob3coQ29kZUJsb2NrKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdn
ZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqKSBXVEZfSU5URVJOQUw7CiAKICNpZiBFTkFC
TEUoRlRMX0pJVCkKLXZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0
ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93
KEV4ZWNTdGF0ZSosIGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBzdHJlYW1JbmRleCkg
V1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0
YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlO
b3coRXhlY1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUluZGV4LCBpbnQzMl90IHN0cmVhbUluZGV4
KSBXVEZfSU5URVJOQUw7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKIH0gLy8gZXh0ZXJu
ICJDIgogCi1pbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb25OZXdUeXBlZEFycmF5
V2l0aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCitpbmxpbmUgUF9KSVRPcGVyYXRp
b25fRVN0WiBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlU
eXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBUeXBlSW50ODoKQEAg
LTM0Nyw3ICsxODksNyBAQCBpbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb25OZXdU
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWlubGluZSBQX0RGR09wZXJhdGlvbl9FU3RKIG9wZXJhdGlv
bk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUp
CitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRVN0SiBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aE9u
ZUFyZ3VtZW50Rm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlw
ZSkgewogICAgIGNhc2UgVHlwZUludDg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZWdpc3RlclNldC5oCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjE3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBERkdSZWdpc3RlclNldF9oCi0jZGVmaW5lIERGR1JlZ2lzdGVyU2V0X2gKLQotI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJGUFJJ
bmZvLmgiCi0jaW5jbHVkZSAiR1BSSW5mby5oIgotI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KLQot
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQg
dG90YWxOdW1iZXJPZlJlZ2lzdGVycyA9Ci0gICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMg
KyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51
bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0ID0KLSAgICAodG90YWxOdW1iZXJPZlJlZ2lzdGVycyAr
IDcpID4+IDM7Ci0KLXR5cGVkZWYgdWludDhfdCBSZWdpc3RlclNldFBPRFtudW1iZXJPZkJ5dGVz
SW5SZWdpc3RlclNldF07Ci0KLWNsYXNzIFJlZ2lzdGVyU2V0IHsKLXB1YmxpYzoKLSAgICBSZWdp
c3RlclNldCgpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkJ5dGVz
SW5SZWdpc3RlclNldDsgaS0tOykKLSAgICAgICAgICAgIG1fc2V0W2ldID0gMDsKLSAgICB9Ci0g
ICAgCi0gICAgUmVnaXN0ZXJTZXQoY29uc3QgUmVnaXN0ZXJTZXRQT0QmIG90aGVyKQotICAgIHsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGkt
LTspCi0gICAgICAgICAgICBtX3NldFtpXSA9IG90aGVyW2ldOwotICAgIH0KLSAgICAKLSAgICBj
b25zdCBSZWdpc3RlclNldFBPRCYgYXNQT0QoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQotICAg
IAotICAgIHZvaWQgY29weUluZm8oUmVnaXN0ZXJTZXRQT0QmIG90aGVyKSBjb25zdAotICAgIHsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGkt
LTspCi0gICAgICAgICAgICBvdGhlcltpXSA9IG1fc2V0W2ldOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIHNldChHUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgc2V0Qml0KEdQUkluZm86OnRvSW5k
ZXgocmVnKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0R1BSQnlJbmRleCh1bnNpZ25lZCBp
bmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzKTsKLSAgICAgICAgc2V0Qml0KGluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBj
bGVhcihHUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgY2xlYXJCaXQoR1BSSW5mbzo6dG9JbmRl
eChyZWcpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBnZXQoR1BSUmVnIHJlZykgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9
Ci0gICAgCi0gICAgYm9vbCBnZXRHUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwot
ICAgICAgICByZXR1cm4gZ2V0Qml0KGluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJu
IHRoZSBpbmRleCd0aCBmcmVlIEdQUi4KLSAgICBHUFJSZWcgZ2V0RnJlZUdQUih1bnNpZ25lZCBp
bmRleCA9IDApIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFnZXRHUFJCeUlu
ZGV4KGkpICYmICFpbmRleC0tKQotICAgICAgICAgICAgICAgIHJldHVybiBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHNldChGUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgc2V0Qml0
KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBzZXRGUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KQotICAgIHsK
LSAgICAgICAgQVNTRVJUKGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwotICAg
ICAgICBzZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpbmRleCk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgY2xlYXIoRlBSUmVnIHJlZykKLSAgICB7Ci0gICAgICAgIGNsZWFyQml0
KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBnZXQoRlBSUmVnIHJlZykgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBnZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjp0b0lu
ZGV4KHJlZykpOwotICAgIH0KLSAgICAKLSAgICBib29sIGdldEZQUkJ5SW5kZXgodW5zaWduZWQg
aW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaW5kZXggPCBGUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyk7Ci0gICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnMgKyBpbmRleCk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJh
bmtJbmZvPgotICAgIHZvaWQgc2V0QnlJbmRleCh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAg
ICAgIHNldChCYW5rSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOwotICAgIH0KLSAgICAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICBib29sIGdldEJ5SW5kZXgodW5zaWduZWQg
aW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0KEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGlu
ZGV4KSk7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIG51bWJlck9mU2V0R1BScygpIGNvbnN0
Ci0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAg
aWYgKCFnZXRCaXQoaSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBy
ZXN1bHQrKzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAK
LSAgICB1bnNpZ25lZCBudW1iZXJPZlNldEZQUnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5z
aWduZWQgcmVzdWx0ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmICghZ2V0Qml0KEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgaSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICByZXN1bHQrKzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZlNldFJlZ2lzdGVycygpIGNvbnN0Ci0gICAg
ewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSB0b3RhbE51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAoIWdldEJp
dChpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJlc3VsdCsrOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotcHJpdmF0ZToK
LSAgICB2b2lkIHNldEJpdCh1bnNpZ25lZCBpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGkgPCB0
b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgbV9zZXRbaSA+PiAzXSB8PSAoMSA8PCAo
aSAmIDcpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhckJpdCh1bnNpZ25lZCBpKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAg
bV9zZXRbaSA+PiAzXSAmPSB+KDEgPDwgKGkgJiA3KSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wg
Z2V0Qml0KHVuc2lnbmVkIGkpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaSA8IHRvdGFs
TnVtYmVyT2ZSZWdpc3RlcnMpOwotICAgICAgICByZXR1cm4gISEobV9zZXRbaSA+PiAzXSAmICgx
IDw8IChpICYgNykpKTsKLSAgICB9Ci0gICAgCi0gICAgUmVnaXN0ZXJTZXRQT0QgbV9zZXQ7Ci19
OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbHNlIC8vIEVOQUJMRShERkdfSklU
KSAtPiBzbyBpZiBERkcgaXMgZGlzYWJsZWQKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewotCi0vLyBEZWZpbmUgUmVnaXN0ZXJTZXRQT0QgdG8gc29tZXRoaW5nIHRoYXQgaXMgYSBQ
T0QsIGJ1dCBpcyBvdGhlcndpc2UgdXNlbGVzcywKLS8vIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJl
ZmVyIHRvIHRoaXMgdHlwZSBpbiBjb2RlIHRoYXQgbWF5IGJlIGNvbXBpbGVkIHdoZW4KLS8vIHRo
ZSBERkcgaXMgZGlzYWJsZWQuCi0KLXN0cnVjdCBSZWdpc3RlclNldFBPRCB7IH07Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5k
aWYgLy8gREZHUmVnaXN0ZXJTZXRfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQxOCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdSZXBhdGNoLmgiCi0KLSNpZiBFTkFC
TEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkNhbGxG
cmFtZUlubGluZXMuaCIKLSNpbmNsdWRlICJERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIK
LSNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgotI2luY2x1ZGUgIkRGR1RodW5rcy5oIgot
I2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKLSNpbmNsdWRlICJPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5oIgotI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVS
YXJlRGF0YUlubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQot
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1zdGF0aWMgdm9pZCByZXBhdGNoQ2Fs
bChDb2RlQmxvY2sqIGNvZGVibG9jaywgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0
ciBuZXdDYWxsZWVGdW5jdGlvbikKLXsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
Y29kZWJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsLCBuZXdDYWxsZWVGdW5j
dGlvbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcyhDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhG
dW5jdGlvbiwgYm9vbCBjb21wYWN0KQotewotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOwotCi0gICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQotICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlv
bik7Ci0KLSAgICAvLyBQYXRjaCB0aGUgc3RydWN0dXJlIGNoZWNrICYgdGhlIG9mZnNldCBvZiB0
aGUgbG9hZC4KLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBzdHJ1Y3R1cmUpOwotICAgIHJlcGF0Y2hCdWZmZXIuc2V0
TG9hZEluc3RydWN0aW9uSXNBY3RpdmUoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmNvbnZl
cnRpYmxlTG9hZEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0b3JhZ2VM
b2FkKSwgaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBpZiAoY29tcGFjdCkKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3Jh
Z2Uob2Zmc2V0KSk7Ci0gICAgZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0
b3JhZ2Uob2Zmc2V0KSk7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlmIChjb21wYWN0
KSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNl
dCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
OwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zm
c2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVk
U3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3Rv
cmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGFkZFN0cnVj
dHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
Ci0gICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWls
dXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewotICAgIGlmIChvYmplY3QtPnN0cnVjdHVy
ZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNT
dGlsbFZhbGlkKCkpIHsKLSAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2lu
dChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotI2lmIERGR19FTkFCTEUoSklU
X0FTU0VSVCkKLSAgICAgICAgLy8gSWYgd2UgZXhlY3V0ZSB0aGlzIGNvZGUsIHRoZSBvYmplY3Qg
bXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0LiBBc3NlcnQKLSAgICAgICAgLy8gdGhp
cyBpbiBkZWJ1ZyBtb2Rlcy4KLSAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG9rID0gaml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0gICAgICAgIGppdC5icmVha3BvaW50KCk7Ci0gICAgICAg
IG9rLmxpbmsoJmppdCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNo
R1BSKTsKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoUHRyKAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU1Zh
bHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywKLSAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCi17Ci0gICAgaWYgKHByb3RvdHlw
ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChwcm90b3R5cGUu
aXNDZWxsKCkpOwotICAgIAotICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAg
ICAgcHJvdG90eXBlLmFzQ2VsbCgpLCBwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBj
b2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsCi0gICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQ
Uik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChSZXBhdGNoQnVmZmVyJiByZXBh
dGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciB0YXJnZXQpCi17Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVw
bGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVwbGFjZVdpdGhKdW1wKAotICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBh
dGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcygKLSAgICAgICAgICAgICAgICBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoCi0gICAgICAgICAg
ICAgICAgICAgIC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0Nh
bGwpKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAotICAgICAgICBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAgc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAotICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCh0YXJnZXQpKTsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVTY3JhdGNo
KE1hY3JvQXNzZW1ibGVyJiBzdHViSml0LCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBHUFJS
ZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIHN1Y2Nlc3MsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wJiBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzKQot
ewotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBzdHViSml0LnBvcChz
Y3JhdGNoR1BSKTsKLSAgICAgICAgCi0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4g
cG9wIHNjcmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFjay4KLSAgICAgICAgZmFpbHVyZUNhc2Vz
LmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQ
Uik7Ci0gICAgICAgIAotICAgICAgICBmYWlsID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgCi0gICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotfQotCi1z
dGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJv
b2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJl
Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwg
c2xvd0Nhc2VCZWdpbikKLXsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN1Y2Nlc3NM
YWJlbCk7Ci0gICAgICAgIAotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWwsIHNsb3dDYXNlQmVnaW4pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBkaXJlY3RseSBiYWNrIHRv
IG5vcm1hbCBwYXRoCi0gICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIHNsb3dDYXNl
QmVnaW4pOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYg
cGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAg
ICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBz
dWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9TbG93Q2FzZSkpOwotfQotCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5B
Y2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBD
b2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBz
dHViUm91dGluZSkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLQotICAgIE1hY3JvQXNz
ZW1ibGVyIHN0dWJKaXQ7Ci0gICAgICAgIAotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2Vk
UmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9
IGZhbHNlOwotICAgIAotICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNl
bGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKLSNlbHNlCi0gICAgICAgIHNjcmF0
Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRH
UFIsIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hH
UFIpOwotICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgfQotICAgIAot
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgCi0gICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAg
Ci0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0gICAgSlNPYmplY3QqIHByb3Rv
T2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytp
dCkgewotICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3Rv
dHlwZUZvckxvb2t1cChleGVjKSk7Ci0gICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVj
aygKLSAgICAgICAgICAgIHByb3RvT2JqZWN0LCBwcm90b09iamVjdC0+c3RydWN0dXJlKCksIGV4
ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgIGZhaWx1cmVD
YXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Ci0g
ICAgfQotICAgIAotICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKSB7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2FkNjQocHJvdG9PYmplY3QtPmxvY2F0aW9uRm9y
T2Zmc2V0KG9mZnNldCksIHJlc3VsdEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
ICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9PYmpl
Y3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkpLCByZXN1bHRHUFIpOwotICAgICAgICBzdHVi
Sml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7
Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQ
UiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBzdHViSml0Lmxv
YWRQdHIocHJvdG9PYmplY3QtPmJ1dHRlcmZseUFkZHJlc3MoKSwgcmVzdWx0R1BSKTsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIs
IG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSks
IHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwotICAgIAotICAgIGVtaXRSZXN0b3Jl
U2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2Vz
cywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKLSAgICAKLSAgICBsaW5rUmVzdG9y
ZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWls
LCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgCi0gICAg
c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKLSAgICAgICAgcGF0Y2hC
dWZmZXIsCi0gICAgICAgICgiREZHIHByb3RvdHlwZSBjaGFpbiBhY2Nlc3Mgc3R1YiBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9j
aygpKS5kYXRhKCksIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci19Ci0KLXN0
YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZh
bHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIC8vIEZJWE1FOiBXcml0
ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBjaGVjayBmb3IgcmVjdXJzaW9uIGhlcmUg
anVzdAotICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sg
Zm9yIHJlY3Vyc2lvbi4KLQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJs
b2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgCi0gICAgaWYgKGlzSlNBcnJh
eShiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKSB7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAg
R1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
ZGZnLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOwotICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVn
aXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gg
PSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2Vs
ZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1
bHRHUFIsIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0dWJKaXQucHVzaChz
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1
cmVDYXNlczsKLSAgICAgICAKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsgCi0gICAgICAgIHN0dWJKaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElzQXJy
YXkpKSk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spKSk7Ci0gICAgICAgIAotICAgICAgICBzdHViSml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigwKSkpOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1Ykpp
dC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaEdQUiwgcmVzdWx0
R1BSKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0dWJKaXQubW92ZShzY3Jh
dGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICBzdHViSml0Lm1vdmUoSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW0zMigweGZmZmZmZmZmKSwgcmVzdWx0VGFnR1BSKTsgLy8gSlNWYWx1ZTo6SW50MzJU
YWcKLSNlbmRpZgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7
Ci0gICAgICAgIAotICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0g
ICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNv
ZGVCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZm
ZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2VzcywgZmFpbCwgZmFpbHVy
ZUNhc2VzKTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJ
WkVfQ09ERV9GT1JfREZHX1NUVUIoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAg
ICAgICgiREZHIEdldEJ5SWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEo
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKLSAgICAgICAgCi0gICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOwotICAgICAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1
YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25H
ZXRCeUlkKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgbGVuZ3RoIGFjY2VzcyBmb3IgU3RyaW5nLgotCi0g
ICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KLSAgICBp
ZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTQ2Vs
bCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7Ci0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nl
c3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBPcHRp
bWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkg
ewotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCi0gICAgICAgICAgICB8fCAh
TWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNl
dFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkpIHsKLSAgICAg
ICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1
aWxkTGlzdCwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSBnZXR0ZXJz
IGFuZCBzZXR0ZXJzCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2Fj
aGVkT2Zmc2V0KCk7Ci0gICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5G
b3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJhc2UoKSwgcHJvcGVydHlO
YW1lLCBvZmZzZXQpOwotICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFp
biA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgCi0gICAgZ2VuZXJhdGVQ
cm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50
LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxU
b1Nsb3dDYXNlKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgIAotICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNo
QnVmZmVyLCBzdHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwot
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3Bl
cmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7Ci0gICAgCi0gICAgc3R1YkluZm8uaW5pdEdldEJ5SWRD
aGFpbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90
eXBlQ2hhaW4sIGNvdW50LCB0cnVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCByZXBh
dGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGJvb2wgY2FjaGVkID0gdHJ5Q2FjaGVHZXRCeUlE
KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7Ci0gICAgaWYg
KCFjYWNoZWQpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwotfQotCi1zdGF0aWMgYm9v
bCBnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QoCi0gICAgVk0qIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdComIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgaW50JiBsaXN0SW5k
ZXgsCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwmIHNsb3dDYXNlKQotewotICAgIHNsb3dDYXNlID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIAotICAgIGlmIChzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc191bnNldCkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3R1YkluZm8u
c3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRC
eUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAwLCBmYWxzZSk7Ci0gICAgICAg
IGxpc3RJbmRleCA9IDA7Ci0gICAgfSBlbHNlIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc19nZXRfYnlfaWRfc2VsZikgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3R1YkluZm8u
c3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShzbG93Q2FzZSks
IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7
Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0LCAxLCB0cnVlKTsKLSAgICAgICAgbGlzdEluZGV4ID0gMTsKLSAgICB9IGVsc2UgaWYg
KHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikgewotICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgc2xvd0Nh
c2UgPSBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
SW5mby5zdHViUm91dGluZSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCksIHRydWUpOwot
ICAgICAgICBzdHViSW5mby5zdHViUm91dGluZS5jbGVhcigpOwotICAgICAgICBzdHViSW5mby5p
bml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSwgZmFsc2UpOwot
ICAgICAgICBsaXN0SW5kZXggPSAxOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOwot
ICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxm
TGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmdldEJ5
SWRTZWxmTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgc2xvd0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJl
bChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAobGlzdEluZGV4ID09IFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIFJFTEVBU0VfQVNTRVJUKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhdGNoSnVtcFRvR2V0QnlJ
ZFN0dWIoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
SklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKQotewotICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJ
bmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOwotICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIGlmIChzdHViSW5mby51Lmdl
dEJ5SWRTZWxmTGlzdC5kaWRTZWxmUGF0Y2hpbmcpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoCi0gICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zm
c2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVj
dENoZWNrKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgcmVwbGFjZVdp
dGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSk7Ci19Ci0KLXN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmICgh
YmFzZVZhbHVlLmlzQ2VsbCgpCi0gICAgICAgIHx8ICFzbG90LmlzQ2FjaGVhYmxlKCkKLSAgICAg
ICAgfHwgIWJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNB
cmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
LSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotICAgIAotICAgIGlmIChzbG90
LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgIGlmICghc3R1YkluZm8ucGF0Y2gu
ZGZnLnJlZ2lzdGVyc0ZsdXNoZWQpIHsKLSAgICAgICAgICAgIC8vIFdlIGNhbm5vdCBkbyBhcyBt
dWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCBwcmlv
ciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRpY3VsYXIsCi0gICAgICAgICAgICAvLyBub24tVmFs
dWUgY2FjaGVkIHByb3BlcnRpZXMgcmVxdWlyZSBwbGFudGluZyBjYWxscywgd2hpY2ggcmVxdWly
ZXMgcmVnaXN0ZXJzIHRvIGhhdmUgYmVlbiBmbHVzaGVkLiBUaHVzLAotICAgICAgICAgICAgLy8g
aWYgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQsIGRvbid0IGRvIG5vbi1WYWx1ZSBjYWNoaW5n
LgotICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGlu
dCBsaXN0SW5kZXg7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlOwotCi0gICAg
ICAgIGlmICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc2xvd0Nhc2UpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgc3R1YkluZm8udS5nZXRC
eUlkU2VsZkxpc3QubGlzdFNpemUrKzsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BS
ID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19j
YXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5kZmcudmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAg
IAotICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAg
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdyb25nU3RydWN0ID0gc3R1YkppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgc3RyYXRlZ3kg
d2UgdXNlIGZvciBzdHVicyBpcyBhcyBmb2xsb3dzOgotICAgICAgICAvLyAxKSBDYWxsIERGRyBo
ZWxwZXIgdGhhdCBjYWxscyB0aGUgZ2V0dGVyLgotICAgICAgICAvLyAyKSBDaGVjayBpZiB0aGVy
ZSB3YXMgYW4gZXhjZXB0aW9uLCBhbmQgaWYgdGhlcmUgd2FzLCBjYWxsIHlldCBhbm90aGVyCi0g
ICAgICAgIC8vICAgIGhlbHBlci4KLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNEaXJlY3QgPSBm
YWxzZTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaGFuZGxlckNhbGw7Ci0gICAgICAgIEZ1bmN0aW9uUHRy
IG9wZXJhdGlvbkZ1bmN0aW9uOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNz
OwotICAgICAgICAKLSAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90
LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxl
R2V0dGVyKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlk
R1BSUmVnKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZUdQUiAhPSBzY3JhdGNoR1BSKTsK
LSAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkp
IHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2
NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShz
bG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAg
ICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNl
bmRpZgotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0
Y2hHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNl
R1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25GdW5jdGlvbiA9IG9w
ZXJhdGlvbkNhbGxHZXR0ZXI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICAgICAgICAgICAg
ICBiYXNlR1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKS5leGVjdXRhYmxlQWRkcmVzcygp
KSwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoaWRl
bnQuaW1wbCgpKSk7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRp
b25DYWxsQ3VzdG9tR2V0dGVyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRl
IGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQotICAgICAgICAgICAgLy8gcGxhY2UgdGhh
dCB3ZSBtYWRlIGl0IGZyb20uIEl0IGp1c3Qgc28gaGFwcGVucyB0byBiZSB0aGUgcGxhY2UgdGhh
dCB3ZSBhcmUgYXQKLSAgICAgICAgICAgIC8vIHJpZ2h0IG5vdyEKLSAgICAgICAgICAgIHN0dWJK
aXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KGV4ZWMtPmxvY2F0aW9uQXNSYXdCaXRzKCkpLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJK
aXQuY2FsbCgpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBzdHViSml0Lm1vdmUo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICAgICAg
c3R1YkppdC5zZXR1cFJlc3VsdHMocmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOwotI2VuZGlmCi0g
ICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxw
ZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
c3R1YkppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwotICAgICAgICAgICAgaGFuZGxlckNh
bGwgPSBzdHViSml0LmNhbGwoKTsKLSAgICAgICAgICAgIHN0dWJKaXQuanVtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQ
Uik7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGlmIChiYXNlR1BSID09IHJlc3VsdFRhZ0dQUikg
ewotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkp
LCByZXN1bHRHUFIpOwotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hl
ZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdH
UFIpOwotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgp
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BS
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBz
dHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJl
bGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIs
IG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7
Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1
bXAoKTsKLSAgICAgICAgICAgIGlzRGlyZWN0ID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY29kZUJsb2NrKTsKLSAgICAg
ICAgCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsod3JvbmdTdHJ1Y3QsIHNsb3dDYXNlKTsKLSAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7Ci0g
ICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3Bl
cmF0aW9uQ2FsbCwgb3BlcmF0aW9uRnVuY3Rpb24pOwotICAgICAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlcik7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPQotICAg
ICAgICAgICAgY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0gICAgICAgICAgICAgICAgRklOQUxJWkVf
REZHX0NPREUoCi0gICAgICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAg
ICAgICAgICAoIkRGRyBHZXRCeUlkIHBvbHltb3JwaGljIGxpc3QgYWNjZXNzIGZvciAlcywgcmV0
dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29k
ZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2Fs
bFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAgICAgICAgICAgICp2bSwKLSAg
ICAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAg
ICAgIHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkp
OwotICAgICAgICAKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUs
IHN0cnVjdHVyZSwgaXNEaXJlY3QpOwotICAgICAgICAKLSAgICAgICAgcGF0Y2hKdW1wVG9HZXRC
eUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7Ci0gICAgICAg
IHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7Ci0g
ICAgfQotICAgIAotICAgIGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpIHx8ICFzbG90LmlzQ2FjaGVhYmxlVmFs
dWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQcm90
b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2VWYWx1ZSwgc2xvdC5zbG90QmFzZSgp
LCBpZGVudCwgb2Zmc2V0KTsKLSAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWlu
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBl
Q2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgIAotICAgIFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwotICAg
IGludCBsaXN0SW5kZXg7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2U7Ci0gICAgaWYg
KCFnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qodm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdCwgbGlzdEluZGV4LCBzbG93Q2FzZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3QubGlzdFNp
emUrKzsKLSAgICAKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAg
IAotICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3Rv
dHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUp
LCBzbG93Q2FzZSwgc3R1YlJvdXRpbmUpOwotICAgIAotICAgIHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOwotICAgIAotICAgIHBhdGNoSnVtcFRv
R2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOwotICAg
IAotICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0g
MSk7Ci19Ci0KLXZvaWQgYnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
YmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGJvb2wgZG9u
dENoYW5nZUNhbGwgPSB0cnlCdWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVy
dHlOYW1lLCBzbG90LCBzdHViSW5mbyk7Ci0gICAgaWYgKCFkb250Q2hhbmdlQ2FsbCkKLSAgICAg
ICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Ci19Ci0KLXN0YXRpYyBWX0RGR09wZXJhdGlvbl9FSkNJ
IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3Qg
JnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkg
ewotICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCi0gICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3Q7Ci0gICAgfQotICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0gICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3Q7Ci19Ci0KLXN0YXRpYyBWX0RGR09wZXJhdGlvbl9FSkNJIGFwcHJv
cHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAm
c2xvdCwgUHV0S2luZCBwdXRLaW5kKQotewotICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7
Ci0gICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0OwotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdDsKLSAgICB9Ci0gICAgaWYgKHB1dEtpbmQgPT0gRGly
ZWN0KQotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxk
TGlzdDsKLSAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdDsKLX0K
LQotc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywK
LSAgICBKU1ZhbHVlLAotICAgIGNvbnN0IElkZW50aWZpZXImLAotICAgIGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgUHV0
S2luZCwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBm
YWlsdXJlTGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17
Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2Vk
UmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9
IGZhbHNlOwotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUjI7Ci0gICAgY29uc3QgYm9vbCB3cml0ZUJhcnJpZXJOZWVkZWQgPSB0cnVlOwot
I2Vsc2UKLSAgICBjb25zdCBib29sIHdyaXRlQmFycmllck5lZWRlZCA9IGZhbHNlOwotI2VuZGlm
Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKLSAgICAKLSAgICBpZiAoc2NyYXRj
aEdQUiA9PSBJbnZhbGlkR1BSUmVnICYmICh3cml0ZUJhcnJpZXJOZWVkZWQgfHwgaXNPdXRPZkxp
bmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VH
UFIsIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJ
VDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOwotI2Vu
ZGlmCi0gICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAgICAgICAgc3R1Ykpp
dC5wdXNoKHNjcmF0Y2hHUFIpOwotICAgIH0KLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJh
ZFN0cnVjdHVyZSA9IHN0dWJKaXQuYnJhbmNoUHRyKAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpKTsKLSAgICAKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJ
TkcpCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzY3JhdGNoR1BSMiA9IFNwZWN1bGF0aXZlSklU
OjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSNlbHNl
Ci0gICAgc2NyYXRjaEdQUjIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNl
R1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIsIHNjcmF0Y2hHUFIpOwotI2VuZGlmCi0gICAgc3R1
YkppdC5wdXNoKHNjcmF0Y2hHUFIyKTsKLSAgICBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVy
KHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJG
b3JQcm9wZXJ0eUFjY2Vzcyk7Ci0gICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUjIpOwotI2VuZGlm
Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5j
YWNoZWRPZmZzZXQoKSkpCi0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFn
ZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVT
dG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAg
ICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5l
U3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
c3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVy
ZTsKLSAgICAKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc3R1Ykpp
dC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAg
ICAgICAgCi0gICAgICAgIGJhZFN0cnVjdHVyZS5saW5rKCZzdHViSml0KTsKLSAgICAgICAgc3R1
YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAg
IGZhaWx1cmUgPSBiYWRTdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOwotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIHBhdGNoQnVmZmVy
LmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKLSAgICAgICAgICAgIAotICAgIHN0dWJSb3V0
aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCi0gICAgICAgIHBhdGNoQnVmZmVyLAot
ICAgICAgICAoIkRGRyBQdXRCeUlkIHJlcGxhY2Ugc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsCi0gICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAg
IHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KTsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAotICAgIEV4ZWNTdGF0
ZSogZXhlYywKLSAgICBKU1ZhbHVlLAotICAgIGNvbnN0IElkZW50aWZpZXImLAotICAgIGNvbnN0
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
Ci0gICAgUHV0S2luZCBwdXRLaW5kLAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLAotICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFp
biwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0K
LSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
ZGZnLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVnIHZhbHVlVGFn
R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIp
OwotI2VuZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOwotICAgIAotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpOwotICAgIGFs
bG9jYXRvci5sb2NrKGJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYWxsb2Nh
dG9yLmxvY2sodmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVH
UFIpOwotICAgIAotICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtKTsKLSAgICAgICAgICAgIAot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
LSAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hH
UFIxICE9IHZhbHVlR1BSKTsKLSAgICAKLSAgICBib29sIG5lZWRTZWNvbmRTY3JhdGNoID0gZmFs
c2U7Ci0gICAgYm9vbCBuZWVkVGhpcmRTY3JhdGNoID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRF
X0JBUlJJRVJfUFJPRklMSU5HKQotICAgIG5lZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsKLSNlbmRp
ZgotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpCi0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSkgewotICAgICAgICBuZWVkU2Vjb25kU2NyYXRjaCA9IHRydWU7Ci0gICAgICAg
IG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVlOwotICAgIH0KLQotICAgIEdQUlJlZyBzY3JhdGNoR1BS
MjsKLSAgICBpZiAobmVlZFNlY29uZFNjcmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUjIgPSBh
bGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BS
MiAhPSBiYXNlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsK
LSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnOwotICAgIEdQUlJlZyBzY3JhdGNo
R1BSMzsKLSAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkgewotICAgICAgICBzY3JhdGNoR1BSMyA9
IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hH
UFIzICE9IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gdmFsdWVHUFIp
OwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjEpOwotICAgICAgICBB
U1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjIpOwotICAgIH0gZWxzZQotICAgICAgICBz
Y3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgICAgICAKLSAgICBhbGxvY2F0b3Iu
cHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7Ci0KLSAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgICAgICAgICAgCi0gICAgQVNTRVJU
KG9sZFN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQo
KSk7Ci0gICAgCi0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihv
bGRTdHJ1Y3R1cmUpKSk7Ci0gICAgCi0gICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAot
ICAgICAgICBvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2so
KSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgc2NyYXRjaEdQUjEp
OwotICAgICAgICAgICAgCi0gICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7Ci0gICAgICAg
IGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQo
KTsgKml0OyArK2l0KSB7Ci0gICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2so
Ci0gICAgICAgICAgICAgICAgKCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKLSAgICAgICAgICAgICAgICBz
Y3JhdGNoR1BSMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklF
Ul9QUk9GSUxJTkcpCi0gICAgQVNTRVJUKG5lZWRTZWNvbmRTY3JhdGNoKTsKLSAgICBBU1NFUlQo
c2NyYXRjaEdQUjIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0
aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1
aXJlcyBpdAotICAgIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQ
Uiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vz
cyk7Ci0jZW5kaWYKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7
Ci0gICAgCi0gICAgYm9vbCBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSBmYWxzZTsKLSAgICAKLSAg
ICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgQ29waWVkQWxs
b2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0tPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
IHsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJl
bnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChz
dHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOwotICAgICAgICAgICAgc3R1
YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVt
YWluaW5nKTsKLSAgICAgICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9m
KEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
c2l6ZV90IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXpl
b2YoSlNWYWx1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMp
OwotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFJlbWFpbmluZywgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0
dWJKaXQuYnJhbmNoU3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKSk7Ci0gICAgICAgICAgICBzdHVi
Sml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcpOwotICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwotICAgICAg
ICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmY29w
aWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOwotICAgICAg
ICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2Yo
SlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hH
UFIxID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsIHNjcmF0Y2hHUFIy
ID0gYXZhaWxhYmxlCi0gICAgICAgICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZz
ZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZv
aWQqKSkgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSMywgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yo
dm9pZCopKSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRy
KHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLShvZmZz
ZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIx
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpKTsKLSAgICAgICAgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBzdHViSml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGlmIChpc0lubGluZU9mZnNldChz
bG90LmNhY2hlZE9mZnNldCgpKSkKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhh
c1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEp
OwotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
aWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0dWJK
aXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0
LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHko
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJK
aXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vz
czsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOwotICAgICAgICAgICAgCi0gICAg
aWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7Ci0gICAgICAgIGFsbG9jYXRvci5y
ZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOwotICAgICAgICBzdWNjZXNz
ID0gc3R1YkppdC5qdW1wKCk7Ci0KLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQp
OwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHVi
Sml0KTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwotICAgIH0gZWxzZQotICAg
ICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzSW5T
bG93UGF0aDsKLSAgICAKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzbG93UGF0aC5s
aW5rKCZzdHViSml0KTsKLSAgICAgICAgCi0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2Vk
UmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOwotICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3Jh
dGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKGFsbG9jYXRvci5kZXNpcmVkU2Ny
YXRjaEJ1ZmZlclNpemUoKSk7Ci0gICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3Rl
cnNUb1NjcmF0Y2hCdWZmZXIoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVl
R1BSKTsKLSNlbHNlCi0gICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSLCB2
YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2Fs
bCgpOwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1
ZmZlcihzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN1Y2Nl
c3NJblNsb3dQYXRoID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfQotICAgIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgIGlmIChh
bGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhm
YWlsdXJlLCBmYWlsdXJlTGFiZWwpOwotICAgIGVsc2UKLSAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhmYWlsdXJlQ2FzZXMsIGZhaWx1cmVMYWJlbCk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBvcGVyYXRpb25SZWFsbG9jYXRl
U3RvcmFnZUFuZEZpbmlzaFB1dCk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzc0lu
U2xvd1BhdGgsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICB9Ci0gICAgCi0gICAgc3R1YlJv
dXRpbmUgPQotICAgICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKLSAgICAgICAgICAgIEZJTkFM
SVpFX0RGR19DT0RFKAotICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAg
ICAgICgiREZHIFB1dEJ5SWQgJXN0cmFuc2l0aW9uIHN0dWIgKCVwIC0+ICVwKSBmb3IgJXMsIHJl
dHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPyAicmVhbGxv
Y2F0aW5nICIgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1
cmUsCi0gICAgICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRh
dGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVj
dXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICAgICAqdm0sCi0gICAgICAgICAgICBleGVjLT5j
b2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAot
ICAgICAgICAgICAgc3RydWN0dXJlKTsKLX0KLQotc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlE
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBpZiAoIWJh
c2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTQ2VsbCogYmFz
ZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlQ2VsbC0+c3RydWN0dXJlKCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmUtPnByZXZpb3VzSUQoKTsKLSAgICAKLSAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVE
aWN0aW9uYXJ5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE9wdGltaXplIHNl
bGYgYWNjZXNzLgotICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKLSAgICAgICAg
aWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKLSAgICAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6aW5n
IHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCi0gICAg
ICAgICAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgotICAgICAgICAg
ICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgotICAgICAgICAgICAgICAgICYm
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkKLSAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFs
bG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKLSAgICAgICAgICAgIC8vIGluZGV4aW5nIHN0b3Jh
Z2UuCi0gICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRl
cigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKSA9PSBJbnZh
bGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1
Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBl
bWl0UHV0VHJhbnNpdGlvblN0dWIoCi0gICAgICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBp
ZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCi0gICAgICAgICAgICAgICAgc3RydWN0dXJl
LCBvbGRTdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAotICAgICAgICAgICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb1Nsb3dDYXNlKSwKLSAgICAgICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihj
b2RlQmxvY2spOwotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCi0gICAgICAgICAg
ICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAg
ICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAot
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKSk7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0
aW9uKHNsb3QsIHB1dEtpbmQpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkluZm8u
aW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
b2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERpcmVj
dCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVj
dHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlk
RnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdFB1
dEJ5SWRSZXBsYWNlKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJl
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBz
bG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAg
ICBib29sIGNhY2hlZCA9IHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5
TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwotICAgIGlmICghY2FjaGVkKQotICAgICAg
ICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwot
fQotCi1zdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0
UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQg
cHV0S2luZCkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxs
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZh
bHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVj
dHVyZSgpOwotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91
c0lEKCk7Ci0gICAgCi0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAg
ICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgIFBvbHltb3JwaGljUHV0
QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRp
bmU7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90
OjpOZXdQcm9wZXJ0eSkgewotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2Ms
IGlmIHdlIGRvbid0IGhhdmUKLSAgICAgICAgICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFr
ZSBpdCBoYXBwZW4uCi0gICAgICAgICAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMg
PCA2Ci0gICAgICAgICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAgICAgICAgICYmIG9s
ZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUg
Y2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcwotICAgICAg
ICAgICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KLSAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUt
PmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9ybWFsaXplUHJvdG90eXBlQ2hhaW4o
ZXhlYywgYmFzZUNlbGwpID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcg
dGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KLSAgICAgICAgICAg
IGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKAotICAgICAgICAgICAgICAgIHB1
dEtpbmQsIHN0dWJJbmZvLAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNl
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKLSAg
ICAgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1Yklu
Zm8sIHB1dEtpbmQsCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUsIHBy
b3RvdHlwZUNoYWluLAotICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1
cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKLSAgICAgICAgICAgICAgICBzdHViUm91dGluZSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKLSAgICAgICAgICAgICAg
ICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICAqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0cnVj
dHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKLSAgICAgICAgICAgICAgICAgICAgc3R1
YlJvdXRpbmUpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBj
b21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBhY2Nv
cmRpbmdseS4KLSAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9t
KAotICAgICAgICAgICAgICAgIHB1dEtpbmQsIHN0dWJJbmZvLAotICAgICAgICAgICAgICAgIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGVtaXRQ
dXRSZXBsYWNlU3R1YigKLSAgICAgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5
TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCi0gICAgICAgICAgICAgICAgc3RydWN0dXJl
LCBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksIHN0dWJS
b3V0aW5lKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKAotICAg
ICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgICAg
ICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlLCBzdHViUm91dGluZSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobGlz
dC0+aXNGdWxsKCkpCi0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90
LCBwdXRLaW5kKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIGJvb2wgY2FjaGVkID0gdHJ5QnVpbGRQdXRCeUlk
TGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtp
bmQpOwotICAgIGlmICghY2FjaGVkKQotICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRC
eUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotfQotCi1zdGF0aWMgYm9vbCB0cnlSZXBhdGNo
SW4oCi0gICAgRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBib29sIHdhc0ZvdW5kLAotICAgIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmICghYmFzZS0+c3RydWN0dXJlKCkt
PnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIGlmICh3YXNGb3VuZCkgewotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSgpOwotICAgIAot
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldElnbm9yZWQ7Ci0gICAgc2l6ZV90IGNvdW50ID0gbm9y
bWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlLCB3YXNGb3VuZCA/
IHNsb3Quc2xvdEJhc2UoKSA6IEpTVmFsdWUoKSwgaWRlbnQsIG9mZnNldElnbm9yZWQpOwotICAg
IGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdDsKLSAgICBpbnQgbGlzdEluZGV4OwotICAgIAotICAgIENvZGVMb2NhdGlv
bkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmhvdFBhdGhCZWdpbjsKLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsOwotICAgIAotICAgIGlmIChzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc191bnNldCkgewotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qg
PSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgICAgIHN0dWJJbmZv
LmluaXRJbkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAwKTsKLSAgICAgICAgc2xvd0Nh
c2VMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAg
ICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgICAg
ICBsaXN0SW5kZXggPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2luX2xpc3QpOwotICAgICAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmluTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAg
ICBsaXN0SW5kZXggPSBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgc2xvd0Nh
c2VMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlz
dFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlQ2hhaW4q
IGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKLSAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIAotICAgIHsKLSAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsK
LSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3Rl
clNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAg
ICAgICAKLSAgICAgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0pOwotICAgICAgICAKLSAgICAg
ICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaDsKLSAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0g
SW52YWxpZEdQUlJlZykgewotICAgICAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklU
OjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBzdHVi
Sml0LnB1c2goc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9
IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2gg
PSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWls
dXJlQ2FzZXM7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIo
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsK
LSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsK
LSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAg
ICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90
b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3RvdHlwZSwgcHJvdG90eXBlLT5zdHJ1Y3R1cmUo
KSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LAotICAgICAgICAgICAgICAg
IGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBjdXJyU3RydWN0dXJlID0g
aXQtPmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4od2FzRm91bmQpKSksIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICBz
dHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih3YXNGb3VuZCksIHJlc3Vs
dEdQUik7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1
Y2Nlc3MsIGZhaWw7Ci0gICAgICAgIAotICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1Ykpp
dCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1
cmVDYXNlcyk7Ci0gICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
JnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKLQotICAgICAgICBsaW5rUmVzdG9yZVNjcmF0
Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWls
dXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7Ci0gICAgICAgIAotICAgICAg
ICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RGR19TVFVCKAotICAgICAgICAgICAg
cGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBJbiAoZm91bmQgPSAlcykgc3R1YiBmb3Ig
JXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAgd2FzRm91bmQgPyAieWVzIiA6
ICJubyIsIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwKLSAgICAgICAgICAg
ICAgICBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIH0KLSAgICAKLSAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsK
LSAgICBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZSsrOwotICAgIAotICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0
dWJJbmZvLmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoMCksIENvZGVMb2NhdGlvbkxhYmVsKHN0
dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgCi0gICAgcmV0dXJuIGxpc3RJbmRleCA8
IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKTsKLX0KLQotdm9pZCByZXBhdGNoSW4o
Ci0gICAgRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBib29sIHdhc0ZvdW5kLAotICAgIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmICh0cnlSZXBhdGNoSW4oZXhlYywgYmFz
ZSwgaWRlbnQsIHdhc0ZvdW5kLCBzbG90LCBzdHViSW5mbykpCi0gICAgICAgIHJldHVybjsKLSAg
ICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBvcGVyYXRpb25Jbik7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFJlcGF0Y2hC
dWZmZXImIHJlcGF0Y2hCdWZmZXIsIFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8s
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAgICBpZiAoa2luZCA9PSBDb2RlRm9y
Q2FsbCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVChraW5kID09IENvZGVG
b3JDb25zdHJ1Y3QpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVy
YXRvcikuY29kZSgpKTsKLX0KLQotdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKU0Z1bmN0
aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7Ci0gICAg
Ci0gICAgLy8gSWYgeW91J3JlIGJlaW5nIGNhbGwtbGlua2VkIGZyb20gYSBERkcgY2FsbGVyIHRo
ZW4geW91IG9idmlvdXNseSBkaWRuJ3QgZ2V0IGlubGluZWQuCi0gICAgaWYgKGNhbGxlZUNvZGVC
bG9jaykKLSAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9
IGZhbHNlOwotICAgIAotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2Fs
bGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52
bSgpOwotICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxv
Y2spOwotICAgIAotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwotICAgIGNh
bGxMaW5rSW5mby5jYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPnZtKCksIGNhbGxMaW5r
SW5mby5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNh
bGxlZSk7Ci0gICAgY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlLnNldChleGVjLT5jYWxsZXJG
cmFtZSgpLT52bSgpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIsIGNv
ZGVQdHIpOwotICAgIAotICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0gICAgICAgIGNhbGxlZUNv
ZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLT5jYWxsZXJGcmFtZSgpLCAmY2FsbExpbmtJ
bmZvKTsKLSAgICAKLSAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0
Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0
KTsKLSAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2Rl
Rm9yQ29uc3RydWN0KTsKLX0KLQotdm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17
Ci0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5j
b2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7Ci0gICAgCi0g
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7Ci0gICAgCi0g
ICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywga2luZCk7Ci19
Ci0KLXZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
b2RlUHRyKQotewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIpOwotICAgIAotICAgIENv
ZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2Nr
KCk7Ci0gICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIEdQUlJl
ZyBjYWxsZWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KGNhbGxMaW5rSW5mby5jYWxsZWVHUFIp
OwotICAgIAotICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBjYWxsZXJDb2RlQmxvY2spOwot
ICAgIAotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgIHN0dWJKaXQuYnJhbmNo
VGVzdDY0KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBjYWxsZWVHUFIsIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotI2Vsc2UKLSAgICAvLyBXZSB3b3VsZCBoYXZlIGFs
cmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgotI2VuZGlmCi0gICAgCi0g
ICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICBzdHViSml0LmJyYW5jaFB0cigKLSAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgCi0gICAgc2xv
d1BhdGguYXBwZW5kKAotICAgICAgICBzdHViSml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Y2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCi0gICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpKTsKLSAgICAKLSAgICBz
dHViSml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIs
IEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKLSAgICAgICAgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdHViSml0LnN0b3JlNjQo
Ci0gICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7Ci0jZWxzZQotICAg
IHN0dWJKaXQuc3RvcmVQdHIoCi0gICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hh
aW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSkpOwotICAgIHN0dWJKaXQuc3RvcmUzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSNlbmRpZgotICAgIAotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7Ci0gICAgSklUQ29tcGls
ZXI6Okp1bXAgZG9uZSA9IHN0dWJKaXQuanVtcCgpOwotICAgIAotICAgIHNsb3dQYXRoLmxpbmso
JnN0dWJKaXQpOwotICAgIHN0dWJKaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsK
LSNlbmRpZgotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2Fs
bExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMik7Ci0gICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJl
dHVybihHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93ID0g
c3R1YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZz
dHViSml0LCBjYWxsZXJDb2RlQmxvY2spOwotICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwo
dm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAg
Ci0gICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRvcHRS
ZWYobmV3IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCi0gICAgICAgIEZJTkFMSVpFX0RGR19DT0RF
KAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBjbG9zdXJlIGNh
bGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0ICVwICglcykiLAotICAgICAg
ICAgICAgICAgIHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygp
LAotICAgICAgICAgICAgICAgIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgdG9DU3RyaW5n
KHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jaykpLmRhdGEoKSkpLAotICAgICAgICAqdm0sIGNh
bGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwg
Y2FsbExpbmtJbmZvLmNvZGVPcmlnaW4pKTsKLSAgICAKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKLSAgICAKLSAgICByZXBhdGNoQnVmZmVyLnJlcGxh
Y2VXaXRoSnVtcCgKLSAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQ
YXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbiksCi0gICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgbGlua1Nsb3dG
b3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwpOwotICAgIAot
ICAgIGNhbGxMaW5rSW5mby5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwotICAgIAotICAg
IEFTU0VSVCghY2FsbGVlQ29kZUJsb2NrIHx8IGNhbGxlZUNvZGVCbG9jay0+aXNJbmNvbWluZ0Nh
bGxBbHJlYWR5TGlua2VkKCZjYWxsTGlua0luZm8pKTsKLX0KLQotdm9pZCByZXNldEdldEJ5SUQo
UmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQotewotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQ
dHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
UHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRv
Q2FsbCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJy
YW5jaFB0cldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJl
cGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICBSZXBh
dGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKHN0
cnVjdHVyZUxhYmVsKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHVi
SW5mby5wYXRjaC5kZmcuYmFzZUdQUiksCi0gICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQ
b2ludGVyKSk7Ci0gICAgfQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHJ1Y3R1cmVMYWJl
bCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOwotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2Fs
bFRvTG9hZE9yU3RvcmUpLCAwKTsKLSNlbHNlCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBh
Y3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3Rv
cmUpLCAwKTsKLSNlbmRpZgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
U3RydWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotfQotCi12b2lkIHJlc2V0
UHV0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCi17Ci0gICAgVl9ERkdPcGVyYXRpb25fRUpDSSB1bm9wdGltaXplZEZ1bmN0aW9u
ID0gYml0d2lzZV9jYXN0PFZfREZHT3BlcmF0aW9uX0VKQ0k+KE1hY3JvQXNzZW1ibGVyOjpyZWFk
Q2FsbFRhcmdldChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOwotICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkRnVuY3Rpb247Ci0gICAgaWYg
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpCi0gICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAg
IGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWls
ZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgewotICAg
ICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dE5vblN0cmljdEJ1aWxkTGlzdCk7Ci0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgIH0KLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0aW9u
KTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRvQ2FsbCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1i
bGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7Ci0gICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQ
dHJXaXRoUGF0Y2goCi0gICAgICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxl
QnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUiksCi0g
ICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7Ci0gICAgfQotICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHJ1Y3R1cmVMYWJlbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
dW51c2VkUG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmVwYXRjaEJ1ZmZlci5y
ZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7Ci0jZWxzZQotICAg
IHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9y
ZSksIDApOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Q
YXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNlbmRpZgotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwot
fQotCi12b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZv
LmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoMCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7
Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWZuZGVmIERGR1JlcGF0Y2hfaAotI2RlZmluZSBERkdSZXBhdGNoX2gKLQotI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJERkdKSVRD
b21waWxlci5oIgotI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKLQotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewotCi12b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotdm9pZCBidWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwot
dm9pZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lk
IHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwotdm9p
ZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwot
dm9pZCByZXBhdGNoSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgY29uc3QgSWRlbnRpZmllciYsIGJv
b2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12
b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5j
dGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQpOwotdm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kKTsKLXZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxM
aW5rSW5mbyYsIENvZGVCbG9jayosIFN0cnVjdHVyZSosIEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKTsKLXZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1
Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVj
dHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0
dWJJbmZvJik7Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2Vsc2UgLy8gRU5BQkxF
KERGR19KSVQpCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKLXN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQot
bmFtZXNwYWNlIERGRyB7Ci0KLWlubGluZSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgcmVz
ZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotaW5saW5lIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9p
ZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci1pbmxpbmUgTk9fUkVUVVJOIHZvaWQgcmVzZXRJ
bihSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCi0jZW5kaWYgLy8gREZHUmVwYXRjaF9oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmgJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjAyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBE
RkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAotI2RlZmluZSBERkdTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3JfaAotCi0jaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0KLSNpZiBFTkFCTEUoREZH
X0pJVCkKLQotI2luY2x1ZGUgIkRGR1JlZ2lzdGVyU2V0LmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi0vLyBUaGlzIGNs
YXNzIHByb3ZpZGVzIGEgbG93LWxldmVsIHJlZ2lzdGVyIGFsbG9jYXRvciBmb3IgdXNlIGluIHN0
dWJzLgotCi1jbGFzcyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgewotcHVibGljOgotICAgIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcihjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykK
LSAgICAgICAgOiBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKLSAgICAgICAgLCBtX2Rp
ZFJldXNlUmVnaXN0ZXJzKGZhbHNlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICB2b2lkIGxvY2soVCByZWcpIHsgbV9sb2NrZWRSZWdpc3RlcnMuc2V0
KHJlZyk7IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICB0eXBl
bmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIGFsbG9jYXRlU2NyYXRjaCgpCi0gICAgewotICAg
ICAgICAvLyBGaXJzdCB0cnkgdG8gYWxsb2NhdGUgYSByZWdpc3RlciB0aGF0IGlzIHRvdGFsbHkg
ZnJlZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbmtJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgICAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0
ZXJUeXBlIHJlZyA9IEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAgaWYgKCFt
X2xvY2tlZFJlZ2lzdGVycy5nZXQocmVnKQotICAgICAgICAgICAgICAgICYmICFtX3VzZWRSZWdp
c3RlcnMuZ2V0KHJlZykKLSAgICAgICAgICAgICAgICAmJiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdl
dChyZWcpKSB7Ci0gICAgICAgICAgICAgICAgbV9zY3JhdGNoUmVnaXN0ZXJzLnNldChyZWcpOwot
ICAgICAgICAgICAgICAgIHJldHVybiByZWc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIC8vIFNpbmNlIHRoYXQgZmFpbGVkLCB0cnkgdG8gYWxsb2NhdGUgYSBy
ZWdpc3RlciB0aGF0IGlzIG5vdCB5ZXQKLSAgICAgICAgLy8gbG9ja2VkIG9yIHVzZWQgZm9yIHNj
cmF0Y2guCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lz
dGVyVHlwZSByZWcgPSBCYW5rSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgICAgIGlmICgh
bV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlZykgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXQocmVn
KSkgewotICAgICAgICAgICAgICAgIG1fc2NyYXRjaFJlZ2lzdGVycy5zZXQocmVnKTsKLSAgICAg
ICAgICAgICAgICBtX2RpZFJldXNlUmVnaXN0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVnOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAv
LyBXZSBmYWlsZWQuCi0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIC8vIE1ha2Ugc29tZSBzaWxs
eSBjb21waWxlcnMgaGFwcHkuCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBC
YW5rSW5mbzo6UmVnaXN0ZXJUeXBlPigtMSk7Ci0gICAgfQotICAgIAotICAgIEdQUlJlZyBhbGxv
Y2F0ZVNjcmF0Y2hHUFIoKSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8R1BSSW5mbz4oKTsgfQot
ICAgIEZQUlJlZyBhbGxvY2F0ZVNjcmF0Y2hGUFIoKSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8
RlBSSW5mbz4oKTsgfQotICAgIAotICAgIGJvb2wgZGlkUmV1c2VSZWdpc3RlcnMoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkUmV1c2VSZWdpc3RlcnM7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoTWFjcm9Bc3NlbWJsZXIm
IGppdCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBG
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobV9zY3Jh
dGNoUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5
SW5kZXgoaSkpIHsKLSAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0g
ICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0
R1BSQnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKLSAgICAg
ICAgICAgICAgICBqaXQucHVzaChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICB2b2lkIHJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFj
cm9Bc3NlbWJsZXImIGppdCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9kaWRSZXVzZVJlZ2lzdGVy
cykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAo
bV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdl
dEdQUkJ5SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAgaml0LnBvcChHUFJJbmZvOjp0b1JlZ2lz
dGVyKGkpKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lz
dGVycy5nZXRGUFJCeUluZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkp
KSB7Ci0gICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAgICAgICAg
ICBqaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoOCksIE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgdW5zaWduZWQgZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgKiBzaXplb2Yo
SlNWYWx1ZSk7IH0KLSAgICAKLSAgICB2b2lkIHByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRj
aEJ1ZmZlcihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVy
LCBHUFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWcpCi0gICAgewotICAgICAgICB1bnNp
Z25lZCBjb3VudCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdl
dEdQUkJ5SW5kZXgoaSkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0PEVuY29kZWRKU1Zh
bHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSk7Ci0jZWxzZQot
ICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIHN0YXRp
Y19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChj
b3VudCsrKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzY3JhdGNo
R1BSID09IEludmFsaWRHUFJSZWcgJiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgo
aSkgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQotICAgICAgICAgICAg
ICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICB9Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0g
ICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKLSAgICAg
ICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNf
Y2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291
bnQrKykpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBS
SW5mbzo6dG9SZWdpc3RlcihpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgKiBzaXplb2YoSlNWYWx1ZSkgPT0gZGVz
aXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkpOwotICAgICAgICAKLSAgICAgICAgaml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRy
KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4oY291bnQgKiBzaXplb2YoSlNWYWx1ZSkp
KSwgc2NyYXRjaEdQUik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcmVzdG9yZVVzZWRSZWdpc3Rl
cnNGcm9tU2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBz
Y3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWcpCi0gICAgewot
ICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICAv
LyBGaW5kIGEgc2NyYXRjaCByZWdpc3Rlci4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgfHwgbV9zY3JhdGNoUmVnaXN0ZXJz
LmdldEdQUkJ5SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIAotICAgICAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3Rp
dmVMZW5ndGhQdHIoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBqaXQuc3RvcmVQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hHUFIpOwotCi0gICAgICAgIC8vIFJl
c3RvcmUgZG91YmxlIHJlZ2lzdGVycyBmaXJzdC4KLSAgICAgICAgdW5zaWduZWQgY291bnQgPSBt
X3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRHUFJzKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAo
bV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKLSAgICAgICAgICAgICAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpLCBzY3JhdGNo
R1BSKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShzY3JhdGNoR1BSLCBGUFJJbmZv
Ojp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgY291bnQgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5n
ZXRHUFJCeUluZGV4KGkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBq
aXQubG9hZDY0KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0
YUJ1ZmZlcigpKSArIChjb3VudCsrKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Ci0jZWxzZQot
ICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihz
Y3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspLCBHUFJJbmZvOjp0b1JlZ2lz
dGVyKGkpKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAot
cHJpdmF0ZToKLSAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7Ci0gICAgUmVnaXN0ZXJT
ZXQgbV9sb2NrZWRSZWdpc3RlcnM7Ci0gICAgUmVnaXN0ZXJTZXQgbV9zY3JhdGNoUmVnaXN0ZXJz
OwotICAgIGJvb2wgbV9kaWRSZXVzZVJlZ2lzdGVyczsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5kaWYgLy8gREZHU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNTY0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5
cGUuaCIKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1
ZGUgIkRGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAi
REZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5j
bHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCkBAIC0y
NjEsNyArMjYyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlTwog
ICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBwYXlsb2FkU3RvcmVXaXRoUGF0Y2ggPSBtX2pp
dC5zdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZVBheWxvYWRHUFIsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKIAogICAgIEpJVENvbXBpbGVyOjpMYWJlbCBkb25l
TGFiZWwgPSBtX2ppdC5sYWJlbCgpOwotICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVk
Q2FsbDsKKyAgICBWX0pJVE9wZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7CiAgICAgaWYgKG1f
aml0LnN0cmljdE1vZGVGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbikpIHsKICAgICAgICAg
aWYgKHB1dEtpbmQgPT0gRGlyZWN0KQogICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKQEAgLTQ0MCw3ICs0NDEsNyBAQCBib29s
IFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5v
ZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSogbm9kZSwgTm9k
ZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwg
U19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewogICAgIEJhc2ljQmxvY2sqIHRh
a2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOwogICAgIEJhc2ljQmxvY2sqIG5vdFRha2Vu
ID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwpAQCAtNTEyLDEzICs1MTMsMTMgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBKdW1wVHlwZT4KIGNsYXNzIENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IK
LSAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfREZHT3BlcmF0
aW9uX0VKSiwgR1BSUmVnPiB7CisgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1
bXBUeXBlLCBTX0pJVE9wZXJhdGlvbl9FSkosIEdQUlJlZz4gewogcHVibGljOgogICAgIENvbXBh
cmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIEp1bXBUeXBlIGZyb20s
IFNwZWN1bGF0aXZlSklUKiBqaXQsCi0gICAgICAgIFNfREZHT3BlcmF0aW9uX0VKSiBmdW5jdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwKKyAg
ICAgICAgU19KSVRPcGVyYXRpb25fRUpKIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLAogICAgICAgICBHUFJSZWcgYXJnMlRhZywgR1BS
UmVnIGFyZzJQYXlsb2FkKQotICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlw
ZSwgU19ERkdPcGVyYXRpb25fRUpKLCBHUFJSZWc+KAorICAgICAgICA6IENhbGxTbG93UGF0aEdl
bmVyYXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25fRUpKLCBHUFJSZWc+KAogICAgICAgICAg
ICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgTmVlZFRvU3BpbGwsIHJlc3VsdCkKICAgICAgICAgLCBt
X2FyZzFUYWcoYXJnMVRhZykKICAgICAgICAgLCBtX2FyZzFQYXlsb2FkKGFyZzFQYXlsb2FkKQpA
QCAtNTQ2LDcgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fYXJnMlBheWxvYWQ7CiB9
OwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFy
ZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBT
X0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCit2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxl
cjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVu
Y3Rpb24pCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC0zNjA2
LDcgKzM2MDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICBUcnVzdGVkSW1tMzIoRmluYWxPYmplY3RUeXBlKSkpOwogICAgICAgICBtX2pp
dC5tb3ZlKHRoaXNWYWx1ZVBheWxvYWRHUFIsIHRlbXBHUFIpOwogICAgICAgICBtX2ppdC5tb3Zl
KHRoaXNWYWx1ZVRhZ0dQUiwgdGVtcFRhZ0dQUik7Ci0gICAgICAgIEpfREZHT3BlcmF0aW9uX0VK
IGZ1bmN0aW9uOworICAgICAgICBKX0pJVE9wZXJhdGlvbl9FSiBmdW5jdGlvbjsKICAgICAgICAg
aWYgKG1faml0LmdyYXBoKCkuZXhlY3V0YWJsZUZvcihub2RlLT5jb2RlT3JpZ2luKS0+aXNTdHJp
Y3RNb2RlKCkpCiAgICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvblRvVGhpc1N0cmljdDsK
ICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0NhbGxBcnJheUFsbG9j
YXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2lu
Y2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKQEAgLTI1Myw3ICsyNTQsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAKICAgICBKSVRDb21waWxl
cjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKICAgICAKLSAgICBWX0RGR09wZXJh
dGlvbl9FSkNJIG9wdGltaXplZENhbGw7CisgICAgVl9KSVRPcGVyYXRpb25fRUpDSSBvcHRpbWl6
ZWRDYWxsOwogICAgIGlmIChtX2ppdC5zdHJpY3RNb2RlRm9yKG1fY3VycmVudE5vZGUtPmNvZGVP
cmlnaW4pKSB7CiAgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKICAgICAgICAgICAgIG9w
dGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CkBAIC00
MjgsNyArNDI5LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVy
RnVuY3Rpb24pCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJh
bmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsK
ICAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKICAgICBC
YXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKQEAgLTQ5
OCwxMiArNDk5LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgK
IAogdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGU+CiBjbGFzcyBDb21wYXJlQW5kQm94Qm9vbGVh
blNsb3dQYXRoR2VuZXJhdG9yCi0gICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1
bXBUeXBlLCBTX0RGR09wZXJhdGlvbl9FSkosIEdQUlJlZz4geworICAgIDogcHVibGljIENhbGxT
bG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25fRUpKLCBHUFJSZWc+IHsK
IHB1YmxpYzoKICAgICBDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yKAogICAg
ICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LAotICAgICAgICBTX0RGR09w
ZXJhdGlvbl9FSkogZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMikKLSAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfREZHT3Bl
cmF0aW9uX0VKSiwgR1BSUmVnPigKKyAgICAgICAgU19KSVRPcGVyYXRpb25fRUpKIGZ1bmN0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgICAgIDogQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0pJVE9wZXJhdGlvbl9FSkosIEdQUlJlZz4o
CiAgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBOZWVkVG9TcGlsbCwgcmVzdWx0KQog
ICAgICAgICAsIG1fYXJnMShhcmcxKQogICAgICAgICAsIG1fYXJnMihhcmcyKQpAQCAtNTI1LDcg
KzUyNiw3IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fYXJnMjsKIH07CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUqIG5vZGUsIE1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VK
SiBoZWxwZXJGdW5jdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9u
UGVlcGhvbGVDb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKICAgICBK
U1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmcyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKQEAgLTM5MDIsNyArMzkwMyw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEZpbmFsT2JqZWN0VHlwZSkpKTsKICAgICAg
ICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHRlbXBHUFIpOwotICAgICAgICBKX0RGR09wZXJh
dGlvbl9FSiBmdW5jdGlvbjsKKyAgICAgICAgSl9KSVRPcGVyYXRpb25fRUogZnVuY3Rpb247CiAg
ICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLmV4ZWN1dGFibGVGb3Iobm9kZS0+Y29kZU9yaWdpbikt
PmlzU3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25Ub1RoaXNT
dHJpY3Q7CiAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODk1LDIyICs4OTUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbihOb2RlKiBu
CiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoTWFjcm9Bc3Nl
bWJsZXImIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNo
MiwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQotewotICAgIFVOVVNFRF9QQVJBTShqaXQp
OwotICAgIFVOVVNFRF9QQVJBTShvd25lcik7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsK
LSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsK
LSAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDEpOwotICAgIEFTU0VSVChvd25lciAhPSBzY3Jh
dGNoMik7Ci0gICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNjcmF0Y2gyKTsKLQotI2lmIEVOQUJMRShX
UklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBKSVRDb21waWxlcjo6ZW1pdENvdW50KGppdCwg
V3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwotI2VuZGlmCi19
Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQ
UlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5k
LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBVTlVTRURfUEFSQU0o
b3duZXJHUFIpOwpAQCAtMTAxNyw3ICsxMDAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUluKE5vZGUqIG5vZAogI2VuZGlmCiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNw
ZWN1bGF0aXZlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENv
bmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCitib29sIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSogbm9kZSwgTWFjcm9Bc3Nl
bWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBl
ckZ1bmN0aW9uKQogewogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBl
ZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkg
ewpAQCAtMTQ2NSw3ICsxNDQ5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlSW50MwogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBhcmUgaXMgZnVzZWQgd2l0
aCBhIHN1YnNlcXVlbnQgYnJhbmNoLgotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlQnJhbmNoKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRp
b24sIFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCitib29sIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGRv
dWJsZUNvbmRpdGlvbiwgU19KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbikKIHsKICAgICAvLyBG
dXNlZCBjb21wYXJlICYgYnJhbmNoLgogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9
IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CkBAIC0zODQyLDcgKzM4MjYsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2VxdWVudCBicmFuY2guCi1ib29sIFNwZWN1
bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3Vi
bGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCitib29sIFNwZWN1bGF0
aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVD
b25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCiB7CiAgICAgaWYgKGNvbXBp
bGVQZWVwSG9sZUJyYW5jaChub2RlLCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbiwgb3BlcmF0
aW9uKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDEwICszNiwxMSBAQAogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSAi
REZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCIKLSNp
bmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHU2lsZW50UmVnaXN0ZXJTYXZl
UGxhbi5oIgogI2luY2x1ZGUgIkRGR1ZhbHVlU291cmNlLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlB1dEtpbmQu
aCIKICNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKQEAgLTMxMSw4ICszMTIsNiBAQCBwdWJsaWM6CiAgICAgICAgIHNwZWN1bGF0aW9u
V2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jdXJyZW50Tm9kZS0+Y29kZU9y
aWdpbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKE1hY3JvQXNzZW1i
bGVyJiwgR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNo
R1BSMiwgV3JpdGVCYXJyaWVyVXNlS2luZCk7Ci0KICAgICB2b2lkIHdyaXRlQmFycmllcihHUFJS
ZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVy
VXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0
Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRj
aEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVn
KTsKICAgICB2b2lkIHdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIs
IEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9
IEludmFsaWRHUFJSZWcpOwpAQCAtNzM5LDkgKzczOCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG5v
blNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKEVkZ2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNo
Tm9kZSwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CiAgICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBh
cmVOdWxsKE5vZGUqLCBFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwogICAgIAot
ICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiwgTm9kZSogYnJhbmNo
Tm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfREZHT3BlcmF0aW9u
X0VKSiBoZWxwZXJGdW5jdGlvbik7Ci0gICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
Q29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfREZH
T3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7Ci0gICAgYm9vbCBub25TcGVjdWxhdGl2ZUNv
bXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09w
ZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOworICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVw
aG9sZUJyYW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7CisgICAg
dm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlv
bik7CisgICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24p
OwogICAgIAogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUqLCBO
b2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICB2b2lkIG5vblNwZWN1
bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcShOb2RlKiwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CkBA
IC05MzEsMTY5ICs5MzAsMTY5IEBAIHB1YmxpYzoKICAgICAvLyBtYWNoaW5lIHJlZ2lzdGVycywg
YW5kIGRlbGVnYXRlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gc3BlY2lmaWMKICAgICAvLyBkZWNp
c2lvbiBhcyB0byBob3cgdG8gZmlsbCB0aGUgcmVnc2l0ZXJzIHRvIHNldHVwQXJndW1lbnRzKiBt
ZXRob2RzLgogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJh
dGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZH
T3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGNlbGwpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBjZWxsKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGNlbGwpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU8gb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0KQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRU8gb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgb2JqZWN0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKG9iamVjdCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1Mgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBzaXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VPUyBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihzaXpl
KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihQX0pJVE9wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
b2JqZWN0LCBpbnQzMl90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3Bl
cmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIGludDMy
X3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0
aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIGludDMyX3Qg
c2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShv
YmplY3QsIFRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKSkpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9E
RkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9sZCwgc2l6
ZV90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJh
dGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2xkLCBzaXplX3Qgc2l6
ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvbGQs
IFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVMgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBzaXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90
IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU0pzcyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIHNpemVfdCBpbmRleCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU0pzcyBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIHNpemVfdCBpbmRleCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihpbmRleCksIGFy
ZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQ
X0pJVE9wZXJhdGlvbl9FU3Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTdFog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFy
ZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTdFogb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGFyZzIp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3Ra
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBh
cmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbTMyKGFyZzIpKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3Bl
cmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlv
bl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0UFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3RQUyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2ludGVy
LCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIocG9pbnRlciks
IFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0U1Mgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGluZGV4LCBzaXpl
X3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0
aW9uX0VTdFNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHNpemVfdCBpbmRleCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1t
UHRyKGluZGV4KSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKENfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9u
X0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBKU0NlbGwqIGNlbGwpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTQ2Vs
bCogY2VsbCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyKGNlbGwpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU0NlbGwqIGNlbGwpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoY2VsbCkp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oQ19ERkdPcGVyYXRpb25fRUljZiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUljZiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lKSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihDX0RGR09wZXJhdGlvbl9FU3Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklU
T3BlcmF0aW9uX0VTdCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSnNzU3Qgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSnNzU3Qg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VKc3NKc3Mg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSnNzSnNzIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oQ19ERkdPcGVyYXRpb25fRUpzc0pzc0pzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSnNzSnNzSnNzIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBh
cmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oU19KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKc3NfREZHT3BlcmF0aW9uX0VaIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKc3NfSklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVn
IGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlv
bl9FQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNJY2Ygb3BlcmF0aW9uLCBHUFJSZWcg
YXJnMSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0ljZiBvcGVyYXRpb24sIEdQUlJl
ZyBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGlu
bGluZUNhbGxGcmFtZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfREZHT3BlcmF0aW9uX0VDQ0ljZiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0NJY2Ygb3BlcmF0aW9uLCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIsIFRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ1ogb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMSwgaW50IGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0pJVE9wZXJhdGlvbl9FQ1ogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgaW50IGFyZzIpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1
c3RlZEltbTMyKGFyZzIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9u
X0VDQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAK
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX1cgb3Bl
cmF0aW9uLCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fVyBvcGVyYXRpb24sIFdhdGNocG9pbnRT
ZXQqIHdhdGNocG9pbnRTZXQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhU
cnVzdGVkSW1tUHRyKHdhdGNocG9pbnRTZXQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwo
b3BlcmF0aW9uKTsKQEAgLTExMjUsMjQ0ICsxMTI0LDI0NCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJn
NSk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09w
ZXJhdGlvbl9aWiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9u
X1paIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSwgYXJnMik7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlvbl9ERCBvcGVy
YXRpb24sIEZQUlJlZyByZXN1bHQsIEZQUlJlZyBhcmcxLCBGUFJSZWcgYXJnMikKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX0REIG9wZXJhdGlvbiwg
RlBSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEZQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihJX0RGR09wZXJhdGlvbl9FSnNzIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihJX0pJVE9wZXJhdGlvbl9FSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRp
b25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0Ugb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgdm9pZCogcG9pbnRl
cikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyKHBvaW50ZXIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFpfSklUT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJn
MSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzKGFyZzEpOwogICAgICAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQuYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAg
ICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVz
dWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cmluZ0ltcGwqIHVp
ZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0RGR09wZXJhdGlvbl9FQVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FQVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSnNzWiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKc3NaIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNp
emUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
UFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCB2b2lkKiBwb2ludGVyLCBzaXplX3Qgc2l6ZSkK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVk
SW1tUHRyKHBvaW50ZXIpLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VTUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludCBzdGFydENvbnN0YW50LCBpbnQgbnVt
Q29uc3RhbnRzKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50IHN0YXJ0Q29uc3RhbnQsIGlu
dCBudW1Db25zdGFudHMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoVHJ1c3RlZEltbTMyKHN0YXJ0Q29uc3RhbnQpLCBUcnVzdGVkSW1tMzIobnVtQ29u
c3RhbnRzKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FUFAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU0NlbGwqIGNlbGwpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGNlbGwpKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBj
b25zdCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgY29uc3QgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgU3RyaW5n
SW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIFN0cmluZ0lt
cGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRURBIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRURBIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VaIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50MzJfdCBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBpbnQzMl90IGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VaWiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludDMyX3QgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWlogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQzMl90IGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcx
KSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBpbnQzMl90IGFyZzEsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBHUFJS
ZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VaSWNmWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludDMyX3QgYXJnMSwgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSwgVHJ1
c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAg
IH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25f
RUpTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHZhbHVlLCBzaXplX3QgaW5kZXgp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FSlMg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIHNpemVfdCBpbmRleCkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSh2YWx1ZSwgVHJ1
c3RlZEltbVB0cihpbmRleCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3RKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVN0SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFy
ZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVy
YXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZH
T3BlcmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0ogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oU19ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VK
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
ICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIg
aW1tKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIgaW1tKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGltbS5tX3ZhbHVlKSkpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1t
LCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihpbW0ubV92YWx1ZSkpKSwgYXJnMik7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
Q0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
Mik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMikKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIuZ3ByKCkpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihWX0RGR09wZXJhdGlvbl9FT1pEIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyLCBGUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZf
SklUT3BlcmF0aW9uX0VPWkQgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEZQ
UlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpD
SSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgU3RyaW5nSW1wbCogdWlkKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpDSSBv
cGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgU3RyaW5nSW1wbCogdWlkKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIs
IFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpKSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0pJVE9wZXJhdGlvbl9FSkpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
LCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FUFpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0pKIG9wZXJhdGlvbiwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDSkogb3BlcmF0aW9uLCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fRUogb3BlcmF0
aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTEzODYsNyArMTM4NSw3IEBAIHB1Ymxp
YzoKICNkZWZpbmUgU0g0XzMyQklUX0RVTU1ZX0FSRwogI2VuZGlmCiAKLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBGUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFpfSklUT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkK
ICAgICB7CiAgICAgICAgIHByZXBhcmVGb3JFeHRlcm5hbENhbGwoKTsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHMoYXJnMSk7CkBAIC0xMzk0LDIzMyArMTM5MywyMzMgQEAgcHVibGljOgog
ICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
cmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNF
eGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIHZvaWQqIHBvaW50
ZXIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
UCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCB2b2lk
KiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3Vs
dFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWQsIEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRy
dXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwg
R1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXls
b2FkLCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VJ
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFN0cmlu
Z0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxv
YWQsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQs
IHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0pJVE9wZXJhdGlvbl9FQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJl
ZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1
bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZH
T3BlcmF0aW9uX0VBWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpzc1ogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRUpzc1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQs
IHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBz
aXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywg
R1BSUmVnIHJlc3VsdFBheWxvYWQsIGludCBzdGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3RhbnRz
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVNT
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludCBz
dGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3RhbnRzKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihzdGFydENvbnN0YW50KSwgVHJ1
c3RlZEltbTMyKG51bUNvbnN0YW50cykpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRh
Zyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRUpQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxv
YWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIHZvaWQqIHBvaW50ZXIpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSlAgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFy
ZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBh
cmcxUGF5bG9hZCwgYXJnMVRhZywgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSlAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFn
LCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9h
ZCwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FSlAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0
UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8z
MkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzIpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBKU0NlbGwqIGNlbGwpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihjZWxsKSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIGNvbnN0IFN0
cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIo
dWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkkgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcs
IEdQUlJlZyBhcmcxUGF5bG9hZCwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJn
MVBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJn
MVRhZywgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRU
YWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3Bl
cmF0aW9uX0VKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXls
b2FkLCBpbnQzMl90IGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgU3RyaW5nSW1wbCogdWlk
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpJ
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludDMy
X3QgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1N
WV9BUkcgYXJnMVBheWxvYWQsIFRydXN0ZWRJbW0zMihhcmcxVGFnKSwgVHJ1c3RlZEltbVB0cih1
aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VEQSBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBGUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FREEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzEsIGFyZzIpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcg
YXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BS
UmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQ
UlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBUcnVzdGVkSW1tMzIgYXJnMVRhZywgR1BS
UmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBUcnVzdGVkSW1tMzIgYXJnMVRhZywgR1BSUmVnIGFyZzFQ
YXlsb2FkLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywg
YXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywg
R1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1Z
X0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0
VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXls
b2FkLCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
SklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3Vs
dFBheWxvYWQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwg
aW50MzJfdCBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgaW50MzJfdCBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwg
cmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0RGR09wZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcg
cmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcg
cmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpLCBUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxG
cmFtZSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVpaIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludDMyX3Qg
YXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoYXJnMSksIGFyZzIp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogCi0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FSlMgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBKU1ZhbHVlUmVncyB2YWx1ZSwgc2l6ZV90IGluZGV4KQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRUpTIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgdmFsdWUsIHNpemVfdCBpbmRleCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1Z
X0FSRyB2YWx1ZS5wYXlsb2FkR1BSKCksIHZhbHVlLnRhZ0dQUigpLCBUcnVzdGVkSW1tUHRyKGlu
ZGV4KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZH
T3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBh
cmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oQ19ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oQ19KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBh
cmcxVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50cyhhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9E
VU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQog
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FSkog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXls
b2FkLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJU
YWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRh
ZywgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcs
IEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcg
YXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBh
cmcxVGFnLCBTSDRfMzJCSVRfRFVNTVlfQVJHIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQ
YXlsb2FkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSkKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVn
IGFyZzFQYXlsb2FkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1Z
X0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgU0g0XzMyQklUX0RVTU1ZX0FSRyBpbW0sIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3Vs
dFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJnMlRhZywg
R1BSUmVnIGFyZzJQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJn
MlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGltbSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSwgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmcyUGF5bG9hZCwgYXJn
MlRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9CiAKLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcs
IEdQUlJlZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQs
IEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNKIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJn
Mi50YWdHUFIoKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0LnBheWxvYWRHUFIoKSwgcmVzdWx0LnRhZ0dQUigp
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywg
R1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aRCBvcGVyYXRpb24sIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMiwgRlBSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FT1pEIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyLCBGUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcz
KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3Bl
cmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2Fk
LCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMVRhZywg
R1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1Z
X0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRp
b25fRUpDSSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQ
UlJlZyBhcmcyLCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQ
UlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1Z
X0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9F
Q0pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBh
eWxvYWQsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0pKIG9wZXJhdGlvbiwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQsIEdQUlJlZyBhcmcz
VGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMlBheWxvYWQsIGFyZzJUYWcsIGFyZzNQYXlsb2Fk
LCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFZfREZHT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIs
IEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FUFpKIG9wZXJhdGlvbiwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIs
IEVBQklfMzJCSVRfRFVNTVlfQVJHIFNINF8zMkJJVF9EVU1NWV9BUkcgYXJnM1BheWxvYWQsIGFy
ZzNUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVy
YXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9E
RkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BS
UmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgRUFC
SV8zMkJJVF9EVU1NWV9BUkcgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmczUGF5bG9hZCwgYXJnM1Rh
Zyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVy
YXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZElt
bTMyIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
MiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmczUGF5bG9hZCwg
YXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihE
X0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFn
LCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihEX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcx
VGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFU
YWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC0xOTIzLDggKzE5MjIsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBiZXR0ZXJVc2VTdHJpY3RJbnQ1MihlZGdlLm5vZGUoKSk7CiAgICAgfQogICAg
IAotICAgIGJvb2wgY29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VK
Sik7Ci0gICAgYm9vbCBjb21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSosIE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uLCBT
X0RGR09wZXJhdGlvbl9FSkopOworICAgIGJvb2wgY29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24s
IFNfSklUT3BlcmF0aW9uX0VKSik7CisgICAgYm9vbCBjb21waWxlUGVlcEhvbGVCcmFuY2goTm9k
ZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkopOwogICAgIHZvaWQgY29tcGlsZVBl
ZXBIb2xlSW50MzJCcmFuY2goTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUsIEpJVENvbXBpbGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZUludDUyQnJhbmNo
KE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlv
bik7CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVCb29sZWFuQnJhbmNoKE5vZGUqLCBOb2RlKiBi
cmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAxNTY0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkzLDIzOCArOTMsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25U
CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiREZHIE9TUiBleGl0IGdl
bmVyYXRpb24gdGh1bmsiKSk7CiB9CiAKLWlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlv
bihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIpCi17Ci0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgIENDYWxsSGVscGVyczo6SnVtcCBpc05vblplcm8gPSBqaXQuYnJhbmNoVGVz
dFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHBvaW50ZXJHUFIpOwotICAgIGppdC5icmVha3Bv
aW50KCk7Ci0gICAgaXNOb25aZXJvLmxpbmsoJmppdCk7Ci0gICAgaml0LnB1c2gocG9pbnRlckdQ
Uik7Ci0gICAgaml0LmxvYWQ4KHBvaW50ZXJHUFIsIHBvaW50ZXJHUFIpOwotICAgIGppdC5wb3Ao
cG9pbnRlckdQUik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShqaXQpOwotICAgIFVOVVNFRF9Q
QVJBTShwb2ludGVyR1BSKTsKLSNlbmRpZgotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhy
b3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICBDQ2Fs
bEhlbHBlcnMgaml0KHZtKTsKLSAgICAKLSAgICAvLyBXZSB3aWxsIGp1bXAgdG8gaGVyZSBpZiB0
aGUgSklUIGNvZGUgdGhpbmtzIGl0J3MgbWFraW5nIGEgY2FsbCwgYnV0IHRoZQotICAgIC8vIGxp
bmtpbmcgaGVscGVyIChDKysgY29kZSkgZGVjaWRlZCB0byB0aHJvdyBhbiBleGNlcHRpb24gaW5z
dGVhZC4gV2Ugd2lsbAotICAgIC8vIGhhdmUgc2F2ZWQgdGhlIGNhbGxSZXR1cm5JbmRleCBpbiB0
aGUgZmlyc3QgYXJndW1lbnRzIG9mIEpJVFN0YWNrRnJhbWUuCi0gICAgLy8gTm90ZSB0aGF0IHRo
ZSByZXR1cm4gYWRkcmVzcyB3aWxsIGJlIG9uIHRoZSBzdGFjayBhdCB0aGlzIHBvaW50LCBzbyB3
ZQotICAgIC8vIG5lZWQgdG8gcmVtb3ZlIGl0IGFuZCBkcm9wIGl0IG9uIHRoZSBmbG9vciwgc2lu
Y2Ugd2UgZG9uJ3QgY2FyZSBhYm91dCBpdC4KLSAgICAvLyBGaW5hbGx5IG5vdGUgdGhhdCB0aGUg
Y2FsbCBmcmFtZSByZWdpc3RlciBwb2ludHMgYXQgdGhlIGNhbGxlZSBmcmFtZSwgc28KLSAgICAv
LyB3ZSBuZWVkIHRvIHBvcCBpdC4KLSAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgaml0LmxvYWRQdHIo
Ci0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OkNhbGxlckZyYW1lKSwKLSAgICAgICAgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaml0LnBlZWs2NChH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRF
WCk7Ci0jZWxzZQotICAgIGppdC5wZWVrKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQ
UiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKLSNlbmRpZgotICAgIGppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQq
Pihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVt
aXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5j
YWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIyKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
KCJERkcgdGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAotICAgIENDYWxsSGVscGVycyYgaml0LCBWTSogdm0s
IFBfREZHT3BlcmF0aW9uX0Ugc2xvd1BhdGhGdW5jdGlvbikKLXsKLSAgICBqaXQucHJlc2VydmVS
ZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIGVtaXRQb2lu
dGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIGppdC5zdG9yZVB0
cigKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMiwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6
UmV0dXJuUEMpKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
ICZ2bS0+dG9wQ2FsbEZyYW1lKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5wb2tlNjQo
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5E
RVgpOwotI2Vsc2UKLSAgICBqaXQucG9rZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5H
UFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7Ci0jZW5kaWYKLSAgICBqaXQuc2V0dXBBcmd1
bWVudHNFeGVjU3RhdGUoKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoYml0d2lzZV9jYXN0PHZvaWQqPihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFy
Z0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIAotICAgIC8vIFRo
aXMgc2xvdyBjYWxsIHdpbGwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIG9uZSBvZiB0aGUgZm9sbG93
aW5nOgotICAgIC8vIDEpIEV4Y2VwdGlvbiB0aHJvd2luZyB0aHVuay4KLSAgICAvLyAyKSBIb3N0
IGNhbGwgcmV0dXJuIHZhbHVlIHJldHVybmVyIHRoaW5neS4KLSAgICAvLyAzKSBUaGUgZnVuY3Rp
b24gdG8gY2FsbC4KLSAgICBqaXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6UmV0
dXJuUEMpLAotICAgICAgICBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwotICAg
IGppdC5zdG9yZVB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApLAot
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQykpOwotICAgIGVtaXRQb2ludGVyVmFsaWRh
dGlvbihqaXQsIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgaml0LnJl
c3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJl
dHVybkdQUik7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOwotICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLX0KLQot
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yVGh1bmtHZW5lcmF0b3IoCi0gICAg
Vk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgLy8gVGhlIHJldHVy
biBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjayBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2ls
bCBoZW5jZQotICAgIC8vIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1l
IHdoaWxlIHdlIG1ha2UgYSBDKysgZnVuY3Rpb24gY2FsbAotICAgIC8vIHRvIHBlcmZvcm0gbGlu
a2luZyBhbmQgbGF6eSBjb21waWxhdGlvbiBpZiBuZWNlc3NhcnkuIFdlIGV4cGVjdCB0aGUgY2Fs
bGVlCi0gICAgLy8gdG8gYmUgaW4gbm9uQXJnR1BSMC9ub25BcmdHUFIxIChwYXlsb2FkL3RhZyks
IHRoZSBjYWxsIGZyYW1lIHRvIGhhdmUgYWxyZWFkeQotICAgIC8vIGJlZW4gYWRqdXN0ZWQsIG5v
blByZXNlcnZlZE5vblJldHVybkdQUiBob2xkcyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgaW5kZXgs
Ci0gICAgLy8gYW5kIGFsbCBvdGhlciByZWdpc3RlcnMgdG8gYmUgYXZhaWxhYmxlIGZvciB1c2Uu
IFdlIHVzZSBKSVRTdGFja0ZyYW1lOjphcmdzCi0gICAgLy8gdG8gc2F2ZSBpbXBvcnRhbnQgaW5m
b3JtYXRpb24gYWNyb3NzIGNhbGxzLgotICAgIAotICAgIENDYWxsSGVscGVycyBqaXQodm0pOwot
ICAgIAotICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVy
YXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOwotICAgIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJERkcgbGlu
ayAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNv
bnN0cnVjdCIpKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5l
cmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENv
ZGVGb3JDYWxsKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVu
a0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2
bSwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KLS8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMs
IHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZv
cgotLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0byBsb3NlIGJpZyB0
aW1lIGFueXdheS4KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dl
bmVyYXRvcihWTSogdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7Ci0gICAgCi0gICAg
c2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKTsKLSAgICAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJERkcgbGluayBjbG9zdXJlIGNh
bGwgc2xvdyBwYXRoIHRodW5rIikpOwotfQotCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigKLSAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKLXsKLSAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNr
LCBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQotICAgIC8vIGp1bXAgdG8g
dGhlIGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUg
d2hpbGUgd2UKLSAgICAvLyBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGFwcHJvcHJp
YXRlIERGRyBvcGVyYXRpb24uCi0KLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKLSAgICAKLSAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOwotCi0gICAgLy8gRklYTUU6IHdlIHNo
b3VsZCBoYXZlIGEgc3RvcnkgZm9yIGVsaW1pbmF0aW5nIHRoZXNlIGNoZWNrcy4gSW4gbWFueSBj
YXNlcywKLSAgICAvLyB0aGUgREZHIGtub3dzIHRoYXQgdGhlIHZhbHVlIGlzIGRlZmluaXRlbHkg
YSBjZWxsLCBvciBkZWZpbml0ZWx5IGEgZnVuY3Rpb24uCi0gICAgCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2hUZXN0NjQoCi0gICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3RlcikpOwotI2Vsc2UKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0gICAg
ICAgIGppdC5icmFuY2gzMigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQ
UkluZm86Om5vbkFyZ0dQUjEsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotI2VuZGlmCi0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0gICAgICAg
IGppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAotICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIFN0cnVj
dHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKEpTRnVuY3Rpb246OmluZm8oKSkpKTsKLSAgICAKLSAgICAvLyBOb3cgd2Uga25v
dyB3ZSBoYXZlIGEgSlNGdW5jdGlvbi4KLSAgICAKLSAgICBqaXQubG9hZFB0cigKLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTRnVuY3Rpb246Om9m
ZnNldE9mRXhlY3V0YWJsZSgpKSwKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMik7Ci0gICAg
c2xvd0Nhc2UuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okxlc3NUaGFuLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAot
ICAgICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZz
ZXRPZk51bVBhcmFtZXRlcnNGb3Ioa2luZCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMCkpKTsKLSAgICAKLSAgICAvLyBOb3cgd2Uga25vdyB0aGF0IHdlIGhhdmUg
YSBDb2RlQmxvY2ssIGFuZCB3ZSdyZSBjb21taXR0ZWQgdG8gbWFraW5nIGEgZmFzdAotICAgIC8v
IGNhbGwuCi0gICAgCi0gICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4o
KSksCi0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgaml0LnN0b3JlNjQoCi0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEsCi0gICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIp
KSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKLSNlbHNlCi0gICAgaml0LnN0b3JlUHRyKAotICAg
ICAgICBHUFJJbmZvOjpub25BcmdHUFIxLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Ci0gICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNo
YWluICsKLSAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCi0gICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3Rh
Y2s6OlNjb3BlQ2hhaW4gKwotICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0jZW5kaWYKLSAgICAKLSAgICBqaXQubG9hZFB0
cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4
ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKSksCi0g
ICAgICAgIEdQUkluZm86OnJlZ1QwKTsKLSAgICAKLSAgICAvLyBNYWtlIGEgdGFpbCBjYWxsLiBU
aGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gREZHIGNvZGUuCi0gICAgZW1pdFBvaW50ZXJWYWxpZGF0
aW9uKGppdCwgR1BSSW5mbzo6cmVnVDApOwotICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QwKTsK
LQotICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7Ci0gICAgCi0gICAgLy8gSGVyZSB3ZSBkb24ndCBr
bm93IGFueXRoaW5nLCBzbyByZXZlcnQgdG8gdGhlIGZ1bGwgc2xvdyBwYXRoLgotICAgIAotICAg
IHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25WaXJ0
dWFsQ2FsbCA6IG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QpOwotICAgIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJERkcgdmlydHVh
bCAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNv
bnN0cnVjdCIpKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Io
dm0sIENvZGVGb3JDYWxsKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25z
dHJ1Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVu
a0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5oCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNiArNDAsNiBA
QCBuYW1lc3BhY2UgREZHIHsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0
aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSopOwotCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOwotCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLQotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsKLQogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2
aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNS
ZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEyICs0OCwxMiBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8ob3NyRXhpdCwgIndlYmtpdF9vc3JfZXhp
dCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgYm9vbGVhbiwgaW50MzIsIFZhcmlhZGljKSkKIAog
I2RlZmluZSBGT1JfRUFDSF9GVU5DVElPTl9UWVBFKG1hY3JvKSBcCi0gICAgbWFjcm8oSV9ERkdP
cGVyYXRpb25fRUpzcywgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIpKSBcCi0g
ICAgbWFjcm8oSl9ERkdPcGVyYXRpb25fRSwgZnVuY3Rpb25UeXBlKGludDY0LCBpbnRQdHIpKSBc
Ci0gICAgbWFjcm8oUF9ERkdPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0
ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKFZfREZHT3BlcmF0aW9uX0VPWkQsIGZ1bmN0aW9uVHlw
ZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludDMyLCBkb3VibGVUeXBlKSkgXAotICAgIG1h
Y3JvKFZfREZHT3BlcmF0aW9uX0VPWkosIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBp
bnRQdHIsIGludDMyLCBpbnQ2NCkpIFwKLSAgICBtYWNybyhaX0RGR09wZXJhdGlvbl9ELCBmdW5j
dGlvblR5cGUoaW50MzIsIGRvdWJsZVR5cGUpKQorICAgIG1hY3JvKElfSklUT3BlcmF0aW9uX0VK
c3MsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyKSkgXAorICAgIG1hY3JvKEpf
SklUT3BlcmF0aW9uX0UsIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50UHRyKSkgXAorICAgIG1hY3Jv
KFBfSklUT3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludFB0cikp
IFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FT1pELCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludFB0ciwgaW50UHRyLCBpbnQzMiwgZG91YmxlVHlwZSkpIFwKKyAgICBtYWNybyhWX0pJVE9w
ZXJhdGlvbl9FT1pKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQz
MiwgaW50NjQpKSBcCisgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRCwgZnVuY3Rpb25UeXBlKGlu
dDMyLCBkb3VibGVUeXBlKSkKIAogY2xhc3MgSW50cmluc2ljUmVwb3NpdG9yeSA6IHB1YmxpYyBD
b21tb25WYWx1ZXMgewogcHVibGljOgpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAjdW5kZWYg
RlVOQ1RJT05fVFlQRV9HRVRURVIKICAgICAKICNkZWZpbmUgRlVOQ1RJT05fVFlQRV9SRVNPTFZF
Uih0eXBlTmFtZSwgdHlwZSkgXAotICAgIExUeXBlIG9wZXJhdGlvblR5cGUoREZHOjp0eXBlTmFt
ZSkgICAgICAgICBcCisgICAgTFR5cGUgb3BlcmF0aW9uVHlwZShKU0M6OnR5cGVOYW1lKSAgICAg
ICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgICAgICByZXR1cm4gdHlwZU5hbWUoKTsgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTk0LDcgKzE5OTQsNyBAQCBwcml2
YXRlOgogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyB1bmFjY2VwdGFibHkgc2xvdy4KICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQogICAg
ICAgICAKLSAgICAgICAgSl9ERkdPcGVyYXRpb25fRSBmdW5jdGlvbiA9CisgICAgICAgIEpfSklU
T3BlcmF0aW9uX0UgZnVuY3Rpb24gPQogICAgICAgICAgICAgbV9ub2RlLT5vcCgpID09IENhbGwg
PyBvcGVyYXRpb25GVExDYWxsIDogb3BlcmF0aW9uRlRMQ29uc3RydWN0OwogICAgICAgICAKICAg
ICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gbV9ub2RlLT5vcCgpID09IENhbGwgPyAwIDog
MTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
ZXIuaAkocmV2aXNpb24gMTU2NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAvLyBUYWtlcyB0aGUgY2FsbCBmcmFtZSBhbmQgdGhl
IGluZGV4IG9mIHRoZSBleGl0LCBhbmQgcmV0dXJucyB0aGUgYWRkcmVzcyB0bwogLy8ganVtcCB0
by4KIGV4dGVybiAiQyIgewotdm9pZCogREZHX09QRVJBVElPTiBjb21waWxlRlRMT1NSRXhpdChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBleGl0SUQpIFdURl9JTlRFUk5BTDsKK3ZvaWQqIEpJVF9PUEVS
QVRJT04gY29tcGlsZUZUTE9TUkV4aXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgZXhpdElEKSBXVEZf
SU5URVJOQUw7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTU2NDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEzLDYgKzQxMywyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAoY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldEluY2x1ZGluZ1RoaXMoMCkpICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB9CiAKKyAgICB2
b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNj
cmF0Y2gyLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCisgICAgeworICAgICAgICBVTlVT
RURfUEFSQU0ob3duZXIpOworICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOworICAgICAg
ICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOworICAgICAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7
CisgICAgICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoMSk7CisgICAgICAgIEFTU0VSVChvd25l
ciAhPSBzY3JhdGNoMik7CisgICAgICAgIEFTU0VSVChzY3JhdGNoMSAhPSBzY3JhdGNoMik7Cisg
ICAgICAgIAorI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICAgICAgZW1p
dENvdW50KFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKKyNl
bmRpZgorICAgIH0KKwogICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNv
ZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqKTsKICAgICAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk3LDIzICs3OTcsMjMgQEAg
dm9pZCBKSVQ6OmxpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBKU0Z1bgogICAgICAgICBBU1NFUlQo
Y2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGwKICAgICAgICAgICAg
ICAgIHx8IGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJn
cyk7CiAgICAgICAgIGlmIChjYWxsTGlua0luZm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6
Q2FsbCkgewotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRv
cikuY29kZSgpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDbG9zdXJl
Q2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRp
b24sIHZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29u
c3RydWN0KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1
cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcikuY29k
ZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbiwgdm0tPmdldENUSVN0dWIob2xkU3R5bGVWaXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9y
KS5jb2RlKCkpOwogfQogCiB2b2lkIEpJVDo6bGlua1Nsb3dDYWxsKENvZGVCbG9jayogY2FsbGVy
Q29kZUJsb2NrLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsKICAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKIAotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBjYWxsZXJDb2RlQmxvY2st
PnZtKCktPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxl
ckNvZGVCbG9jay0+dm0oKS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9y
KS5jb2RlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDE1NjQ0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjE3LDcgKzIxNyw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnUK
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKICAgICBlbWl0TG9hZChKU1N0YWNrOjpDYWxsZWUs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHZpcnR1
YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJ
U3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxl
Q29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTMwNiw3ICszMDYsNyBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHVi
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBl
bWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0tPmdldENUSVN0dWIo
bGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2Fs
bEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxs
KG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0tPmdldENUSVN0dWIob2xkU3R5bGVMaW5r
Q29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkgOiBtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlTGlu
a0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxv
Y2spOwogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKQEAgLTMzNSw3ICszMzUs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgCiAgICAg
cGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby0+aG90UGF0
aE90aGVyLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29k
ZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29k
ZSgpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbChtX3Zt
LT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAg
IAogICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0
UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RFKApA
QCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKENh
bGwKICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKICAgICAgICAgUmVwYXRjaEJ1
ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLT5o
b3RQYXRoQmVnaW4pLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5j
b2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVy
bkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3Ip
LmNvZGUoKSk7CiAgICAgCiAgICAgY2FsbExpbmtJbmZvLT5zdHViID0gc3R1YlJvdXRpbmUucmVs
ZWFzZSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZp
c2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKEluc3RydQogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyNjQoSlNTdGFjazo6Q2FsbGVlLCByZWdUMCk7Ci0gICAgZW1pdE5h
a2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwor
ICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2Vu
ZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAg
ICAKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9w
Y29kZUlECiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgCi0gICAgbV9jYWxsU3RydWN0
dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0
aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRD
VElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IG1fdm0tPmdldENUSVN0dWIo
bGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5h
a2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKG9sZFN0
eWxlTGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihvbGRT
dHlsZUxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1f
Y29kZUJsb2NrKTsKICAgICAKQEAgLTI2Myw3ICsyNjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBG
dW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyLmxhYmVsQXRPZmZzZXQoMCkp
OwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0
Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKSk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbChtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmly
dHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIAogICAgIFJlZlB0cjxDbG9zdXJlQ2Fs
bFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJS
b3V0aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RFKApAQCAtMjgxLDcgKzI4MSw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKENhbGwKICAgICByZXBhdGNoQnVmZmVyLnJl
cGxhY2VXaXRoSnVtcCgKICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldp
dGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4pLAogICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5n
ZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElT
dHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgCiAgICAgY2Fs
bExpbmtJbmZvLT5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFwcGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9uV3JhcHBlcnMuaAkocmV2aXNp
b24gMTU2MjM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbldy
YXBwZXJzLmg6MTU2MjM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25XcmFwcGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzE2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSklUT3BlcmF0aW9u
V3JhcHBlcnNfaAorI2RlZmluZSBKSVRPcGVyYXRpb25XcmFwcGVyc19oCisKKyNpbmNsdWRlIDx3
dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCisjaWYgQ1BVKE1JUFMpCisjaWYgV1RGX01JUFNfUElDCisjZGVmaW5lIExPQURfRlVO
Q1RJT05fVE9fVDkoZnVuY3Rpb24pIFwKKyAgICAgICAgIi5zZXQgbm9yZW9yZGVyIiAiXG4iIFwK
KyAgICAgICAgIi5jcGxvYWQgJDI1IiAiXG4iIFwKKyAgICAgICAgIi5zZXQgcmVvcmRlciIgIlxu
IiBcCisgICAgICAgICJsYSAkdDksICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiXG4iCisj
ZWxzZQorI2RlZmluZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uKSAiIiAiXG4iCisjZW5k
aWYKKyNlbmRpZgorCisjaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoWDg2XzY0KQorCisjZGVmaW5l
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmVnaXN0ZXIp
IFwKKyAgICBhc20oIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxu
IiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkco
ZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgIm1vdiAoJXJzcCksICUiIFNUUklOR0laRShy
ZWdpc3RlcikgIlxuIiBcCisgICAgICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24j
I1dpdGhSZXR1cm5BZGRyZXNzKSAiXG4iIFwKKyAgICApOworI2RlZmluZSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByc2kpCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4KQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByOCkKKworI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBD
UFUoWDg2KQorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhm
dW5jdGlvbiwgb2Zmc2V0KSBcCisgICAgYXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAi
Lmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0wo
ZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwK
KyAgICAgICAgIm1vdiAoJWVzcCksICVlYXhcbiIgXAorICAgICAgICAibW92ICVlYXgsICIgU1RS
SU5HSVpFKG9mZnNldCkgIiglZXNwKVxuIiBcCisgICAgICAgICJqbXAgIiBMT0NBTF9SRUZFUkVO
Q0UoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSAiXG4iIFwKKyAgICApOworI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCA4KQorI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAxNikKKyNkZWZpbmUgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMjApCisjZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDI0KQorCisjZWxpZiBDT01QSUxFUihH
Q0MpICYmIENQVShBUk1fVEhVTUIyKQorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAgICIudGV4dCIgIlxu
IiBcCisgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhm
dW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgICIu
dGh1bWIiICJcbiIgXAorICAgICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZnVuY3Rp
b24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAg
ICAgIm1vdiBhMiwgbHIiICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5j
dGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyAgICBhc20g
KCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCisgICAgIi50aHVtYiIgIlxuIiBcCisgICAgIi50aHVtYl9mdW5jICIgVEhV
TUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIjoiICJcbiIgXAorICAgICAgICAibW92IGE0LCBsciIgIlxuIiBcCisgICAgICAgICJiICIg
TE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAg
ICk7CisKKy8vIEVuY29kZWRKU1ZhbHVlIGluIEpTVkFMVUUzMl82NCBpcyBhIDY0LWJpdCBpbnRl
Z2VyLiBXaGVuIGJlaW5nIGNvbXBpbGVkIGluIEFSTSBFQUJJLCBpdCBtdXN0IGJlIGFsaWduZWQg
ZXZlbi1udW1iZXJlZCByZWdpc3RlciAocjAsIHIyIG9yIFtzcF0pLgorLy8gQXMgYSByZXN1bHQs
IHJldHVybiBhZGRyZXNzIHdpbGwgYmUgYXQgYSA0LWJ5dGUgZnVydGhlciBsb2NhdGlvbiBpbiB0
aGUgZm9sbG93aW5nIGNhc2VzLgorI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVBQkkpICYmIENQVShB
Uk0pCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxy
LCBbc3AsICM0XSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpD
SSAic3RyIGxyLCBbc3AsICM4XSIKKyNlbHNlCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JF
VFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICMwXSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05f
U1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM0XSIKKyNlbmRpZgorCisj
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24p
IFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmFsaWduIDIiICJcbiIg
XAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURF
X1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgIi50aHVtYiIgIlxuIiBcCisgICAgIi50aHVt
Yl9mdW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NU
UklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRV
Uk5fQUREUkVTU19FSkkgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0
aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKKyAgICBhc20g
KCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCisgICAgIi50aHVtYiIgIlxuIiBcCisgICAgIi50aHVtYl9mdW5jICIgVEhV
TUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIjoiICJcbiIgXAorICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19F
SkNJICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhS
ZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQ
VShBUk1fVFJBRElUSU9OQUwpCisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwK
KyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9T
WU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIElOTElORV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24p
IFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgICJtb3Yg
YTIsIGxyIiAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJX
aXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAg
ICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJc
biIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBJTkxJTkVfQVJNX0ZV
TkNUSU9OKGZ1bmN0aW9uKSBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIg
XAorICAgICAgICAibW92IGE0LCBsciIgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJF
TkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKy8vIEVu
Y29kZWRKU1ZhbHVlIGluIEpTVkFMVUUzMl82NCBpcyBhIDY0LWJpdCBpbnRlZ2VyLiBXaGVuIGJl
aW5nIGNvbXBpbGVkIGluIEFSTSBFQUJJLCBpdCBtdXN0IGJlIGFsaWduZWQgZXZlbi1udW1iZXJl
ZCByZWdpc3RlciAocjAsIHIyIG9yIFtzcF0pLgorLy8gQXMgYSByZXN1bHQsIHJldHVybiBhZGRy
ZXNzIHdpbGwgYmUgYXQgYSA0LWJ5dGUgZnVydGhlciBsb2NhdGlvbiBpbiB0aGUgZm9sbG93aW5n
IGNhc2VzLgorI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVBQkkpICYmIENQVShBUk0pCisjZGVmaW5l
IElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICM0XSIK
KyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBb
c3AsICM4XSIKKyNlbHNlCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNT
X0VKSSAic3RyIGxyLCBbc3AsICMwXSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJO
X0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM0XSIKKyNlbmRpZgorCisjZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKKyAgICBhc20g
KCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5j
dGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIElOTElO
RV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
OiIgIlxuIiBcCisgICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAi
XG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJu
QWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAorICAgIGFzbSAoIFwKKyAgICAiLnRleHQi
ICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAg
ICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgSU5MSU5FX0FSTV9GVU5DVElPTihm
dW5jdGlvbikgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAg
ICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAiXG4iIFwKKyAgICAgICAg
ImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBc
CisgICAgKTsKKworI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoTUlQUykKKworI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAorICAgIGFz
bSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgTE9BRF9GVU5DVElPTl9UT19UOShm
dW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKKyAgICAgICAgIm1vdmUgJGExLCAkcmEiICJc
biIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5B
ZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyAgICBhc20oIFwKKyAgICAiLnRleHQiICJc
biIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBI
SURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikg
IjoiICJcbiIgXAorICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5B
ZGRyZXNzKSBcCisgICAgICAgICJtb3ZlICRhMywgJHJhIiAiXG4iIFwKKyAgICAgICAgImIgIiBM
T0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAg
KTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1
bmN0aW9uKSBcCisgICAgYXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIg
U1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24p
ICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICBMT0FE
X0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAorICAgICAgICAi
c3cgJHJhLCAyMCgkc3ApIiAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVu
Y3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAorICAgIGFz
bSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgTE9BRF9GVU5DVElPTl9UT19UOShm
dW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKKyAgICAgICAgInN3ICRyYSwgMjQoJHNwKSIg
IlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVy
bkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFNI
NCkKKworI2RlZmluZSBTSDRfU0NSQVRDSF9SRUdJU1RFUiAicjExIgorCisjZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgYXNtKCBc
CisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgInN0cyBwciwgcjUiICJcbiIgXAor
ICAgICAgICAiYnJhICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJl
c3MiICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwKKyAgICApOworCisjZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyAgICBhc20o
IFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0
aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICAic3RzIHByLCByNyIgIlxuIiBc
CisgICAgICAgICJtb3YubCAyZiwgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAiXG4iIFwKKyAgICAg
ICAgImJyYWYgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAiXG4iIFwKKyAgICAgICAgIm5vcCIgIlxu
IiBcCisgICAgICAgICIxOiAuYmFsaWduIDQiICJcbiIgXAorICAgICAgICAiMjogLmxvbmcgIiBM
T0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcy0xYiIgIlxuIiBcCisg
ICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVu
Y3Rpb24sIG9mZnNldCwgc2NyYXRjaCkgXAorICAgIGFzbSggXAorICAgICIudGV4dCIgIlxuIiBc
CisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVf
U1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIg
IlxuIiBcCisgICAgICAgICJzdHMgcHIsICIgc2NyYXRjaCAiXG4iIFwKKyAgICAgICAgIm1vdi5s
ICIgc2NyYXRjaCAiLCBAKCIgU1RSSU5HSVpFKG9mZnNldCkgIiwgcjE1KSIgIlxuIiBcCisgICAg
ICAgICJtb3YubCAyZiwgIiBzY3JhdGNoICJcbiIgXAorICAgICAgICAiYnJhZiAiIHNjcmF0Y2gg
IlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAgICAgICAiMTogLmJhbGlnbiA0IiAiXG4i
IFwKKyAgICAgICAgIjI6IC5sb25nICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJl
dHVybkFkZHJlc3MtMWIiICJcbiIgXAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCisjZGVm
aW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDQsIFNINF9TQ1JB
VENIX1JFR0lTVEVSKQorCisjZW5kaWYKKworI2RlZmluZSBQX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCit2b2lkKiBKSVRfT1BFUkFUSU9OIGZ1bmN0
aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZF
UkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAorRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCisKKyNkZWZpbmUgSl9GVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVz
c1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKK0ZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKQorCisjZGVmaW5lIEpfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAorRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9B
U00gV1RGX0lOVEVSTkFMOyBcCitGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUNJKGZ1bmN0aW9uKQorCisjZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKSShmdW5jdGlvbikgXAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5j
dGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmlu
Z0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5B
TDsgXAorRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikK
KworI2RlZmluZSBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1
bmN0aW9uKSBcCit2b2lkIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNz
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBTdHJpbmdJbXBsKiwgUmV0dXJu
QWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKK0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpJVE9wZXJhdGlvbldyYXBwZXJzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFwcGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9uV3JhcHBlcnMuaAkod29y
a2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFw
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxNCBAQAogI2lmbmRlZiBKSVRPcGVy
YXRpb25XcmFwcGVyc19oCiAjZGVmaW5lIEpJVE9wZXJhdGlvbldyYXBwZXJzX2gKIAorI2luY2x1
ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KICNpbmNsdWRl
IDx3dGYvSW5saW5lQVNNLmg+CiAKKyNpZiBDT01QSUxFUihNU1ZDKQorI2luY2x1ZGUgPGludHJp
bi5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgQ1BVKE1JUFMpCkBAIC01Mywx
MCArNTgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICJtb3YgKCVyc3ApLCAlIiBTVFJJ
TkdJWkUocmVnaXN0ZXIpICJcbiIgXAogICAgICAgICAiam1wICIgTE9DQUxfUkVGRVJFTkNFKGZ1
bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgIlxuIiBcCiAgICAgKTsKLSNkZWZpbmUgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcnNpKQotI2RlZmluZSBGVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByY3gpCi0jZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcjgpCisjZGVmaW5lIF9QX0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJzaSkKKyNkZWZpbmUgX0pfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcnNpKQorI2RlZmluZSBfSl9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByY3gpCisjZGVmaW5lIF9KX0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pICBGVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKKyNkZWZpbmUgX1Zf
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcjgpCiAKICNlbGlmIENP
TVBJTEVSKEdDQykgJiYgQ1BVKFg4NikKIApAQCAtNzAsMTQgKzc2LDE1IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAibW92ICVlYXgsICIgU1RSSU5HSVpFKG9mZnNldCkgIiglZXNwKVxuIiBc
CiAgICAgICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRy
ZXNzKSAiXG4iIFwKICAgICApOwotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTKGZ1bmN0aW9uLCA4KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
KGZ1bmN0aW9uLCAxNikKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhm
dW5jdGlvbiwgMjApCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVu
Y3Rpb24sIDI0KQorI2RlZmluZSBfUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1
bmN0aW9uLCA4KQorI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1
bmN0aW9uLCA4KQorI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1
bmN0aW9uLCAxNikKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhm
dW5jdGlvbiwgMjApCisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Mo
ZnVuY3Rpb24sIDI0KQogCiAjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShBUk1fVEhVTUIyKQog
Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9u
KSBcCisjZGVmaW5lIF9QX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1
bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5hbGlnbiAy
IiAiXG4iIFwKQEAgLTkwLDcgKzk3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAiYiAi
IExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAg
ICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0ko
ZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0UoZnVuY3Rpb24pIFwKKyAgICBfUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRShmdW5jdGlvbikKKworI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAgICIudGV4dCIgIlxu
IiBcCiAgICAgIi5hbGlnbiAyIiAiXG4iIFwKQEAgLTExMyw3ICsxMjMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3Ry
IGxyLCBbc3AsICM0XSIKICNlbmRpZgogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAogICAgIGFzbSAoIFwKICAgICAi
LnRleHQiICJcbiIgXAogICAgICIuYWxpZ24gMiIgIlxuIiBcCkBAIC0xMjYsNyArMTM2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAi
V2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAogICAgICk7CiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKKyNkZWZpbmUgX1ZfRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKICAgICBh
c20gKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmFsaWduIDIiICJcbiIgXApAQCAtMTQx
LDcgKzE1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQ
VShBUk1fVFJBRElUSU9OQUwpCiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyNkZWZpbmUgX1BfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKICAgICBhc20gKCBcCiAgICAgIi50ZXh0IiAi
XG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0x
NTIsNyArMTYyLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAiYiAiIExPQ0FMX1JFRkVS
RU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOwogCi0jZGVm
aW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwK
KyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rp
b24pIFwKKyAgICBfUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5j
dGlvbikKKworI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUNJKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXApAQCAtMTczLDcgKzE4Niw3IEBA
IG5hbWVzcGFjZSBKU0MgewogI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVT
U19FSkNJICJzdHIgbHIsIFtzcCwgIzRdIgogI2VuZGlmCiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAorI2RlZmluZSBfSl9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCiAgICAgYXNt
ICggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICJcbiIgXApAQCAtMTg0LDcgKzE5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4i
IFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkNJKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAgICIudGV4dCIgIlxu
IiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXApAQCAtMTk3
LDcgKzIxMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQ
VShNSVBTKQogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
KGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9QX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FKGZ1bmN0aW9uKSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAi
Lmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0yMDgsNyArMjIxLDEw
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlv
bikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pf
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBf
UF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikKKworI2Rl
ZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9u
KSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0yMTksNyArMjM1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFk
ZHJlc3MiICJcbiIgXAogICAgICk7CiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAorI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCiAgICAgYXNtKCBcCiAgICAgIi50
ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBc
CkBAIC0yMzAsNyArMjQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICJiICIgTE9DQUxf
UkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAogICAgICk7CiAK
LSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rp
b24pIFwKKyNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
Q0koZnVuY3Rpb24pIFwKICAgICBhc20oIFwKICAgICAiLnRleHQiICJcbiIgXAogICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKQEAgLTI0NSw3ICsyNjEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogI2RlZmluZSBTSDRfU0NSQVRDSF9SRUdJU1RFUiAicjExIgogCi0j
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBc
CisjZGVmaW5lIF9QX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0
aW9uKSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lN
Qk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0yNTYsNyArMjcyLDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAibm9wIiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pf
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBf
UF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikKKworI2Rl
ZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9u
KSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0yODUsMzAgKzMwNCw0NyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgIjI6IC5sb25nICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0
aFJldHVybkFkZHJlc3MtMWIiICJcbiIgXAogICAgICk7CiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCi0j
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9u
KSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDQsIFNINF9T
Q1JBVENIX1JFR0lTVEVSKQorI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTKGZ1bmN0aW9uLCAwLCBTSDRfU0NSQVRDSF9SRUdJU1RFUikKKyNkZWZpbmUgX1ZfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgNCwgU0g0X1NDUkFUQ0hfUkVHSVNU
RVIpCisKKyNlbGlmIENPTVBJTEVSKE1TVkMpICYmIENQVShYODYpCisKKyNkZWZpbmUgX1BfRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICB2b2lk
KiBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZnVuY3Rp
b24jI1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMsIFJldHVybkFkZHJlc3NQdHIoKih2b2lkKiopX0Fk
ZHJlc3NPZlJldHVybkFkZHJlc3MoKSkpOyB9CisKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIGZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZnVuY3Rpb24j
I1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMsIFJldHVybkFkZHJlc3NQdHIoKih2b2lkKiopX0FkZHJl
c3NPZlJldHVybkFkZHJlc3MoKSkpOyB9CisKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAorICAgIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gZnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIFN0cmlu
Z0ltcGwqIHN0cmluZykgeyByZXR1cm4gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMs
IGNlbGwsIHN0cmluZywgUmV0dXJuQWRkcmVzc1B0cigqKHZvaWQqKilfQWRkcmVzc09mUmV0dXJu
QWRkcmVzcygpKSk7IH0KKworI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCisgICAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBmdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBTdHJpbmdJ
bXBsKiBzdHJpbmcpIHsgcmV0dXJuIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhleGVjLCB2
YWx1ZSwgc3RyaW5nLCBSZXR1cm5BZGRyZXNzUHRyKCoodm9pZCoqKV9BZGRyZXNzT2ZSZXR1cm5B
ZGRyZXNzKCkpKTsgfQorCisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCisgICAgdm9pZCBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUsIEpTQ2VsbCogY2VsbCwgU3Ry
aW5nSW1wbCogc3RyaW5nKSB7IHJldHVybiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoZXhl
YywgdmFsdWUsIGNlbGwsIHN0cmluZywgUmV0dXJuQWRkcmVzc1B0cigqKHZvaWQqKilfQWRkcmVz
c09mUmV0dXJuQWRkcmVzcygpKSk7IH0KIAogI2VuZGlmCiAKICNkZWZpbmUgUF9GVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAogdm9pZCogSklUX09QRVJB
VElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVz
c1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKQorX1BfRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCiAKICNkZWZpbmUgSl9GVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAogRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJu
QWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKQorX0pfRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCiAKICNkZWZpbmUgSl9GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUq
LCBKU0NlbGwqLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9N
X0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FQ0koZnVuY3Rpb24pCitfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUNJKGZ1bmN0aW9uKQogCiAjZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKSShmdW5jdGlvbikgXAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5j
dGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmlu
Z0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5B
TDsgXAotRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikK
K19KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pCiAK
ICNkZWZpbmUgVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5j
dGlvbikgXAogdm9pZCBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5nSW1wbCosIFJldHVybkFk
ZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikKK19WX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxNTYyMzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHA6MTU2MjM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgorCisjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhz
LmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSG9zdENhbGxSZXR1cm5W
YWx1ZS5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbldyYXBwZXJzLmgiCisjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlcGF0Y2guaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2V4
dGVybiAiQyIgeworCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5
SWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQp
Cit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoYmFzZSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKKyAgICBJ
ZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFz
ZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkpOworfQorCitKX0ZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3RXaXRoUmV0
dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0lt
cGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OworCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVz
cyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShiYXNlKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7CisKKyAgICBp
ZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NU
eXBlKSkKKyAgICAgICAgYnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBz
bG90LCBzdHViSW5mbyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9
CisKK0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUpOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsK
KyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0
U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xv
dChiYXNlVmFsdWUpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBp
ZGVudCwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNj
ZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpIHsKKyAgICAgICAgaWYgKHN0dWJJbmZvLnNl
ZW4pCisgICAgICAgICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBz
bG90LCBzdHViSW5mbyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0dWJJbmZvLnNlZW4g
PSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30K
KworSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKG9wZXJhdGlvbklu
T3B0aW1pemUpOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jbk9wdGlt
aXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFN0cmlu
Z0ltcGwqIGtleSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIAorICAgIGlmICghYmFzZS0+aXNPYmplY3QoKSkgeworICAgICAgICB2bS0+dGhy
b3dFeGNlcHRpb24oZXhlYywgY3JlYXRlSW52YWxpZFBhcmFtZXRlckVycm9yKGV4ZWMsICJpbiIs
IGJhc2UpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29k
ZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwor
CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwga2V5KTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChi
YXNlKTsKKyAgICBib29sIHJlc3VsdCA9IGFzT2JqZWN0KGJhc2UpLT5nZXRQcm9wZXJ0eVNsb3Qo
ZXhlYywgaWRlbnQsIHNsb3QpOworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUg
PT0gc3R1YkluZm8uYWNjZXNzVHlwZSk7CisgICAgCisgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisg
ICAgICAgIHJlcGF0Y2hJbihleGVjLCBiYXNlLCBpZGVudCwgcmVzdWx0LCBzbG90LCBzdHViSW5m
byk7CisgICAgZWxzZQorICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKKyAgICAKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZXN1bHQpKTsKK30KKworRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
YmFzZSwgU3RyaW5nSW1wbCoga2V5KQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgaWYgKCFiYXNl
LT5pc09iamVjdCgpKSB7CisgICAgICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVJ
bnZhbGlkUGFyYW1ldGVyRXJyb3IoZXhlYywgImluIiwgYmFzZSkpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKworICAgIElkZW50aWZpZXIg
aWRlbnQodm0sIGtleSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNP
YmplY3QoYmFzZSktPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkpOworfQorCitFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJbihFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUga2V5KQoreworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluKGV4
ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBiYXNlKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIGJhc2UsIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGZ1bmN0aW9uLCBTdHJpbmdJ
bXBsKiB1aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2
bSwgdWlkKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZ1bmN0aW9uKGV4ZWMs
IGFzT2JqZWN0KGJhc2UpLCBpZGVudCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpT
Q2VsbCogZ2V0dGVyU2V0dGVyKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjYWxsR2V0dGVyKGV4ZWMsIGJhc2UsIGdldHRlclNldHRlcikpOworfQorCit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1
aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlk
KTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0
QnlJZENvbnRleHQoKSk7CisgICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMs
IGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Cit9CisKK3ZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVp
ZCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQp
OworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0
QnlJZENvbnRleHQoKSk7CisgICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMs
IGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Cit9CisKK3ZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwq
IHVpZCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1
aWQpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5w
dXRCeUlkQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7CisgICAgYXNP
YmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSksIHNsb3QpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwor
ICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xv
dCk7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1
aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNz
KTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihz
dHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKKyAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQo
KSk7CisgICAgCisgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwor
ICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHN0dWJJbmZv
LnNlZW4pCisgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNs
b3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworICAgIGVsc2UKKyAgICAgICAgc3R1YkluZm8uc2Vl
biA9IHRydWU7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
Q0kob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKTsKK3ZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBT
dHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhy
ZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNl
KTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1
dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZh
bHVlLCBzbG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGlmIChzdHViSW5mby5zZWVuKQorICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlVmFs
dWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKKyAgICBlbHNlCisgICAgICAg
IHN0dWJJbmZvLnNlZW4gPSB0cnVlOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Cit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplV2l0
aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2
bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxv
Y2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgUHV0
UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOworICAgIAorICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVjdChi
YXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgCisg
ICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNj
ZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uc2VlbikK
KyAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZv
LCBEaXJlY3QpOworICAgIGVsc2UKKyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Cit9CisK
K1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJp
bmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1
cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxz
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIEFTU0VS
VChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMt
PnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgIT0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uc2VlbikKKyAgICAgICAgcmVwYXRjaFB1dEJ5
SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOworICAgIGVsc2UK
KyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdCk7
Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdFdpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0s
IHVpZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2Nr
KCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIEpTVmFs
dWUgYmFzZVZhbHVlKGJhc2UpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMt
PmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICAKKyAgICBiYXNlVmFsdWUucHV0
KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgIT0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQs
IHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Qp
Owordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3RX
aXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50
KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVC
bG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBK
U1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwg
ZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIGJhc2VWYWx1
ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNzVHlw
ZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBp
ZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1
aWxkTGlzdCk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIElkZW50
aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0g
ZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vz
c1R5cGUpOworICAgIAorICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2so
KS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgCisgICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkp
OworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVl
LCBzbG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGJ1
aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3Qp
OworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QpOwordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHVi
SW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAor
ICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vz
c1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsIGlk
ZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IEVuY29kZWRKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgQVNTRVJUKHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IGJhc2UtPnN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKKyAgICBBU1NFUlQoIXZtLmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpLmZh
c3RQYXRoU2hvdWxkU3VjY2VlZChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXpl
b2YoSlNWYWx1ZSkpKTsKKyAgICBiYXNlLT5zZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFn
ZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOworICAgIGJhc2UtPnB1dERpcmVjdCh2bSwgb2Zm
c2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKK30KKworc3RhdGljIHZvaWQqIGhhbmRsZUhv
c3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5j
YWxsZXJGcmFtZSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworCisgICAgZXhlY0NhbGxl
ZS0+c2V0U2NvcGUoZXhlYy0+c2NvcGUoKSk7CisgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2Nr
KDApOworCisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKKyAgICAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CisgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY2FsbGVl
LCBjYWxsRGF0YSk7CisgICAgCisgICAgICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZUpT
KTsKKyAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCkgeworICAgICAg
ICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7CisgICAg
ICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CisgICAgICAg
ICAgICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5u
YXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOworICAgICAgICAgICAgaWYgKHZtLT5leGNlcHRp
b24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
KworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxs
UmV0dXJuVmFsdWUpOworICAgICAgICB9CisgICAgCisgICAgICAgIEFTU0VSVChjYWxsVHlwZSA9
PSBDYWxsVHlwZU5vbmUpOworICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMs
IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxlZSkpOworICAgICAgICByZXR1cm4g
dm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB9CisKKyAgICBBU1NFUlQoa2luZCA9PSBD
b2RlRm9yQ29uc3RydWN0KTsKKyAgICAKKyAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7
CisgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YShjYWxs
ZWUsIGNvbnN0cnVjdERhdGEpOworICAgIAorICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlICE9IENv
bnN0cnVjdFR5cGVKUyk7CisgICAgCisgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0
VHlwZUhvc3QpIHsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Y0NhbGxlZSk7CisgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUp
KTsKKyAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29u
c3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOworICAgICAgICBpZiAodm0t
PmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CisKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxs
UmV0dXJuVmFsdWUpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBD
b25zdHJ1Y3RUeXBlTm9uZSk7CisgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBj
cmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpKTsKKyAgICByZXR1cm4gdm0t
PmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KKworaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgRXhl
Y1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
KyAgICAKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVBc1Zh
bHVlKCk7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24o
Y2FsbGVlQXNWYWx1ZSk7CisgICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUs
IGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKKworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIGV4ZWNDYWxsZWUtPnNl
dFNjb3BlKGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKSk7CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjb2RlUHRyOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKKyAgICBpZiAoZXhl
Y3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUt
PmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7CisgICAgZWxzZSB7
CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGlj
X2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisgICAgICAgIEpTT2JqZWN0
KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2Fs
bGVlLCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAg
ICAgICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVTdGFja092ZXJmbG93RXJyb3Io
ZXhlYykpOworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICB9CisgICAgICAgIGNvZGVCbG9jayA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpOworICAgICAgICBpZiAoZXhlY0Nh
bGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4o
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0
aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5n
ZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOworICAgIH0KKyAgICBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlu
a0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7CisgICAgaWYgKCFjYWxsTGlua0luZm8uc2Vl
bk9uY2UoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnNldFNlZW4oKTsKKyAgICBlbHNlCisgICAg
ICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwg
Y29kZVB0ciwga2luZCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGVQ
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cit9CisKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAgIHJldHVybiBsaW5rRm9y
KGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICByZXR1cm4g
bGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKK30KKworaW5saW5lIGNoYXIq
IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQsIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQoreworICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CisgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVBc1Zh
bHVlKCk7CisgICAgY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFz
VmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKQorICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxl
ZSwgY2FsbGVlQXNWYWx1ZSwga2luZCkpOworICAgIAorICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9u
ID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgZXhlY0Nh
bGxlZS0+c2V0U2NvcGUoZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCkpOworICAgIEV4ZWN1dGFi
bGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKKyAgICBpZiAoVU5M
SUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CisgICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0
aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBmdW5jdGlvbi0+
c2NvcGUoKSwga2luZCk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjQ2FsbGVlLCBlcnJvcik7CisgICAgICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGV4ZWN1
dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKK30KKworaW5saW5lIGNoYXIqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgSlNDZWxsKiBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQ7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRoRnVuY3Rp
b24oZXhlY0NhbGxlZSwga2luZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsKK30KKwor
c3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWND
YWxsZWUsIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwsIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvKQoreworICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBKU0Z1bmN0aW9uKiBvbGRDYWxsZWUgPSBj
YWxsTGlua0luZm8uY2FsbGVlLmdldCgpOworICAgIAorICAgIGlmICghb2xkQ2FsbGVlCisgICAg
ICAgIHx8IG9sZENhbGxlZS0+c3RydWN0dXJlKCkgIT0gY2FsbGVlLT5zdHJ1Y3R1cmUoKQorICAg
ICAgICB8fCBvbGRDYWxsZWUtPmV4ZWN1dGFibGUoKSAhPSBjYWxsZWUtPmV4ZWN1dGFibGUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVChjYWxsZWUtPmV4ZWN1dGFi
bGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHIgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+
YWRkcmVzc0ZvckNhbGwoKTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICBp
ZiAoY2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgIGNvZGVC
bG9jayA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihjYWxsZWUtPmV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvckNhbGwoKTsK
KyAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBz
dGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgbGlua0Nsb3N1cmVDYWxsKAorICAg
ICAgICBleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVCbG9jaywKKyAgICAgICAgY2FsbGVl
LT5zdHJ1Y3R1cmUoKSwgY2FsbGVlLT5leGVjdXRhYmxlKCksIGNvZGVQdHIpOworICAgIAorICAg
IHJldHVybiB0cnVlOworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9z
dXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbDsKKyAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4
ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxv
Y2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOworCisgICAgaWYg
KCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzRnVuY3Rp
b25DZWxsLCBjYWxsTGlua0luZm8pKQorICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCBj
YWxsTGlua0luZm8sIENvZGVGb3JDYWxsKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSkKK3sgICAgCisgICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZv
ckNhbGwpOworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1
Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWND
YWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOworfQorCitKSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BF
UkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBj
YWxsSW5kZXgpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKKyAgICAK
KyAgICB1bnNpZ25lZCB2UENJbmRleCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5ieXRlY29kZU9mZnNl
dEZvckNhbGxBdEluZGV4KGNhbGxJbmRleCk7CisgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVy
ID0gZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0aW9uVmFsdWUsIHZQQ0luZGV4KTsKKyAg
ICBBU1NFUlQoaGFuZGxlci5jYXRjaFJvdXRpbmUpOworICAgIHJldHVybiBkZmdIYW5kbGVyRW5j
b2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxlci5jYXRjaFJvdXRpbmUpOworfQorCitKSVRI
YW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJJblN0dWIo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCit7CisgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7
CisgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKKyAgICAKKyAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4gPSBzdHViSW5mby0+Y29kZU9yaWdpbjsKKyAgICB3aGlsZSAoY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpCisgICAgICAgIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyOworICAgIAorICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVy
aWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgpOworICAgIEFTU0VSVChoYW5kbGVyLmNhdGNoUm91dGluZSk7CisgICAgcmV0dXJuIGRmZ0hh
bmRsZXJFbmNvZGVkKGhhbmRsZXIuY2FsbEZyYW1lLCBoYW5kbGVyLmNhdGNoUm91dGluZSk7Cit9
CisKK30gLy8gZXh0ZXJuICJDIgorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01ODcsNyArNTg3LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0
dWFsQ29ucwogICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1
Y3QpOwogfQogCi1KSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlv
bkhhbmRsZXIoRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBjYWxsSW5kZXgpCitKSVRIYW5kbGVy
RW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNTk1LDMwICs1OTUsMTEwIEBAIEpJVEhhbmRsZXJF
bmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3VwRXgKICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKICAgICAK
LSAgICB1bnNpZ25lZCB2UENJbmRleCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5ieXRlY29kZU9mZnNl
dEZvckNhbGxBdEluZGV4KGNhbGxJbmRleCk7Ci0gICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVy
ID0gZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0aW9uVmFsdWUsIHZQQ0luZGV4KTsKKyAg
ICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBnZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNl
cHRpb25WYWx1ZSk7CiAgICAgQVNTRVJUKGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKICAgICByZXR1
cm4gZGZnSGFuZGxlckVuY29kZWQoaGFuZGxlci5jYWxsRnJhbWUsIGhhbmRsZXIuY2F0Y2hSb3V0
aW5lKTsKIH0KIAotSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRp
b25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOworfSAvLyBleHRlcm4gIkMiCiAKLSAgICBKU1ZhbHVlIGV4
Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgQVNTRVJUKGV4Y2VwdGlvblZh
bHVlKTsKLSAgICAKLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBzdHViSW5mby0+Y29kZU9y
aWdpbjsKLSAgICB3aGlsZSAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGNv
ZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOwotICAgIAotICAg
IEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4Y2Vw
dGlvblZhbHVlLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChoYW5kbGVy
LmNhdGNoUm91dGluZSk7Ci0gICAgcmV0dXJuIGRmZ0hhbmRsZXJFbmNvZGVkKGhhbmRsZXIuY2Fs
bEZyYW1lLCBoYW5kbGVyLmNhdGNoUm91dGluZSk7CisvLyBOb3RlOiBnZXRIb3N0Q2FsbFJldHVy
blZhbHVlV2l0aEV4ZWNTdGF0ZSgpIG5lZWRzIHRvIGJlIHBsYWNlZCBiZWZvcmUgdGhlCisvLyBk
ZWZpbml0aW9uIG9mIGdldEhvc3RDYWxsUmV0dXJuVmFsdWUoKSBiZWxvdyBiZWNhdXNlIHRoZSBX
aW5kb3dzIGJ1aWxkCisvLyByZXF1aXJlcyBpdC4KK2V4dGVybiAiQyIgRW5jb2RlZEpTVmFsdWUg
SE9TVF9DQUxMX1JFVFVSTl9WQUxVRV9PUFRJT04gZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhF
eGVjU3RhdGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmICghZXhlYykKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoZXhlYy0+dm0oKS5ob3N0Q2FsbFJldHVyblZhbHVlKTsKIH0KIAotfSAvLyBleHRlcm4gIkMi
CisjaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoWDg2XzY0KQorYXNtICgKKyIuZ2xvYmwgIiBTWU1C
T0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK0hJREVfU1lNQk9MKGdldEhv
c3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK1NZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5W
YWx1ZSkgIjoiICJcbiIKKyAgICAibW92IDQwKCVyMTMpLCAlcjEzXG4iCisgICAgIm1vdiAlcjEz
LCAlcmRpXG4iCisgICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShnZXRIb3N0Q2FsbFJldHVyblZh
bHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgorKTsKKworI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUo
WDg2KQorYXNtICgKKyIudGV4dCIgIlxuIiBcCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhnZXRI
b3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCitISURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVyblZh
bHVlKSAiXG4iCitTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6IiAiXG4i
CisgICAgIm1vdiA0MCglZWRpKSwgJWVkaVxuIgorICAgICJtb3YgJWVkaSwgNCglZXNwKVxuIgor
ICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVj
U3RhdGUpICJcbiIKKyk7CisKKyNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9USFVNQjIp
Cithc20gKAorIi50ZXh0IiAiXG4iCisiLmFsaWduIDIiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xf
U1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK0hJREVfU1lNQk9MKGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpICJcbiIKKyIudGh1bWIiICJcbiIKKyIudGh1bWJfZnVuYyAiIFRIVU1C
X0ZVTkNfUEFSQU0oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgorU1lNQk9MX1NUUklORyhn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiOiIgIlxuIgorICAgICJsZHIgcjUsIFtyNSwgIzQwXSIg
IlxuIgorICAgICJtb3YgcjAsIHI1IiAiXG4iCisgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0
SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICJcbiIKKyk7CisKKyNlbGlmIENPTVBJ
TEVSKEdDQykgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkKK2FzbSAoCisiLnRleHQiICJcbiIKKyIu
Z2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK0hJREVf
U1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK0lOTElORV9BUk1fRlVOQ1RJT04o
Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkKK1NZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5W
YWx1ZSkgIjoiICJcbiIKKyAgICAibGRyIHI1LCBbcjUsICM0MF0iICJcbiIKKyAgICAibW92IHIw
LCByNSIgIlxuIgorICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGdldEhvc3RDYWxsUmV0dXJuVmFs
dWVXaXRoRXhlY1N0YXRlKSAiXG4iCispOworCisjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShN
SVBTKQorYXNtICgKKyIudGV4dCIgIlxuIgorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZ2V0SG9z
dENhbGxSZXR1cm5WYWx1ZSkgIlxuIgorSElERV9TWU1CT0woZ2V0SG9zdENhbGxSZXR1cm5WYWx1
ZSkgIlxuIgorU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiOiIgIlxuIgor
ICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3Rh
dGUpCisgICAgImx3ICRzMCwgNDAoJHMwKSIgIlxuIgorICAgICJtb3ZlICRhMCwgJHMwIiAiXG4i
CisgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVj
U3RhdGUpICJcbiIKKyk7CisKKyNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFNINCkKK2FzbSAo
CisiLnRleHQiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJu
VmFsdWUpICJcbiIKK0hJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK1NZ
TUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKKyAgICAiYWRkICM0
MCwgcjE0IiAiXG4iCisgICAgIm1vdi5sIEByMTQsIHIxNCIgIlxuIgorICAgICJtb3YgcjE0LCBy
NCIgIlxuIgorICAgICJtb3YubCAyZiwgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAiXG4iCisgICAg
ImJyYWYgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAiXG4iCisgICAgIm5vcCIgIlxuIgorICAgICIx
OiAuYmFsaWduIDQiICJcbiIKKyAgICAiMjogLmxvbmcgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9z
dENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICItMWJcbiIKKyk7CisKKyNlbGlmIENPTVBJ
TEVSKE1TVkMpICYmIENQVShYODYpCitleHRlcm4gIkMiIHsKKyAgICBfX2RlY2xzcGVjKG5ha2Vk
KSBFbmNvZGVkSlNWYWx1ZSBIT1NUX0NBTExfUkVUVVJOX1ZBTFVFX09QVElPTiBnZXRIb3N0Q2Fs
bFJldHVyblZhbHVlKCkKKyAgICB7CisgICAgICAgIF9fYXNtIHsKKyAgICAgICAgICAgIG1vdiBl
ZGksIFtlZGkgKyA0MF07CisgICAgICAgICAgICBtb3YgW2VzcCArIDRdLCBlZGk7CisgICAgICAg
ICAgICBqbXAgZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUKKyAgICAgICAgfQor
ICAgIH0KK30KKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1NjIzNikJKGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmg6MTU2MjM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBKSVRPcGVyYXRpb25zX2gKKyNkZWZpbmUgSklUT3BlcmF0aW9uc19oCisK
KyNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCisjaW5jbHVkZSAi
SlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiUHV0
S2luZC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSAiV2F0Y2hw
b2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2lmIENBTExJTkdfQ09OVkVOVElPTl9JU19T
VERDQUxMCisjZGVmaW5lIEpJVF9PUEVSQVRJT04gQ0RFQ0wKKyNlbHNlCisjZGVmaW5lIEpJVF9P
UEVSQVRJT04KKyNlbmRpZgorCisvLyBUaGVzZSB0eXBlZGVmcyBwcm92aWRlIHR5cGVjaGVja2lu
ZyB3aGVuIGdlbmVyYXRpbmcgY2FsbHMgb3V0IHRvIGhlbHBlciByb3V0aW5lczsKKy8vIHRoaXMg
aGVscHMgcHJldmVudCBjYWxsaW5nIGEgaGVscGVyIHJvdXRpbmUgd2l0aCB0aGUgd3JvbmcgYXJn
dW1lbnRzIQorLyoKKyAgICBLZXk6CisgICAgVjogdm9pZAorICAgIEo6IEpTVmFsdWUKKyAgICBQ
OiBwb2ludGVyICh2b2lkKikKKyAgICBDOiBKU0NlbGwqCisgICAgQTogSlNBcnJheSoKKyAgICBT
OiBzaXplX3QKKyAgICBaOiBpbnQzMl90CisgICAgRDogZG91YmxlCisgICAgSTogU3RyaW5nSW1w
bCoKKyovCit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJh
dGlvbl9FKShFeGVjU3RhdGUqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiAoKkpfSklUT3BlcmF0aW9uX0VBKShFeGVjU3RhdGUqLCBKU0FycmF5Kik7Cit0eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQVopKEV4ZWNTdGF0
ZSosIEpTQXJyYXkqLCBpbnQzMl90KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiAoKkpfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0
YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ0kpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0lt
cGwqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0
aW9uX0VDSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRURBKShFeGVjU3Rh
dGUqLCBkb3VibGUsIEpTQXJyYXkqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiAoKkpfSklUT3BlcmF0aW9uX0VJKShFeGVjU3RhdGUqLCBTdHJpbmdJbXBsKik7Cit0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSikoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpBKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
SlNBcnJheSopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRP
cGVyYXRpb25fRUpJKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopOwor
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpK
KShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpzc1opKEV4ZWNT
dGF0ZSosIEpTU3RyaW5nKiwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSlApKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCB2b2lkKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9w
ZXJhdGlvbl9FUCkoRXhlY1N0YXRlKiwgdm9pZCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVBQKShFeGVjU3RhdGUqLCB2b2lkKiwgdm9p
ZCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRp
b25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VTUykoRXhlY1N0YXRlKiwgc2l6ZV90
LCBzaXplX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRP
cGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVpJY2ZaKShFeGVjU3RhdGUqLCBpbnQz
Ml90LCBJbmxpbmVDYWxsRnJhbWUqLCBpbnQzMl90KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwg
aW50MzJfdCk7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9u
X0UpKEV4ZWNTdGF0ZSopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9w
ZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09Q
RVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVk
ZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUq
LCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19K
SVRPcGVyYXRpb25fRUljZikoRXhlY1N0YXRlKiwgSW5saW5lQ2FsbEZyYW1lKik7Cit0eXBlZGVm
IEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3Bl
cmF0aW9uX0VKc3NTdCkoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBTdHJ1Y3R1cmUqKTsKK3R5cGVk
ZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpzc0pzcykoRXhlY1N0
YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gKCpDX0pJVE9wZXJhdGlvbl9FSnNzSnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpT
U3RyaW5nKiwgSlNTdHJpbmcqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19K
SVRPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QpOwordHlwZWRl
ZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJh
dGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Cit0eXBlZGVmIGRvdWJsZSBKSVRfT1BFUkFU
SU9OICgqRF9KSVRPcGVyYXRpb25fREQpKGRvdWJsZSwgZG91YmxlKTsKK3R5cGVkZWYgZG91Ymxl
IEpJVF9PUEVSQVRJT04gKCpEX0pJVE9wZXJhdGlvbl9aWikoaW50MzJfdCwgaW50MzJfdCk7Cit0
eXBlZGVmIGRvdWJsZSBKSVRfT1BFUkFUSU9OICgqRF9KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9K
SVRPcGVyYXRpb25fRCkoZG91YmxlKTsKK3R5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpT
X0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwordHlwZWRl
ZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVy
YXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwor
dHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0opKEVuY29kZWRK
U1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRSko
RXhlY1N0YXRlKik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9u
X0VPWkQpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwgZG91YmxlKTsKK3R5cGVkZWYg
dm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRU9aSikoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJB
VElPTiAoKlZfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYg
dm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNJY2YpKEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIElubGluZUNhbGxGcmFtZSopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpW
X0pJVE9wZXJhdGlvbl9FQ0NJY2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCosIElubGlu
ZUNhbGxGcmFtZSopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlv
bl9FQ0pKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ1opKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04g
KCpWX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwordHlw
ZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSkNJKShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwordHlwZWRlZiB2b2lkIEpJ
VF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSkpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRf
T1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUpQUCkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUsIHZvaWQqLCB2b2lkKik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3Bl
cmF0aW9uX0VQWkopKEV4ZWNTdGF0ZSosIHZvaWQqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7
Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX1cpKFdhdGNocG9p
bnRTZXQqKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0Up
KEV4ZWNTdGF0ZSopOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRp
b25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9O
ICgqUF9KSVRPcGVyYXRpb25fRUpTKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90
KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VPKShFeGVj
U3RhdGUqLCBKU09iamVjdCopOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRP
cGVyYXRpb25fRU9TKShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCk7Cit0eXBlZGVmIGNo
YXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FT1opKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgaW50MzJfdCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJh
dGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBKSVRf
T1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVMpKEV4ZWNTdGF0ZSosIHNpemVfdCk7Cit0eXBl
ZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FU0pzcykoRXhlY1N0YXRl
Kiwgc2l6ZV90LCBKU1N0cmluZyopOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9K
SVRPcGVyYXRpb25fRVN0KShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKK3R5cGVkZWYgY2hhciog
SklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VTdEopKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklU
T3BlcmF0aW9uX0VTdFBTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KTsK
K3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VTdFNTKShFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9P
UEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FU3RaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBp
bnQzMl90KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0Va
WikoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCk7Cit0eXBlZGVmIFN0cmluZ0ltcGwqIEpJ
VF9PUEVSQVRJT04gKCpJX0pJVE9wZXJhdGlvbl9FSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyop
OwordHlwZWRlZiBKU1N0cmluZyogSklUX09QRVJBVElPTiAoKkpzc19KSVRPcGVyYXRpb25fRVop
KEV4ZWNTdGF0ZSosIGludDMyX3QpOworCitleHRlcm4gIkMiIHsKKworLy8gVGhpcyBtZXRob2Qg
aXMgdXNlZCB0byBsb29rdXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2Nh
dGlvbiwgd2hpY2ggaXMKKy8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNh
bGxzIG91dCB0byBvbmUgb2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFib3ZlLgorCisvLyBBY2Nv
cmRpbmcgdG8gQysrIHJ1bGVzLCBhIHR5cGUgdXNlZCBmb3IgdGhlIHJldHVybiBzaWduYXR1cmUg
b2YgZnVuY3Rpb24gd2l0aCBDIGxpbmthZ2UgKGkuZS4KKy8vICdleHRlcm4gIkMiJykgbmVlZHMg
dG8gYmUgUE9EOyBoZW5jZSBwdXR0aW5nIGFueSBjb25zdHJ1Y3RvcnMgaW50byBpdCBjb3VsZCBj
YXVzZSBlaXRoZXIgY29tcGlsZXIKKy8vIHdhcm5pbmdzLCBvciB3b3JzZSwgYSBjaGFuZ2UgaW4g
dGhlIEFCSSB1c2VkIHRvIHJldHVybiB0aGVzZSB0eXBlcy4KK3N0cnVjdCBKSVRIYW5kbGVyIHsK
KyAgICB1bmlvbiBVbmlvbiB7CisgICAgICAgIHN0cnVjdCBTdHJ1Y3QgeworICAgICAgICAgICAg
RXhlY1N0YXRlKiBleGVjOworICAgICAgICAgICAgdm9pZCogaGFuZGxlcjsKKyAgICAgICAgfSBz
OworICAgICAgICB1aW50NjRfdCBlbmNvZGVkOworICAgIH0gdTsKK307CisKK2lubGluZSBKSVRI
YW5kbGVyIGNyZWF0ZUpJVEhhbmRsZXIoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBoYW5kbGVyKQor
eworICAgIEpJVEhhbmRsZXIgcmVzdWx0OworICAgIHJlc3VsdC51LnMuZXhlYyA9IGV4ZWM7Cisg
ICAgcmVzdWx0LnUucy5oYW5kbGVyID0gaGFuZGxlcjsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CisjaWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgSklUSGFuZGxlciBKSVRIYW5kbGVyRW5jb2RlZDsK
K2lubGluZSBKSVRIYW5kbGVyRW5jb2RlZCBkZmdIYW5kbGVyRW5jb2RlZChFeGVjU3RhdGUqIGV4
ZWMsIHZvaWQqIGhhbmRsZXIpCit7CisgICAgcmV0dXJuIGNyZWF0ZUpJVEhhbmRsZXIoZXhlYywg
aGFuZGxlcik7Cit9CisjZWxzZQordHlwZWRlZiB1aW50NjRfdCBKSVRIYW5kbGVyRW5jb2RlZDsK
K2lubGluZSBKSVRIYW5kbGVyRW5jb2RlZCBkZmdIYW5kbGVyRW5jb2RlZChFeGVjU3RhdGUqIGV4
ZWMsIHZvaWQqIGhhbmRsZXIpCit7CisgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEpJVEhhbmRs
ZXI6OlVuaW9uKSA9PSBzaXplb2YodWludDY0X3QpLCBKSVRIYW5kbGVyX1VuaW9uX2lzXzY0Yml0
KTsKKyAgICByZXR1cm4gY3JlYXRlSklUSGFuZGxlcihleGVjLCBoYW5kbGVyKS51LmVuY29kZWQ7
Cit9CisjZW5kaWYKK0pJVEhhbmRsZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0
aW9uSGFuZGxlcihFeGVjU3RhdGUqLCB1aW50MzJfdCkgV1RGX0lOVEVSTkFMOworSklUSGFuZGxl
ckVuY29kZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKikgV1RGX0lOVEVSTkFMOworCitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3Ry
aW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uSW5PcHRpbWl6ZShFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IFN0cmluZ0ltcGwqKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2Vu
ZXJpY0luKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEN1c3RvbUdldHRlcihFeGVjU3RhdGUqLCBK
U0NlbGwqLCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYywgU3RyaW5nSW1wbCopIFdURl9JTlRF
Uk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEdldHRlcihF
eGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RG
X0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2Us
IFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZf
SU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9w
dGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsK
K3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1p
emUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2Us
IFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikg
V1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBK
U0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdU
Rl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFn
ZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIFN0cnVjdHVyZSosIFByb3BlcnR5
T2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSop
IFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0
cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworCit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSklUT3BlcmF0aW9uc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTcwLDggKzE3MCw3IEBAIGlubGluZSBKSVRIYW5kbGVyRW5jb2RlZCBkZmdIYW5kbGVyRW5j
b2QKICAgICByZXR1cm4gY3JlYXRlSklUSGFuZGxlcihleGVjLCBoYW5kbGVyKS51LmVuY29kZWQ7
CiB9CiAjZW5kaWYKLUpJVEhhbmRsZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0
aW9uSGFuZGxlcihFeGVjU3RhdGUqLCB1aW50MzJfdCkgV1RGX0lOVEVSTkFMOwotSklUSGFuZGxl
ckVuY29kZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKikgV1RGX0lOVEVSTkFMOworSklUSGFuZGxlckVuY29k
ZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSopIFdURl9J
TlRFUk5BTDsKIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlk
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwog
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMTU2MjM2
KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0Lmg6MTU2MjM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgUmVnaXN0ZXJTZXRfaAorI2RlZmluZSBSZWdpc3RlclNldF9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRl
ICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCB0b3RhbE51bWJl
ck9mUmVnaXN0ZXJzID0KKyAgICBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZCeXRl
c0luUmVnaXN0ZXJTZXQgPQorICAgICh0b3RhbE51bWJlck9mUmVnaXN0ZXJzICsgNykgPj4gMzsK
KwordHlwZWRlZiB1aW50OF90IFJlZ2lzdGVyU2V0UE9EW251bWJlck9mQnl0ZXNJblJlZ2lzdGVy
U2V0XTsKKworY2xhc3MgUmVnaXN0ZXJTZXQgeworcHVibGljOgorICAgIFJlZ2lzdGVyU2V0KCkK
KyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQnl0ZXNJblJlZ2lzdGVy
U2V0OyBpLS07KQorICAgICAgICAgICAgbV9zZXRbaV0gPSAwOworICAgIH0KKyAgICAKKyAgICBS
ZWdpc3RlclNldChjb25zdCBSZWdpc3RlclNldFBPRCYgb3RoZXIpCisgICAgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNldDsgaS0tOykKKyAgICAg
ICAgICAgIG1fc2V0W2ldID0gb3RoZXJbaV07CisgICAgfQorICAgIAorICAgIGNvbnN0IFJlZ2lz
dGVyU2V0UE9EJiBhc1BPRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0OyB9CisgICAgCisgICAgdm9p
ZCBjb3B5SW5mbyhSZWdpc3RlclNldFBPRCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNldDsgaS0tOykKKyAgICAg
ICAgICAgIG90aGVyW2ldID0gbV9zZXRbaV07CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KEdQ
UlJlZyByZWcpCisgICAgeworICAgICAgICBzZXRCaXQoR1BSSW5mbzo6dG9JbmRleChyZWcpKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzZXRHUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwor
ICAgICAgICBzZXRCaXQoaW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKEdQUlJl
ZyByZWcpCisgICAgeworICAgICAgICBjbGVhckJpdChHUFJJbmZvOjp0b0luZGV4KHJlZykpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGdldChHUFJSZWcgcmVnKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdldEJpdChHUFJJbmZvOjp0b0luZGV4KHJlZykpOworICAgIH0KKyAgICAKKyAg
ICBib29sIGdldEdQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgIHJl
dHVybiBnZXRCaXQoaW5kZXgpOworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm4gdGhlIGluZGV4
J3RoIGZyZWUgR1BSLgorICAgIEdQUlJlZyBnZXRGcmVlR1BSKHVuc2lnbmVkIGluZGV4ID0gMCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIWdldEdQUkJ5SW5kZXgoaSkgJiYg
IWluZGV4LS0pCisgICAgICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2V0KEZQUlJlZyByZWcpCisgICAgeworICAgICAgICBzZXRCaXQoR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjp0b0luZGV4KHJlZykpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNldEZQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBB
U1NFUlQoaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgIHNldEJp
dChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGluZGV4KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjbGVhcihGUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgY2xlYXJCaXQoR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjp0b0luZGV4KHJlZykpOworICAgIH0KKyAgICAK
KyAgICBib29sIGdldChGUFJSZWcgcmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdl
dEJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86OnRvSW5kZXgocmVnKSk7
CisgICAgfQorICAgIAorICAgIGJvb2wgZ2V0RlBSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzKTsKKyAgICAgICAgcmV0dXJuIGdldEJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyAr
IGluZGV4KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+Cisg
ICAgdm9pZCBzZXRCeUluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgc2V0KEJh
bmtJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEJhbmtJbmZvPgorICAgIGJvb2wgZ2V0QnlJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBnZXQoQmFua0luZm86OnRvUmVnaXN0ZXIoaW5kZXgpKTsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZTZXRHUFJzKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIWdldEJp
dChpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJlc3VsdCsrOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIG51bWJlck9mU2V0RlBScygpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1
bHQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFnZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnMgKyBpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJl
c3VsdCsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIG51bWJlck9mU2V0UmVnaXN0ZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRvdGFsTnVt
YmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghZ2V0Qml0KGkpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQg
c2V0Qml0KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICBBU1NFUlQoaSA8IHRvdGFsTnVtYmVy
T2ZSZWdpc3RlcnMpOworICAgICAgICBtX3NldFtpID4+IDNdIHw9ICgxIDw8IChpICYgNykpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyQml0KHVuc2lnbmVkIGkpCisgICAgeworICAgICAg
ICBBU1NFUlQoaSA8IHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAgICBtX3NldFtpID4+
IDNdICY9IH4oMSA8PCAoaSAmIDcpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBnZXRCaXQodW5z
aWduZWQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgdG90YWxOdW1iZXJPZlJl
Z2lzdGVycyk7CisgICAgICAgIHJldHVybiAhIShtX3NldFtpID4+IDNdICYgKDEgPDwgKGkgJiA3
KSkpOworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlclNldFBPRCBtX3NldDsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZWxzZSAvLyBFTkFCTEUoSklUKSAtPiBzbyBpZiBKSVQgaXMgZGlz
YWJsZWQKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIERlZmluZSBSZWdpc3RlclNldFBPRCB0byBz
b21ldGhpbmcgdGhhdCBpcyBhIFBPRCwgYnV0IGlzIG90aGVyd2lzZSB1c2VsZXNzLAorLy8gdG8g
bWFrZSBpdCBlYXNpZXIgdG8gcmVmZXIgdG8gdGhpcyB0eXBlIGluIGNvZGUgdGhhdCBtYXkgYmUg
Y29tcGlsZWQgd2hlbgorLy8gdGhlIERGRyBpcyBkaXNhYmxlZC4KKworc3RydWN0IFJlZ2lzdGVy
U2V0UE9EIHsgfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklU
KQorCisjZW5kaWYgLy8gUmVnaXN0ZXJTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE1NjIzNikJKGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcDoxNTYyMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVwYXRjaC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKwor
I2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIK
KyNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVy
LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJ
ZExpc3QuaCIKKyNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgi
CisjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50
U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChD
b2RlQmxvY2sqIGNvZGVibG9jaywgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBu
ZXdDYWxsZWVGdW5jdGlvbikKK3sKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29k
ZWJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsLCBuZXdDYWxsZWVGdW5jdGlv
bik7Cit9CisKK3N0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5j
dGlvbiwgYm9vbCBjb21wYWN0KQoreworICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihj
b2RlQmxvY2spOworCisgICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQorICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7
CisKKyAgICAvLyBQYXRjaCB0aGUgc3RydWN0dXJlIGNoZWNrICYgdGhlIG9mZnNldCBvZiB0aGUg
bG9hZC4KKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2hlY2tJbW1Ub0NhbGwpLCBzdHJ1Y3R1cmUpOworICAgIHJlcGF0Y2hCdWZmZXIuc2V0TG9h
ZEluc3RydWN0aW9uSXNBY3RpdmUoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmNvbnZlcnRp
YmxlTG9hZEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0b3JhZ2VMb2Fk
KSwgaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBp
ZiAoY29tcGFjdCkKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uo
b2Zmc2V0KSk7CisgICAgZWxzZQorICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3Jh
Z2Uob2Zmc2V0KSk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGlmIChjb21wYWN0KSB7
CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxU
b1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwor
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Q
YXlsb2FkTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3Rv
cmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy50YWcpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFn
ZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSk7CisgICAgfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjaygKKyAgICBKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisg
ICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgp
ID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGls
bFZhbGlkKCkpIHsKKyAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChz
dHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOworI2lmICFBU1NFUlRfRElTQUJMRUQK
KyAgICAgICAgLy8gSWYgd2UgZXhlY3V0ZSB0aGlzIGNvZGUsIHRoZSBvYmplY3QgbXVzdCBoYXZl
IHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0LiBBc3NlcnQKKyAgICAgICAgLy8gdGhpcyBpbiBkZWJ1
ZyBtb2Rlcy4KKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
b2JqZWN0KSwgc2NyYXRjaEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0g
aml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSk7CisgICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgICAgIG9rLmxpbmso
JmppdCk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsKKyAg
ICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAorICAgICAgICBqaXQuYnJhbmNoUHRyKAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Cit9CisKK3N0
YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKKyAgICBKU1ZhbHVlIHByb3Rv
dHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywK
KyAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1
cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCit7CisgICAgaWYgKHByb3RvdHlwZS5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkp
OworICAgIAorICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKKyAgICAgICAgcHJvdG90
eXBlLmFzQ2VsbCgpLCBwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBjb2RlQmxvY2ss
IHN0dWJJbmZvLCBqaXQsCisgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Cit9CisK
K3N0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVy
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciB0YXJnZXQpCit7CisgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNo
YWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFj
ZVdpdGhKdW1wKAorICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJy
YW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcygKKyAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgICAg
IC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpKSwKKyAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAorICAgICAgICBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAorICAgICAgICAgICAgc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAorICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCh0YXJnZXQpKTsKK30KKworc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVTY3JhdGNoKE1hY3JvQXNz
ZW1ibGVyJiBzdHViSml0LCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBHUFJSZWcgc2NyYXRj
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
JiBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzKQoreworICAgIGlm
IChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgeworICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BS
KTsKKyAgICAgICAgCisgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAg
CisgICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4gcG9wIHNjcmF0
Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFjay4KKyAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0
dWJKaXQpOworICAgICAgICAKKyAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7CisgICAg
ICAgIAorICAgICAgICBmYWlsID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworfQorCitzdGF0aWMgdm9p
ZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRv
UmVzdG9yZVNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMsIENv
ZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VC
ZWdpbikKK3sKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7Cisg
ICAgICAgIAorICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgeworICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKGZhaWwsIHNsb3dDYXNlQmVnaW4pOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBkaXJlY3RseSBiYWNrIHRvIG5vcm1hbCBw
YXRoCisgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIHNsb3dDYXNlQmVnaW4pOwor
fQorCitzdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZm
ZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFp
bCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKK3sKKyAgICBsaW5rUmVz
dG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBm
YWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9T
bG93Q2FzZSkpOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHVi
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRp
b25MYWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGlu
ZSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKworICAgIE1hY3JvQXNzZW1ibGVyIHN0
dWJKaXQ7CisgICAgICAgIAorICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5kZmcudmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJz
KS5nZXRGcmVlR1BSKCk7CisgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwor
ICAgIAorICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3Jh
dGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICBzY3JhdGNoR1BSID0g
QXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUiwgcmVz
dWx0VGFnR1BSKTsKKyNlbmRpZgorICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7Cisg
ICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAgICAKKyAgICBmYWlsdXJlQ2Fz
ZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsKKyAgICAKKyAgICBT
dHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKKyAgICBKU09iamVjdCogcHJvdG9PYmplY3Qg
PSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7Cisg
ICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9y
TG9va3VwKGV4ZWMpKTsKKyAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAg
ICAgICAgICAgcHJvdG9PYmplY3QsIHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgZXhlYy0+Y29k
ZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LAorICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICBzdHViSml0LmxvYWQ2NChwcm90b09iamVjdC0+bG9jYXRpb25Gb3JPZmZzZXQo
b2Zmc2V0KSwgcmVzdWx0R1BSKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0
dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVjdC0+bG9j
YXRpb25Gb3JPZmZzZXQob2Zmc2V0KSksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAg
ICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVz
dWx0R1BSKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihw
cm90b09iamVjdC0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHRHUFIpOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJl
c3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAg
IHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0
SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0
VGFnR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
cmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgIH0KKworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7CisgICAgCisgICAgZW1pdFJlc3RvcmVTY3JhdGNo
KHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWls
LCBmYWlsdXJlQ2FzZXMpOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAm
c3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIAorICAgIGxpbmtSZXN0b3JlU2NyYXRj
aChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1
cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKKyAgICAKKyAgICBzdHViUm91
dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RGR19TVFVCKAorICAgICAgICBwYXRjaEJ1ZmZlciwK
KyAgICAgICAgKCJERkcgcHJvdG90eXBlIGNoYWluIGFjY2VzcyBzdHViIGZvciAlcywgcmV0dXJu
IHBvaW50ICVwIiwKKyAgICAgICAgICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRh
dGEoKSwgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKK30KKworc3RhdGljIGJv
b2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgLy8gRklYTUU6IFdyaXRlIGEgdGVz
dCB0aGF0IHByb3ZlcyB3ZSBuZWVkIHRvIGNoZWNrIGZvciByZWN1cnNpb24gaGVyZSBqdXN0Cisg
ICAgLy8gbGlrZSB0aGUgaW50ZXJwcmV0ZXIgZG9lcywgdGhlbiBhZGQgYSBjaGVjayBmb3IgcmVj
dXJzaW9uLgorCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAKKyAgICBpZiAoaXNKU0FycmF5KGJhc2VW
YWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsK
KyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBh
dGNoLmRmZy5iYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBHUFJSZWcg
cmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFs
dWVUYWdHUFIpOworI2VuZGlmCisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMp
LmdldEZyZWVHUFIoKTsKKyAgICAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNl
OworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKKyAgICAgICAgCisg
ICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2Ny
YXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BS
LCByZXN1bHRUYWdHUFIpOworI2VuZGlmCisgICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2Fz
ZXM7CisgICAgICAgCisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7IAor
ICAgICAgICBzdHViSml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkp
OworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KEluZGV4aW5nU2hhcGVNYXNrKSkpOworICAgICAgICAKKyAgICAgICAgc3R1YkppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMCkpKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHN0dWJKaXQub3I2
NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7
CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3R1YkppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKDB4ZmZmZmZmZmYpLCByZXN1bHRUYWdHUFIpOyAvLyBKU1ZhbHVlOjpJbnQzMlRh
ZworI2VuZGlmCisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsK
KyAgICAgICAgCisgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0
b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKKyAg
ICAgICAgCisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY29k
ZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZl
ciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN0dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJl
Q2FzZXMpOworICAgICAgICAKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBGSU5BTEla
RV9DT0RFX0ZPUl9ERkdfU1RVQigKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAg
ICAgKCJERkcgR2V0QnlJZCBhcnJheSBsZW5ndGggc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsCisgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgp
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAg
ICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOworICAgICAgICAKKyAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KGNvZGVCbG9jayk7CisgICAgICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHVi
SW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOworICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdl
dEJ5SWQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IC8vIEZJWE1FOiBzaG91bGQgc3VwcG9ydCBsZW5ndGggYWNjZXNzIGZvciBTdHJpbmcuCisKKyAg
ICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgorICAgIGlm
ICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSlNDZWxs
KiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vz
c2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE9wdGlt
aXplIHNlbGYgYWNjZXNzLgorICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7
CisgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKKyAgICAgICAgICAgIHx8ICFN
YWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0
UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkgeworICAgICAg
ICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHVi
SW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvcGVyYXRpb25HZXRCeUlkQnVp
bGRMaXN0LCB0cnVlKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKCp2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gRklYTUU6IG9wdGltaXplIGdldHRlcnMg
YW5kIHNldHRlcnMKKyAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNo
ZWRPZmZzZXQoKTsKKyAgICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZv
ckNoYWluQWNjZXNzKGV4ZWMsIGJhc2VWYWx1ZSwgc2xvdC5zbG90QmFzZSgpLCBwcm9wZXJ0eU5h
bWUsIG9mZnNldCk7CisgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWlu
ID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAKKyAgICBnZW5lcmF0ZVBy
b3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQs
IG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpLCBzdHViSW5mby5zdHViUm91dGluZSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hC
dWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVy
YXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKKyAgICAKKyAgICBzdHViSW5mby5pbml0R2V0QnlJZENo
YWluKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBwcm90b3R5
cGVDaGFpbiwgY291bnQsIHRydWUpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIHJlcGF0
Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgYm9vbCBjYWNoZWQgPSB0cnlDYWNoZUdldEJ5SUQo
ZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKTsKKyAgICBpZiAo
IWNhY2hlZCkKKyAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Cit9CisKK3N0YXRpYyBib29s
IGdldFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCgKKyAgICBWTSogdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KiYgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCBpbnQmIGxpc3RJbmRl
eCwKKyAgICBDb2RlTG9jYXRpb25MYWJlbCYgc2xvd0Nhc2UpCit7CisgICAgc2xvd0Nhc2UgPSBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgCisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX3Vuc2V0KSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzdHViSW5mby5z
dHViUm91dGluZSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5
SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDAsIGZhbHNlKTsKKyAgICAgICAg
bGlzdEluZGV4ID0gMDsKKyAgICB9IGVsc2UgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNj
ZXNzX2dldF9ieV9pZF9zZWxmKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzdHViSW5mby5z
dHViUm91dGluZSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKHNsb3dDYXNlKSwg
c3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCB0cnVlKTsK
KyAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVy
ZUxpc3QsIDEsIHRydWUpOworICAgICAgICBsaXN0SW5kZXggPSAxOworICAgIH0gZWxzZSBpZiAo
c3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluKSB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCEhc3R1YkluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICBzbG93Q2Fz
ZSA9IENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJ
bmZvLnN0dWJSb3V0aW5lLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0
dXJlLmdldCgpLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwgdHJ1ZSk7Cisg
ICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNsZWFyKCk7CisgICAgICAgIHN0dWJJbmZvLmlu
aXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxLCBmYWxzZSk7Cisg
ICAgICAgIGxpc3RJbmRleCA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdCk7Cisg
ICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZM
aXN0LnN0cnVjdHVyZUxpc3Q7CisgICAgICAgIGxpc3RJbmRleCA9IHN0dWJJbmZvLnUuZ2V0QnlJ
ZFNlbGZMaXN0Lmxpc3RTaXplOworICAgICAgICBzbG93Q2FzZSA9IENvZGVMb2NhdGlvbkxhYmVs
KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgfQorICAgIAorICAgIGlmIChsaXN0SW5kZXggPT0gUE9M
WU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgUkVMRUFTRV9BU1NFUlQobGlzdEluZGV4IDwgUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgcGF0Y2hKdW1wVG9HZXRCeUlk
U3R1YihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBK
SVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoc3R1Yklu
Zm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdCk7CisgICAgUmVwYXRj
aEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgaWYgKHN0dWJJbmZvLnUuZ2V0
QnlJZFNlbGZMaXN0LmRpZFNlbGZQYXRjaGluZykgeworICAgICAgICByZXBhdGNoQnVmZmVyLnJl
bGluaygKKyAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZz
ZXQoCisgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0
Q2hlY2spLAorICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICByZXBsYWNlV2l0
aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KTsKK30KKworc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKCFi
YXNlVmFsdWUuaXNDZWxsKCkKKyAgICAgICAgfHwgIXNsb3QuaXNDYWNoZWFibGUoKQorICAgICAg
ICB8fCAhYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0Fy
ZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwor
ICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CisgICAgCisgICAgaWYgKHNsb3Qu
c2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgaWYgKCFzdHViSW5mby5wYXRjaC5k
ZmcucmVnaXN0ZXJzRmx1c2hlZCkgeworICAgICAgICAgICAgLy8gV2UgY2Fubm90IGRvIGFzIG11
Y2ggaW5saW5lIGNhY2hpbmcgaWYgdGhlIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVkIHByaW9y
IHRvIHRoaXMgR2V0QnlJZC4gSW4gcGFydGljdWxhciwKKyAgICAgICAgICAgIC8vIG5vbi1WYWx1
ZSBjYWNoZWQgcHJvcGVydGllcyByZXF1aXJlIHBsYW50aW5nIGNhbGxzLCB3aGljaCByZXF1aXJl
cyByZWdpc3RlcnMgdG8gaGF2ZSBiZWVuIGZsdXNoZWQuIFRodXMsCisgICAgICAgICAgICAvLyBp
ZiByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCwgZG9uJ3QgZG8gbm9uLVZhbHVlIGNhY2hpbmcu
CisgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKKyAgICAgICAgaW50
IGxpc3RJbmRleDsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2U7CisKKyAgICAg
ICAgaWYgKCFnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qodm0sIGNvZGVCbG9jaywgc3R1Yklu
Zm8sIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgbGlzdEluZGV4LCBzbG93Q2FzZSkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBzdHViSW5mby51LmdldEJ5
SWRTZWxmTGlzdC5saXN0U2l6ZSsrOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKKyNpZiBV
U0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNo
LmRmZy52YWx1ZUdQUik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQo
c3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKKyAgICAgICAg
CisgICAgICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd3JvbmdTdHJ1Y3QgPSBzdHViSml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBzdHJhdGVneSB3
ZSB1c2UgZm9yIHN0dWJzIGlzIGFzIGZvbGxvd3M6CisgICAgICAgIC8vIDEpIENhbGwgREZHIGhl
bHBlciB0aGF0IGNhbGxzIHRoZSBnZXR0ZXIuCisgICAgICAgIC8vIDIpIENoZWNrIGlmIHRoZXJl
IHdhcyBhbiBleGNlcHRpb24sIGFuZCBpZiB0aGVyZSB3YXMsIGNhbGwgeWV0IGFub3RoZXIKKyAg
ICAgICAgLy8gICAgaGVscGVyLgorICAgICAgICAKKyAgICAgICAgYm9vbCBpc0RpcmVjdCA9IGZh
bHNlOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25DYWxsOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBoYW5kbGVyQ2FsbDsKKyAgICAgICAgRnVuY3Rpb25QdHIg
b3BlcmF0aW9uRnVuY3Rpb247CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7
CisgICAgICAgIAorICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpIHx8IHNsb3Qu
aXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVH
ZXR0ZXIoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSICE9IEludmFsaWRH
UFJSZWcpOworICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlR1BSICE9IHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkg
eworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CisjZWxzZQorICAgICAgICAgICAgICAg
ICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZz
ZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOworI2Vu
ZGlmCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
ICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRj
aEdQUik7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNh
Y2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIG9wZXJhdGlvbkZ1bmN0aW9uID0gb3Bl
cmF0aW9uQ2FsbEdldHRlcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
c3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAg
IGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
LAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihpZGVu
dC5pbXBsKCkpKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25GdW5jdGlvbiA9IG9wZXJhdGlv
bkNhbGxDdXN0b21HZXR0ZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBjYWxsIGlzIG1hZGUg
aW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCisgICAgICAgICAgICAvLyBwbGFjZSB0aGF0
IHdlIG1hZGUgaXQgZnJvbS4gSXQganVzdCBzbyBoYXBwZW5zIHRvIGJlIHRoZSBwbGFjZSB0aGF0
IHdlIGFyZSBhdAorICAgICAgICAgICAgLy8gcmlnaHQgbm93IQorICAgICAgICAgICAgc3R1Ykpp
dC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
ZXhlYy0+bG9jYXRpb25Bc1Jhd0JpdHMoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
Ojp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENv
dW50KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gc3R1Ykpp
dC5jYWxsKCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIHN0dWJKaXQubW92ZShH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICBz
dHViSml0LnNldHVwUmVzdWx0cyhyZXN1bHRHUFIsIHJlc3VsdFRhZ0dQUik7CisjZW5kaWYKKyAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBl
cnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICBz
dHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmc3R1YkluZm8pKTsKKyAgICAgICAgICAgIGhhbmRs
ZXJDYWxsID0gc3R1YkppdC5jYWxsKCk7CisgICAgICAgICAgICBzdHViSml0Lmp1bXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChp
c0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgeworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1
bHRHUFIpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBpZiAoYmFzZUdQUiA9PSByZXN1bHRUYWdH
UFIpIHsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0
VGFnR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3Vs
dEdQUik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2
NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICAg
ICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZz
ZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CisgICAg
ICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0
R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRH
UFIpOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdWNjZXNzID0gc3R1Ykpp
dC5qdW1wKCk7CisgICAgICAgICAgICBpc0RpcmVjdCA9IHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNvZGVCbG9jayk7Cisg
ICAgICAgIAorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHdyb25nU3RydWN0LCBzbG93Q2FzZSk7
CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkp
OworICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvbkZ1bmN0aW9uKTsKKyAgICAgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJJblN0dWIpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lID0KKyAgICAgICAgICAgIGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICAgICAgICAg
IEZJTkFMSVpFX0RGR19DT0RFKAorICAgICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgKCJERkcgR2V0QnlJZCBwb2x5bW9ycGhpYyBsaXN0IGFjY2VzcyBm
b3IgJXMsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgICAgICAgICB0b0NTdHJpbmco
KmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAgICAgICAg
ICAqdm0sCisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAg
ICAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkgfHwgc2xvdC5pc0NhY2hlYWJs
ZUN1c3RvbSgpKTsKKyAgICAgICAgCisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+
bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0
dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKKyAgICAgICAgCisgICAgICAgIHBhdGNo
SnVtcFRvR2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHViSW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkp
OworICAgICAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSAtIDEpOworICAgIH0KKyAgICAKKyAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSB8fCAhc2xvdC5pc0Nh
Y2hlYWJsZVZhbHVlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgc2l6ZV90IGNvdW50ID0gbm9y
bWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlVmFsdWUsIHNsb3Qu
c2xvdEJhc2UoKSwgaWRlbnQsIG9mZnNldCk7CisgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90
b3R5cGVDaGFpbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RydWN0dXJlQ2hhaW4q
IHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAK
KyAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdDsKKyAgICBpbnQgbGlzdEluZGV4OworICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNl
OworICAgIGlmICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KHZtLCBjb2RlQmxvY2ssIHN0
dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc2xvd0Nhc2UpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3R1YkluZm8udS5nZXRCeUlkUHJvdG9M
aXN0Lmxpc3RTaXplKys7CisgICAgCisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZTsKKyAgICAKKyAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJ
bmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFD
YWxsVG9Eb25lKSwgc2xvd0Nhc2UsIHN0dWJSb3V0aW5lKTsKKyAgICAKKyAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKKyAgICAKKyAgICBw
YXRjaEp1bXBUb0dldEJ5SWRTdHViKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJSb3V0aW5lLmdl
dCgpKTsKKyAgICAKKyAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FD
SEVfU0laRSAtIDEpOworfQorCit2b2lkIGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAg
ICBib29sIGRvbnRDaGFuZ2VDYWxsID0gdHJ5QnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFs
dWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pOworICAgIGlmICghZG9udENoYW5nZUNh
bGwpCisgICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworfQorCitzdGF0aWMgVl9KSVRPcGVy
YXRpb25fRUpDSSBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJv
cGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgaWYgKHNsb3QuaXNTdHJp
Y3RNb2RlKCkpIHsKKyAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQorICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0OworICAgIH0KKyAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCisg
ICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0OworICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OworfQorCitzdGF0aWMgVl9KSVRPcGVyYXRpb25f
RUpDSSBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBpZiAoc2xvdC5pc1N0cmlj
dE1vZGUoKSkgeworICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdDsKKyAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3Q7CisgICAgfQorICAgIGlmIChwdXRL
aW5kID09IERpcmVjdCkKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3RCdWlsZExpc3Q7CisgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWls
ZExpc3Q7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMsCisgICAgSlNWYWx1ZSwKKyAgICBjb25zdCBJZGVudGlmaWVyJiwKKyAgICBjb25z
dCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LAorICAgIFB1dEtpbmQsCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgQ29kZUxvY2F0
aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAorICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJS
b3V0aW5lKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIEdQUlJlZyBiYXNlR1BS
ID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7CisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxH
UFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICBHUFJS
ZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1
ZUdQUik7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRj
aC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOworICAgIGJvb2wgbmVlZFRvUmVzdG9y
ZVNjcmF0Y2ggPSBmYWxzZTsKKyNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIyOworICAgIGNvbnN0IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVk
ID0gdHJ1ZTsKKyNlbHNlCisgICAgY29uc3QgYm9vbCB3cml0ZUJhcnJpZXJOZWVkZWQgPSBmYWxz
ZTsKKyNlbmRpZgorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7CisgICAgCisgICAg
aWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZyAmJiAod3JpdGVCYXJyaWVyTmVlZGVkIHx8
IGlzT3V0T2ZMaW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkgeworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0
Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIpOworI2Vsc2UKKyAgICAgICAgc2NyYXRjaEdQUiA9IEFz
c2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVU
YWdHUFIpOworI2VuZGlmCisgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKKyAg
ICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGJhZFN0cnVjdHVyZSA9IHN0dWJKaXQuYnJhbmNoUHRyKAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAgICAKKyNpZiBFTkFCTEUoV1JJVEVfQkFS
UklFUl9QUk9GSUxJTkcpCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzY3JhdGNoR1BSMiA9IEFz
c2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRj
aEdQUik7CisjZWxzZQorICAgIHNjcmF0Y2hHUFIyID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RT
Y3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUiwgc2NyYXRjaEdQUik7Cisj
ZW5kaWYKKyAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUjIpOworICAgIEFzc2VtYmx5SGVscGVy
czo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIy
LCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CisgICAgc3R1YkppdC5wb3Aoc2NyYXRj
aEdQUjIpOworI2VuZGlmCisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoaXNJbmxp
bmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCisgICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2
YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgZWxzZSB7CisgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZs
eShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgIH0KKyNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSB7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsg
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAr
IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFn
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZs
eShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgIH0KKyNlbmRpZgor
ICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZmFpbHVyZTsKKyAgICAKKyAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsK
KyAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7CisgICAgICAgIHN1Y2Nlc3MgPSBzdHVi
Sml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGJhZFN0cnVjdHVyZS5saW5rKCZzdHViSml0
KTsKKyAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7CisgICAgICAgIGZhaWx1cmUgPSBz
dHViSml0Lmp1bXAoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5q
dW1wKCk7CisgICAgICAgIGZhaWx1cmUgPSBiYWRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkp
OworICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwor
ICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKKyAgICAgICAgICAg
IAorICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCisgICAgICAg
IHBhdGNoQnVmZmVyLAorICAgICAgICAoIkRGRyBQdXRCeUlkIHJlcGxhY2Ugc3R1YiBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9j
aygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAor
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKK30KKworc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHVi
KAorICAgIEV4ZWNTdGF0ZSogZXhlYywKKyAgICBKU1ZhbHVlLAorICAgIGNvbnN0IElkZW50aWZp
ZXImLAorICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwKKyAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sCisgICAgUHV0S2luZCBwdXRLaW5kLAorICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLAorICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAorICAgIFN0cnVjdHVyZUNoYWlu
KiBwcm90b3R5cGVDaGFpbiwKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCisg
ICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCit7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
R1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5k
ZmcudmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOworICAgIAorICAgIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdp
c3RlcnMpOworICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOworI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgYWxsb2Nh
dG9yLmxvY2sodmFsdWVHUFIpOworICAgIAorICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtKTsK
KyAgICAgICAgICAgIAorICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQUik7CisgICAg
QVNTRVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsKKyAgICAKKyAgICBib29sIG5lZWRTZWNv
bmRTY3JhdGNoID0gZmFsc2U7CisgICAgYm9vbCBuZWVkVGhpcmRTY3JhdGNoID0gZmFsc2U7Cisj
aWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgIG5lZWRTZWNvbmRTY3JhdGNo
ID0gdHJ1ZTsKKyNlbmRpZgorICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
IT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCisgICAgICAgICYmIG9sZFN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICBuZWVkU2Vjb25kU2NyYXRjaCA9
IHRydWU7CisgICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVlOworICAgIH0KKworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSMjsKKyAgICBpZiAobmVlZFNlY29uZFNjcmF0Y2gpIHsKKyAgICAgICAg
c2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEFT
U0VSVChzY3JhdGNoR1BSMiAhPSBiYXNlR1BSKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIy
ICE9IHZhbHVlR1BSKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIx
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSMzsKKyAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkgeworICAgICAg
ICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAg
QVNTRVJUKHNjcmF0Y2hHUFIzICE9IGJhc2VHUFIpOworICAgICAgICBBU1NFUlQoc2NyYXRjaEdQ
UjMgIT0gdmFsdWVHUFIpOworICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQ
UjEpOworICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjIpOworICAgIH0g
ZWxzZQorICAgICAgICBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICAK
KyAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7
CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOworICAgICAgICAg
ICAgCisgICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNC
ZWVuSW52YWxpZGF0ZWQoKSk7CisgICAgCisgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihvbGRTdHJ1Y3R1cmUpKSk7CisgICAgCisgICAgYWRkU3RydWN0dXJlVHJh
bnNpdGlvbkNoZWNrKAorICAgICAgICBvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKKyAgICAg
ICAgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgCisgICAgaWYgKHB1dEtpbmQgPT0gTm90RGly
ZWN0KSB7CisgICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90
eXBlQ2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7CisgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVU
cmFuc2l0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgKCppdCktPnN0b3JlZFByb3RvdHlwZSgp
LCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNlcywKKyAg
ICAgICAgICAgICAgICBzY3JhdGNoR1BSMSk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBFTkFC
TEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgQVNTRVJUKG5lZWRTZWNvbmRTY3JhdGNo
KTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgLy8gTXVz
dCBhbHdheXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0
aW9uIGl0c2VsZiByZXF1aXJlcyBpdAorICAgIEFzc2VtYmx5SGVscGVyczo6d3JpdGVCYXJyaWVy
KHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVy
Rm9yUHJvcGVydHlBY2Nlc3MpOworI2VuZGlmCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IHNsb3dQYXRoOworICAgIAorICAgIGJvb2wgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0g
ZmFsc2U7CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgc2l6ZV90IG5ld1Np
emUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Cisg
ICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJnZtLT5oZWFwLnN0b3Jh
Z2VBbGxvY2F0b3IoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFs
bG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBz
bG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25l
ZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsK
KyAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0
b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CisgICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3Jh
dGNoR1BSMSk7CisgICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJz
b2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3Jh
dGNoR1BSMSk7CisgICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUg
PiBvbGRTaXplKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVk
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOwor
ICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRv
ci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAgICAgICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0
Y2hHUFIxKTsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNv
bHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0
Y2hHUFIxKTsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgLy8g
V2UgaGF2ZSBzY3JhdGNoR1BSMSA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9sZCBzdG9y
YWdlLCBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQorICAgICAgICAgICAgZm9yIChwdHJkaWZmX3Qg
b2Zmc2V0ID0gMDsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvbGRTaXplKTsgb2Zm
c2V0ICs9IHNpemVvZih2b2lkKikpIHsKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjMsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpT
VmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAg
c3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjEsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3R1YkppdC5zdG9y
ZVB0cihzY3JhdGNoR1BSMSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CisgICAgICAgIHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9
IHRydWU7CisgICAgfQorCisgICAgc3R1YkppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAo
aXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCisgICAgICAgIHN0dWJKaXQuc3Rv
cmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgZWxzZSB7CisgICAgICAgIGlm
ICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQorICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICB9CisjZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkg
eworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldElu
SW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsK
KyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJ
bklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKKyAgICAgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN0dWJKaXQu
c3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9m
ZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkp
OworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSkpOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHN1Y2Nlc3M7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKKyAg
ICAgICAgICAgIAorICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgeworICAg
ICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0KTsK
KyAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworCisgICAgICAgIGZhaWx1cmVDYXNl
cy5saW5rKCZzdHViSml0KTsKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3Rl
cnNCeVBvcHBpbmcoc3R1YkppdCk7CisgICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgIAorICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7CisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgc3VjY2Vzc0luU2xvd1BhdGg7CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAg
ICAgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7CisgICAgICAgIAorICAgICAgICBhbGxvY2F0
b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0KTsKKyAgICAgICAgU2Ny
YXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxv
Y2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkpOworICAgICAgICBhbGxvY2F0b3IucHJl
c2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyKHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIs
IHNjcmF0Y2hHUFIxKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdHViSml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpLCB2YWx1ZUdQUik7CisjZWxzZQorICAgICAgICBzdHViSml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgICAgIG9wZXJhdGlvbkNh
bGwgPSBzdHViSml0LmNhbGwoKTsKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0
ZXJzRnJvbVNjcmF0Y2hCdWZmZXIoc3R1YkppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEp
OworICAgICAgICBzdWNjZXNzSW5TbG93UGF0aCA9IHN0dWJKaXQuanVtcCgpOworICAgIH0KKyAg
ICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVC
bG9jaygpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0Rv
bmUpKTsKKyAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpCisgICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKKyAgICBlbHNlCisgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBmYWlsdXJlTGFiZWwpOworICAgIGlmIChz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKSB7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3Bl
cmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQpOworICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHN1Y2Nlc3NJblNsb3dQYXRoLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7CisgICAgfQor
ICAgIAorICAgIHN0dWJSb3V0aW5lID0KKyAgICAgICAgY3JlYXRlSklUU3R1YlJvdXRpbmUoCisg
ICAgICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKKyAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZl
ciwKKyAgICAgICAgICAgICAgICAoIkRGRyBQdXRCeUlkICVzdHJhbnNpdGlvbiBzdHViICglcCAt
PiAlcCkgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpID8gInJlYWxsb2NhdGluZyAiIDogIiIsCisgICAgICAgICAgICAgICAgICAgIG9sZFN0
cnVjdHVyZSwgc3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMt
PmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAgICAgKnZtLAorICAg
ICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICAg
ICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwKKyAgICAgICAgICAgIHN0cnVjdHVyZSk7Cit9CisKK3N0YXRpYyBib29s
IHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworCisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOworICAgIFN0cnVjdHVyZSogb2xk
U3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCk7CisgICAgCisgICAgaWYgKCFzbG90
LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RydWN0dXJl
LT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZh
bHVlKSB7CisgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1By
b3BlcnR5KSB7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2Ug
ZG9uJ3QgaGF2ZQorICAgICAgICAgICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhh
cHBlbi4KKyAgICAgICAgICAgIGlmIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA8IDYKKyAg
ICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCisgICAgICAgICAgICAgICAgJiYgb2xkU3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdo
ZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCisgICAgICAgICAgICAv
LyBpbmRleGluZyBzdG9yYWdlLgorICAgICAgICAgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRI
YXZlSW5kZXhpbmdIZWFkZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBi
YXNlQ2VsbCkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3Rv
dHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZW1pdFB1dFRyYW5zaXRpb25TdHViKAorICAgICAgICAgICAgICAgIGV4
ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLAorICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAgICAgICAg
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSksCisgICAgICAgICAgICAgICAgc3R1Yklu
Zm8uc3R1YlJvdXRpbmUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoCisgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxU
b1N0cnVjdENoZWNrKSwKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5m
by5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWls
ZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0sIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwg
cHV0S2luZCA9PSBEaXJlY3QpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFwcHJvcHJpYXRlTGlz
dEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7CisgICAgICAg
IHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZSgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5k
IHB1dEtpbmQpCit7CisgICAgYm9vbCBjYWNoZWQgPSB0cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFz
ZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKKyAgICBpZiAo
IWNhY2hlZCkKKyAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpKTsKK30KKworc3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBl
eGVjLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKworICAgIGlmICgh
YmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSlNDZWxsKiBi
YXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0
cnVjdHVyZS0+cHJldmlvdXNJRCgpOworICAgIAorICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gT3B0aW1pemUg
c2VsZiBhY2Nlc3MuCisgICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkgeworICAgICAg
ICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OworICAgICAgICBSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IHN0dWJSb3V0aW5lOworICAgICAgICAKKyAgICAgICAgaWYgKHNsb3QudHlwZSgpID09
IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdl
IG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCisgICAgICAgICAgICAvLyBlbm91Z2gg
cmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgorICAgICAgICAgICAgaWYgKEdQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzIDwgNgorICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKKyAgICAg
ICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTa2lw
IG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVj
dHVyZSBoYXMKKyAgICAgICAgICAgIC8vIGluZGV4aW5nIHN0b3JhZ2UuCisgICAgICAgICAgICBp
ZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vcm1hbGl6
ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4p
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNo
YWluKGV4ZWMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0
dGVkIHRvIGNyZWF0aW5nIHRoZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5n
bHkuCisgICAgICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbSgKKyAg
ICAgICAgICAgICAgICBwdXRLaW5kLCBzdHViSW5mbywKKyAgICAgICAgICAgICAgICBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9TbG93Q2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBlbWl0UHV0VHJh
bnNpdGlvblN0dWIoCisgICAgICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwg
b2xkU3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCisgICAgICAgICAgICAgICAg
c3R1YlJvdXRpbmUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3Mo
CisgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6dHJhbnNpdGlvbigKKyAgICAgICAgICAg
ICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICAgICAg
ICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sCisgICAgICAg
ICAgICAgICAgICAgIHN0dWJSb3V0aW5lKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0aW5nIHRoZSBzdHViLiBNb2dyaWZ5IHRo
ZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCisgICAgICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6ZnJvbSgKKyAgICAgICAgICAgICAgICBwdXRLaW5kLCBzdHViSW5mbywKKyAg
ICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBlbWl0UHV0UmVwbGFjZVN0dWIoCisgICAgICAgICAgICAgICAgZXhlYywgYmFz
ZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLAorICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRo
VGFyZ2V0KCkpLCBzdHViUm91dGluZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxpc3Qt
PmFkZEFjY2VzcygKKyAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjpyZXBsYWNlKAorICAg
ICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Cisg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5q
dW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgICAgICAK
KyAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQorICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRC
eUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBidWlsZFB1dEJ5
SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBib29sIGNhY2hlZCA9
IHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3Qs
IHN0dWJJbmZvLCBwdXRLaW5kKTsKKyAgICBpZiAoIWNhY2hlZCkKKyAgICAgICAgcmVwYXRjaENh
bGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9w
cmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKK30KKworc3RhdGlj
IGJvb2wgdHJ5UmVwYXRjaEluKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCB3YXNGb3VuZCwKKyAgICBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoIWJh
c2UtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgaWYgKCFz
bG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1
Y3R1cmUoKTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXRJZ25vcmVkOworICAgIHNp
emVfdCBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywg
YmFzZSwgd2FzRm91bmQgPyBzbG90LnNsb3RCYXNlKCkgOiBKU1ZhbHVlKCksIGlkZW50LCBvZmZz
ZXRJZ25vcmVkKTsKKyAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7CisgICAgaW50IGxpc3RJbmRleDsKKyAgICAK
KyAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwgPSBzdHViSW5mby5ob3RQYXRoQmVn
aW47CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbDsKKyAgICAKKyAgICBpZiAo
c3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpIHsKKyAgICAgICAgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgpOwor
ICAgICAgICBzdHViSW5mby5pbml0SW5MaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMCk7
CisgICAgICAgIHNsb3dDYXNlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldCgKKyAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Ns
b3dDYXNlKTsKKyAgICAgICAgbGlzdEluZGV4ID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19pbl9saXN0KTsKKyAg
ICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5pbkxpc3Quc3RydWN0
dXJlTGlzdDsKKyAgICAgICAgbGlzdEluZGV4ID0gc3R1YkluZm8udS5pbkxpc3QubGlzdFNpemU7
CisgICAgICAgIHNsb3dDYXNlTGFiZWwgPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGxpc3RJbmRleCA9PSBQT0xZTU9SUEhJQ19MSVNU
X0NBQ0hFX1NJWkUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7
CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKKyAgICAKKyAgICB7Cisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5kZmcuYmFzZUdQUik7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxH
UFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdl
dEZyZWVHUFIoKTsKKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVycyBzdHViSml0KHZtKTsK
KyAgICAgICAgCisgICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2g7CisgICAgICAgIGlm
IChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIG5lZWRU
b1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZWVk
VG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChz
dHViSml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSkpOworICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0
dXJlID0gc3RydWN0dXJlOworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBj
aGFpbi0+aGVhZCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSwgKytpdCkgeworICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1
cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7CisgICAgICAgICAgICBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgcHJvdG90eXBlLCBwcm90
b3R5cGUtPnN0cnVjdHVyZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQs
CisgICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgCisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsK
KyNlbHNlCisgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KHdhc0ZvdW5kKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKKyAgICAgICAgCisgICAgICAgIGVtaXRSZXN0
b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3Vj
Y2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKKyAgICAgICAgCisgICAgICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworCisgICAgICAg
IGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1
Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsK
KyAgICAgICAgCisgICAgICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NU
VUIoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiREZHIEluIChmb3Vu
ZCA9ICVzKSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICAgICB3
YXNGb3VuZCA/ICJ5ZXMiIDogIm5vIiwgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0
YSgpLAorICAgICAgICAgICAgICAgIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7
CisgICAgfQorICAgIAorICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5k
ZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBz
dHJ1Y3R1cmUsIHRydWUpOworICAgIHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplKys7CisgICAg
CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uaG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldCgwKSwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAKKyAgICBy
ZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOworfQor
Cit2b2lkIHJlcGF0Y2hJbigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgd2FzRm91bmQsCisgICAgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKHRyeVJl
cGF0Y2hJbihleGVjLCBiYXNlLCBpZGVudCwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkluKTsKK30KKworc3RhdGljIHZvaWQgbGlu
a1Nsb3dGb3IoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgVk0qIHZtLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIGlm
IChraW5kID09IENvZGVGb3JDYWxsKSB7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNh
bGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxs
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNT
RVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
Y2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVhbENv
bnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworfQorCit2b2lkIGxpbmtGb3IoRXhlY1N0
YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVD
b2RlQmxvY2ssIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQ
dHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBBU1NFUlQoIWNhbGxMaW5r
SW5mby5zdHViKTsKKyAgICAKKyAgICAvLyBJZiB5b3UncmUgYmVpbmcgY2FsbC1saW5rZWQgZnJv
bSBhIERGRyBjYWxsZXIgdGhlbiB5b3Ugb2J2aW91c2x5IGRpZG4ndCBnZXQgaW5saW5lZC4KKyAg
ICBpZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAgICBjYWxsZWVDb2RlQmxvY2stPm1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgCisgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2Rl
QmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSBj
YWxsZXJDb2RlQmxvY2stPnZtKCk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKGNhbGxlckNvZGVCbG9jayk7CisgICAgCisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNM
aW5rZWQoKSk7CisgICAgY2FsbExpbmtJbmZvLmNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUo
KS0+dm0oKSwgY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKKyAgICBjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxsZWUu
c2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPnZtKCksIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIGNhbGxlZSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZv
LmhvdFBhdGhPdGhlciwgY29kZVB0cik7CisgICAgCisgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykK
KyAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGV4ZWMtPmNhbGxlckZy
YW1lKCksICZjYWxsTGlua0luZm8pOworICAgIAorICAgIGlmIChraW5kID09IENvZGVGb3JDYWxs
KSB7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEFTU0VSVChraW5kID09
IENvZGVGb3JDb25zdHJ1Y3QpOworICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBj
YWxsTGlua0luZm8sIENvZGVGb3JDb25zdHJ1Y3QpOworfQorCit2b2lkIGxpbmtTbG93Rm9yKEV4
ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKK3sKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMt
PmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9j
ay0+dm0oKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29k
ZUJsb2NrKTsKKyAgICAKKyAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExp
bmtJbmZvLCBraW5kKTsKK30KKwordm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVj
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ss
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCit7CisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1
Yik7CisgICAgCisgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJG
cmFtZSgpLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7
CisgICAgCisgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oY2FsbExp
bmtJbmZvLmNhbGxlZUdQUik7CisgICAgCisgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0sIGNh
bGxlckNvZGVCbG9jayk7CisgICAgCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0
aDsKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAg
ICAgc3R1YkppdC5icmFuY2hUZXN0NjQoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblpl
cm8sIGNhbGxlZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisjZWxzZQorICAgIC8v
IFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwu
CisjZW5kaWYKKyAgICAKKyAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgIHN0dWJKaXQuYnJh
bmNoUHRyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkp
KTsKKyAgICAKKyAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgIHN0dWJKaXQuYnJhbmNoUHRy
KAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJs
ZSgpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxl
KSkpOworICAgIAorICAgIHN0dWJKaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLAorICAg
ICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IHN0dWJKaXQuc3RvcmU2NCgKKyAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCisgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFp
bikpKTsKKyNlbHNlCisgICAgc3R1YkppdC5zdG9yZVB0cigKKyAgICAgICAgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpICog
SlNTdGFjazo6U2NvcGVDaGFpbikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgc3R1YkppdC5zdG9yZTMyKAorICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworI2Vu
ZGlmCisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBzdHViSml0Lm5lYXJD
YWxsKCk7CisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGRvbmUgPSBzdHViSml0Lmp1bXAoKTsK
KyAgICAKKyAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKKyAgICBzdHViSml0Lm1vdmUoY2Fs
bGVlR1BSLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
IHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7CisjZW5kaWYKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIHN0dWJKaXQucmVz
dG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAg
QXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNhbGxlckNvZGVCbG9jayk7Cisg
ICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgwKSk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRo
dW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAKKyAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgQ2xvc3VyZUNhbGxTdHViUm91dGlu
ZSgKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwK
KyAgICAgICAgICAgICgiREZHIGNsb3N1cmUgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50
ICVwLCB0YXJnZXQgJXAgKCVzKSIsCisgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpjYWxsZXJD
b2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KDApLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgY29kZVB0ci5l
eGVjdXRhYmxlQWRkcmVzcygpLCB0b0NTdHJpbmcocG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2Nr
KSkuZGF0YSgpKSksCisgICAgICAgICp2bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgc3RydWN0dXJlLCBleGVjdXRhYmxlLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbikpOwor
ICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwor
ICAgIAorICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKAorICAgICAgICBSZXBhdGNo
QnVmZmVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8u
aG90UGF0aEJlZ2luKSwKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKKyAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExp
bmtJbmZvLCBDb2RlRm9yQ2FsbCk7CisgICAgCisgICAgY2FsbExpbmtJbmZvLnN0dWIgPSBzdHVi
Um91dGluZS5yZWxlYXNlKCk7CisgICAgCisgICAgQVNTRVJUKCFjYWxsZWVDb2RlQmxvY2sgfHwg
Y2FsbGVlQ29kZUJsb2NrLT5pc0luY29taW5nQ2FsbEFscmVhZHlMaW5rZWQoJmNhbGxMaW5rSW5m
bykpOworfQorCit2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVy
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUp
OworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKKyAgICBpZiAoTWFjcm9Bc3NlbWJs
ZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkpIHsKKyAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0
cldpdGhQYXRjaCgKKyAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVC
cmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKSwKKyAg
ICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKTsKKyAgICB9CisgICAgcmVwYXRj
aEJ1ZmZlci5yZXBhdGNoKHN0cnVjdHVyZUxhYmVsLCByZWludGVycHJldF9jYXN0PHZvaWQqPih1
bnVzZWRQb2ludGVyKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICByZXBhdGNoQnVmZmVyLnJl
cGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOworI2Vsc2UK
KyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRh
dGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdM
b2FkT3JTdG9yZSksIDApOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOworI2VuZGlmCisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxU
b1Nsb3dDYXNlKSk7Cit9CisKK3ZvaWQgcmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0
Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBWX0pJVE9wZXJh
dGlvbl9FSkNJIHVub3B0aW1pemVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRp
b25fRUpDST4oTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgVl9KSVRPcGVyYXRpb25fRUpD
SSBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdEJ1aWxkTGlzdCkKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkKKyAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgZWxzZSBpZiAo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlz
dCkKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0T3B0aW1pemU7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKKyAgICAg
ICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0
aW1pemU7CisgICAgfQorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0ciBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFi
ZWxQdHJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1t
VG9DYWxsKTsKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxl
QnJhbmNoUHRyV2l0aFBhdGNoKCkpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXZlcnRKdW1w
UmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgIFJl
cGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3Mo
c3RydWN0dXJlTGFiZWwpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0
dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKSwKKyAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNl
ZFBvaW50ZXIpKTsKKyAgICB9CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0cnVjdHVyZUxh
YmVsLCByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
TG9hZE9yU3RvcmUpLCAwKTsKKyNlbHNlCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIDApOworI2Vu
ZGlmCisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
Lmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayks
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cit9CisKK3ZvaWQgcmVzZXRJbihSZXBhdGNoQnVm
ZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uaG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldCgw
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5n
IGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MTMsOCArNTEzLDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlz
dChFeGVjU3RhdAogI2VuZGlmCiAgICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5lbWl0RXhj
ZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJnN0dWJJbmZv
KSk7CisgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CiAgICAg
ICAgICAgICBoYW5kbGVyQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwogICAgICAgICAgICAgc3R1Ykpp
dC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CiAgICAgICAgIH0gZWxzZSB7CkBAIC01
NDksNyArNTQ4LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAog
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsK
ICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhv
cGVyYXRpb25DYWxsLCBvcGVyYXRpb25GdW5jdGlvbik7Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKTsKKyAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IHN0dWJSb3V0aW5lID0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCShyZXZp
c2lvbiAxNTYyMzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oOjE1
NjIzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBSZXBhdGNoX2gKKyNkZWZpbmUgUmVwYXRjaF9oCisKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDQ2Fs
bEhlbHBlcnMuaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCit2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCBi
dWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCBidWlsZEdldEJ5
SURQcm90b0xpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0Y2hQdXRCeUlE
KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0
eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwordm9pZCBidWlsZFB1dEJ5SWRM
aXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwordm9pZCByZXBhdGNoSW4o
RXhlY1N0YXRlKiwgSlNDZWxsKiwgY29uc3QgSWRlbnRpZmllciYsIGJvb2wgd2FzRm91bmQsIGNv
bnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIGxpbmtGb3IoRXhl
Y1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwordm9pZCBsaW5r
U2xvd0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
KTsKK3ZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVC
bG9jayosIFN0cnVjdHVyZSosIEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
KTsKK3ZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
Owordm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7
Cit2b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZWxzZSAvLyBFTkFCTEUoSklUKQorCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFJlcGF0Y2hCdWZmZXI7
CitzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CisKK2lubGluZSBOT19SRVRVUk5fRFVFX1RPX0NS
QVNIIHZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
IHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQoraW5saW5lIE5PX1JFVFVSTl9EVUVf
VE9fQ1JBU0ggdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJ
bmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CitpbmxpbmUgTk9fUkVUVVJO
IHZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSklUKQorI2VuZGlmIC8vIFJlcGF0Y2hfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCShyZXZp
c2lvbiAxNTYyMzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmg6MTU2MjM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcl9oCisjZGVmaW5lIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgbG93LWxldmVsIHJlZ2lz
dGVyIGFsbG9jYXRvciBmb3IgdXNlIGluIHN0dWJzLgorCitjbGFzcyBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IgeworcHVibGljOgorICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcihjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKKyAgICAgICAgOiBtX3VzZWRSZWdpc3RlcnModXNl
ZFJlZ2lzdGVycykKKyAgICAgICAgLCBtX2RpZFJldXNlUmVnaXN0ZXJzKGZhbHNlKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGxvY2soVCBy
ZWcpIHsgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHJlZyk7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBCYW5rSW5mbz4KKyAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIGFs
bG9jYXRlU2NyYXRjaCgpCisgICAgeworICAgICAgICAvLyBGaXJzdCB0cnkgdG8gYWxsb2NhdGUg
YSByZWdpc3RlciB0aGF0IGlzIHRvdGFsbHkgZnJlZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEJhbmtJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgICAg
ICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIHJlZyA9IEJhbmtJbmZvOjp0b1JlZ2lz
dGVyKGkpOworICAgICAgICAgICAgaWYgKCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVnKQorICAg
ICAgICAgICAgICAgICYmICFtX3VzZWRSZWdpc3RlcnMuZ2V0KHJlZykKKyAgICAgICAgICAgICAg
ICAmJiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgbV9z
Y3JhdGNoUmVnaXN0ZXJzLnNldChyZWcpOworICAgICAgICAgICAgICAgIHJldHVybiByZWc7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFNpbmNlIHRoYXQg
ZmFpbGVkLCB0cnkgdG8gYWxsb2NhdGUgYSByZWdpc3RlciB0aGF0IGlzIG5vdCB5ZXQKKyAgICAg
ICAgLy8gbG9ja2VkIG9yIHVzZWQgZm9yIHNjcmF0Y2guCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBCYW5rSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICAg
ICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSByZWcgPSBCYW5rSW5mbzo6dG9SZWdp
c3RlcihpKTsKKyAgICAgICAgICAgIGlmICghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlZykgJiYg
IW1fc2NyYXRjaFJlZ2lzdGVycy5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgIG1fc2NyYXRj
aFJlZ2lzdGVycy5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICBtX2RpZFJldXNlUmVnaXN0ZXJz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVnOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBXZSBmYWlsZWQuCisgICAgICAgIENSQVNIKCk7
CisgICAgICAgIC8vIE1ha2Ugc29tZSBzaWxseSBjb21waWxlcnMgaGFwcHkuCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlPigtMSk7Cisg
ICAgfQorICAgIAorICAgIEdQUlJlZyBhbGxvY2F0ZVNjcmF0Y2hHUFIoKSB7IHJldHVybiBhbGxv
Y2F0ZVNjcmF0Y2g8R1BSSW5mbz4oKTsgfQorICAgIEZQUlJlZyBhbGxvY2F0ZVNjcmF0Y2hGUFIo
KSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8RlBSSW5mbz4oKTsgfQorICAgIAorICAgIGJvb2wg
ZGlkUmV1c2VSZWdpc3RlcnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGlkUmV1
c2VSZWdpc3RlcnM7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJlc2VydmVSZXVzZWRSZWdpc3Rl
cnNCeVB1c2hpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCkKKyAgICB7CisgICAgICAgIGlmICghbV9k
aWRSZXVzZVJlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytp
KSB7CisgICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkg
JiYgbV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKKyAgICAgICAgICAgICAgICBq
aXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91Ymxl
KEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgICAg
IGlmIChtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3Rl
cnMuZ2V0R1BSQnlJbmRleChpKSkKKyAgICAgICAgICAgICAgICBqaXQucHVzaChHUFJJbmZvOjp0
b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHJlc3RvcmVS
ZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCkKKyAgICB7CisgICAg
ICAgIGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
OyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5k
ZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCisgICAgICAgICAgICAg
ICAgaml0LnBvcChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAg
ICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpICYmIG1fdXNl
ZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRE
b3VibGUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBGUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgZGVzaXJl
ZFNjcmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLm51bWJl
ck9mU2V0UmVnaXN0ZXJzKCkgKiBzaXplb2YoSlNWYWx1ZSk7IH0KKyAgICAKKyAgICB2b2lkIHBy
ZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxlciYgaml0LCBT
Y3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRH
UFJSZWcpCisgICAgeworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAg
ICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpIHsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIo
aSksIHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZl
cigpKSArIChjb3VudCsrKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQ
UkluZm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRj
aEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSk7CisjZW5kaWYKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcgJiYgIW1fbG9j
a2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXRH
UFJCeUluZGV4KGkpKQorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIg
IT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJz
LmdldEZQUkJ5SW5kZXgoaSkpIHsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hC
dWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY291
bnQgKiBzaXplb2YoSlNWYWx1ZSkgPT0gZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkpOworICAg
ICAgICAKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2Ny
YXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0
LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PHNpemVf
dD4oY291bnQgKiBzaXplb2YoSlNWYWx1ZSkpKSwgc2NyYXRjaEdQUik7CisgICAgfQorICAgIAor
ICAgIHZvaWQgcmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2Vt
YmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQ
UiA9IEludmFsaWRHUFJSZWcpCisgICAgeworICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZh
bGlkR1BSUmVnKSB7CisgICAgICAgICAgICAvLyBGaW5kIGEgc2NyYXRjaCByZWdpc3Rlci4KKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5k
ZXgoaSkgfHwgbV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZv
Ojp0b1JlZ2lzdGVyKGkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQ
UlJlZyk7CisgICAgICAgIAorICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIHNj
cmF0Y2hHUFIpOworCisgICAgICAgIC8vIFJlc3RvcmUgZG91YmxlIHJlZ2lzdGVycyBmaXJzdC4K
KyAgICAgICAgdW5zaWduZWQgY291bnQgPSBtX3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRHUFJz
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
OyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgo
aSkpIHsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZm
ZXIoKSkgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQubG9h
ZERvdWJsZShzY3JhdGNoR1BSLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY291bnQgPSAwOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAg
ICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKSB7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgICAgICAgICBqaXQubG9hZDY0KHN0YXRpY19jYXN0PEVuY29kZWRK
U1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSwgR1BSSW5m
bzo6dG9SZWdpc3RlcihpKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoc3Rh
dGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsg
KGNvdW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNlbmRpZgorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBSZWdpc3RlclNldCBtX3Vz
ZWRSZWdpc3RlcnM7CisgICAgUmVnaXN0ZXJTZXQgbV9sb2NrZWRSZWdpc3RlcnM7CisgICAgUmVn
aXN0ZXJTZXQgbV9zY3JhdGNoUmVnaXN0ZXJzOworICAgIGJvb2wgbV9kaWRSZXVzZVJlZ2lzdGVy
czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKwor
I2VuZGlmIC8vIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE1NjQ0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgog
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2lu
Y2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oIgpAQCAtMzgsNyArMzksNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotc3RhdGljIEpTSW50ZXJmYWNlSklUOjpDYWxsIGdlbmVyYXRlU2xvd0Nhc2VGb3IoVk0qIHZt
LCBKU0ludGVyZmFjZUpJVCYgaml0KQorc3RhdGljIEpTSW50ZXJmYWNlSklUOjpDYWxsIG9sZFN0
eWxlR2VuZXJhdGVTbG93Q2FzZUZvcihWTSogdm0sIEpTSW50ZXJmYWNlSklUJiBqaXQpCiB7CiAg
ICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1l
LCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwogICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWluLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIsIEpTSW50
ZXJmYWNlSklUOjpyZWdUMik7CkBAIC01OSw3ICs2MCw3IEBAIHN0YXRpYyBKU0ludGVyZmFjZUpJ
VDo6Q2FsbCBnZW5lcmF0ZVNsb3cKICAgICByZXR1cm4gY2FsbE5vdEpTRnVuY3Rpb247CiB9CiAK
LXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvckdlbmVyYXRvcihWTSogdm0sIEZ1
bmN0aW9uUHRyIGxhenlMaW5rLCBGdW5jdGlvblB0ciBub3RKU0Z1bmN0aW9uLCBjb25zdCBjaGFy
KiBuYW1lKQorc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZUxpbmtGb3JHZW5l
cmF0b3IoVk0qIHZtLCBGdW5jdGlvblB0ciBsYXp5TGluaywgRnVuY3Rpb25QdHIgbm90SlNGdW5j
dGlvbiwgY29uc3QgY2hhciogbmFtZSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOwog
ICAgIApAQCAtODgsNyArODksNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtG
b3JHZW5lCiAgICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKICAgICAKICAgICBz
bG93Q2FzZS5saW5rKCZqaXQpOwotICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1
bmN0aW9uID0gZ2VuZXJhdGVTbG93Q2FzZUZvcih2bSwgaml0KTsKKyAgICBKU0ludGVyZmFjZUpJ
VDo6Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IG9sZFN0eWxlR2VuZXJhdGVTbG93Q2FzZUZvcih2
bSwgaml0KTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxMYXp5TGluaywgbGF6eUxp
bmspOwpAQCAtOTcsMjIgKzk4LDIyIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlu
a0ZvckdlbmUKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJsaW5rICVz
IHRyYW1wb2xpbmUiLCBuYW1lKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2Fs
bEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVMaW5rQ2Fs
bEdlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1
bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0NhbGwpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9O
b3RKU0Z1bmN0aW9uKSwgImNhbGwiKTsKKyAgICByZXR1cm4gb2xkU3R5bGVMaW5rRm9yR2VuZXJh
dG9yKHZtLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDYWxsKSwgRnVuY3Rpb25QdHIoY3Rp
X29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjYWxsIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBsaW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBvbGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBs
aW5rRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDb25zdHJ1Y3Qp
LCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KSwgImNvbnN0cnVj
dCIpOworICAgIHJldHVybiBvbGRTdHlsZUxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRy
KGN0aV92bV9sYXp5TGlua0NvbnN0cnVjdCksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rf
Tm90SlNDb25zdHJ1Y3QpLCAiY29uc3RydWN0Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG9sZFN0eWxlTGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4g
bGlua0ZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2xvc3VyZUNh
bGwpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNsb3N1cmUgY2Fs
bCIpOworICAgIHJldHVybiBvbGRTdHlsZUxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRy
KGN0aV92bV9sYXp5TGlua0Nsb3N1cmVDYWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90
SlNGdW5jdGlvbiksICJjbG9zdXJlIGNhbGwiKTsKIH0KIAotc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiB2aXJ0dWFsRm9yR2VuZXJhdG9yKFZNKiB2bSwgRnVuY3Rpb25QdHIgY29tcGlsZSwg
RnVuY3Rpb25QdHIgbm90SlNGdW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQorc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZVZp
cnR1YWxGb3JHZW5lcmF0b3IoVk0qIHZtLCBGdW5jdGlvblB0ciBjb21waWxlLCBGdW5jdGlvblB0
ciBub3RKU0Z1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKICAgICAKQEAgLTE0OCw3ICsx
NDksNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JHCiAgICAgaml0
Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKICAgICAKICAgICBzbG93Q2FzZS5saW5rKCZq
aXQpOwotICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gZ2VuZXJh
dGVTbG93Q2FzZUZvcih2bSwgaml0KTsKKyAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90
SlNGdW5jdGlvbiA9IG9sZFN0eWxlR2VuZXJhdGVTbG93Q2FzZUZvcih2bSwgaml0KTsKICAgICAK
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxDb21waWxlLCBjb21waWxlKTsKQEAgLTE1NywxNCAr
MTU4LDI0NiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JHCiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgidmlydHVhbCAlcyB0cmFtcG9saW5l
IiwgbmFtZSkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxHZW5lcmF0
b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9sZFN0eWxlVmlydHVhbENhbGxHZW5l
cmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiB2aXJ0dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5j
dGlvblB0cihjdGlfb3BfY2FsbF9qaXRDb21waWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxf
Tm90SlNGdW5jdGlvbiksICJjYWxsIiwgQ29kZUZvckNhbGwpOworICAgIHJldHVybiBvbGRTdHls
ZVZpcnR1YWxGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2ppdENvbXBp
bGUpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNhbGwiLCBDb2Rl
Rm9yQ2FsbCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0R2Vu
ZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZVZpcnR1YWxDb25z
dHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiB2aXJ0dWFsRm9yR2VuZXJhdG9y
KHZtLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpLCBGdW5jdGlvblB0
cihjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KSwgImNvbnN0cnVjdCIsIENvZGVGb3JD
b25zdHJ1Y3QpOworICAgIHJldHVybiBvbGRTdHlsZVZpcnR1YWxGb3JHZW5lcmF0b3Iodm0sIEZ1
bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGlsZSksIEZ1bmN0aW9uUHRyKGN0aV9v
cF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QpLCAiY29uc3RydWN0IiwgQ29kZUZvckNvbnN0cnVj
dCk7Cit9CisKK2lubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMm
IGppdCwgR1BSUmVnIHBvaW50ZXJHUFIpCit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEND
YWxsSGVscGVyczo6SnVtcCBpc05vblplcm8gPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBl
cnM6Ok5vblplcm8sIHBvaW50ZXJHUFIpOworICAgIGppdC5icmVha3BvaW50KCk7CisgICAgaXNO
b25aZXJvLmxpbmsoJmppdCk7CisgICAgaml0LnB1c2gocG9pbnRlckdQUik7CisgICAgaml0Lmxv
YWQ4KHBvaW50ZXJHUFIsIHBvaW50ZXJHUFIpOworICAgIGppdC5wb3AocG9pbnRlckdQUik7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShqaXQpOworICAgIFVOVVNFRF9QQVJBTShwb2ludGVyR1BS
KTsKKyNlbmRpZgorfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZt
KTsKKyAgICAKKyAgICAvLyBXZSB3aWxsIGp1bXAgdG8gaGVyZSBpZiB0aGUgSklUIGNvZGUgdGhp
bmtzIGl0J3MgbWFraW5nIGEgY2FsbCwgYnV0IHRoZQorICAgIC8vIGxpbmtpbmcgaGVscGVyIChD
KysgY29kZSkgZGVjaWRlZCB0byB0aHJvdyBhbiBleGNlcHRpb24gaW5zdGVhZC4gV2Ugd2lsbAor
ICAgIC8vIGhhdmUgc2F2ZWQgdGhlIGNhbGxSZXR1cm5JbmRleCBpbiB0aGUgZmlyc3QgYXJndW1l
bnRzIG9mIEpJVFN0YWNrRnJhbWUuCisgICAgLy8gTm90ZSB0aGF0IHRoZSByZXR1cm4gYWRkcmVz
cyB3aWxsIGJlIG9uIHRoZSBzdGFjayBhdCB0aGlzIHBvaW50LCBzbyB3ZQorICAgIC8vIG5lZWQg
dG8gcmVtb3ZlIGl0IGFuZCBkcm9wIGl0IG9uIHRoZSBmbG9vciwgc2luY2Ugd2UgZG9uJ3QgY2Fy
ZSBhYm91dCBpdC4KKyAgICAvLyBGaW5hbGx5IG5vdGUgdGhhdCB0aGUgY2FsbCBmcmFtZSByZWdp
c3RlciBwb2ludHMgYXQgdGhlIGNhbGxlZSBmcmFtZSwgc28KKyAgICAvLyB3ZSBuZWVkIHRvIHBv
cCBpdC4KKyAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5v
blByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAq
IEpTU3RhY2s6OkNhbGxlckZyYW1lKSwKKyAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0LnBlZWs2NChHUFJJbmZvOjpub25QcmVz
ZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZWxzZQorICAg
IGppdC5wZWVrKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFN
RV9BUkdTX0lOREVYKTsKKyNlbmRpZgorICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihsb29rdXBFeGNlcHRp
b25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRh
dGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGppdC5jYWxsKEdQUkluZm86Om5v
bkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSMik7CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAg
ICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lE
KTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJUaHJvdyBleGNlcHRp
b24gZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKK30KKworc3RhdGljIHZvaWQgc2xvd1Bh
dGhGb3IoCisgICAgQ0NhbGxIZWxwZXJzJiBqaXQsIFZNKiB2bSwgUF9KSVRPcGVyYXRpb25fRSBz
bG93UGF0aEZ1bmN0aW9uKQoreworICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNh
bGwoR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwg
R1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgaml0LnN0b3JlUHRyKAorICAgICAgICBHUFJJbmZv
Ojpub25BcmdHUFIyLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAg
ICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQykpOworICAgIGpp
dC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUp
OworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0LnBva2U2NChHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZWxzZQorICAgIGpp
dC5wb2tlKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9B
UkdTX0lOREVYKTsKKyNlbmRpZgorICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwor
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBv
aW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaml0LmNhbGwo
R1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgCisgICAgLy8gVGhpcyBzbG93IGNhbGwgd2lsbCBy
ZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gMSkgRXhj
ZXB0aW9uIHRocm93aW5nIHRodW5rLgorICAgIC8vIDIpIEhvc3QgY2FsbCByZXR1cm4gdmFsdWUg
cmV0dXJuZXIgdGhpbmd5LgorICAgIC8vIDMpIFRoZSBmdW5jdGlvbiB0byBjYWxsLgorICAgIGpp
dC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQyksCisgICAgICAgIEdQ
UkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0LnN0b3JlUHRyKAorICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCksCisgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3Rh
Y2s6OlJldHVyblBDKSk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6
bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NC
ZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBlbWl0
UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgaml0
Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworfQorCitzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtGb3JUaHVua0dlbmVyYXRvcigKKyAgICBWTSogdm0sIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKK3sKKyAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhl
IHN0YWNrIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCisgICAgLy8gc2F2
ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UgbWFrZSBhIEMr
KyBmdW5jdGlvbiBjYWxsCisgICAgLy8gdG8gcGVyZm9ybSBsaW5raW5nIGFuZCBsYXp5IGNvbXBp
bGF0aW9uIGlmIG5lY2Vzc2FyeS4gV2UgZXhwZWN0IHRoZSBjYWxsZWUKKyAgICAvLyB0byBiZSBp
biBub25BcmdHUFIwL25vbkFyZ0dQUjEgKHBheWxvYWQvdGFnKSwgdGhlIGNhbGwgZnJhbWUgdG8g
aGF2ZSBhbHJlYWR5CisgICAgLy8gYmVlbiBhZGp1c3RlZCwgbm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSIGhvbGRzIHRoZSBleGNlcHRpb24gaGFuZGxlciBpbmRleCwKKyAgICAvLyBhbmQgYWxsIG90
aGVyIHJlZ2lzdGVycyB0byBiZSBhdmFpbGFibGUgZm9yIHVzZS4gV2UgdXNlIEpJVFN0YWNrRnJh
bWU6OmFyZ3MKKyAgICAvLyB0byBzYXZlIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhY3Jvc3MgY2Fs
bHMuCisgICAgCisgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgCisgICAgc2xvd1BhdGhG
b3Ioaml0LCB2bSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxsIDogb3Bl
cmF0aW9uTGlua0NvbnN0cnVjdCk7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCisg
ICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkxpbmsgJXMgc2xvdyBwYXRoIHRodW5rIiwg
a2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7Cit9CisKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICBy
ZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCk7Cit9CisKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorewor
ICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QpOwor
fQorCisvLyBGb3IgY2xvc3VyZSBvcHRpbWl6YXRpb25zLCB3ZSBvbmx5IGluY2x1ZGUgY2FsbHMs
IHNpbmNlIGlmIHlvdSdyZSB1c2luZyBjbG9zdXJlcyBmb3IKKy8vIG9iamVjdCBjb25zdHJ1Y3Rp
b24gdGhlbiB5b3UncmUgZ29pbmcgdG8gbG9zZSBiaWcgdGltZSBhbnl3YXkuCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAg
IENDYWxsSGVscGVycyBqaXQodm0pOworICAgIAorICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9w
ZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbCk7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsICgiTGluayBjbG9zdXJlIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOworfQor
CitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigK
KyAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICAvLyBUaGUg
cmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrLCBvciBpbiB0aGUgbGluayByZWdpc3Rlci4g
V2Ugd2lsbCBoZW5jZQorICAgIC8vIGp1bXAgdG8gdGhlIGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0
dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UKKyAgICAvLyBtYWtlIGEgQysr
IGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGFwcHJvcHJpYXRlIEpJVCBvcGVyYXRpb24uCisKKyAgICBD
Q2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNs
b3dDYXNlOworCisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZlIGEgc3RvcnkgZm9yIGVsaW1p
bmF0aW5nIHRoZXNlIGNoZWNrcy4gSW4gbWFueSBjYXNlcywKKyAgICAvLyB0aGUgREZHIGtub3dz
IHRoYXQgdGhlIHZhbHVlIGlzIGRlZmluaXRlbHkgYSBjZWxsLCBvciBkZWZpbml0ZWx5IGEgZnVu
Y3Rpb24uCisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzbG93Q2FzZS5hcHBlbmQoCisg
ICAgICAgIGppdC5icmFuY2hUZXN0NjQoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblpl
cm8sIEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworI2Vs
c2UKKyAgICBzbG93Q2FzZS5hcHBlbmQoCisgICAgICAgIGppdC5icmFuY2gzMigKKyAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86Om5vbkFyZ0dQUjEsCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworI2Vu
ZGlmCisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFy
Z0dQUjAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIyKTsK
KyAgICBzbG93Q2FzZS5hcHBlbmQoCisgICAgICAgIGppdC5icmFuY2hQdHIoCisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAor
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb246OmluZm8o
KSkpKTsKKyAgICAKKyAgICAvLyBOb3cgd2Uga25vdyB3ZSBoYXZlIGEgSlNGdW5jdGlvbi4KKyAg
ICAKKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKKyAgICAg
ICAgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAgICBq
aXQuYnJhbmNoMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIEdQUkluZm86Om5v
bkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3Ioa2luZCkp
LAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAKKyAg
ICAvLyBOb3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSBDb2RlQmxvY2ssIGFuZCB3ZSdyZSBjb21t
aXR0ZWQgdG8gbWFraW5nIGEgZmFzdAorICAgIC8vIGNhbGwuCisgICAgCisgICAgaml0LmxvYWRQ
dHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksCisgICAgICAgIEdQUkluZm86Om5vbkFy
Z0dQUjEpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0LnN0b3JlNjQoCisgICAgICAgIEdQ
UkluZm86Om5vbkFyZ0dQUjEsCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAg
ICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsK
KyNlbHNlCisgICAgaml0LnN0b3JlUHRyKAorICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIxLAor
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWluICsKKyAgICAgICAgICAgIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICBq
aXQuc3RvcmUzMigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4gKworICAgICAgICAg
ICAgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7
CisjZW5kaWYKKyAgICAKKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENv
ZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKSksCisgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAKKyAgICAvLyBNYWtlIGEgdGFpbCBjYWxsLiBUaGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gSklU
IGNvZGUuCisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDApOwor
ICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QwKTsKKworICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7
CisgICAgCisgICAgLy8gSGVyZSB3ZSBkb24ndCBrbm93IGFueXRoaW5nLCBzbyByZXZlcnQgdG8g
dGhlIGZ1bGwgc2xvdyBwYXRoLgorICAgIAorICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQg
PT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25WaXJ0dWFsQ2FsbCA6IG9wZXJhdGlvblZpcnR1YWxD
b25zdHJ1Y3QpOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBH
TE9CQUxfVEhVTktfSUQpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAorICAgICAgICBwYXRj
aEJ1ZmZlciwKKyAgICAgICAgKCJWaXJ0dWFsICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0g
Q29kZUZvckNhbGwgPyAiY2FsbCIgOiAiY29uc3RydWN0IikpOworfQorCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0dXJu
IHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwpOworfQorCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sK
KyAgICByZXR1cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0
KTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5l
cmF0b3IoVk0qIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5oCShyZXZpc2lvbiAxNTY0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMjIgQEAKICNp
ZiBFTkFCTEUoSklUKQogbmFtZXNwYWNlIEpTQyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBs
aW5rQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1
Y3RHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxH
ZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbEdlbmVyYXRv
cihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3Io
Vk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZUxpbmtDYWxsR2VuZXJhdG9yKFZN
Kik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9y
KFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVMaW5rQ2xvc3VyZUNhbGxHZW5l
cmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZVZpcnR1YWxDYWxsR2Vu
ZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVWaXJ0dWFsQ29uc3Ry
dWN0R2VuZXJhdG9yKFZNKik7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qKTsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5r
Q29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxp
bmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKik7CisKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBzdHJpbmdMZW5ndGhUcmFtcG9saW5lR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSopOwo=
</data>
<flag name="review"
          id="234916"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="234957"
          type_id="3"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212726</attachid>
            <date>2013-09-26 11:04:44 -0700</date>
            <delta_ts>2013-09-26 11:35:46 -0700</delta_ts>
            <desc>patch 6: svn up&apos;ed to see if that fixes the merge issue on the EWS bots</desc>
            <filename>bug-121749.patch</filename>
            <type>text/plain</type>
            <size>481881</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2NDc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxMy0wOS0yNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
TW92ZSBERkcgaW5saW5lIGNhY2hpbmcgbG9naWMgaW50byBqaXQvLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzQ5LgorCisgICAgICAgIFJldmll
d2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFJlbGFuZGluZyBodHRwOi8vdHJhYy53
ZWJraXQub3JnL2NoYW5nZXNldC8xNTYyMzUgYWZ0ZXIgcmViYXNpbmcgdG8gbGF0ZXN0CisgICAg
ICAgIHJldmlzaW9uIGFuZCBmaXhpbmcgYnVpbGQgYnJlYWthZ2VzIG9uIFdpbmRvd3MuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVzZXRTdHViSW50ZXJu
YWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICog
ZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Q2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxBcnJheUFsbG9j
YXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5oOgorICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRp
b25QdXRCeVZhbEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAg
ICAgICAoSlNDOjpERkc6Om9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUpOgor
ICAgICAgICAoSlNDOjpERkc6Om9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRG
b3JUeXBlKToKKyAgICAgICAgKiBkZmcvREZHUmVnaXN0ZXJTZXQuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1JlcGF0
Y2guaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhv
bGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1Bh
dGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
Q29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlND
OjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRC
b3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3Mu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuaDoKKyAgICAgICAgKiBmdGwvRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3Qp
OgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuaDoKKyAgICAgICAgKiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6d3JpdGVCYXJy
aWVyKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9y
KToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rU2xvd0NhbGwpOgorICAgICAgICAqIGppdC9KSVRD
YWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0
aW9uV3JhcHBlcnMuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25XcmFwcGVycy5oLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcC4KKyAg
ICAgICAgKEpTQzo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpOgorICAgICAg
ICAqIGppdC9KSVRPcGVyYXRpb25zLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oLgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmguCisgICAgICAg
ICogaml0L1JlcGF0Y2guY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwLgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAg
ICAgKiBqaXQvUmVwYXRjaC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guaC4KKyAgICAgICAgKiBqaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmguCisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6
Om9sZFN0eWxlR2VuZXJhdGVTbG93Q2FzZUZvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlTGlu
a0ZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlTGlua0NhbGxHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpvbGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpvbGRTdHlsZUxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
Om9sZFN0eWxlVmlydHVhbEZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlVmly
dHVhbENhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpvbGRTdHlsZVZpcnR1YWxDb25zdHJ1
Y3RHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjplbWl0UG9pbnRlclZhbGlkYXRpb24pOgorICAg
ICAgICAoSlNDOjp0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpzbG93UGF0aEZvcik6CisgICAgICAgIChKU0M6OmxpbmtGb3JUaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OmxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2xv
c3VyZUNhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxGb3JUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjp2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGpp
dC9UaHVua0dlbmVyYXRvcnMuaDoKKwogMjAxMy0wOS0yNiAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYWtHQ01hcCBzaG91bGQgbm90IGluaGVyaXQg
ZnJvbSBIYXNoTWFwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAxNTY0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNF
UwogICAgIGRmZy9ERkdQbGFuLmNwcAogICAgIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2UuY3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAotICAgIGRm
Zy9ERkdSZXBhdGNoLmNwcAogICAgIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCiAgICAg
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcApAQCAtMjI1LDYgKzIyNCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAg
aml0L0pJVEV4Y2VwdGlvbnMuY3BwCiAgICAgaml0L0pJVE9wY29kZXMuY3BwCiAgICAgaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAKKyAgICBqaXQvSklUT3BlcmF0aW9ucy5jcHAKICAgICBqaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCiAgICAgaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCiAg
ICAgaml0L0pJVFN0dWJSb3V0aW5lLmNwcApAQCAtMjMyLDYgKzIzMiw3IEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9TT1VSQ0VTCiAgICAgaml0L0pJVFRodW5rcy5jcHAKICAgICBqaXQvSklUVG9ERkdE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCiAgICAgaml0L0p1bXBSZXBsYWNlbWVudFdh
dGNocG9pbnQuY3BwCisgICAgaml0L1JlcGF0Y2guY3BwCiAgICAgaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAKIAogICAgIHBhcnNlci9MZXhlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTY0NzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMzM5LDEzICsz
MzksOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyQmFuay5oIFwKLQlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlZ2lzdGVyU2V0LmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVwYXRjaC5jcHAgXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVy
YXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaCBcCi0J
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBcCkBA
IC02MzIsNiArNjI4LDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFw
cGVycy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YkNhbGwuaCBcCkBAIC02NTQsNiArNjUzLDkgQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFj
ZUpJVC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0p1bXBSZXBsYWNlbWVudFdhdGNo
cG9pbnQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0p1bXBSZXBsYWNlbWVudFdh
dGNocG9pbnQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9yLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDE1NjQ3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBA
IC0xODMsNyArMTgzLDYgQEAgU09VUkNFUyArPSBcCiAgICAgZGZnL0RGR1BsYW4uY3BwIFwKICAg
ICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIFwKICAgICBkZmcvREZHUHJl
ZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCBcCi0gICAgZGZnL0RGR1JlcGF0Y2guY3BwIFwKICAg
ICBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBcCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcCBcCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIFwKQEAgLTIyMiw2
ICsyMjEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBqaXQvSklURXhjZXB0aW9ucy5jcHAgXAogICAg
IGppdC9KSVRPcGNvZGVzLmNwcCBcCiAgICAgaml0L0pJVE9wY29kZXMzMl82NC5jcHAgXAorICAg
IGppdC9KSVRPcGVyYXRpb25zLmNwcCBcCiAgICAgaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBc
CiAgICAgaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIFwKICAgICBqaXQvSklUU3R1YlJv
dXRpbmUuY3BwIFwKQEAgLTIyOSw2ICsyMjksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBqaXQvSklU
VGh1bmtzLmNwcCBcCiAgICAgaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmNwcCBcCiAgICAgaml0L0p1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwIFwKKyAgICBqaXQv
UmVwYXRjaC5jcHAgXAogICAgIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwIFwKICAgICBsbGludC9M
TEludENMb29wLmNwcCBcCiAgICAgbGxpbnQvTExJbnREYXRhLmNwcCBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE1NjQ3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM3OCw2ICszNzgsNyBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caml0XEpJVEV4Y2VwdGlvbnMuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGppdFxKSVRPcGNvZGVzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcSklUT3Bjb2RlczMyXzY0LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcSklUT3BlcmF0aW9ucy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caml0XEpJVFByb3BlcnR5QWNjZXNzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caml0XEpJVFN0dWJSb3V0aW5lLmNwcCIgLz4NCkBAIC0zODUsNiArMzg2LDcg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRUaHVua3MuY3BwIiAvPg0KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEp1bXBSZXBs
YWNlbWVudFdhdGNocG9pbnQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxSZXBhdGNoLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcVGh1bmtH
ZW5lcmF0b3JzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsbGludFxMTElu
dENMb29wLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsbGludFxMTEludERh
dGEuY3BwIiAvPg0KQEAgLTc2OSw2ICs3NzEsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caml0XEpJVERpc2Fzc2VtYmxlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGppdFxKSVRFeGNlcHRpb25zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0
XEpJVElubGluZXMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUT3Bl
cmF0aW9uV3JhcHBlcnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklU
T3BlcmF0aW9ucy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRTdHVi
Q2FsbC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRTdHViUm91dGlu
ZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRTdHVicy5oIiAvPg0K
QEAgLTc4MCw2ICs3ODQsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFdy
aXRlQmFycmllci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKU0ludGVy
ZmFjZUpJVC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKdW1wUmVwbGFj
ZW1lbnRXYXRjaHBvaW50LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJl
Z2lzdGVyU2V0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJlcGF0Y2gu
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFNwZWNpYWxpemVk
VGh1bmtKSVQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcVGh1bmtHZW5l
cmF0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcVGh1bmtHZW5lcmF0
b3JzLmgiIC8+DQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1
NjQ3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDEzIEBACiAJCTBG
MjRFNTQ0MTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BS
SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGMjRFNTU1MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTMxN0YwQjcx
QzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgKi87IH07CiAJCTBGMjRFNTU2MTdG
MEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTU0MTdGMEI3MUMwMEFCQjIxNyAvKiBJ
bmxpbmVDYWxsRnJhbWVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0
NTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgKi87IH07CisJCTBGMjRFNTRE
MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0NjE3RUUyNzQ5MDBBQkIyMTcgLyogSklU
T3BlcmF0aW9ucy5oICovOyB9OworCQkwRjI0RTU0RTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3Bl
cmF0aW9uV3JhcHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMjRFNTQ3MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25XcmFwcGVycy5o
ICovOyB9OworCQkwRjI0RTU0RjE3RUUyNzQ5MDBBQkIyMTcgLyogUmVnaXN0ZXJTZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ4MTdFRTI3
NDkwMEFCQjIxNyAvKiBSZWdpc3RlclNldC5oICovOyB9OworCQkwRjI0RTU1MDE3RUUyNzQ5MDBB
QkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjI0RTU0OTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgKi87IH07
CisJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcg
LyogUmVwYXRjaC5oICovOyB9OworCQkwRjI0RTU1MjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmggKi87IH07CiAJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJy
YXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxB
cnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQjY2QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdD
SW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50
ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3
QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI2Niw4ICsyNzMsNiBA
QAogCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZE
MzMxNUFFMjUzNTAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc2NkQzODE1QUU0
QTFDMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQzNjE1QUU0QTFB
MDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgKi87IH07CiAJ
CTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2
NkQzNzE1QUU0QTFBMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNzY2
RDQ0MTVCMkEzQzAwMDhGMzYzRSAvKiBERkdSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZENDIxNUIyQTNCRDAwOEYzNjNFIC8q
IERGR1JlZ2lzdGVyU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3NjZENDUxNUIzNzAxRDAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAyRkYyODAwNzhF
QjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87IH07CiAJCTBGN0IyOTRCMTRDM0NEMkYwMDdD
M0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRp
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyog
REZHQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTczMSw4ICs3MzYsNiBAQAogCQk4NkFFNjRBQTEzNUU1RTFDMDA5NjMwMTIgLyogU0g0
QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NkFFNjRBNzEzNUU1RTFDMDA5NjMwMTIgLyogU0g0QXNzZW1ibGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZCNTgyNjcxNEQyNzk2QzAw
QTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5j
cHAgKi87IH07CiAJCTg2QjU4MjY5MTREMjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDNDRUYy
MTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLzsgfTsKLQkJODZCQjA5QzAx
MzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCQjA5QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1Jl
cGF0Y2guY3BwICovOyB9OwotCQk4NkJCMDlDMTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRj
aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCQjA5
QkYxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkMzNkVFQTBFRTEyODlEMDBCM0RGNTkgLyog
TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2QzM2RUU5MEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2QzU2OEUwMTFB
MjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkM1NjhERDExQTIxM0VFMDAwN0Y3RjAgLyog
TWFjcm9Bc3NlbWJsZXJBUk0uY3BwICovOyB9OwogCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAg
LyogTWFjcm9Bc3NlbWJsZXJNSVBTLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NkM1NjhERTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJN
SVBTLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTEzMjIsNiArMTMyNSwxMyBAQAogCQkwRjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5m
by5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHUFJJbmZvLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTUzMTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVD
YWxsRnJhbWVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5s
aW5lQ2FsbEZyYW1lU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1
NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVDYWxsRnJhbWVTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyNEU1NDUxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUT3BlcmF0aW9ucy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjRFNTQ2MTdFRTI3NDkwMEFCQjIx
NyAvKiBKSVRPcGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJ
VE9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNEU1NDcxN0VF
Mjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbldyYXBwZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVE9wZXJhdGlvbldyYXBwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMjRFNTQ4MTdFRTI3NDkwMEFCQjIxNyAvKiBSZWdpc3RlclNldC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdpc3RlclNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjI0RTU0OTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXBhdGNoLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNEU1NEExN0VFMjc0OTAwQUJCMjE3IC8qIFJl
cGF0Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2FsbEFy
cmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdDYWxsQXJyYXlB
bGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYyQjY2QTkxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NjcsOCArMTQ3Nyw2IEBACiAJCTBGNzY2
RDMzMTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMzYxNUFFNEExQTAwOEYzNjNFIC8q
IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2RDM3MTVBRTRBMUEwMDhGMzYzRSAvKiBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMEY3NjZENDIxNUIyQTNCRDAwOEYzNjNFIC8qIERGR1JlZ2lzdGVy
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1JlZ2lzdGVyU2V0Lmg7
IHBhdGggPSBkZmcvREZHUmVnaXN0ZXJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEY3NjZENDUxNUIzNzAxRDAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNh
bXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGlu
Z0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYy
ODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTkyNyw4ICsxOTM1LDYgQEAKIAkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2
IC8qIENvZGVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENvZGVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCNTgyMkYx
NEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvZGVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVyZWRNTWFwQXJyYXkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGllcmVkTU1hcEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTg2QkIwOUJFMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1JlcGF0Y2guY3BwOyBwYXRo
ID0gZGZnL0RGR1JlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkJC
MDlCRjEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdSZXBhdGNoLmg7IHBhdGggPSBkZmcvREZHUmVwYXRjaC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkJGNjQyQTE0OERCMkI1MDA0REUzNkEgLyogSW50
cmluc2ljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludHJpbnNpYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkMzNkVFOTBFRTEyODlEMDBCM0RGNTkgLyog
TWFjcm9Bc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9B
c3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDNTY4REQxMUEyMTNF
RTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyQVJNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTI3MTEsMTYgKzI3MTcsMTYgQEAKIAkJCQkwRjI0RTUzQjE3RUE5RjU5MDBB
QkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKIAkJCQkwRjI0RTUzQzE3RUE5RjU5MDBB
QkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmggKi8sCiAJCQkJMEYyNEU1M0QxN0VBOUY1OTAwQUJC
MjE3IC8qIENDYWxsSGVscGVycy5oICovLAotCQkJCTBGMjRFNTNFMTdFQTlGNTkwMEFCQjIxNyAv
KiBGUFJJbmZvLmggKi8sCi0JCQkJMEYyNEU1M0YxN0VBOUY1OTAwQUJCMjE3IC8qIEdQUkluZm8u
aCAqLywKIAkJCQkwRjczRDdBQjE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91
dGluZS5jcHAgKi8sCiAJCQkJMEY3M0Q3QUMxNjVBMTQyQTAwQUNBQjcxIC8qIENsb3N1cmVDYWxs
U3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFj
dEpJVENvZGVNYXAuaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4
ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyog
RXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKKwkJCQkwRjI0RTUzRTE3RUE5
RjU5MDBBQkIyMTcgLyogRlBSSW5mby5oICovLAogCQkJCTBGNzY2RDJEMTVBOERDREQwMDhGMzYz
RSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovLAogCQkJCTBGNzY2RDJFMTVBOERDREQw
MDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCAqLywKKwkJCQkwRjI0RTUzRjE3RUE5
RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oICovLAogCQkJCTBGNDY4MEQwMTRCQkM1RjgwMEJGRTI3
MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLywKIAkJCQkwRjQ2ODBEMTE0QkJDNUY4MDBC
RkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oICovLAogCQkJCTE0MjlEOTJEMEVEMjJENzAw
MEI4OTYxOSAvKiBKSVQuY3BwICovLApAQCAtMjczOSw2ICsyNzQ1LDkgQEAKIAkJCQk4NkNDODVB
MDBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lcy5oICovLAogCQkJCUJDREQ1MUU5MEZCOERG
NzQwMDRBOEJEQyAvKiBKSVRPcGNvZGVzLmNwcCAqLywKIAkJCQlBNzEyMzZFNDExOTVGMzNDMDBC
RDIxNzQgLyogSklUT3Bjb2RlczMyXzY0LmNwcCAqLywKKwkJCQkwRjI0RTU0NTE3RUUyNzQ5MDBB
QkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgKi8sCisJCQkJMEYyNEU1NDYxN0VFMjc0OTAwQUJC
MjE3IC8qIEpJVE9wZXJhdGlvbnMuaCAqLywKKwkJCQkwRjI0RTU0NzE3RUUyNzQ5MDBBQkIyMTcg
LyogSklUT3BlcmF0aW9uV3JhcHBlcnMuaCAqLywKIAkJCQk4NkNDODVDMzBFRTdBODk0MDAyODg2
ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwICovLAogCQkJCUE3QzFFOEM4MTEyRTcwMUMwMEEz
N0Y5OCAvKiBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCAqLywKIAkJCQk5NjA2MjY5NTBGQjhF
QzAyMDA5Nzk4QUIgLyogSklUU3R1YkNhbGwuaCAqLywKQEAgLTI3NjEsNiArMjc3MCwxMCBAQAog
CQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAogCQkJ
CTBGNzY2RDMyMTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNw
cCAqLywKIAkJCQkwRjc2NkQzMzE1QUUyNTM1MDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0
Y2hwb2ludC5oICovLAorCQkJCTBGMjRFNTQ4MTdFRTI3NDkwMEFCQjIxNyAvKiBSZWdpc3RlclNl
dC5oICovLAorCQkJCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLywK
KwkJCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICovLAorCQkJCTBGMjRF
NTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLywKIAkJ
CQlBNzA5RjJFRjE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggKi8sCiAJCQkJQTcz
ODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCAqLywKIAkJCQkw
RjU3MkQ0RDE2ODc5RkRCMDBFNTdGQkQgLyogVGh1bmtHZW5lcmF0b3IuaCAqLywKQEAgLTM2MTgs
MTMgKzM2MzEsOSBAQAogCQkJCTBGRkZDOTUxMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTIxNEVGOTA5NTAwQzcyNTMy
IC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4
REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAotCQkJCTBGNzY2RDQyMTVCMkEz
QkQwMDhGMzYzRSAvKiBERkdSZWdpc3RlclNldC5oICovLAotCQkJCTg2QkIwOUJFMTM4RTM4MUIw
MDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCAqLywKLQkJCQk4NkJCMDlCRjEzOEUzODFCMDA1Njcw
MkYgLyogREZHUmVwYXRjaC5oICovLAogCQkJCUE3N0E0MjNDMTdBMEJCRkQwMEE4REI4MSAvKiBE
RkdTYWZlVG9FeGVjdXRlLmggKi8sCiAJCQkJQTc0MTAxN0UxNzlEQUY4MDAwMkVCOEJBIC8qIERG
R1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggKi8sCiAJCQkJODZFQ0EzRjkx
MzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCAqLywKLQkJCQkwRjc2NkQ0NTE1QjM3
MDFEMDA4RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8sCiAJCQkJMEYx
RTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLywK
IAkJCQkwRjFFM0E1MDE1MzdDMkNCMDAwRjk0NTYgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCAq
LywKIAkJCQk4NkVDOURDMjEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuY3Bw
ICovLApAQCAtMzk1Miw2ICszOTYxLDcgQEAKIAkJCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQg
LyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMTgxNkQwMkVC
MjAwNTVBNURCIC8qIERGR0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczNzgxMEMx
Nzk5RUEyRTAwODE3NTMzIC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI0
RTU0RTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9uV3JhcHBlcnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE2MDE1RTE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJn
dW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQx
NjgzQ0Y5MjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzk2Miw2ICszOTcyLDcgQEAKIAkJCQkwRkZCOTIxQTE2RDAyRUM1MDA1NUE1
REIgLyogREZHQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MEIwODMz
MTdBMEI3OUIwMERBRjE0QiAvKiBERkdCaW5hcnlTd2l0Y2guaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyNEU1NTIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MzY0QjcxNjRCMEMxMTAwNTMzMjlB
IC8qIERGR0JyYW5jaERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzUxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNDAzNiwxNCArNDA0NywxMSBAQAogCQkJCTBG
QkUwRjc1MTZDMURCMEIwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVFMTRFRjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDExMzI4REY4
MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY3NjZE
NDQxNUIyQTNDMDAwOEYzNjNFIC8qIERGR1JlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQk4NkJCMDlDMTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkFEODkzMkIxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4
ZWN1dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAvKiBE
RkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZFQ0EzRkExMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDhBMzE0MTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTBGNzY2RDQ2MTVCMzcwMUYwMDhGMzYzRSAvKiBERkdTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTY3MTUzQTIxRTIwMDBG
OTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkZCOTIxRDE2RDAyRjMwMDA1NUE1REIgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RUM5REQzMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJ
VC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MTc4LDYgKzQxODYsNyBAQAogCQkJCUE3QTRBRTEwMTc5
NzNCNEQwMDU2MTJCMSAvKiBKSVRTdHVic1g4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI0RTU0RDE3RUUyNzQ5MDBBQkIyMTcg
LyogSklUT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2RjU0QTMxM0IyOEFBQjAw
RUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTYw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQw
NDgwMTMxMDIxQTFEOTAwOEU3RjAxIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTQ0NzMsNiArNDQ4Miw4IEBACiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8q
IHVkaXM4Nl9leHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ0MTU4RUJFOTEwMDRD
QjlGRiAvKiB1ZGlzODZfaW5wdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ4MTU4RUJF
OTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI0RTU1MTE3
RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNEU1NEYx
N0VFMjc0OTAwQUJCMjE3IC8qIFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0
Mjc0OTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0U1QUIzOTE3OTlFNEIyMDBEMjgzM0QgLyogVURpczg2RGlzYXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0E4QUY0MTE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCBp
biBIZWFkZXJzICovLApAQCAtNDk0Miw2ICs0OTUzLDcgQEAKIAkJCQkwRjJCREMxNTE1MUM1RDRE
MDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNG
NzE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTdEODlDRjkxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjRFNTRDMTdFRTI3NDkwMEFCQjIxNyAvKiBK
SVRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJC
MkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzA0RDkwNTE3QTBCQUE4
MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFQTBBMzMxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC00OTcyLDcgKzQ5ODQsNiBAQAogCQkJCUE3OEE5NzdBMTc5NzM4QjgwMDlERjc0NCAv
KiBERkdQbGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQkUwRjc0MTZDMURCMDkwMDgyQzVF
OCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGRkM5NUQxNEVGOTBCMzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTg2QkIwOUMwMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdS
ZXBhdGNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REQyMTMyOERGODIwMDJCMkFENyAv
KiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxRjE0MzI4
QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTUyMzgsNiArNTI0OSw3IEBACiAJCQkJOTMzNUYyNEQxMkU2NzY1
QjAwMkI1NTUzIC8qIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNERTNCNDMwRTZDODMyRDAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3RTRFRTcwRjBFQkI3QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyNEU1NTAxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQzJGMEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVy
ZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzY2RDM4MTVBRTRBMUMwMDhGMzYz
RSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDQ0YwRDBDMEVGMEI4QTUwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAxNTY0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTIgKzQw
LDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtLCBSZXBhdGMKICAgICByZXBh
dGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBhdGNoKFJlcGF0
Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGhvdFBhdGhCZWdp
biksIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihjYWxsZWVHUFIpLCAw
KTsKICAgICBpZiAoaXNERkcpIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCAoY2FsbFR5cGUgPT0gQ29uc3RydWN0
ID8gdm0uZ2V0Q1RJU3R1YihERkc6OmxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikgOiB2bS5n
ZXRDVElTdHViKERGRzo6bGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKSk7CisgICAgICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgKGNhbGxUeXBlID09IENv
bnN0cnVjdCA/IHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKSA6IHZt
LmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKSk7CiAjZWxzZQogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiAgICAgfSBlbHNlCi0g
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbFR5cGUg
PT0gQ29uc3RydWN0ID8gdm0uZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2Rl
KCkgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0
cnVjdCA/IHZtLmdldENUSVN0dWIob2xkU3R5bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2Rl
KCkgOiB2bS5nZXRDVElTdHViKG9sZFN0eWxlTGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAg
ICAgaGFzU2VlblNob3VsZFJlcGF0Y2ggPSBmYWxzZTsKICAgICBjYWxsZWUuY2xlYXIoKTsKICAg
ICBzdHViLmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU2NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAK
ICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRl
ICJERkdOb2RlLmgiCi0jaW5jbHVkZSAiREZHUmVwYXRjaC5oIgogI2luY2x1ZGUgIkRGR1dvcmts
aXN0LmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpA
QCAtNTAsNiArNDksNyBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCiAjaW5jbHVkZSAiUmVkdWNlV2hpdGVzcGFjZS5oIgorI2lu
Y2x1ZGUgIlJlcGF0Y2guaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAi
U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTIzODYsMTIgKzIz
ODYsMTIgQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkludGVybmFsKFJlcGF0YwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoKICAgICAgICAgaWYgKGlzR2V0QnlJ
ZEFjY2VzcyhhY2Nlc3NUeXBlKSkKLSAgICAgICAgICAgIERGRzo6cmVzZXRHZXRCeUlEKHJlcGF0
Y2hCdWZmZXIsIHN0dWJJbmZvKTsKKyAgICAgICAgICAgIHJlc2V0R2V0QnlJRChyZXBhdGNoQnVm
ZmVyLCBzdHViSW5mbyk7CiAgICAgICAgIGVsc2UgaWYgKGlzUHV0QnlJZEFjY2VzcyhhY2Nlc3NU
eXBlKSkKLSAgICAgICAgICAgIERGRzo6cmVzZXRQdXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJ
bmZvKTsKKyAgICAgICAgICAgIHJlc2V0UHV0QnlJRChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbkFjY2Vzcyhh
Y2Nlc3NUeXBlKSk7Ci0gICAgICAgICAgICBERkc6OnJlc2V0SW4ocmVwYXRjaEJ1ZmZlciwgc3R1
YkluZm8pOworICAgICAgICAgICAgcmVzZXRJbihyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lv
biAxNTY0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMxLDEyIEBACiAjaWYgRU5BQkxFKEpJ
VCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKLSNpbmNsdWRlICJERkdSZWdpc3RlclNldC5o
IgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIK
ICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1
ZGUgIlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVy
U2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTIzMSw3ICsy
MzEsNyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICAgICAgaW50OF90IHZh
bHVlVGFnR1BSOwogI2VuZGlmCiAgICAgICAgICAgICBpbnQ4X3QgdmFsdWVHUFI7Ci0gICAgICAg
ICAgICBERkc6OlJlZ2lzdGVyU2V0UE9EIHVzZWRSZWdpc3RlcnM7CisgICAgICAgICAgICBSZWdp
c3RlclNldFBPRCB1c2VkUmVnaXN0ZXJzOwogICAgICAgICAgICAgaW50MzJfdCBkZWx0YUNhbGxU
b0RvbmU7CiAgICAgICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvU3RvcmFnZUxvYWQ7CiAgICAg
ICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2s7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQXJyYXlBbGxv
Y2F0b3JTbG93UGF0aEdlbmVyYXRvci5oCShyZXZpc2lvbiAxNTY0NzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogY2xhc3MgQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IgOiBwdWJs
aWMgSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdD4gewog
cHVibGljOgogICAgIENhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgUF9E
RkdPcGVyYXRpb25fRVN0WiBmdW5jdGlvbiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIFBfSklUT3BlcmF0aW9uX0VTdFogZnVuY3Rp
b24sCiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzdG9yYWdlR1BSLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgc2l6ZV90IHNpemUpCiAgICAgICAgIDogSnVtcGluZ1Nsb3dQYXRoR2Vu
ZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdD4oZnJvbSwgaml0KQogICAgICAgICAsIG1f
ZnVuY3Rpb24oZnVuY3Rpb24pCkBAIC02OCw3ICs2OCw3IEBAIHByb3RlY3RlZDoKICAgICB9CiAg
ICAgCiBwcml2YXRlOgotICAgIFBfREZHT3BlcmF0aW9uX0VTdFogbV9mdW5jdGlvbjsKKyAgICBQ
X0pJVE9wZXJhdGlvbl9FU3RaIG1fZnVuY3Rpb247CiAgICAgR1BSUmVnIG1fcmVzdWx0R1BSOwog
ICAgIEdQUlJlZyBtX3N0b3JhZ2VHUFI7CiAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKQEAg
LTc5LDcgKzc5LDcgQEAgcHJpdmF0ZToKIGNsYXNzIENhbGxBcnJheUFsbG9jYXRvcldpdGhWYXJp
YWJsZVNpemVTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1waW5nU2xvd1BhdGhHZW5lcmF0
b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0PiB7CiBwdWJsaWM6CiAgICAgQ2FsbEFycmF5QWxs
b2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgUF9ERkdPcGVyYXRp
b25fRVN0WiBmdW5jdGlvbiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZyb20s
IFNwZWN1bGF0aXZlSklUKiBqaXQsIFBfSklUT3BlcmF0aW9uX0VTdFogZnVuY3Rpb24sCiAgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZSogY29udGlndW91c1N0cnVjdHVyZSwgU3Ry
dWN0dXJlKiBhcnJheVN0b3JhZ2VTdHJ1Y3R1cmUsIEdQUlJlZyBzaXplR1BSKQogICAgICAgICA6
IEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+KGZyb20s
IGppdCkKICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQpAQCAtMTEyLDcgKzExMiw3IEBA
IHByb3RlY3RlZDoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFBfREZHT3BlcmF0aW9uX0VT
dFogbV9mdW5jdGlvbjsKKyAgICBQX0pJVE9wZXJhdGlvbl9FU3RaIG1fZnVuY3Rpb247CiAgICAg
R1BSUmVnIG1fcmVzdWx0R1BSOwogICAgIFN0cnVjdHVyZSogbV9jb250aWd1b3VzU3RydWN0dXJl
OwogICAgIFN0cnVjdHVyZSogbV9hcnJheVN0b3JhZ2VTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxNTY0NzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDEyICszNiwxMiBAQAogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRl
ICJERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgiCiAjaW5jbHVkZSAiREZHUmVnaXN0ZXJCYW5r
LmgiCi0jaW5jbHVkZSAiREZHUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJGUFJJbmZvLmgiCiAj
aW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJSZWdpc3Rl
clNldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCShyZXZpc2lvbiAxNTY0NzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Niw3ICs3Niw3IEBAIHByaXZhdGU6CiB9OwogCiBleHRlcm4gIkMiIHsKLXZvaWQgREZH
X09QRVJBVElPTiBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Cit2b2lk
IEpJVF9PUEVSQVRJT04gY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NjQ3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDYgQEAKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJE
RkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCi0jaW5jbHVkZSAiREZHUmVwYXRj
aC5oIgogI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUgIkRGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiREZHVG9GVExGb3JPU1JFbnRyeURlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgpAQCAtNDUsMjk1ICs0NCwyMSBAQAogI2luY2x1ZGUg
IkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklURXhjZXB0aW9u
cy5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbldyYXBwZXJzLmgiCiAjaW5jbHVkZSAiSlNBY3Rp
dmF0aW9uLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJKU05hbWVTY29wZS5oIgogI2lu
Y2x1ZGUgIk5hbWVJbnN0YW5jZS5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlcGF0Y2guaCIKICNpbmNsdWRlICJT
dHJpbmdDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlJbmxpbmVzLmgiCiAjaW5j
bHVkZSA8d3RmL0lubGluZUFTTS5oPgogCiAjaWYgRU5BQkxFKEpJVCkKLQotI2lmIENQVShNSVBT
KQotI2lmIFdURl9NSVBTX1BJQwotI2RlZmluZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9u
KSBcCi0gICAgICAgICIuc2V0IG5vcmVvcmRlciIgIlxuIiBcCi0gICAgICAgICIuY3Bsb2FkICQy
NSIgIlxuIiBcCi0gICAgICAgICIuc2V0IHJlb3JkZXIiICJcbiIgXAotICAgICAgICAibGEgJHQ5
LCAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIlxuIgotI2Vsc2UKLSNkZWZpbmUgTE9BRF9G
VU5DVElPTl9UT19UOShmdW5jdGlvbikgIiIgIlxuIgotI2VuZGlmCi0jZW5kaWYKLQogI2lmIEVO
QUJMRShERkdfSklUKQogCi0jaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoWDg2XzY0KQotCi0jZGVm
aW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmVnaXN0
ZXIpIFwKLSAgICBhc20oIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikg
IlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJ
TkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgIm1vdiAoJXJzcCksICUiIFNUUklOR0la
RShyZWdpc3RlcikgIlxuIiBcCi0gICAgICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rp
b24jI1dpdGhSZXR1cm5BZGRyZXNzKSAiXG4iIFwKLSAgICApOwotI2RlZmluZSBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByc2kpCi0jZGVmaW5lIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkKLSNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4KQotI2RlZmluZSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByOCkKLQotI2VsaWYgQ09NUElMRVIoR0NDKSAm
JiBDUFUoWDg2KQotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
UyhmdW5jdGlvbiwgb2Zmc2V0KSBcCi0gICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAg
ICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1C
T0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4i
IFwKLSAgICAgICAgIm1vdiAoJWVzcCksICVlYXhcbiIgXAotICAgICAgICAibW92ICVlYXgsICIg
U1RSSU5HSVpFKG9mZnNldCkgIiglZXNwKVxuIiBcCi0gICAgICAgICJqbXAgIiBMT0NBTF9SRUZF
UkVOQ0UoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSAiXG4iIFwKLSAgICApOwotI2RlZmlu
ZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCA4KQotI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAxNikKLSNkZWZpbmUgRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMjApCi0jZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDI0KQotCi0jZWxpZiBDT01QSUxF
UihHQ0MpICYmIENQVShBUk1fVEhVTUIyKQotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCi0gICAgYXNtICggXAotICAgICIudGV4dCIg
IlxuIiBcCi0gICAgIi5hbGlnbiAyIiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklO
RyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAg
ICIudGh1bWIiICJcbiIgXAotICAgICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZnVu
Y3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAg
ICAgICAgIm1vdiBhMiwgbHIiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShm
dW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLSAgICBh
c20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmFsaWduIDIiICJcbiIgXAotICAgICIu
Z2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChm
dW5jdGlvbikgIlxuIiBcCi0gICAgIi50aHVtYiIgIlxuIiBcCi0gICAgIi50aHVtYl9mdW5jICIg
VEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5j
dGlvbikgIjoiICJcbiIgXAotICAgICAgICAibW92IGE0LCBsciIgIlxuIiBcCi0gICAgICAgICJi
ICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAot
ICAgICk7Ci0KLS8vIEVuY29kZWRKU1ZhbHVlIGluIEpTVkFMVUUzMl82NCBpcyBhIDY0LWJpdCBp
bnRlZ2VyLiBXaGVuIGJlaW5nIGNvbXBpbGVkIGluIEFSTSBFQUJJLCBpdCBtdXN0IGJlIGFsaWdu
ZWQgZXZlbi1udW1iZXJlZCByZWdpc3RlciAocjAsIHIyIG9yIFtzcF0pLgotLy8gQXMgYSByZXN1
bHQsIHJldHVybiBhZGRyZXNzIHdpbGwgYmUgYXQgYSA0LWJ5dGUgZnVydGhlciBsb2NhdGlvbiBp
biB0aGUgZm9sbG93aW5nIGNhc2VzLgotI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVBQkkpICYmIENQ
VShBUk0pCi0jZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3Ry
IGxyLCBbc3AsICM0XSIKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1Nf
RUpDSSAic3RyIGxyLCBbc3AsICM4XSIKLSNlbHNlCi0jZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JF
X1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICMwXSIKLSNkZWZpbmUgSU5TVFJVQ1RJ
T05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM0XSIKLSNlbmRpZgot
Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rp
b24pIFwKLSAgICBhc20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmFsaWduIDIiICJc
biIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBI
SURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgIi50aHVtYiIgIlxuIiBcCi0gICAgIi50
aHVtYl9mdW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9S
RVRVUk5fQUREUkVTU19FSkkgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1
bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKLSAgICBh
c20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmFsaWduIDIiICJcbiIgXAotICAgICIu
Z2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChm
dW5jdGlvbikgIlxuIiBcCi0gICAgIi50aHVtYiIgIlxuIiBcCi0gICAgIi50aHVtYl9mdW5jICIg
VEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5j
dGlvbikgIjoiICJcbiIgXAotICAgICAgICBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVT
U19FSkNJICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldp
dGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZWxpZiBDT01QSUxFUihHQ0MpICYm
IENQVShBUk1fVFJBRElUSU9OQUwpCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKLSAgICBhc20gKCBcCi0gICAgIi50ZXh0IiAiXG4i
IFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElE
RV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIElOTElORV9BUk1fRlVOQ1RJT04oZnVuY3Rp
b24pIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgICJt
b3YgYTIsIGxyIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24p
ICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtICggXAot
ICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24p
ICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBJTkxJTkVfQVJN
X0ZVTkNUSU9OKGZ1bmN0aW9uKSBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJc
biIgXAotICAgICAgICAibW92IGE0LCBsciIgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVG
RVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLS8v
IEVuY29kZWRKU1ZhbHVlIGluIEpTVkFMVUUzMl82NCBpcyBhIDY0LWJpdCBpbnRlZ2VyLiBXaGVu
IGJlaW5nIGNvbXBpbGVkIGluIEFSTSBFQUJJLCBpdCBtdXN0IGJlIGFsaWduZWQgZXZlbi1udW1i
ZXJlZCByZWdpc3RlciAocjAsIHIyIG9yIFtzcF0pLgotLy8gQXMgYSByZXN1bHQsIHJldHVybiBh
ZGRyZXNzIHdpbGwgYmUgYXQgYSA0LWJ5dGUgZnVydGhlciBsb2NhdGlvbiBpbiB0aGUgZm9sbG93
aW5nIGNhc2VzLgotI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVBQkkpICYmIENQVShBUk0pCi0jZGVm
aW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICM0
XSIKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxy
LCBbc3AsICM4XSIKLSNlbHNlCi0jZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERS
RVNTX0VKSSAic3RyIGxyLCBbc3AsICMwXSIKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVU
VVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM0XSIKLSNlbmRpZgotCi0jZGVmaW5lIEZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKLSAgICBh
c20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhm
dW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIElO
TElORV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9u
KSAiOiIgIlxuIiBcCi0gICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VK
SSAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0
dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRl
eHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwK
LSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgSU5MSU5FX0FSTV9GVU5DVElP
TihmdW5jdGlvbikgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAg
ICAgICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAiXG4iIFwKLSAgICAg
ICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxu
IiBcCi0gICAgKTsKLQotI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoTUlQUykKLQotI2RlZmlu
ZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAotICAg
IGFzbSggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkco
ZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBT
WU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgTE9BRF9GVU5DVElPTl9UT19U
OShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKLSAgICAgICAgIm1vdmUgJGExLCAkcmEi
ICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1
cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLSAgICBhc20oIFwKLSAgICAiLnRleHQi
ICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAg
ICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIjoiICJcbiIgXAotICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dpdGhSZXR1
cm5BZGRyZXNzKSBcCi0gICAgICAgICJtb3ZlICRhMywgJHJhIiAiXG4iIFwKLSAgICAgICAgImIg
IiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0g
ICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJ
KGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2Js
ICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rp
b24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICBM
T0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAotICAgICAg
ICAic3cgJHJhLCAyMCgkc3ApIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0Uo
ZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBG
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotICAg
IGFzbSggXAotICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkco
ZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBT
WU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgTE9BRF9GVU5DVElPTl9UT19U
OShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKLSAgICAgICAgInN3ICRyYSwgMjQoJHNw
KSIgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJl
dHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BV
KFNINCkKLQotI2RlZmluZSBTSDRfU0NSQVRDSF9SRUdJU1RFUiAicjExIgotCi0jZGVmaW5lIEZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCi0gICAgYXNt
KCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5j
dGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJP
TF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgInN0cyBwciwgcjUiICJcbiIg
XAotICAgICAgICAiYnJhICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFk
ZHJlc3MiICJcbiIgXAotICAgICAgICAibm9wIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLSAgICBh
c20oIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1
bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lN
Qk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAic3RzIHByLCByNyIgIlxu
IiBcCi0gICAgICAgICJtb3YubCAyZiwgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAiXG4iIFwKLSAg
ICAgICAgImJyYWYgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAiXG4iIFwKLSAgICAgICAgIm5vcCIg
IlxuIiBcCi0gICAgICAgICIxOiAuYmFsaWduIDQiICJcbiIgXAotICAgICAgICAiMjogLmxvbmcg
IiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcy0xYiIgIlxuIiBc
Ci0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Mo
ZnVuY3Rpb24sIG9mZnNldCwgc2NyYXRjaCkgXAotICAgIGFzbSggXAotICAgICIudGV4dCIgIlxu
IiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJ
REVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
OiIgIlxuIiBcCi0gICAgICAgICJzdHMgcHIsICIgc2NyYXRjaCAiXG4iIFwKLSAgICAgICAgIm1v
di5sICIgc2NyYXRjaCAiLCBAKCIgU1RSSU5HSVpFKG9mZnNldCkgIiwgcjE1KSIgIlxuIiBcCi0g
ICAgICAgICJtb3YubCAyZiwgIiBzY3JhdGNoICJcbiIgXAotICAgICAgICAiYnJhZiAiIHNjcmF0
Y2ggIlxuIiBcCi0gICAgICAgICJub3AiICJcbiIgXAotICAgICAgICAiMTogLmJhbGlnbiA0IiAi
XG4iIFwKLSAgICAgICAgIjI6IC5sb25nICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0
aFJldHVybkFkZHJlc3MtMWIiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCi0j
ZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9u
KSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDQsIFNINF9T
Q1JBVENIX1JFR0lTVEVSKQotCi0jZW5kaWYKLQotI2RlZmluZSBQX0ZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCi12b2lkKiBERkdfT1BFUkFUSU9OIGZ1
bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBSZXR1cm5BZGRyZXNzUHRyKSBS
RUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAotRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCi0KLSNkZWZpbmUgSl9GVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCi1FbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBKU0NlbGwq
LCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZf
SU5URVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVu
Y3Rpb24pCi0KLSNkZWZpbmUgSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUpJKGZ1bmN0aW9uKSBcCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIGZ1bmN0aW9uIyNX
aXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCos
IFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCi1G
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKQotCi0jZGVm
aW5lIFZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24p
IFwKLXZvaWQgREZHX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCosIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNz
UHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAotRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pCi0KIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAogdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+CkBAIC0zNTcsNyArODIsNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0QnlWYWwoRXhlY1N0YXRlKiBlCiB9CiAKIHRlbXBsYXRl
PGJvb2wgc3RyaWN0PgotQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTQ2Niw3ICsxOTEsNyBAQCBj
aGFyKiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50KAogCiBleHRlcm4gIkMiIHsKIAotRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXMoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblRvVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTQ3NCw3ICsxOTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wKS50b1RoaXMoZXhlYywgTm90U3RyaWN0TW9kZSkpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpc1N0cmljdChFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNDgyLDcgKzIwNyw3IEBA
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG8KICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3ApLnRvVGhpcyhleGVjLCBTdHJp
Y3RNb2RlKSk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVUaGlz
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBpbnQzMl90IGlubGluZUNh
cGFjaXR5KQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGludDMyX3QgaW5saW5lQ2FwYWNpdHkp
CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CkBAIC00OTUsNyArMjIwLDcgQEAgSlNDZWxsKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkNyZWF0ZVRoaQogICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yKS0+YWxsb2NhdGlvblByb2ZpbGUo
ZXhlYywgaW5saW5lQ2FwYWNpdHkpLT5zdHJ1Y3R1cmUoKSk7CiB9CiAKLUpTQ2VsbCogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTUw
Myw3ICsyMjgsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0CiAg
ICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGQoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZChFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC01MTQsNyArMjM5LDcgQEAgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25WYQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNBZGQoZXhlYywgb3AxLCBvcDIpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikK
IHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKQEAgLTU0Nyw3ICsyNzIsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIGdldEJ5VmFsKEV4CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KGJhc2UpLmdldChleGVjLCBpbmRleCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQogewog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwpAQCAtNTc4LDcgKzMwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uR2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5n
ZXQoZXhlYywgaWRlbnQpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeVZhbENlbGwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0QnlWYWxDZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC02MTgsMTQwICsz
NDMsMTcgQEAgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSBnZXRCeVZhbENlbAogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShiYXNlKS5nZXQoZXhlYywgaW5kZXgpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50
KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYmFzZSwgaW50MzJfdCBpbmRleCkKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludChFeGVjU3RhdGUq
IGV4ZWMsIEpTQXJyYXkqIGJhc2UsIGludDMyX3QgaW5kZXgpCiB7CiAgICAgcmV0dXJuIGdldEJ5
VmFsQ2VsbEludChleGVjLCBiYXNlLCBpbmRleCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU1N0
cmluZyogYmFzZSwgaW50MzJfdCBpbmRleCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2V0QnlWYWxTdHJpbmdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogYmFz
ZSwgaW50MzJfdCBpbmRleCkKIHsKICAgICByZXR1cm4gZ2V0QnlWYWxDZWxsSW50KGV4ZWMsIGJh
c2UsIGluZGV4KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCeUlkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgU3RyaW5nSW1wbCog
dWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGJhc2UpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0g
ICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpKTsKLX0KLQotSl9GVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOwot
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0V2l0
aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJp
bmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKLQotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFk
ZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoYmFzZSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOwotCi0g
ICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNj
ZXNzVHlwZSkpCi0gICAgICAgIGJ1aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVlLCBpZGVu
dCwgc2xvdCwgc3R1YkluZm8pOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwotfQotCi1KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKTsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVp
ZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCkt
PmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9
IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7Ci0gICAgUHJvcGVydHlTbG90
IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhl
YywgaWRlbnQsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKSB7Ci0gICAgICAgIGlmIChzdHViSW5m
by5zZWVuKQotICAgICAgICAgICAgcmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVu
dCwgc2xvdCwgc3R1YkluZm8pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHViSW5mby5z
ZWVuID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
Ci19Ci0KLUpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShvcGVyYXRp
b25Jbk9wdGltaXplKTsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uSW5P
cHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBT
dHJpbmdJbXBsKiBrZXksIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKLSAgICAKLSAgICBpZiAoIWJhc2UtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgdm0t
PnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUludmFsaWRQYXJhbWV0ZXJFcnJvcihleGVjLCAi
aW4iLCBiYXNlKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMt
PmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBl
KTsKLQotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIGtleSk7Ci0gICAgUHJvcGVydHlTbG90IHNs
b3QoYmFzZSk7Ci0gICAgYm9vbCByZXN1bHQgPSBhc09iamVjdChiYXNlKS0+Z2V0UHJvcGVydHlT
bG90KGV4ZWMsIGlkZW50LCBzbG90KTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChhY2Nlc3NU
eXBlID09IHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotICAgIAotICAgIGlmIChzdHViSW5mby5zZWVu
KQotICAgICAgICByZXBhdGNoSW4oZXhlYywgYmFzZSwgaWRlbnQsIHJlc3VsdCwgc2xvdCwgc3R1
YkluZm8pOwotICAgIGVsc2UKLSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Ci0gICAgCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocmVzdWx0KSk7Ci19Ci0KLUVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uSW4oRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIGJhc2UsIFN0cmluZ0ltcGwqIGtleSkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgIGlmICgh
YmFzZS0+aXNPYmplY3QoKSkgewotICAgICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgY3Jl
YXRlSW52YWxpZFBhcmFtZXRlckVycm9yKGV4ZWMsICJpbiIsIGJhc2UpKTsKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0KLSAgICBJZGVudGlm
aWVyIGlkZW50KHZtLCBrZXkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGFzT2JqZWN0KGJhc2UpLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCkpKTsKLX0KLQotRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZW5lcmljSW4oRXhlY1N0YXRlKiBleGVj
LCBKU0NlbGwqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGtleSkKLXsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJ
bihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSwgYmFzZSkpKTsKLX0KLQotRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBiYXNlLCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBmdW5jdGlvbiwgU3Ry
aW5nSW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRl
bnQodm0sIHVpZCk7Ci0gICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShmdW5jdGlvbihl
eGVjLCBhc09iamVjdChiYXNlKSwgaWRlbnQpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25DYWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNl
LCBKU0NlbGwqIGdldHRlclNldHRlcikKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY2FsbEdldHRlcihleGVjLCBiYXNlLCBnZXR0ZXJTZXR0ZXIpKTsKLX0K
LQotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQ
cm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzU5LDcgKzM2MSw3IEBAIHZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFN0cmkKICAgICBvcGVyYXRpb25QdXRC
eVZhbEludGVybmFsPHRydWU+KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkUHJvcGVydHksIGVu
Y29kZWRWYWx1ZSk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5v
blN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdChFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
UHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
QEAgLTc2Nyw3ICszNjksNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxO
b25TCiAgICAgb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbDxmYWxzZT4oZXhlYywgZW5jb2RlZEJh
c2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
Y2VsbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJv
cGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAg
LTc3NSw3ICszNzcsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxs
CiAgICAgb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbDx0cnVlPihleGVjLCBKU1ZhbHVlOjplbmNv
ZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogY2VsbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxD
ZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKQEAgLTc4Myw3ICszODUsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxDZWxsCiAgICAgb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbDxmYWxzZT4oZXhlYywg
SlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9
CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRz
U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwpAQCAtNzk4LDcgKzQwMCw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbEJleW8KICAgICAgICAgYXJyYXksIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAK
LXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9u
U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwpAQCAtODEzLDcgKzQxNSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbEJleW8KICAgICAgICAgYXJyYXksIGV4ZWMsIElkZW50aWZpZXI6OmZy
b20oZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9
CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5
Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGlu
ZGV4LCBkb3VibGUgdmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91Ymxl
QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBh
cnJheSwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAt
ODMwLDcgKzQzMiw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVYK
ICAgICAgICAgYXJyYXksIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBqc1Zh
bHVlLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5
VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
YXJyYXksIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFsdWUpCiB7
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CkBAIC04NDcsNyArNDQ5LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dERvdWJsZUJ5VgogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBpbmRleCksIGpzVmFsdWUsIHNsb3QpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJheSogYXJyYXkpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04NTYs
NyArNDU4LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlKEV4
ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlLCBKU0FycmF5KiBhcnJheSkKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlKEV4ZWNTdGF0ZSogZXhl
YywgZG91YmxlIHZhbHVlLCBKU0FycmF5KiBhcnJheSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTg2
NSw3ICs0NjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhcnJheS0+bGVuZ3RoKCkpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3Rh
dGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQogewogICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwpAQCAtODczLDcgKzQ3NSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQXIKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFycmF5LT5wb3AoZXhl
YykpOwogfQogICAgICAgICAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
QXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkp
CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zl
ckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQogewogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwpAQCAtODgzLDcgKzQ4NSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQXIKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFycmF5LT5wb3AoZXhlYykpOwogfQog
ICAgICAgICAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhl
YyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAg
LTg5Niw3ICs0OTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJl
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1JlZ0V4cE9iamVjdChiYXNlKS0+ZXhlYyhl
eGVjLCBpbnB1dCkpOwogfQogICAgICAgICAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blJlZ0V4cFRlc3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogYXJndW1l
bnQpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50KQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpA
QCAtOTExLDIzNyArNTEzLDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhw
VGVzdAogICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdChiYXNlKS0+dGVzdChleGVjLCBpbnB1dCk7
CiB9CiAgICAgICAgIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgU3RyaW5nSW1wbCogdWlkKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZp
ZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+
Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIGJhc2UtPm1ldGhvZFRhYmxlKCkt
PnB1dChiYXNlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNs
b3QpOwotfQotCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmll
ciBpZGVudCh2bSwgdWlkKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+
Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIGJhc2UtPm1ldGhvZFRhYmxlKCkt
PnB1dChiYXNlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNs
b3QpOwotfQotCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRp
ZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVj
LT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGJhc2UtPmlzT2Jq
ZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKLX0KLQotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlk
KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7
Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRC
eUlkQ29udGV4dCgpKTsKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0gICAgYXNPYmpl
Y3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSksIHNsb3QpOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk7Ci12b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi17Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1Yklu
Zm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUo
YmFzZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCkt
PnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQs
IHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIGlmIChzdHViSW5mby5zZWVuKQotICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNl
VmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKLSAgICBlbHNlCi0gICAg
ICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSk7Ci12
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplV2l0aFJl
dHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwg
dWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2so
KS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
ID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgSlNWYWx1
ZSBiYXNlVmFsdWUoYmFzZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMt
PmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICAKLSAgICBiYXNlVmFsdWUucHV0
KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uc2VlbikKLSAgICAgICAgcmVwYXRjaFB1dEJ5
SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7Ci0g
ICAgZWxzZQotICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKLX0KLQotVl9GVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0T3B0aW1pemUpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElk
ZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
ID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFj
Y2Vzc1R5cGUpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygp
LT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICAKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7
Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgdmFsdWUs
IHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYg
KHN0dWJJbmZvLnNlZW4pCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2UsIGlkZW50
LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIHN0dWJJbmZvLnNl
ZW4gPSB0cnVlOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
SkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Ci12b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplV2l0aFJldHVy
bkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpT
Q2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlk
KTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+
Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgUHV0UHJvcGVy
dHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsK
LSAgICAKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0gICAgYXNPYmplY3QoYmFzZSkt
PnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlm
IChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5
cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAg
ICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGly
ZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwotfQotCi1WX0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRT
dHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVu
dGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9
IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nl
c3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgCi0g
ICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAgIAotICAgIGlm
IChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5
cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYnVpbGRQdXRCeUlkTGlzdChleGVjLCBi
YXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKLX0KLQotVl9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0QnVpbGRMaXN0KTsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAg
SWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAg
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8u
YWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7Ci0gICAgUHV0UHJvcGVydHlT
bG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAg
ICAKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0g
ICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNj
ZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4
ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOwotfQotCi1W
X0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBs
KiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
LSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRy
ZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBl
PihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLSAgICAKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwg
ZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIEFTU0VSVChi
YXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZt
KCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBz
dHViSW5mbywgRGlyZWN0KTsKLX0KLQotVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKLXZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVu
dCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2Rl
QmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0K
LSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAg
UHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29u
dGV4dCgpKTsKLSAgICAKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7Ci0gICAgYXNPYmpl
Y3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotICAg
IAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYnVpbGRQdXRCeUlkTGlz
dChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7Ci19Ci0KLXNpemVf
dCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK3NpemVf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKQEAgLTExNDksNyArNTIxLDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uQ29tcGFyZUxlcwogICAgIHJldHVybiBqc0xlc3M8dHJ1ZT4oZXhlYywgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQogCi1z
aXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzc0VxKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikK
K3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTE1Nyw3ICs1MjksNyBAQCBzaXplX3QgREZHX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlTGVzCiAgICAgcmV0dXJuIGpzTGVzc0VxPHRydWU+KGV4ZWMs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIp
KTsKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTE2NSw3ICs1MzcsNyBAQCBzaXpl
X3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlCiAgICAgcmV0dXJuIGpzTGVzczxm
YWxzZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wMSkpOwogfQogCi1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
R3JlYXRlckVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTE3Myw3
ICs1NDUsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlCiAgICAg
cmV0dXJuIGpzTGVzc0VxPGZhbHNlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMiks
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSk7CiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitzaXplX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Db21wYXJlRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTE4
Miw5ICs1NTQsOSBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlRXEoCiB9
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25Db21wYXJlU3RyaW5nRXEoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGxlZnQsIEpTQ2Vs
bCogcmlnaHQpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVT
dHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKICNl
bHNlCi1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEoRXhlY1N0
YXRlKiBleGVjLCBKU0NlbGwqIGxlZnQsIEpTQ2VsbCogcmlnaHQpCitzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGxl
ZnQsIEpTQ2VsbCogcmlnaHQpCiAjZW5kaWYKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
QEAgLTExOTgsNyArNTcwLDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZVN0cgogI2VuZGlmCiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVT
dHJpY3RFcUNlbGwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0x
MjEyLDcgKzU4NCw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHIK
ICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZShleGVjLCBvcDEs
IG9wMik7CiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTIyMywxOTMgKzU5NSw3
IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHIKICAgICByZXR1cm4g
SlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgc3JjMSwgc3JjMik7CiB9CiAKLXN0YXRpYyB2b2lk
KiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVlLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gZXhl
Y0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLQotICAg
IGV4ZWNDYWxsZWUtPnNldFNjb3BlKGV4ZWMtPnNjb3BlKCkpOwotICAgIGV4ZWNDYWxsZWUtPnNl
dENvZGVCbG9jaygwKTsKLQotICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAg
IENhbGxEYXRhIGNhbGxEYXRhOwotICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxE
YXRhKGNhbGxlZSwgY2FsbERhdGEpOwotICAgIAotICAgICAgICBBU1NFUlQoY2FsbFR5cGUgIT0g
Q2FsbFR5cGVKUyk7Ci0gICAgCi0gICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3Qp
IHsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWNDYWxs
ZWUpOwotICAgICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkp
OwotICAgICAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
Y2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKLSAgICAgICAgICAgIGlmICh2
bS0+ZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICBBU1NFUlQo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKLSAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihleGVjLCBjYWxsZWUpKTsKLSAgICAg
ICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgfQotCi0gICAgQVNTRVJU
KGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgCi0gICAgQ29uc3RydWN0RGF0YSBjb25z
dHJ1Y3REYXRhOwotICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVj
dERhdGEoY2FsbGVlLCBjb25zdHJ1Y3REYXRhKTsKLSAgICAKLSAgICBBU1NFUlQoY29uc3RydWN0
VHlwZSAhPSBDb25zdHJ1Y3RUeXBlSlMpOwotICAgIAotICAgIGlmIChjb25zdHJ1Y3RUeXBlID09
IENvbnN0cnVjdFR5cGVIb3N0KSB7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWNDYWxsZWUpOwotICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmpl
Y3QoY2FsbGVlKSk7Ci0gICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKLSAgICAg
ICAgaWYgKHZtLT5leGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiB2bS0+Z2V0Q1RJU3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpOwotCi0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGNvbnN0cnVj
dFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpOwotICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgY2FsbGVlKSk7Ci0gICAg
cmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci19Ci0KLWlubGluZSBjaGFyKiBsaW5r
Rm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQot
ewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Ci0gICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7Ci0gICAgCi0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZXhlY0NhbGxlZS0+
Y2FsbGVlQXNWYWx1ZSgpOwotICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRK
U0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwotICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwp
Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihoYW5kbGVIb3N0Q2FsbChl
eGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlLCBraW5kKSk7Ci0KLSAgICBKU0Z1bmN0aW9uKiBjYWxs
ZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBleGVj
Q2FsbGVlLT5zZXRTY29wZShjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCkpOwotICAgIEV4ZWN1dGFi
bGVCYXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7Ci0KLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgY29kZVB0cjsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7Ci0g
ICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIGNvZGVQdHIgPSBl
eGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwot
ICAgIGVsc2UgewotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotICAgICAg
ICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRp
b24oZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsKLSAgICAgICAgaWYgKGVycm9y
KSB7Ci0gICAgICAgICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlU3RhY2tPdmVy
Zmxvd0Vycm9yKGV4ZWMpKTsKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0
b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgfQotICAgICAgICBjb2Rl
QmxvY2sgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKTsKLSAgICAgICAg
aWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAgICAgICAgIGNvZGVQ
dHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0Zv
cihraW5kKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAg
ICB9Ci0gICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+
Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwotICAgIGlmICghY2FsbExp
bmtJbmZvLnNlZW5PbmNlKCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby5zZXRTZWVuKCk7Ci0gICAg
ZWxzZQotICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29kZUJsb2Nr
LCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQpOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotfQotCi1jaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKLXsKLSAgICByZXR1
cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCk7Ci19Ci0KLWNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCi17Ci0g
ICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KLWlu
bGluZSBjaGFyKiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bCkKLXsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwot
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwotCi0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZXhlY0NhbGxlZS0+
Y2FsbGVlQXNWYWx1ZSgpOwotICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlv
bihjYWxsZWVBc1ZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxs
KSkKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGhhbmRsZUhvc3RDYWxs
KGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKLSAgICAKLSAgICBKU0Z1bmN0aW9u
KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwot
ICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpKTsKLSAg
ICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7Ci0g
ICAgaWYgKFVOTElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yKGtpbmQpKSkgewotICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotICAgICAgICBKU09iamVjdCogZXJy
b3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwg
ZnVuY3Rpb24tPnNjb3BlKCksIGtpbmQpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAg
ICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlY0NhbGxlZSwgZXJyb3IpOwotICAgICAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci19Ci0KLWlubGluZSBjaGFyKiB2aXJ0dWFsRm9yKEV4ZWNT
dGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotewotICAgIEpT
Q2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkOwotICAgIHJldHVybiB2aXJ0dWFsRm9y
V2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGtpbmQsIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3Jl
ZCk7Ci19Ci0KLXN0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlLCBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbykKLXsKLSAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0
PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgSlNGdW5jdGlvbiogb2xk
Q2FsbGVlID0gY2FsbExpbmtJbmZvLmNhbGxlZS5nZXQoKTsKLSAgICAKLSAgICBpZiAoIW9sZENh
bGxlZQotICAgICAgICB8fCBvbGRDYWxsZWUtPnN0cnVjdHVyZSgpICE9IGNhbGxlZS0+c3RydWN0
dXJlKCkKLSAgICAgICAgfHwgb2xkQ2FsbGVlLT5leGVjdXRhYmxlKCkgIT0gY2FsbGVlLT5leGVj
dXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQoY2FsbGVl
LT5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjb2RlUHRyID0gY2FsbGVlLT5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVG
b3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2s7Ci0gICAgaWYgKGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKQotICAg
ICAgICBjb2RlQmxvY2sgPSAwOwotICAgIGVsc2UgewotICAgICAgICBjb2RlQmxvY2sgPSBqc0Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2FsbGVlLT5leGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tG
b3JDYWxsKCk7Ci0gICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGxpbmtDbG9zdXJl
Q2FsbCgKLSAgICAgICAgZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssCi0gICAg
ICAgIGNhbGxlZS0+c3RydWN0dXJlKCksIGNhbGxlZS0+ZXhlY3V0YWJsZSgpLCBjb2RlUHRyKTsK
LSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQotewotICAgIEpTQ2VsbCog
Y2FsbGVlQXNGdW5jdGlvbkNlbGw7Ci0gICAgY2hhciogcmVzdWx0ID0gdmlydHVhbEZvcldpdGhG
dW5jdGlvbihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwot
ICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUo
KS0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsK
LQotICAgIGlmICghYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCwgY2FsbExpbmtJbmZvKSkKLSAgICAgICAgbGlua1Nsb3dGb3IoZXhl
Y0NhbGxlZSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7Ci0gICAgCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVj
U3RhdGUqIGV4ZWNDYWxsZWUpCi17ICAgIAotICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxs
ZWUsIENvZGVGb3JDYWxsKTsKLX0KLQotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0
dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKLXsKLSAgICByZXR1cm4gdmlydHVh
bEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1ByaW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIHZhbHVlKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25U
b1ByaW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwpAQCAtMTQxNyw3ICs2MDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblRvCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlOjpkZWNv
ZGUodmFsdWUpLnRvUHJpbWl0aXZlKGV4ZWMpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25OZXdBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1
cmUsIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0FycmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwg
dm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTE0MjUsNyAr
NjExLDcgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheShFeAogICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKGV4
ZWMsIGFycmF5U3RydWN0dXJlLCBzdGF0aWNfY2FzdDxKU1ZhbHVlKj4oYnVmZmVyKSwgc2l6ZSkp
OwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlKQorY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25OZXdFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJh
eVN0cnVjdHVyZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTE0MzMsNyArNjE5LDcgQEAgY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdFbXB0eUFycgogICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8Y2hhcio+KEpTQXJyYXk6OmNyZWF0ZSgqdm0sIGFycmF5U3RydWN0dXJlKSk7CiB9CiAKLWNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGludDMyX3Qgc2l6ZSkKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGludDMyX3Qgc2l6ZSkKIHsKICAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAg
LTE0NDQsMTIyICs2MzAsMTIyIEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJy
YXlXaXQKICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihKU0FycmF5OjpjcmVhdGUoKnZt
LCBhcnJheVN0cnVjdHVyZSwgc2l6ZSkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0FycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVj
dHVyZSwgc2l6ZV90IHN0YXJ0LCBzaXplX3Qgc2l6ZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3Ry
dWN0dXJlLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBzaXplKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVk
KGV4ZWMsIGFycmF5U3RydWN0dXJlLCBleGVjLT5jb2RlQmxvY2soKS0+Y29uc3RhbnRCdWZmZXIo
c3RhcnQpLCBzaXplKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50
OEFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJh
eVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGlu
dDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNJbnQ4
QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNJbnQ4QXJyYXk+
KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25OZXdJbnQxNkFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRB
cnJheVdpdGhTaXplPEpTSW50MTZBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQog
Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoT25lQXJndW1l
bnQoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoT25lQXJn
dW1lbnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9u
ZUFyZ3VtZW50PEpTSW50MTZBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwog
fQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlXaXRoU2l6ZSgK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhTaXplKAogICAg
IEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQog
ewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNJbnQzMkFycmF5PihleGVjLCBz
dHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
SW50MzJBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3SW50MzJBcnJheVdpdGhPbmVBcmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0
dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNJbnQzMkFycmF5PihleGVjLCBzdHJ1
Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3VWludDhBcnJheVdpdGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdV
aW50OEFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6
ZTxKU1VpbnQ4QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAg
IEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxK
U1VpbnQ4QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhTaXplKAorY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhTaXplKAog
ICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3Ro
KQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNVaW50OENsYW1wZWRBcnJh
eT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhPbmVBcmd1bWVudCgKICAg
ICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8
SlNVaW50OENsYW1wZWRBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQog
Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aFNpemUoCitj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aFNpemUoCiAgICAg
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7
CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU1VpbnQxNkFycmF5PihleGVjLCBz
dHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
VWludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld1VpbnQxNkFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBy
ZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU1VpbnQxNkFycmF5PihleGVjLCBz
dHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3VWludDMyQXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3VWludDMyQXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdp
dGhTaXplPEpTVWludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAotY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhPbmVBcmd1bWVudCgK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlXaXRoT25lQXJndW1l
bnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFy
Z3VtZW50PEpTVWludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKIH0K
IAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoU2l6ZSgK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aFNpemUoCiAg
ICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgp
CiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0Zsb2F0MzJBcnJheT4oZXhl
Yywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0Zsb2F0MzJBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
ICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU0Zsb2F0MzJBcnJheT4o
ZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlw
ZWRBcnJheVdpdGhTaXplPEpTRmxvYXQ2NEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7
CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aE9u
ZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlX
aXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFy
cmF5V2l0aE9uZUFyZ3VtZW50PEpTRmxvYXQ2NEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29k
ZWRWYWx1ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
UmVnZXhwKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogcmVnZXhwUHRyKQorRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBy
ZWdleHBQdHIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNTcyLDcgKzc1OCw3IEBAIEVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwg
cmVnZXhwKSk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3Rp
dmF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25D
cmVhdGVBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE1
ODEsNyArNzY3LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdAog
ICAgIHJldHVybiBhY3RpdmF0aW9uOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ3JlYXRlQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYykKK0pTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25DcmVhdGVBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOwpAQCAtMTU5Miw3ICs3NzgsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlQXJnCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNyZWF0ZUlubGluZWRBcmd1bWVudHMoCitKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50cygKICAgICBFeGVjU3RhdGUqIGV4ZWMsIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CkBAIC0xNjA0LDcgKzc5MCw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25D
cmVhdGVJbmwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uVGVhck9mZkFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYXJndW1lbnRz
Q2VsbCwgSlNDZWxsKiBhY3RpdmF0aW9uQ2VsbCkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBhcmd1bWVudHNDZWxs
LCBKU0NlbGwqIGFjdGl2YXRpb25DZWxsKQogewogICAgIEFTU0VSVChleGVjLT5jb2RlQmxvY2so
KS0+dXNlc0FyZ3VtZW50cygpKTsKICAgICBpZiAoYWN0aXZhdGlvbkNlbGwpIHsKQEAgLTE2MTQs
MTQgKzgwMCwxNCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFyZ3VtCiAg
ICAganNDYXN0PEFyZ3VtZW50cyo+KGFyZ3VtZW50c0NlbGwpLT50ZWFyT2ZmKGV4ZWMpOwogfQog
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZklubGluZWRBcmd1bWVudHMoCit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZklubGluZWRBcmd1bWVudHMoCiAgICAg
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGFyZ3VtZW50c0NlbGwsIEpTQ2VsbCogYWN0aXZhdGlv
bkNlbGwsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogewogICAgIEFTU0VSVF9V
TlVTRUQoYWN0aXZhdGlvbkNlbGwsICFhY3RpdmF0aW9uQ2VsbCk7IC8vIEN1cnJlbnRseSwgd2Ug
ZG9uJ3QgaW5saW5lIGZ1bmN0aW9ucyB3aXRoIGFjdGl2YXRpb25zLgogICAgIGpzQ2FzdDxBcmd1
bWVudHMqPihhcmd1bWVudHNDZWxsKS0+dGVhck9mZihleGVjLCBpbmxpbmVDYWxsRnJhbWUpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYXJndW1lbnRzUmVnaXN0ZXIpCitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aChFeGVjU3Rh
dGUqIGV4ZWMsIGludDMyX3QgYXJndW1lbnRzUmVnaXN0ZXIpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBA
IC0xNjMzLDcgKzgxOSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
R2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQs
IHNsb3QpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRB
cmd1bWVudEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3Rlciwg
aW50MzJfdCBpbmRleCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0
QXJndW1lbnRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYXJndW1lbnRzUmVnaXN0ZXIs
IGludDMyX3QgaW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNjQ4LDcgKzgzNCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGFyZ3VtZW50c1ZhbHVlLmdldChleGVjLCBpbmRleCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFsKAor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRJbmxpbmVkQXJndW1lbnRC
eVZhbCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYXJndW1lbnRzUmVnaXN0ZXIsIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBpbnQzMl90IGluZGV4KQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0xNjY2LDcgKzg1Miw3IEBAIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFyZ3Vt
ZW50c1ZhbHVlLmdldChleGVjLCBpbmRleCkpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTmV3RnVuY3Rpb25Ob0NoZWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5j
dGlvbkV4ZWN1dGFibGUpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rp
b25Ob0NoZWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUpCiB7
CiAgICAgQVNTRVJUKGZ1bmN0aW9uRXhlY3V0YWJsZS0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRh
YmxlOjppbmZvKCkpKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtMTY3NCw3ICs4NjAs
NyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3RpCiAgICAgcmV0dXJu
IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
PihmdW5jdGlvbkV4ZWN1dGFibGUpLCBleGVjLT5zY29wZSgpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogZnVuY3Rpb25FeGVjdXRhYmxlKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogZnVuY3Rpb25FeGVj
dXRhYmxlKQogewogICAgIEFTU0VSVChmdW5jdGlvbkV4ZWN1dGFibGUtPmluaGVyaXRzKEZ1bmN0
aW9uRXhlY3V0YWJsZTo6aW5mbygpKSk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTE2
ODIsNyArODY4LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZQog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHN0YXRp
Y19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSksIGV4ZWMtPnNj
b3BlKCkpKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9u
RXhwcmVzc2lvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRhYmxlQXND
ZWxsKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uRXhwcmVzc2lv
bihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRhYmxlQXNDZWxsKQogewog
ICAgIEFTU0VSVChmdW5jdGlvbkV4ZWN1dGFibGVBc0NlbGwtPmluaGVyaXRzKEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6aW5mbygpKSk7CiAKQEAgLTE2OTQsMzMgKzg4MCwyMiBAQCBKU0NlbGwqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3RpCiAgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0
ZShleGVjLCBmdW5jdGlvbkV4ZWN1dGFibGUsIGV4ZWMtPnNjb3BlKCkpOwogfQogCi1zaXplX3Qg
REZHX09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIHZhbHVlKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSXNPYmplY3QoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICByZXR1cm4ganNJc09i
amVjdFR5cGUoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLXNpemVfdCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbklzRnVuY3Rpb24oRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitzaXpl
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jc0Z1bmN0aW9uKEVuY29kZWRKU1ZhbHVlIHZhbHVl
KQogewogICAgIHJldHVybiBqc0lzRnVuY3Rpb25UeXBlKEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkp
OwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiB2YWx1ZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBl
T2YoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIHZhbHVlKQogewogICAgIHJldHVybiBqc1R5cGVT
dHJpbmdGb3JWYWx1ZShleGVjLCBKU1ZhbHVlKHZhbHVlKSkuYXNDZWxsKCk7CiB9CiAKLXZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
LQotICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPiBiYXNlLT5zdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgQVNTRVJUKCF2bS5oZWFwLnN0b3Jh
Z2VBbGxvY2F0b3IoKS5mYXN0UGF0aFNob3VsZFN1Y2NlZWQoc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgYmFzZS0+c2V0U3RydWN0dXJlQW5k
UmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSh2bSwgc3RydWN0dXJlKTsKLSAgICBiYXNlLT5w
dXREaXJlY3Qodm0sIG9mZnNldCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7Ci19Ci0KLWNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlh
bENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYykKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE3MjksNyArOTA0LDcgQEAgY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25BbGxvY2F0ZVBybwogICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQodm0sIDAsIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSwgZmFsc2UsIDApKTsK
IH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZShFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBuZXdTaXplKQorY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBu
ZXdTaXplKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTczOCw3ICs5MTMsNyBAQCBjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvCiAgICAgICAgIEJ1dHRlcmZseTo6Y3JlYXRl
VW5pbml0aWFsaXplZCh2bSwgMCwgMCwgbmV3U2l6ZSwgZmFsc2UsIDApKTsKIH0KIAotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlT
dG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmpl
Y3QpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hh
dmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE3NDksNyArOTI0LDcgQEAgY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKK2NoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOwpAQCAtMTc1OSw3ICs5MzQsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blJlYWxsb2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7
CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIGNlbGwpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3Vy
ZUludDMyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpA
QCAtMTc3MCw3ICs5NDUsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUlu
dDMyCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5l
bnN1cmVJbnQzMih2bSkuZGF0YSgpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25FbnN1cmVEb3VibGUoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
Y2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE3ODEsNyArOTU2LDcgQEAgY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25FbnN1cmVEb3VibAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJlRG91YmxlKHZtKS5kYXRhKCkpOwogfQogCi1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGNlbGwpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNv
bnRpZ3VvdXMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CkBAIC0xNzkyLDcgKzk2Nyw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJl
Q29udGkKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCkt
PmVuc3VyZUNvbnRpZ3VvdXModm0pLmRhdGEoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUmFnZUVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNl
bGwpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJhZ2VFbnN1cmVDb250aWd1b3VzKEV4
ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTgwMyw3
ICs5NzgsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJhZ2VFbnN1cmVDCiAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5yYWdlRW5zdXJl
Q29udGlndW91cyh2bSkuZGF0YSgpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25FbnN1cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4MTQsNyArOTg5LDcgQEAg
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheQogICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJlQXJyYXlTdG9yYWdlKHZt
KSk7CiB9CiAKLVN0cmluZ0ltcGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJvcGUo
RXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nKQorU3RyaW5nSW1wbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25SZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJp
bmcpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xODIyLDcgKzk5Nyw3IEBAIFN0cmluZ0ltcGwqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2wKICAgICByZXR1cm4gc3RyaW5nLT52YWx1ZShleGVj
KS5pbXBsKCk7CiB9CiAKLUpTU3RyaW5nKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNo
YXJhY3RlclN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgY2hhcmFjdGVyKQorSlNTdHJp
bmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgaW50MzJfdCBjaGFyYWN0ZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xODMwLDcg
KzEwMDUsNyBAQCBKU1N0cmluZyogREZHX09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVDCiAgICAg
cmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIHN0YXRpY19jYXN0PFVDaGFyPihj
aGFyYWN0ZXIpKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmlu
Z09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdChF
eGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcsIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOwpAQCAtMTgzOCw3ICsxMDEzLDcgQEAgSlNDZWxsKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld1N0cmluZwogICAgIHJldHVybiBTdHJpbmdPYmplY3Q6OmNyZWF0ZShl
eGVjLCBzdHJ1Y3R1cmUsIHN0cmluZyk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVy
YXRpb25Ub1N0cmluZ09uQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK0pTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZ09uQ2VsbChFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4NDYsNyArMTAyMSw3IEBAIEpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZ08KICAgICByZXR1cm4gSlNWYWx1
ZShjZWxsKS50b1N0cmluZyhleGVjKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4NTQsNyArMTAyOSw3IEBA
IEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZygKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZGVjb2RlKHZhbHVlKS50b1N0cmluZyhleGVjKTsKIH0KIAotSlNDZWxsKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMihFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBsZWZ0
LCBKU1N0cmluZyogcmlnaHQpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJv
cGUyKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGxlZnQsIEpTU3RyaW5nKiByaWdodCkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKQEAgLTE4NjIsNyArMTAzNyw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElP
TiBvcGVyYXRpb25NYWtlUm9wZTIKICAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0s
IGxlZnQsIHJpZ2h0KTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VS
b3BlMyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBhLCBKU1N0cmluZyogYiwgSlNTdHJpbmcq
IGMpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNTdHJpbmcqIGEsIEpTU3RyaW5nKiBiLCBKU1N0cmluZyogYykKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKQEAgLTE4NzAsNyArMTA0NSw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25NYWtlUm9wZTMKICAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIGEsIGIsIGMp
OwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRG
b3JEb3VibGUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJn
ZXRGb3JEb3VibGUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KQogewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
ZXhlYy0+Y29kZUJsb2NrKCk7CkBAIC0xODg0LDcgKzEwNTksNyBAQCBjaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPih0
YWJsZS5jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogfQogCi1jaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCB0YWJs
ZUluZGV4LCBKU1N0cmluZyogc3RyaW5nKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25T
d2l0Y2hTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgdGFibGVJbmRleCwgSlNTdHJpbmcq
IHN0cmluZykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4OTIsMzIgKzEwNjcsMTkgQEAgY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbgogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjaGFyKj4oZXhlYy0+Y29kZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KS5jdGlGb3JWYWx1ZShzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CiB9CiAKLWRvdWJsZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMo
aW50MzJfdCBhLCBpbnQzMl90IGIpCitkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GTW9k
T25JbnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQogewogICAgIHJldHVybiBmbW9kKGEsIGIpOwog
fQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlKEV4
ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBvcDEpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uU3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBvcDEpCiB7CiAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAgICAgcmV0dXJuIEpTQzo6c3RyaW5nRnJvbUNoYXJDb2RlKGV4ZWMsIG9w
MSk7CiB9CiAKLURGR0hhbmRsZXJFbmNvZGVkIERGR19PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9u
SGFuZGxlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICBKU1ZhbHVl
IGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgQVNTRVJUKGV4Y2VwdGlv
blZhbHVlKTsKLSAgICAKLSAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBnZW5lcmljVW53
aW5kKHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgQVNTRVJUKGhhbmRsZXIuY2F0Y2hS
b3V0aW5lKTsKLSAgICByZXR1cm4gZGZnSGFuZGxlckVuY29kZWQoaGFuZGxlci5jYWxsRnJhbWUs
IGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKLX0KLQotc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29u
dmVydEpTVmFsdWVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUp
CitzaXplX3QgSklUX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTE5MjYs
NyArMTA4OCw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG8KICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKS50b1VJbnQzMihleGVjKTsKIH0KIAotc2l6
ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCitzaXplX3QgSklUX09QRVJBVElPTiBkZmdD
b252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTE5MzQsNyArMTA5Niw3IEBAIHNpemVfdCBE
RkdfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcCkudG9Cb29sZWFuKGV4ZWMpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04g
ZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqIGV4ZWMsIHZv
aWQqIGRlYnVnSW5mb1Jhdywgdm9pZCogc2NyYXRjaCkKK3ZvaWQgSklUX09QRVJBVElPTiBkZWJ1
Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCog
ZGVidWdJbmZvUmF3LCB2b2lkKiBzY3JhdGNoKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTk3Miw3
ICsxMTM0LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcAogICAg
IGRhdGFMb2coIlxuIik7CiB9CiAKLWV4dGVybiAiQyIgdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdn
ZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK2V4dGVybiAiQyIgdm9p
ZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKICAgICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdD
IHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxkbid0CiAgICAgLy8gcmVhbGx5
IGJlIHByb2ZpdGFibGUuCkBAIC0yMDE2LDcgKzExNzgsNyBAQCBleHRlcm4gIkMiIHZvaWQgREZH
X09QRVJBVElPTiB0cmlnZ2VyUmVvCiB9CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKLXZvaWQgREZH
X09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0ZSogZXhlYykKK3ZvaWQgSklUX09Q
RVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKQEAgLTIwNzgsNyArMTI0MCw3IEBAIHZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyVGllclVw
Tm93KEV4ZWMKICAgICAgICAgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0
ZShjb2RlQmxvY2spLCB2bS0+ZW5zdXJlV29ya2xpc3QoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVS
QVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAorY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NS
RW50cnlOb3coCiAgICAgRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIGlu
dDMyX3Qgc3RyZWFtSW5kZXgpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC0yMTk3
LDcgKzEzNTksNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKIAog
Ly8gRklYTUU6IE1ha2UgY2FsbHMgd29yayB3ZWxsLiBDdXJyZW50bHkgdGhleSdyZSBhIHB1cmUg
cmVncmVzc2lvbi4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTM2MjEKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ2FsbChFeGVj
U3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZUTENh
bGwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEV4ZWNTdGF0ZSogY2FsbGVyRXhlYyA9IGV4ZWMt
PmNhbGxlckZyYW1lKCk7CiAgICAgCkBAIC0yMjE3LDcgKzEzNzksNyBAQCBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZUCiAKIC8vIEZJWE1FOiBNYWtlIGNhbGxzIHdvcmsg
d2VsbC4gQ3VycmVudGx5IHRoZXkncmUgYSBwdXJlIHJlZ3Jlc3Npb24uCiAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIxCi1FbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkZUTENvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZUTENvbnN0cnVjdChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgRXhlY1N0YXRlKiBjYWxsZXJFeGVjID0gZXhlYy0+Y2FsbGVyRnJhbWUoKTsK
ICAgICAKQEAgLTIyNDEsODYgKzE0MDMsNCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkZUCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAotbmFtZXNwYWNlIEpT
QyB7Ci0KLSNpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODZfNjQpCi1hc20gKAotIi5nbG9ibCAi
IFNZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgotSElERV9TWU1CT0wo
Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgotU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlKSAiOiIgIlxuIgotICAgICJtb3YgNDAoJXIxMyksICVyMTNcbiIKLSAgICAibW92
ICVyMTMsICVyZGlcbiIKLSAgICAiam1wICIgTE9DQUxfUkVGRVJFTkNFKGdldEhvc3RDYWxsUmV0
dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiXG4iCi0pOwotI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBD
UFUoWDg2KQotYXNtICgKLSIudGV4dCIgIlxuIiBcCi0iLmdsb2JsICIgU1lNQk9MX1NUUklORyhn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1ISURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVy
blZhbHVlKSAiXG4iCi1TWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6IiAi
XG4iCi0gICAgIm1vdiA0MCglZWRpKSwgJWVkaVxuIgotICAgICJtb3YgJWVkaSwgNCglZXNwKVxu
IgotICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhF
eGVjU3RhdGUpICJcbiIKLSk7Ci0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShBUk1fVEhVTUIy
KQotYXNtICgKLSIudGV4dCIgIlxuIgotIi5hbGlnbiAyIiAiXG4iCi0iLmdsb2JsICIgU1lNQk9M
X1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1ISURFX1NZTUJPTChnZXRIb3N0
Q2FsbFJldHVyblZhbHVlKSAiXG4iCi0iLnRodW1iIiAiXG4iCi0iLnRodW1iX2Z1bmMgIiBUSFVN
Ql9GVU5DX1BBUkFNKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKLVNZTUJPTF9TVFJJTkco
Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKLSAgICAibGRyIHI1LCBbcjUsICM0MF0i
ICJcbiIKLSAgICAibW92IHIwLCByNSIgIlxuIgotICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGdl
dEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiXG4iCi0pOwotI2VsaWYgQ09NUElM
RVIoR0NDKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKQotYXNtICgKLSIudGV4dCIgIlxuIgotIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgotSElERV9T
WU1CT0woZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgotSU5MSU5FX0FSTV9GVU5DVElPTihn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlKQotU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZh
bHVlKSAiOiIgIlxuIgotICAgICJsZHIgcjUsIFtyNSwgIzQwXSIgIlxuIgotICAgICJtb3YgcjAs
IHI1IiAiXG4iCi0gICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1
ZVdpdGhFeGVjU3RhdGUpICJcbiIKLSk7Ci0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShNSVBT
KQotYXNtKAotIi50ZXh0IiAiXG4iCi0iLmdsb2JsICIgU1lNQk9MX1NUUklORyhnZXRIb3N0Q2Fs
bFJldHVyblZhbHVlKSAiXG4iCi1ISURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAi
XG4iCi1TWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6IiAiXG4iCi0gICAg
TE9BRF9GVU5DVElPTl9UT19UOShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkK
LSAgICAibHcgJHMwLCA0MCgkczApIiAiXG4iCi0gICAgIm1vdmUgJGEwLCAkczAiICJcbiIKLSAg
ICAiYiAiIExPQ0FMX1JFRkVSRU5DRShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0
ZSkgIlxuIgotKTsKLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFNINCkKLWFzbSgKLSIudGV4
dCIgIlxuIgotIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkg
IlxuIgotSElERV9TWU1CT0woZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgotU1lNQk9MX1NU
UklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiOiIgIlxuIgotICAgICJhZGQgIzQwLCByMTQi
ICJcbiIKLSAgICAibW92LmwgQHIxNCwgcjE0IiAiXG4iCi0gICAgIm1vdiByMTQsIHI0IiAiXG4i
Ci0gICAgIm1vdi5sIDJmLCAiIFNINF9TQ1JBVENIX1JFR0lTVEVSICJcbiIKLSAgICAiYnJhZiAi
IFNINF9TQ1JBVENIX1JFR0lTVEVSICJcbiIKLSAgICAibm9wIiAiXG4iCi0gICAgIjE6IC5iYWxp
Z24gNCIgIlxuIgotICAgICIyOiAubG9uZyAiIExPQ0FMX1JFRkVSRU5DRShnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkgIi0xYlxuIgotKTsKLSNlbmRpZgotCi1leHRlcm4gIkMi
IEVuY29kZWRKU1ZhbHVlIEhPU1RfQ0FMTF9SRVRVUk5fVkFMVUVfT1BUSU9OIGdldEhvc3RDYWxs
UmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoIWV4
ZWMpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnZtKCkuaG9zdENhbGxSZXR1cm5WYWx1ZSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTY0NzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZH
SklUQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUHV0
S2luZC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM3LDI4OCArMzgsMTI5IEBAIG5hbWVzcGFj
ZSBERkcgewogCiBleHRlcm4gIkMiIHsKIAotI2lmIENBTExJTkdfQ09OVkVOVElPTl9JU19TVERD
QUxMCi0jZGVmaW5lIERGR19PUEVSQVRJT04gQ0RFQ0wKLSNlbHNlCi0jZGVmaW5lIERGR19PUEVS
QVRJT04KLSNlbmRpZgotCi0vLyBUaGVzZSB0eXBlZGVmcyBwcm92aWRlIHR5cGVjaGVja2luZyB3
aGVuIGdlbmVyYXRpbmcgY2FsbHMgb3V0IHRvIGhlbHBlciByb3V0aW5lczsKLS8vIHRoaXMgaGVs
cHMgcHJldmVudCBjYWxsaW5nIGEgaGVscGVyIHJvdXRpbmUgd2l0aCB0aGUgd3JvbmcgYXJndW1l
bnRzIQotLyoKLSAgICBLZXk6Ci0gICAgVjogdm9pZAotICAgIEo6IEpTVmFsdWUKLSAgICBQOiBw
b2ludGVyICh2b2lkKikKLSAgICBDOiBKU0NlbGwqCi0gICAgQTogSlNBcnJheSoKLSAgICBTOiBz
aXplX3QKLSAgICBaOiBpbnQzMl90Ci0gICAgRDogZG91YmxlCi0gICAgSTogU3RyaW5nSW1wbCoK
LSovCi10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlv
bl9FKShFeGVjU3RhdGUqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAo
KkpfREZHT3BlcmF0aW9uX0VBKShFeGVjU3RhdGUqLCBKU0FycmF5Kik7Ci10eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FQVopKEV4ZWNTdGF0ZSos
IEpTQXJyYXkqLCBpbnQzMl90KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiAoKkpfREZHT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKLXR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgSlNDZWxsKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gKCpKX0RGR09wZXJhdGlvbl9FQ0kpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwq
KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9u
X0VDSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRURBKShFeGVjU3RhdGUq
LCBkb3VibGUsIEpTQXJyYXkqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiAoKkpfREZHT3BlcmF0aW9uX0VJKShFeGVjU3RhdGUqLCBTdHJpbmdJbXBsKik7Ci10eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSikoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSl9ERkdPcGVyYXRpb25fRUpBKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNB
cnJheSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVy
YXRpb25fRUpJKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopOwotdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUpKKShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUpzc1opKEV4ZWNTdGF0
ZSosIEpTU3RyaW5nKiwgaW50MzJfdCk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSlApKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCB2
b2lkKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJh
dGlvbl9FUCkoRXhlY1N0YXRlKiwgdm9pZCopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVBQKShFeGVjU3RhdGUqLCB2b2lkKiwgdm9pZCop
OwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25f
RVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTUykoRXhlY1N0YXRlKiwgc2l6ZV90LCBz
aXplX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVy
YXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVpJY2ZaKShFeGVjU3RhdGUqLCBpbnQzMl90
LCBJbmxpbmVDYWxsRnJhbWUqLCBpbnQzMl90KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50
MzJfdCk7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0Up
KEV4ZWNTdGF0ZSopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJh
dGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJB
VElPTiAoKkNfREZHT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKLXR5cGVkZWYg
SlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBK
U0NlbGwqLCBKU0NlbGwqKTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdP
cGVyYXRpb25fRUljZikoRXhlY1N0YXRlKiwgSW5saW5lQ2FsbEZyYW1lKik7Ci10eXBlZGVmIEpT
Q2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0
aW9uX0VKc3NTdCkoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBTdHJ1Y3R1cmUqKTsKLXR5cGVkZWYg
SlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUpzc0pzcykoRXhlY1N0YXRl
KiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04g
KCpDX0RGR09wZXJhdGlvbl9FSnNzSnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3Ry
aW5nKiwgSlNTdHJpbmcqKTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdP
cGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QpOwotdHlwZWRlZiBK
U0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlv
bl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci10eXBlZGVmIGRvdWJsZSBERkdfT1BFUkFUSU9O
ICgqRF9ERkdPcGVyYXRpb25fREQpKGRvdWJsZSwgZG91YmxlKTsKLXR5cGVkZWYgZG91YmxlIERG
R19PUEVSQVRJT04gKCpEX0RGR09wZXJhdGlvbl9aWikoaW50MzJfdCwgaW50MzJfdCk7Ci10eXBl
ZGVmIGRvdWJsZSBERkdfT1BFUkFUSU9OICgqRF9ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgaW50MzJfdCBERkdfT1BFUkFUSU9OICgqWl9ERkdP
cGVyYXRpb25fRCkoZG91YmxlKTsKLXR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RG
R09wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwotdHlwZWRlZiBz
aXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRp
b25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwotdHlw
ZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0opKEVuY29kZWRKU1Zh
bHVlKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRSkoRXhl
Y1N0YXRlKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VP
WkQpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwgZG91YmxlKTsKLXR5cGVkZWYgdm9p
ZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRU9aSikoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElP
TiAoKlZfREZHT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKLXR5cGVkZWYgdm9p
ZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNJY2YpKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIElubGluZUNhbGxGcmFtZSopOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RG
R09wZXJhdGlvbl9FQ0NJY2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCosIElubGluZUNh
bGxGcmFtZSopOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9F
Q0pKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
OwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ1opKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpW
X0RGR09wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwotdHlwZWRl
ZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FSkNJKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwotdHlwZWRlZiB2b2lkIERGR19P
UEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FSkpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BF
UkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUpQUCkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IHZvaWQqLCB2b2lkKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0
aW9uX0VQWkopKEV4ZWNTdGF0ZSosIHZvaWQqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Ci10
eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX1cpKFdhdGNocG9pbnRT
ZXQqKTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0UpKEV4
ZWNTdGF0ZSopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25f
RUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgq
UF9ERkdPcGVyYXRpb25fRUpTKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90KTsK
LXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPKShFeGVjU3Rh
dGUqLCBKU09iamVjdCopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVy
YXRpb25fRU9TKShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCk7Ci10eXBlZGVmIGNoYXIq
IERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FT1opKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgaW50MzJfdCk7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlv
bl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BF
UkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVMpKEV4ZWNTdGF0ZSosIHNpemVfdCk7Ci10eXBlZGVm
IGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU0pzcykoRXhlY1N0YXRlKiwg
c2l6ZV90LCBKU1N0cmluZyopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdP
cGVyYXRpb25fRVN0KShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKLXR5cGVkZWYgY2hhciogREZH
X09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdEopKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3Bl
cmF0aW9uX0VTdFBTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KTsKLXR5
cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdFNTKShFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVfdCk7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVS
QVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3RaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQz
Ml90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VaWiko
RXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCk7Ci10eXBlZGVmIFN0cmluZ0ltcGwqIERGR19P
UEVSQVRJT04gKCpJX0RGR09wZXJhdGlvbl9FSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyopOwot
dHlwZWRlZiBKU1N0cmluZyogREZHX09QRVJBVElPTiAoKkpzc19ERkdPcGVyYXRpb25fRVopKEV4
ZWNTdGF0ZSosIGludDMyX3QpOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmlu
Z0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqLCBpbnQzMl90KSAgV1RGX0lOVEVSTkFMOyAKK0pTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiwg
aW50MzJfdCkgIFdURl9JTlRFUk5BTDsgCiAKIC8vIFRoZXNlIHJvdXRpbmVzIGFyZSBwcm92aWRl
IGNhbGxiYWNrcyBvdXQgdG8gQysrIGltcGxlbWVudGF0aW9ucyBvZiBvcGVyYXRpb25zIHRvbyBj
b21wbGV4IHRvIEpJVC4KLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3Qo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGNvbnN0cnVjdG9y
LCBpbnQzMl90IGlubGluZUNhcGFjaXR5KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblRvVGhpc1N0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZh
bHVlQWRkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwotRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5
KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEJ5VmFsQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJv
cGVydHkpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uR2V0QnlWYWxBcnJheUludChFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCkgV1RGX0lO
VEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0
cmluZ0ludChFeGVjU3RhdGUqLCBKU1N0cmluZyosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLUVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXplKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0lt
cGwqKTsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uSW4oRXhlY1N0YXRl
KiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25HZW5lcmljSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUpOwot
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQ3VzdG9tR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jLCBTdHJpbmdJbXBs
KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25D
YWxsR2V0dGVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLUVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9QcmltaXRpdmUoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3QXJyYXkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkgV1RG
X0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVfdCkgV1RGX0lOVEVSTkFMOwotY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdFbXB0eUFycmF5KEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7
Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhTaXplKEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0ludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2Rl
ZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
SW50MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9J
TlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhP
bmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lO
VEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aFNp
emUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aFNpemUoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3VWludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3VWludDMyQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQz
Ml90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQz
MkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0
MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRF
Uk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9u
ZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5U
RVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhT
aXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqLCB2
b2lkKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lO
VEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwot
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3RhdGUq
LCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVS
TkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3Vu
ZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5U
RVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRB
cnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIGRv
dWJsZSB2YWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFsdWUpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlKEV4ZWNTdGF0ZSos
IGRvdWJsZSB2YWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BB
bmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7Ci1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsK
LXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBs
KikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0Nl
bGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwot
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5n
SW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBs
KikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0Nl
bGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5B
TDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRM
aXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25D
cmVhdGVUaGlzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgaW50MzJfdCBpbmxp
bmVDYXBhY2l0eSkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Ub1RoaXMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSkgV1RG
X0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXNT
dHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSkgV1RGX0lOVEVSTkFM
OworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZChFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZh
bHVlQWRkTm90TnVtYmVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWwoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkgV1RGX0lOVEVSTkFM
OworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbENlbGwoRXhl
Y1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KSBXVEZfSU5U
RVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQXJy
YXlJbnQoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmdJbnQoRXhlY1N0
YXRlKiwgSlNTdHJpbmcqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHZvaWQqLCBzaXplX3QpIFdURl9JTlRFUk5BTDsKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlKiwgc2l6ZV90LCBzaXplX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3RW1wdHlBcnJheShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5U
RVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0ludDhBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNv
ZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdJbnQxNkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RG
X0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQxNkFycmF5V2l0
aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZf
SU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlXaXRo
U2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlXaXRoT25lQXJndW1lbnQoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3VWludDhBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3VWludDhDbGFtcGVkQXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3VWludDE2QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQz
Ml90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQx
NkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQz
MkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVS
TkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhPbmVB
cmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVS
TkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoU2l6
ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdpdGhPbmVBcmd1bWVudChFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiwgdm9pZCopIFdURl9JTlRF
Uk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdChFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFBy
b3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
IFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxO
b25TdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3Bl
cnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxC
ZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3Qg
aW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJp
Y3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFsdWUpIFdU
Rl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJl
eW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBp
bmRleCwgZG91YmxlIHZhbHVlKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaERvdWJsZShFeGVjU3RhdGUqLCBkb3VibGUgdmFsdWUs
IEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0
aChFeGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2Vs
bCopIFdURl9JTlRFUk5BTDsKIC8vIFRoZXNlIGNvbXBhcmlzb25zIHJldHVybiBhIGJvb2xlYW4g
d2l0aGluIGEgc2l6ZV90IHN1Y2ggdGhhdCB0aGUgdmFsdWUgaXMgemVybyBleHRlbmRlZCB0byBm
aWxsIHRoZSByZWdpc3Rlci4KLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRl
c3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwotc2l6ZV90IERG
R19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwot
c2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZf
SU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21w
YXJlR3JlYXRlckVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCop
IFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNz
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVMZXNzRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJO
QUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlRXEoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RG
X0lOVEVSTkFMOwogI2lmIFVTRShKU1ZBTFVFNjQpCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqLCBKU0NlbGwqIGxlZnQsIEpT
Q2VsbCogcmlnaHQpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxs
KiByaWdodCkgV1RGX0lOVEVSTkFMOwogI2Vsc2UKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqLCBKU0NlbGwqIGxlZnQsIEpTQ2VsbCogcmln
aHQpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVT
dHJpbmdFcShFeGVjU3RhdGUqLCBKU0NlbGwqIGxlZnQsIEpTQ2VsbCogcmlnaHQpIFdURl9JTlRF
Uk5BTDsKICNlbmRpZgotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxQ2VsbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRF
Uk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVh
bENvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotSlNDZWxs
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKikgV1RG
X0lOVEVSTkFMOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50
cyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqKSBX
VEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFyZ3VtZW50
cyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZklubGluZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgoRXhlY1N0YXRl
KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25HZXRJbmxpbmVkQXJndW1lbnRCeVZhbChFeGVjU3RhdGUqLCBpbnQzMl90LCBJbmxp
bmVDYWxsRnJhbWUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50QnlWYWwoRXhlY1N0YXRlKiwgaW50MzJfdCwg
aW50MzJfdCkgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0Z1bmN0aW9uTm9DaGVjayhFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSos
IEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdGdW5jdGlvbkV4cHJlc3Npb24oRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwot
ZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90
KSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotc2l6ZV90IERGR19PUEVS
QVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwot
SlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZihFeGVjU3RhdGUqLCBKU0NlbGwq
KSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0
b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBQcm9w
ZXJ0eU9mZnNldCwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5
KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgc2l6ZV90IG5ld1NpemUpIFdURl9J
TlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZs
eVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwgSlNP
YmplY3QqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxs
b2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25FbnN1cmVJbnQzMihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKLWNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uRW5zdXJlRG91YmxlKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSosIEpTQ2VsbCop
OwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SYWdlRW5zdXJlQ29udGlndW91cyhFeGVj
U3RhdGUqLCBKU0NlbGwqKTsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJy
YXlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotU3RyaW5nSW1wbCogREZHX09QRVJBVElP
TiBvcGVyYXRpb25SZXNvbHZlUm9wZShFeGVjU3RhdGUqLCBKU1N0cmluZyopOwotSlNTdHJpbmcq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSos
IGludDMyX3QpOwotCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2Jq
ZWN0KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgU3RydWN0dXJlKik7Ci1KU0NlbGwqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uVG9TdHJpbmdPbkNlbGwoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1KU0Nl
bGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUpOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMihFeGVjU3Rh
dGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyop
OwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91
YmxlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7Ci1jaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3Qg
dGFibGVJbmRleCwgSlNTdHJpbmcqKTsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcUNlbGwoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uKEV4ZWNTdGF0ZSop
IFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBcmd1
bWVudHMoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNyZWF0ZUlubGluZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgSW5saW5lQ2FsbEZyYW1l
KikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBcmd1
bWVudHMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZJbmxpbmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSopIFdURl9JTlRFUk5BTDsKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoKEV4ZWNT
dGF0ZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2V0SW5saW5lZEFyZ3VtZW50QnlWYWwoRXhlY1N0YXRlKiwgaW50MzJfdCwg
SW5saW5lQ2FsbEZyYW1lKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudEJ5VmFsKEV4ZWNTdGF0ZSosIGludDMy
X3QsIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdGdW5jdGlvbk5vQ2hlY2soRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbihFeGVjU3Rh
dGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5B
TDsKK2RvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCwgaW50
MzJfdCkgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSXNPYmpl
Y3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbklzRnVuY3Rpb24oRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5B
TDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2YoRXhlY1N0YXRlKiwgSlND
ZWxsKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKikgV1RGX0lOVEVS
TkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdl
V2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqLCBKU09iamVjdCopIFdURl9JTlRFUk5BTDsK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1By
b3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZf
SU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUludDMyKEV4ZWNT
dGF0ZSosIEpTQ2VsbCopOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVEb3Vi
bGUoRXhlY1N0YXRlKiwgSlNDZWxsKik7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVu
c3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlNDZWxsKik7CitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJhZ2VFbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwg
SlNDZWxsKik7CitTdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVSb3Bl
KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7CitKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRp
b25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJfdCk7CisKK0pTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiwgSlNTdHJp
bmcqLCBTdHJ1Y3R1cmUqKTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmlu
Z09uQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25Ub1N0cmluZyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CitKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJp
bmcqKTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMoRXhlY1N0YXRl
KiwgSlNTdHJpbmcqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7CitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyop
OwogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAvLyBGSVhNRTogTWFrZSBjYWxscyB3b3JrIHdlbGwu
IEN1cnJlbnRseSB0aGV5J3JlIGEgcHVyZSByZWdyZXNzaW9uLgogLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25GVExDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdU
Rl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ2Fs
bChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkZUTENvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiAjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCiAKLS8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9va3VwIGFu
IGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdoaWNoIGlzCi0vLyB0
aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQgdG8gb25lIG9mIHRo
ZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92ZS4KLQotLy8gQWNjb3JkaW5nIHRvIEMrKyBydWxlcywg
YSB0eXBlIHVzZWQgZm9yIHRoZSByZXR1cm4gc2lnbmF0dXJlIG9mIGZ1bmN0aW9uIHdpdGggQyBs
aW5rYWdlIChpLmUuCi0vLyAnZXh0ZXJuICJDIicpIG5lZWRzIHRvIGJlIFBPRDsgaGVuY2UgcHV0
dGluZyBhbnkgY29uc3RydWN0b3JzIGludG8gaXQgY291bGQgY2F1c2UgZWl0aGVyIGNvbXBpbGVy
Ci0vLyB3YXJuaW5ncywgb3Igd29yc2UsIGEgY2hhbmdlIGluIHRoZSBBQkkgdXNlZCB0byByZXR1
cm4gdGhlc2UgdHlwZXMuCi1zdHJ1Y3QgREZHSGFuZGxlciB7Ci0gICAgdW5pb24gVW5pb24gewot
ICAgICAgICBzdHJ1Y3QgU3RydWN0IHsKLSAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYzsKLSAg
ICAgICAgICAgIHZvaWQqIGhhbmRsZXI7Ci0gICAgICAgIH0gczsKLSAgICAgICAgdWludDY0X3Qg
ZW5jb2RlZDsKLSAgICB9IHU7Ci19OwotCi1pbmxpbmUgREZHSGFuZGxlciBjcmVhdGVERkdIYW5k
bGVyKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogaGFuZGxlcikKLXsKLSAgICBERkdIYW5kbGVyIHJl
c3VsdDsKLSAgICByZXN1bHQudS5zLmV4ZWMgPSBleGVjOwotICAgIHJlc3VsdC51LnMuaGFuZGxl
ciA9IGhhbmRsZXI7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotI2lmIENQVShYODZfNjQpCi10
eXBlZGVmIERGR0hhbmRsZXIgREZHSGFuZGxlckVuY29kZWQ7Ci1pbmxpbmUgREZHSGFuZGxlckVu
Y29kZWQgZGZnSGFuZGxlckVuY29kZWQoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBoYW5kbGVyKQot
ewotICAgIHJldHVybiBjcmVhdGVERkdIYW5kbGVyKGV4ZWMsIGhhbmRsZXIpOwotfQotI2Vsc2UK
LXR5cGVkZWYgdWludDY0X3QgREZHSGFuZGxlckVuY29kZWQ7Ci1pbmxpbmUgREZHSGFuZGxlckVu
Y29kZWQgZGZnSGFuZGxlckVuY29kZWQoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBoYW5kbGVyKQot
ewotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihERkdIYW5kbGVyOjpVbmlvbikgPT0gc2l6ZW9m
KHVpbnQ2NF90KSwgREZHSGFuZGxlcl9Vbmlvbl9pc182NGJpdCk7Ci0gICAgcmV0dXJuIGNyZWF0
ZURGR0hhbmRsZXIoZXhlYywgaGFuZGxlcikudS5lbmNvZGVkOwotfQotI2VuZGlmCi1ERkdIYW5k
bGVyRW5jb2RlZCBERkdfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRl
KikgV1RGX0lOVEVSTkFMOwotCiAvLyBUaGVzZSBvcGVyYXRpb25zIGltcGxlbWVudCB0aGUgaW1w
bGljaXRseSBjYWxsZWQgVG9JbnQzMiBhbmQgVG9Cb29sZWFuIGNvbnZlcnNpb25zIGZyb20gRVM1
LgogLy8gVGhpcyBjb252ZXJzaW9uIHJldHVybnMgYW4gaW50MzJfdCB3aXRoaW4gYSBzaXplX3Qg
c3VjaCB0aGF0IHRoZSB2YWx1ZSBpcyB6ZXJvIGV4dGVuZGVkIHRvIGZpbGwgdGhlIHJlZ2lzdGVy
Lgotc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUb0ludDMyKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBk
ZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RG
X0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUb0ludDMy
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09Q
RVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSkgV1RGX0lOVEVSTkFMOwogCi12b2lkIERGR19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25Q
cmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqLCB2b2lkKiwgdm9pZCopIFdURl9JTlRF
Uk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25G
YWlsdXJlKEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwogCi12b2lkIERG
R19PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayopIFdURl9JTlRF
Uk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJs
b2NrKikgV1RGX0lOVEVSTkFMOwogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCi12b2lkIERGR19PUEVS
QVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBE
RkdfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhFeGVjU3RhdGUqLCBpbnQzMl90IGJ5dGVj
b2RlSW5kZXgsIGludDMyX3Qgc3RyZWFtSW5kZXgpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09Q
RVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIq
IEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KEV4ZWNTdGF0ZSosIGludDMyX3QgYnl0
ZWNvZGVJbmRleCwgaW50MzJfdCBzdHJlYW1JbmRleCkgV1RGX0lOVEVSTkFMOwogI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQogCiB9IC8vIGV4dGVybiAiQyIKIAotaW5saW5lIFBfREZHT3BlcmF0
aW9uX0VTdFogb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5
VHlwZSB0eXBlKQoraW5saW5lIFBfSklUT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uTmV3VHlwZWRB
cnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAo
dHlwZSkgewogICAgIGNhc2UgVHlwZUludDg6CkBAIC0zNDcsNyArMTg5LDcgQEAgaW5saW5lIFBf
REZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uTmV3VAogICAgIHJldHVybiAwOwogfQogCi1pbmxp
bmUgUF9ERkdPcGVyYXRpb25fRVN0SiBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3Vt
ZW50Rm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQoraW5saW5lIFBfSklUT3BlcmF0aW9uX0VT
dEogb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudEZvclR5cGUoVHlwZWRBcnJh
eVR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFR5cGVJbnQ4OgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlclNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJTZXQuaAkocmV2aXNp
b24gMTU2NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlclNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgREZHUmVnaXN0ZXJTZXRfaAotI2RlZmlu
ZSBERkdSZWdpc3RlclNldF9oCi0KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLQotI2lmIEVO
QUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiRlBSSW5mby5oIgotI2luY2x1ZGUgIkdQUkluZm8u
aCIKLSNpbmNsdWRlIDx3dGYvQml0bWFwLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMgPQot
ICAgIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnM7Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNldCA9
Ci0gICAgKHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMgKyA3KSA+PiAzOwotCi10eXBlZGVmIHVpbnQ4
X3QgUmVnaXN0ZXJTZXRQT0RbbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXRdOwotCi1jbGFzcyBS
ZWdpc3RlclNldCB7Ci1wdWJsaWM6Ci0gICAgUmVnaXN0ZXJTZXQoKQotICAgIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCi0gICAg
ICAgICAgICBtX3NldFtpXSA9IDA7Ci0gICAgfQotICAgIAotICAgIFJlZ2lzdGVyU2V0KGNvbnN0
IFJlZ2lzdGVyU2V0UE9EJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0OyBpLS07KQotICAgICAgICAgICAgbV9zZXRbaV0g
PSBvdGhlcltpXTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgUmVnaXN0ZXJTZXRQT0QmIGFzUE9E
KCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KLSAgICAKLSAgICB2b2lkIGNvcHlJbmZvKFJlZ2lz
dGVyU2V0UE9EJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0OyBpLS07KQotICAgICAgICAgICAgb3RoZXJbaV0g
PSBtX3NldFtpXTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoR1BSUmVnIHJlZykKLSAgICB7
Ci0gICAgICAgIHNldEJpdChHUFJJbmZvOjp0b0luZGV4KHJlZykpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIHNldEdQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICBBU1NF
UlQoaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7Ci0gICAgICAgIHNldEJpdChp
bmRleCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xlYXIoR1BSUmVnIHJlZykKLSAgICB7Ci0g
ICAgICAgIGNsZWFyQml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAotICAg
IGJvb2wgZ2V0KEdQUlJlZyByZWcpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZ2V0Qml0
KEdQUkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZ2V0R1BSQnlJ
bmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0dXJuIGdldEJpdChpbmRl
eCk7Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVybiB0aGUgaW5kZXgndGggZnJlZSBHUFIuCi0g
ICAgR1BSUmVnIGdldEZyZWVHUFIodW5zaWduZWQgaW5kZXggPSAwKSBjb25zdAotICAgIHsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsp
IHsKLSAgICAgICAgICAgIGlmICghZ2V0R1BSQnlJbmRleChpKSAmJiAhaW5kZXgtLSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoRlBS
UmVnIHJlZykKLSAgICB7Ci0gICAgICAgIHNldEJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
cyArIEZQUkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0RlBS
QnlJbmRleCh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IEZQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgc2V0Qml0KEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzICsgaW5kZXgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNsZWFyKEZQUlJl
ZyByZWcpCi0gICAgewotICAgICAgICBjbGVhckJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
cyArIEZQUkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZ2V0KEZQ
UlJlZyByZWcpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZ2V0Qml0KEdQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0gICAgCi0g
ICAgYm9vbCBnZXRGUFJCeUluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwotICAgICAgICBy
ZXR1cm4gZ2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaW5kZXgpOwotICAgIH0K
LSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICB2b2lkIHNldEJ5SW5k
ZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICBzZXQoQmFua0luZm86OnRvUmVnaXN0
ZXIoaW5kZXgpKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+
Ci0gICAgYm9vbCBnZXRCeUluZGV4KHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGdldChCYW5rSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOwotICAgIH0KLSAgICAKLSAgICB1
bnNpZ25lZCBudW1iZXJPZlNldEdQUnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5zaWduZWQg
cmVzdWx0ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmICghZ2V0Qml0KGkpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVzdWx0Kys7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZTZXRG
UFJzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0g
ICAgICAgICAgICBpZiAoIWdldEJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVzdWx0Kys7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgbnVt
YmVyT2ZTZXRSZWdpc3RlcnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0
ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdG90YWxOdW1iZXJPZlJlZ2lzdGVyczsg
aS0tOykgewotICAgICAgICAgICAgaWYgKCFnZXRCaXQoaSkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICByZXN1bHQrKzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgdm9pZCBzZXRCaXQodW5zaWduZWQg
aSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpIDwgdG90YWxOdW1iZXJPZlJlZ2lzdGVycyk7Ci0g
ICAgICAgIG1fc2V0W2kgPj4gM10gfD0gKDEgPDwgKGkgJiA3KSk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgY2xlYXJCaXQodW5zaWduZWQgaSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpIDwgdG90
YWxOdW1iZXJPZlJlZ2lzdGVycyk7Ci0gICAgICAgIG1fc2V0W2kgPj4gM10gJj0gfigxIDw8IChp
ICYgNykpOwotICAgIH0KLSAgICAKLSAgICBib29sIGdldEJpdCh1bnNpZ25lZCBpKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAg
ICAgcmV0dXJuICEhKG1fc2V0W2kgPj4gM10gJiAoMSA8PCAoaSAmIDcpKSk7Ci0gICAgfQotICAg
IAotICAgIFJlZ2lzdGVyU2V0UE9EIG1fc2V0OwotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwotCi0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkgLT4gc28gaWYgREZHIGlzIGRpc2FibGVk
Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotLy8gRGVmaW5lIFJlZ2lzdGVy
U2V0UE9EIHRvIHNvbWV0aGluZyB0aGF0IGlzIGEgUE9ELCBidXQgaXMgb3RoZXJ3aXNlIHVzZWxl
c3MsCi0vLyB0byBtYWtlIGl0IGVhc2llciB0byByZWZlciB0byB0aGlzIHR5cGUgaW4gY29kZSB0
aGF0IG1heSBiZSBjb21waWxlZCB3aGVuCi0vLyB0aGUgREZHIGlzIGRpc2FibGVkLgotCi1zdHJ1
Y3QgUmVnaXN0ZXJTZXRQT0QgeyB9OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotI2VuZGlmIC8vIERGR1JlZ2lzdGVyU2V0X2gKLQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAx
NTY0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDE0MTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiREZHUmVwYXRjaC5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJD
Q2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJDYWxsRnJhbWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
REZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVK
SVQuaCIKLSNpbmNsdWRlICJERkdUaHVua3MuaCIKLSNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJv
dXRpbmUuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgotI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKLSNpbmNsdWRlICJSZXBhdGNo
QnVmZmVyLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCi0jaW5jbHVk
ZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKLQotc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIENv
ZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCi17Ci0g
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVibG9jayk7Ci0gICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOwotfQotCi1zdGF0aWMgdm9pZCBy
ZXBhdGNoQnlJZFNlbGZBY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sIGJvb2wgY29tcGFjdCkKLXsK
LSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLQotICAgIC8vIE9u
bHkgb3B0aW1pemUgb25jZSEKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIHNsb3dQYXRoRnVuY3Rpb24pOwotCi0gICAgLy8gUGF0Y2ggdGhlIHN0
cnVjdHVyZSBjaGVjayAmIHRoZSBvZmZzZXQgb2YgdGhlIGxvYWQuCi0gICAgcmVwYXRjaEJ1ZmZl
ci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNl
dCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKSwgc3Ry
dWN0dXJlKTsKLSAgICByZXBhdGNoQnVmZmVyLnNldExvYWRJbnN0cnVjdGlvbklzQWN0aXZlKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5jb252ZXJ0aWJsZUxvYWRBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdG9yYWdlTG9hZCksIGlzT3V0T2ZMaW5lT2Zmc2V0KG9m
ZnNldCkpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaWYgKGNvbXBhY3QpCi0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
Q29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3Jl
KSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkpOwotICAgIGVsc2UKLSAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0
b3JlKSwgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkpOwotI2VsaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICBpZiAoY29tcGFjdCkgewotICAgICAgICByZXBhdGNoQnVmZmVy
LnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIG9mZnNl
dFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgb2Zm
c2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRh
dGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9y
U3RvcmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
MzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3Rv
cmUpLCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgIH0KLSNl
bmRpZgotfQotCi1zdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAg
SlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQ
UikKLXsKLSAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUgJiYgc3RydWN0
dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIHN0
cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChj
b2RlQmxvY2spKTsKLSNpZiBERkdfRU5BQkxFKEpJVF9BU1NFUlQpCi0gICAgICAgIC8vIElmIHdl
IGV4ZWN1dGUgdGhpcyBjb2RlLCB0aGUgb2JqZWN0IG11c3QgaGF2ZSB0aGUgc3RydWN0dXJlIHdl
IGV4cGVjdC4gQXNzZXJ0Ci0gICAgICAgIC8vIHRoaXMgaW4gZGVidWcgbW9kZXMuCi0gICAgICAg
IGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9iamVjdCksIHNjcmF0Y2hH
UFIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IGppdC5icmFuY2hQdHIoCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwotICAg
ICAgICBqaXQuYnJlYWtwb2ludCgpOwotICAgICAgICBvay5saW5rKCZqaXQpOwotI2VuZGlmCi0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAgZmFpbHVyZUNhc2VzLmFw
cGVuZCgKLSAgICAgICAgaml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOwotfQotCi1zdGF0aWMgdm9pZCBhZGRTdHJ1
Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgSlNWYWx1ZSBwcm90b3R5cGUsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgTWFjcm9Bc3NlbWJs
ZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBz
Y3JhdGNoR1BSKQotewotICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKLSAgICAKLSAgICBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgIHByb3RvdHlwZS5hc0NlbGwoKSwgcHJv
dG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LAot
ICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotfQotCi1zdGF0aWMgdm9pZCByZXBs
YWNlV2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KQotewotICAg
IGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRo
UGF0Y2goKSkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKLSAgICAg
ICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hP
bkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRh
dGFMYWJlbFB0ckF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAtKGludHB0cl90KXN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKSksCi0gICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCh0YXJnZXQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluaygKLSAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
Lmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxU
b1N0cnVjdENoZWNrKSwKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlU2NyYXRjaChNYWNyb0Fzc2VtYmxlciYgc3R1YkppdCwg
Ym9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wJiBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYgZmFpbCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcykKLXsKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNj
cmF0Y2gpIHsKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAg
ICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBsaW5r
IGZhaWx1cmUgY2FzZXMgaGVyZSwgc28gd2UgY2FuIHBvcCBzY3JhdGNoR1BSLCBhbmQgdGhlbiBq
dW1wIGJhY2suCi0gICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKLSAgICAgICAg
Ci0gICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOwotICAgICAgICAKLSAgICAgICAgZmFp
bCA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHN1
Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3Jh
dGNoKExpbmtCdWZmZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzLCBDb2RlTG9jYXRpb25MYWJlbCBz
dWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4pCi17Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdWNjZXNzTGFiZWwpOwotICAgICAgICAKLSAgICBpZiAo
bmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsLCBz
bG93Q2FzZUJlZ2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBsaW5r
IGZhaWx1cmUgY2FzZXMgZGlyZWN0bHkgYmFjayB0byBub3JtYWwgcGF0aAotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBzbG93Q2FzZUJlZ2luKTsKLX0KLQotc3RhdGljIHZvaWQg
bGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMpCi17Ci0gICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNo
QnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2Vz
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLX0KLQot
c3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihFeGVjU3RhdGUqIGV4ZWMs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXpl
X3QgY291bnQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENv
ZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VM
YWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OwotICAgICAgICAK
LSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
ZGZnLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVnIHJlc3VsdFRh
Z0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BS
KTsKLSNlbmRpZgotICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0
dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdp
c3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwot
ICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoc2Ny
YXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
c2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJl
c3VsdEdQUik7Ci0jZWxzZQotICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNl
bGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOwotI2VuZGlm
Ci0gICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKLSAgICAgICAgbmVlZFRvUmVzdG9y
ZVNjcmF0Y2ggPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZmFpbHVyZUNhc2VzOwotICAgIAotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOwotICAgIAotICAgIFN0cnVjdHVyZSogY3VyclN0cnVj
dHVyZSA9IHN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFp
bi0+aGVhZCgpOwotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKLSAgICAgICAgcHJvdG9PYmplY3Qg
PSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAg
ICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICBwcm90b09iamVj
dCwgcHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8s
IHN0dWJKaXQsCi0gICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwotICAgICAg
ICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOwotICAgIH0KLSAgICAKLSAgICBpZiAoaXNJbmxp
bmVPZmZzZXQob2Zmc2V0KSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQu
bG9hZDY0KHByb3RvT2JqZWN0LT5sb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLCByZXN1bHRHUFIp
OwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0LT5sb2NhdGlvbkZvck9mZnNldChvZmZz
ZXQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICBzdHViSml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwotI2VuZGlmCi0g
ICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2JqZWN0LT5idXR0ZXJm
bHlBZGRyZXNzKCksIHJlc3VsdEdQUik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1
YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1
dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRH
UFIpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQp
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICBz
dHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldElu
QnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1
bHRHUFIpOwotI2VuZGlmCi0gICAgfQotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vz
cywgZmFpbDsKLSAgICAKLSAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0g
ICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2Rl
QmxvY2soKSk7Ci0gICAgCi0gICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFi
ZWwsIHNsb3dDYXNlTGFiZWwpOwotICAgIAotICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09E
RV9GT1JfREZHX1NUVUIoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkRGRyBwcm90
b3R5cGUgY2hhaW4gYWNjZXNzIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAg
ICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdWNjZXNzTGFiZWwu
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotfQotCi1zdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKLXsKLSAgICAvLyBGSVhNRTogV3JpdGUgYSB0ZXN0IHRoYXQgcHJvdmVzIHdlIG5l
ZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lvbiBoZXJlIGp1c3QKLSAgICAvLyBsaWtlIHRoZSBpbnRl
cnByZXRlciBkb2VzLCB0aGVuIGFkZCBhIGNoZWNrIGZvciByZWN1cnNpb24uCi0KLSAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwotICAgIAotICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwot
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQUik7Ci0jZW5kaWYK
LSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3Rl
clNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAg
ICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OwotICAgICAgICAKLSAgICAgICAgaWYgKHNjcmF0Y2hH
UFIgPT0gSW52YWxpZEdQUlJlZykgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBz
Y3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVz
dWx0R1BSKTsKLSNlbHNlCi0gICAgICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6
OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOwotI2Vu
ZGlmCi0gICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBu
ZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgICAgCi0gICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7IAotICAgICAgICBzdHViSml0LmxvYWQ4
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChz
dHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwotICAgICAgICBmYWlsdXJlQ2Fz
ZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3Jh
dGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSkp
OwotICAgICAgICAKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwot
ICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIGZh
aWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1Ro
YW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKLQotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0jZWxpZiBVU0UoSlNWQUxVRTMy
XzY0KQotICAgICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAgICAg
ICAgc3R1YkppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMHhmZmZmZmZmZiksIHJl
c3VsdFRhZ0dQUik7IC8vIEpTVmFsdWU6OkludDMyVGFnCi0jZW5kaWYKLQotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwotICAgICAgICAKLSAgICAgICAgZW1pdFJl
c3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBz
dWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBjb2RlQmxvY2spOwotICAgICAgICAKLSAgICAg
ICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwg
c3R1YkluZm8sIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgICAgIAotICAgICAg
ICBzdHViSW5mby5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RGR19TVFVCKAotICAg
ICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBHZXRCeUlkIGFycmF5IGxl
bmd0aCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICB0b0NT
dHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIAotICAg
ICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVw
bGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Ci0gICAgICAgIAotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgLy8gRklYTUU6IHNob3VsZCBzdXBwb3J0
IGxlbmd0aCBhY2Nlc3MgZm9yIFN0cmluZy4KLQotICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0
eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFz
Q2VsbCgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgp
OwotICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgaWYg
KHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKLSAgICAgICAgaWYgKCFzbG90LmlzQ2Fj
aGVhYmxlVmFsdWUoKQotICAgICAgICAgICAgfHwgIU1hY3JvQXNzZW1ibGVyOjppc0NvbXBhY3RQ
dHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkpKSB7Ci0gICAgICAgICAgICByZXBhdGNoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlz
dCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlcGF0
Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCksIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QsIHRydWUpOwotICAgICAgICBz
dHViSW5mby5pbml0R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBzdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYg
KHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICAvLyBGSVhNRTogb3B0aW1pemUgZ2V0dGVycyBhbmQgc2V0dGVycwotICAgIGlmICghc2xv
dC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgIHNpemVfdCBj
b3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZVZh
bHVlLCBzbG90LnNsb3RCYXNlKCksIHByb3BlcnR5TmFtZSwgb2Zmc2V0KTsKLSAgICBpZiAoY291
bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNo
YWluKGV4ZWMpOwotICAgIAotICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywg
c3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnN0dWJS
b3V0aW5lKTsKLSAgICAKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2Nr
KTsKLSAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJJbmZv
LnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOwot
ICAgIAotICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkQ2hhaW4oKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgdHJ1ZSk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAg
ICBib29sIGNhY2hlZCA9IHRyeUNhY2hlR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5
TmFtZSwgc2xvdCwgc3R1YkluZm8pOwotICAgIGlmICghY2FjaGVkKQotICAgICAgICByZXBhdGNo
Q2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVy
YXRpb25HZXRCeUlkKTsKLX0KLQotc3RhdGljIGJvb2wgZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0KAotICAgIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqJiBwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QsIGludCYgbGlzdEluZGV4LAotICAgIENvZGVMb2NhdGlvbkxhYmVs
JiBzbG93Q2FzZSkKLXsKLSAgICBzbG93Q2FzZSA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsK
LSAgICAKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpIHsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCgpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdCwgMCwgZmFsc2UpOwotICAgICAgICBsaXN0SW5kZXggPSAwOwotICAgIH0gZWxz
ZSBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIEpJVFN0dWJSb3V0aW5lOjpjcmVh
dGVTZWxmTWFuYWdlZFJvdXRpbmUoc2xvd0Nhc2UpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJh
c2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0
QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSwgdHJ1ZSk7Ci0gICAgICAg
IGxpc3RJbmRleCA9IDE7Ci0gICAgfSBlbHNlIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc19nZXRfYnlfaWRfY2hhaW4pIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFzdHViSW5m
by5zdHViUm91dGluZSk7Ci0gICAgICAgIHNsb3dDYXNlID0gQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZv
LnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0
QnlJZENoYWluLmNoYWluLmdldCgpLCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRp
bmUuY2xlYXIoKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QsIDEsIGZhbHNlKTsKLSAgICAgICAgbGlzdEluZGV4ID0gMTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09
IGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0KTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAg
ICAgbGlzdEluZGV4ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemU7Ci0gICAg
ICAgIHNsb3dDYXNlID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKGxpc3RJbmRleCA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChsaXN0SW5k
ZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1zdGF0aWMgdm9pZCBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGlu
ZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19n
ZXRfYnlfaWRfc2VsZl9saXN0KTsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29k
ZUJsb2NrKTsKLSAgICBpZiAoc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QuZGlkU2VsZlBhdGNo
aW5nKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAotICAgICAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAgICBzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksCi0gICAgICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHVi
SW5mbywgc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotfQotCi1zdGF0aWMgYm9vbCB0cnlC
dWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKQotICAgICAg
ICB8fCAhc2xvdC5pc0NhY2hlYWJsZSgpCi0gICAgICAgIHx8ICFiYXNlVmFsdWUuYXNDZWxsKCkt
PnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2Nr
KCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJh
c2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5z
dHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkg
ewotICAgICAgICBpZiAoIXN0dWJJbmZvLnBhdGNoLmRmZy5yZWdpc3RlcnNGbHVzaGVkKSB7Ci0g
ICAgICAgICAgICAvLyBXZSBjYW5ub3QgZG8gYXMgbXVjaCBpbmxpbmUgY2FjaGluZyBpZiB0aGUg
cmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQgcHJpb3IgdG8gdGhpcyBHZXRCeUlkLiBJbiBwYXJ0
aWN1bGFyLAotICAgICAgICAgICAgLy8gbm9uLVZhbHVlIGNhY2hlZCBwcm9wZXJ0aWVzIHJlcXVp
cmUgcGxhbnRpbmcgY2FsbHMsIHdoaWNoIHJlcXVpcmVzIHJlZ2lzdGVycyB0byBoYXZlIGJlZW4g
Zmx1c2hlZC4gVGh1cywKLSAgICAgICAgICAgIC8vIGlmIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVz
aGVkLCBkb24ndCBkbyBub24tVmFsdWUgY2FjaGluZy4KLSAgICAgICAgICAgIGlmICghc2xvdC5p
c0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgCi0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0OwotICAgICAgICBpbnQgbGlzdEluZGV4OwotICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBzbG93Q2FzZTsKLQotICAgICAgICBpZiAoIWdldFBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdCh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgcG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LCBsaXN0SW5kZXgsIHNsb3dDYXNlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgCi0gICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplKys7Ci0g
ICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAg
IEdQUlJlZyByZXN1bHRUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNo
LmRmZy52YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJl
Z2lzdGVycykuZ2V0RnJlZUdQUigpOwotICAgICAgICAKLSAgICAgICAgQ0NhbGxIZWxwZXJzIHN0
dWJKaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCB3cm9uZ1N0cnVjdCA9IHN0dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwotICAg
ICAgICAKLSAgICAgICAgLy8gVGhlIHN0cmF0ZWd5IHdlIHVzZSBmb3Igc3R1YnMgaXMgYXMgZm9s
bG93czoKLSAgICAgICAgLy8gMSkgQ2FsbCBERkcgaGVscGVyIHRoYXQgY2FsbHMgdGhlIGdldHRl
ci4KLSAgICAgICAgLy8gMikgQ2hlY2sgaWYgdGhlcmUgd2FzIGFuIGV4Y2VwdGlvbiwgYW5kIGlm
IHRoZXJlIHdhcywgY2FsbCB5ZXQgYW5vdGhlcgotICAgICAgICAvLyAgICBoZWxwZXIuCi0gICAg
ICAgIAotICAgICAgICBib29sIGlzRGlyZWN0ID0gZmFsc2U7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhh
bmRsZXJDYWxsOwotICAgICAgICBGdW5jdGlvblB0ciBvcGVyYXRpb25GdW5jdGlvbjsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICAgICAgCi0gICAgICAgIGlmIChz
bG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7Ci0g
ICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKGJhc2VHUFIgIT0gc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3Jh
dGNoR1BSKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2Fk
NjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jh
c2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQ
Uik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAg
ICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRpb25DYWxsR2V0dGVyOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKLSAgICAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoRnVuY3Rpb25QdHIoc2xvdC5jdXN0
b21HZXR0ZXIoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSksCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOwotICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbkZ1bmN0aW9uID0gb3BlcmF0aW9uQ2FsbEN1c3RvbUdldHRlcjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUg
dGhhdCB3aGVuZXZlciB0aGlzIGNhbGwgaXMgbWFkZSBpbiB0aGUgZnV0dXJlLCB3ZSByZW1lbWJl
ciB0aGUKLSAgICAgICAgICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBmcm9tLiBJdCBqdXN0
IHNvIGhhcHBlbnMgdG8gYmUgdGhlIHBsYWNlIHRoYXQgd2UgYXJlIGF0Ci0gICAgICAgICAgICAv
LyByaWdodCBub3chCi0gICAgICAgICAgICBzdHViSml0LnN0b3JlMzIoCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihleGVjLT5sb2NhdGlvbkFzUmF3Qml0cygp
KSwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwoKTsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICAgICAgc3R1YkppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBy
ZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBSZXN1bHRzKHJlc3Vs
dEdQUiwgcmVzdWx0VGFnR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgc3VjY2VzcyA9IHN0dWJK
aXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVj
ayk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNFeGVj
U3RhdGUoKTsKLSAgICAgICAgICAgIGhhbmRsZXJDYWxsID0gc3R1YkppdC5jYWxsKCk7Ci0gICAg
ICAgICAgICBzdHViSml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNl
dCgpKSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2Fk
NjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAg
ICBpZiAoYmFzZUdQUiA9PSByZXN1bHRUYWdHUFIpIHsKLSAgICAgICAgICAgICAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAg
ICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAgICAgICAgICAg
c3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVs
YXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAg
ICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
c3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1
bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0
R1BSKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9m
ZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90
LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgICAgICBpc0RpcmVj
dCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgJnN0dWJKaXQsIGNvZGVCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKHdyb25nU3RydWN0LCBzbG93Q2FzZSk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAgICAgICBpZiAoIWlzRGlyZWN0KSB7Ci0g
ICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvbkZ1bmN0
aW9uKTsKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0KLSAgICAgICAgICAgIGNyZWF0ZUpJVFN0dWJSb3V0
aW5lKAotICAgICAgICAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAotICAgICAgICAgICAgICAg
ICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgKCJERkcgR2V0QnlJZCBwb2x5
bW9ycGhpYyBsaXN0IGFjY2VzcyBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAg
ICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKSwKLSAgICAgICAgICAgICAgICAqdm0sCi0gICAgICAgICAgICAgICAgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlR2V0dGVy
KCkgfHwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKTsKLSAgICAgICAgCi0gICAgICAgIHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKLSAg
ICAgICAgCi0gICAgICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHViSW5m
bywgc3R1YlJvdXRpbmUuZ2V0KCkpOwotICAgICAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlN
T1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOwotICAgIH0KLSAgICAKLSAgICBpZiAoYmFzZVZh
bHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmcoKSB8fCAhc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0g
ICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2Vzcyhl
eGVjLCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQsIG9mZnNldCk7Ci0gICAgaWYg
KGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5
cGVDaGFpbihleGVjKTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKLSAgICBpbnQgbGlzdEluZGV4OwotICAgIENvZGVM
b2NhdGlvbkxhYmVsIHNsb3dDYXNlOwotICAgIGlmICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxp
c3RJbmRleCwgc2xvd0Nhc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgc3R1
YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7Ci0gICAgCi0gICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKLSAgICAKLSAgICBnZW5lcmF0ZVByb3RvQ2hhaW5B
Y2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwg
c3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc2xvd0Nhc2UsIHN0dWJSb3V0aW5lKTsK
LSAgICAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQo
KnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJl
LCB0cnVlKTsKLSAgICAKLSAgICBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKGNvZGVCbG9jaywgc3R1
YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKLSAgICAKLSAgICByZXR1cm4gbGlzdEluZGV4IDwg
KFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOwotfQotCi12b2lkIGJ1aWxkR2V0QnlJ
RExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKLXsKLSAgICBib29sIGRvbnRDaGFuZ2VDYWxsID0gdHJ5QnVpbGRHZXRC
eUlETGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pOwot
ICAgIGlmICghZG9udENoYW5nZUNhbGwpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVC
bG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwot
fQotCi1zdGF0aWMgVl9ERkdPcGVyYXRpb25fRUpDSSBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlk
RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCi17
Ci0gICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKLSAgICAgICAgaWYgKHB1dEtpbmQgPT0g
RGlyZWN0KQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7
Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OwotICAgIH0KLSAgICBpZiAo
cHV0S2luZCA9PSBEaXJlY3QpCi0gICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0OwotICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OwotfQotCi1z
dGF0aWMgVl9ERkdPcGVyYXRpb25fRUpDSSBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRG
dW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKLXsK
LSAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICBpZiAocHV0S2luZCA9PSBE
aXJlY3QpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1
aWxkTGlzdDsKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3Q7
Ci0gICAgfQotICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3Q7Ci0gICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtaXRQdXRSZXBs
YWNlU3R1YigKLSAgICBFeGVjU3RhdGUqIGV4ZWMsCi0gICAgSlNWYWx1ZSwKLSAgICBjb25zdCBJ
ZGVudGlmaWVyJiwKLSAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsCi0gICAgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIFB1dEtpbmQsCi0gICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAotICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBHUFJSZWcgdmFsdWVU
YWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRhZ0dQ
Uik7Ci0jZW5kaWYKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0
dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdp
c3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOwot
ICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSNpZiBFTkFCTEUoV1JJVEVf
QkFSUklFUl9QUk9GSUxJTkcpCi0gICAgR1BSUmVnIHNjcmF0Y2hHUFIyOwotICAgIGNvbnN0IGJv
b2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gdHJ1ZTsKLSNlbHNlCi0gICAgY29uc3QgYm9vbCB3cml0
ZUJhcnJpZXJOZWVkZWQgPSBmYWxzZTsKLSNlbmRpZgotICAgIAotICAgIE1hY3JvQXNzZW1ibGVy
IHN0dWJKaXQ7Ci0gICAgCi0gICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZyAmJiAo
d3JpdGVCYXJyaWVyTmVlZGVkIHx8IGlzT3V0T2ZMaW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxh
dGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUik7Ci0jZWxzZQotICAg
ICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQ
UiwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBuZWVkVG9SZXN0b3Jl
U2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKLSAgICB9
Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmUgPSBzdHViSml0LmJyYW5j
aFB0cigKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0gICAgCi0j
aWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgc2NyYXRjaEdQUjIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BS
LCB2YWx1ZUdQUiwgc2NyYXRjaEdQUik7Ci0jZWxzZQotICAgIHNjcmF0Y2hHUFIyID0gU3BlY3Vs
YXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVGFnR1BS
LCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSMik7Ci0g
ICAgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwotICAgIHN0
dWJKaXQucG9wKHNjcmF0Y2hHUFIyKTsKLSNlbmRpZgotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQotICAgICAgICBz
dHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFn
ZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIGVsc2Ugewot
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJK
aXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
b2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkp
KTsKLSAgICB9Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlmIChpc0lubGluZU9mZnNl
dChzbG90LmNhY2hlZE9mZnNldCgpKSkgewotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFn
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xv
dC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQu
c3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
b2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsK
LSAgICB9Ci0jZW5kaWYKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOwot
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7Ci0gICAgCi0gICAgaWYgKG5lZWRUb1Jl
c3RvcmVTY3JhdGNoKSB7Ci0gICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOwotICAgICAg
ICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBiYWRTdHJ1Y3R1
cmUubGluaygmc3R1YkppdCk7Ci0gICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOwotICAg
ICAgICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3Vj
Y2VzcyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICBmYWlsdXJlID0gYmFkU3RydWN0dXJlOwot
ICAgIH0KLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4
ZWMtPmNvZGVCbG9jaygpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb0RvbmUpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJl
bCk7Ci0gICAgICAgICAgICAKLSAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RG
R19TVFVCKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJERkcgUHV0QnlJZCByZXBs
YWNlIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgdG9DU3RyaW5n
KCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFD
YWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtaXRQ
dXRUcmFuc2l0aW9uU3R1YigKLSAgICBFeGVjU3RhdGUqIGV4ZWMsCi0gICAgSlNWYWx1ZSwKLSAg
ICBjb25zdCBJZGVudGlmaWVyJiwKLSAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsCi0g
ICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIFB1dEtpbmQgcHV0S2luZCwKLSAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKLSAg
ICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4sCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
ZmFpbHVyZUxhYmVsLAotICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQot
ewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotCi0gICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKLSNpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsK
LSAgICAKLSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBh
dGNoLmRmZy51c2VkUmVnaXN0ZXJzKTsKLSAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKLSNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlVGFnR1BSKTsKLSNl
bmRpZgotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsKLSAgICAKLSAgICBDQ2FsbEhlbHBl
cnMgc3R1YkppdCh2bSk7Ci0gICAgICAgICAgICAKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBh
bGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIxICE9
IGJhc2VHUFIpOwotICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSB2YWx1ZUdQUik7Ci0gICAgCi0g
ICAgYm9vbCBuZWVkU2Vjb25kU2NyYXRjaCA9IGZhbHNlOwotICAgIGJvb2wgbmVlZFRoaXJkU2Ny
YXRjaCA9IGZhbHNlOwotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBu
ZWVkU2Vjb25kU2NyYXRjaCA9IHRydWU7Ci0jZW5kaWYKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAg
ICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgbmVl
ZFNlY29uZFNjcmF0Y2ggPSB0cnVlOwotICAgICAgICBuZWVkVGhpcmRTY3JhdGNoID0gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBHUFJSZWcgc2NyYXRjaEdQUjI7Ci0gICAgaWYgKG5lZWRTZWNvbmRTY3Jh
dGNoKSB7Ci0gICAgICAgIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gYmFzZUdQUik7Ci0gICAgICAgIEFT
U0VSVChzY3JhdGNoR1BSMiAhPSB2YWx1ZUdQUik7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BS
MiAhPSBzY3JhdGNoR1BSMSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNjcmF0Y2hHUFIyID0gSW52
YWxpZEdQUlJlZzsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjM7Ci0gICAgaWYgKG5lZWRUaGlyZFNj
cmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBiYXNlR1BSKTsKLSAgICAgICAg
QVNTRVJUKHNjcmF0Y2hHUFIzICE9IHZhbHVlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hH
UFIzICE9IHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHNjcmF0
Y2hHUFIyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUjMgPSBJbnZhbGlkR1BSUmVn
OwotICAgICAgICAgICAgCi0gICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQ
dXNoaW5nKHN0dWJKaXQpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVD
YXNlczsKLSAgICAgICAgICAgIAotICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgIAotICAgIGZhaWx1cmVDYXNl
cy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2xkU3RydWN0dXJlKSkpOwotICAgIAotICAg
IGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgb2xkU3RydWN0dXJlLT5zdG9y
ZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBmYWls
dXJlQ2FzZXMsCi0gICAgICAgIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIAotICAgIGlmIChw
dXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+KiBpdCA9IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkgewotICAgICAgICAg
ICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICgqaXQpLT5z
dG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LCBm
YWlsdXJlQ2FzZXMsCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUjEpOwotICAgICAgICB9Ci0g
ICAgfQotCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIEFTU0VSVChu
ZWVkU2Vjb25kU2NyYXRjaCk7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IEludmFsaWRHUFJS
ZWcpOwotICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhpcyB3cml0ZSBiYXJyaWVyIGFzIHRoZSBz
dHJ1Y3R1cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWlyZXMgaXQKLSAgICBTcGVjdWxhdGl2ZUpJ
VDo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BS
MiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwotI2VuZGlmCi0gICAgCi0gICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAotICAgIGJvb2wgc2NyYXRjaEdQ
UjFIYXNTdG9yYWdlID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAg
ICAgc2l6ZV90IG5ld1NpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXpl
b2YoSlNWYWx1ZSk7Ci0gICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0g
JnZtLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICBzdHViSml0Lmxv
YWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7
Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIoTWFjcm9B
c3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwg
c2NyYXRjaEdQUjEpKTsKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEs
ICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7Ci0gICAgICAgICAgICBzdHVi
Sml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBh
eWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xkU3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICAgICAg
QVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1
YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAgICAgIHN0dWJKaXQubG9h
ZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsK
LSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fz
c2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBz
Y3JhdGNoR1BSMSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwg
JmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgIHN0dWJK
aXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5
bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOwot
ICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMSA9IG5ldyBzdG9yYWdlLCBzY3JhdGNo
R1BSMyA9IG9sZCBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQotICAgICAgICAgICAg
Zm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihvbGRTaXplKTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAgICAgICAgICBz
dHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjMsIC0ob2Zm
c2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBzY3JhdGNoR1BSMik7Ci0g
ICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6
ZW9mKHZvaWQqKSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7Ci0gICAgICAgIHNjcmF0Y2hH
UFIxSGFzU3RvcmFnZSA9IHRydWU7Ci0gICAgfQotCi0gICAgc3R1YkppdC5zdG9yZVB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCi0gICAg
ICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVT
dG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1
YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTY0
KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5C
dXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICB9
Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNh
Y2hlZE9mZnNldCgpKSkgewotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVv
ZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXpl
b2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnRhZykpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3Rv
cmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Ci0g
ICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0KLSNlbmRpZgotICAgIAot
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZmFpbHVyZTsKLSAgICAgICAgICAgIAotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdp
c3RlcnMoKSkgewotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9w
cGluZyhzdHViSml0KTsKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwotCi0gICAg
ICAgIGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3Rv
cmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7Ci0gICAgICAgIGZhaWx1cmUgPSBz
dHViSml0Lmp1bXAoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVt
cCgpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGw7Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vzc0luU2xvd1BhdGg7Ci0gICAgCi0gICAgaWYgKHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpIHsKLSAgICAgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7Ci0gICAgICAgIAot
ICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0
KTsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVm
ZmVyRm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkpOwotICAgICAg
ICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyKHN0dWJKaXQs
IHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIxKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLCB2YWx1ZUdQUik7Ci0jZWxzZQotICAgICAgICBzdHVi
Sml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAg
ICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwoKTsKLSAgICAgICAgYWxsb2NhdG9yLnJl
c3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZmZXIoc3R1YkppdCwgc2NyYXRjaEJ1ZmZl
ciwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdWNjZXNzSW5TbG93UGF0aCA9IHN0dWJKaXQuanVt
cCgpOwotICAgIH0KLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJK
aXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJz
KCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKLSAg
ICBlbHNlCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBmYWlsdXJlTGFi
ZWwpOwotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3Bl
cmF0aW9uQ2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQpOwotICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3NJblNsb3dQYXRoLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9E
b25lKSk7Ci0gICAgfQotICAgIAotICAgIHN0dWJSb3V0aW5lID0KLSAgICAgICAgY3JlYXRlSklU
U3R1YlJvdXRpbmUoCi0gICAgICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKLSAgICAgICAgICAg
ICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAoIkRGRyBQdXRCeUlkICVzdHJhbnNp
dGlvbiBzdHViICglcCAtPiAlcCkgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpID8gInJlYWxsb2NhdGluZyAiIDogIiIsCi0gICAgICAgICAg
ICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICB0
b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAotICAgICAg
ICAgICAgKnZtLAotICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJs
ZSgpLAotICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKLSAgICAgICAgICAgIHN0cnVjdHVyZSk7Ci19
Ci0KLXN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
YmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsK
LSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwotCi0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgp
OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotICAg
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCk7Ci0gICAg
Ci0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICBpZiAoc2xvdC5i
YXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9w
ZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEg
cmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQotICAgICAgICAgICAgLy8gZW5vdWdoIHJlZ2lzdGVy
cyB0byBtYWtlIGl0IGhhcHBlbi4KLSAgICAgICAgICAgIGlmIChHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycyA8IDYKLSAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCi0gICAgICAgICAgICAg
ICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6
aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFz
Ci0gICAgICAgICAgICAvLyBpbmRleGluZyBzdG9yYWdlLgotICAgICAgICAgICAgaWYgKG9sZFN0
cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub3JtYWxpemVQcm90b3R5
cGVDaGFpbihleGVjLCBiYXNlQ2VsbCkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RydWN0
dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVj
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZW1pdFB1dFRyYW5zaXRpb25TdHViKAotICAg
ICAgICAgICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRL
aW5kLAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLCBwcm90b3R5cGVD
aGFpbiwKLSAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSksCi0gICAgICAg
ICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5qdW1wQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHBy
b3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBw
cm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3QpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFj
Y2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCks
IGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBm
YWxzZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZSgqdm0sIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCByZXBhdGNoUHV0QnlJRChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgYm9vbCBjYWNoZWQgPSB0cnlDYWNoZVB1
dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRL
aW5kKTsKLSAgICBpZiAoIWNhY2hlZCkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJs
b2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0
QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLX0KLQotc3RhdGljIGJvb2wgdHJ5QnVpbGRQ
dXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKLQotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKLSAgICBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpOwotICAgIAotICAgIGlmICghc2xv
dC5pc0NhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0cnVjdHVy
ZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VW
YWx1ZSkgewotICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwotICAgICAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgICAgICAKLSAgICAgICAgaWYg
KHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKLSAgICAgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRo
ZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCi0gICAgICAg
ICAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgotICAgICAgICAgICAg
aWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgotICAgICAgICAgICAgICAgICYmIG9s
ZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkKLSAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9j
LCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKLSAgICAgICAgICAgIC8vIGluZGV4aW5nIHN0b3JhZ2Uu
Ci0gICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKSA9PSBJbnZhbGlk
UHJvdG90eXBlQ2hhaW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1
cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBX
ZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0aW5nIHRoZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRh
LWRhdGEgYWNjb3JkaW5nbHkuCi0gICAgICAgICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlk
TGlzdDo6ZnJvbSgKLSAgICAgICAgICAgICAgICBwdXRLaW5kLCBzdHViSW5mbywKLSAgICAgICAg
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCi0gICAgICAgICAgICAgICAgZXhlYywgYmFzZVZh
bHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLAotICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKLSAgICAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCi0g
ICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBs
aXN0LT5hZGRBY2Nlc3MoCi0gICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6dHJhbnNpdGlv
bigKLSAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LAotICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBl
Q2hhaW4sCi0gICAgICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0aW5nIHRoZSBz
dHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCi0gICAgICAgICAgICBsaXN0
ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbSgKLSAgICAgICAgICAgICAgICBwdXRLaW5k
LCBzdHViSW5mbywKLSAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBlbWl0UHV0UmVwbGFjZVN0dWIoCi0gICAgICAgICAg
ICAgICAgZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRL
aW5kLAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+
Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLCBzdHViUm91dGluZSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKLSAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNz
OjpyZXBsYWNlKAotICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgc3R1YlJvdXRpbmUpKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
U3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQotICAgICAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3By
aWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotICAgICAgICAKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBz
bG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAg
ICBib29sIGNhY2hlZCA9IHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKLSAgICBpZiAoIWNhY2hlZCkKLSAg
ICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQp
KTsKLX0KLQotc3RhdGljIGJvb2wgdHJ5UmVwYXRjaEluKAotICAgIEV4ZWNTdGF0ZSogZXhlYywg
SlNDZWxsKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCB3YXNGb3VuZCwKLSAg
ICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
LXsKLSAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVh
YmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAod2FzRm91bmQpIHsK
LSAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJs
b2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXRJ
Z25vcmVkOwotICAgIHNpemVfdCBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hh
aW5BY2Nlc3MoZXhlYywgYmFzZSwgd2FzRm91bmQgPyBzbG90LnNsb3RCYXNlKCkgOiBKU1ZhbHVl
KCksIGlkZW50LCBvZmZzZXRJZ25vcmVkKTsKLSAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3Rv
dHlwZUNoYWluKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Ci0gICAgaW50IGxp
c3RJbmRleDsKLSAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwgPSBzdHVi
SW5mby5ob3RQYXRoQmVnaW47Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbDsK
LSAgICAKLSAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5zZXQpIHsKLSAg
ICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdCgpOwotICAgICAgICBzdHViSW5mby5pbml0SW5MaXN0KHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdCwgMCk7Ci0gICAgICAgIHNsb3dDYXNlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAgICAgbGlzdEluZGV4ID0gMDsKLSAgICB9IGVs
c2UgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c19pbl9saXN0KTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8u
dS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgbGlzdEluZGV4ID0gc3R1YkluZm8udS5p
bkxpc3QubGlzdFNpemU7Ci0gICAgICAgIHNsb3dDYXNlTGFiZWwgPSBDb2RlTG9jYXRpb25MYWJl
bChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxpc3RJbmRleCA9PSBQ
T0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIAotICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90
eXBlQ2hhaW4oZXhlYyk7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsK
LSAgICAKLSAgICB7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7Ci0gICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2guZGZnLnVz
ZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICAgICAgCi0gICAgICAgIENDYWxsSGVscGVy
cyBzdHViSml0KHZtKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0
Y2g7Ci0gICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAg
ICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BS
LCByZXN1bHRHUFIpOwotICAgICAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgICAgICBmYWlsdXJl
Q2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgICAgIAotICAgICAgICBTdHJ1Y3R1
cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb3VudDsgKytpLCArK2l0KSB7Ci0gICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBl
ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKLSAg
ICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBw
cm90b3R5cGUsIHByb3RvdHlwZS0+c3RydWN0dXJlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHVi
SW5mbywgc3R1YkppdCwKLSAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIp
OwotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkp
LCByZXN1bHRHUFIpOwotI2Vsc2UKLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIod2FzRm91bmQpLCByZXN1bHRHUFIpOwotI2VuZGlmCi0gICAgICAgIAot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwotICAgICAgICAKLSAg
ICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBz
Y3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAKLSAgICAg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2so
KSk7Ci0KLSAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0
b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNs
b3dDYXNlTGFiZWwpOwotICAgICAgICAKLSAgICAgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9D
T0RFX0ZPUl9ERkdfU1RVQigKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAg
KCJERkcgSW4gKGZvdW5kID0gJXMpIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAg
ICAgICAgICAgICAgIHdhc0ZvdW5kID8gInllcyIgOiAibm8iLCB0b0NTdHJpbmcoKmV4ZWMtPmNv
ZGVCbG9jaygpKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKLSAgICB9Ci0gICAgCi0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
c3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgdHJ1ZSk7Ci0gICAgc3R1YkluZm8udS5pbkxpc3QubGlz
dFNpemUrKzsKLSAgICAKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2Nr
KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5ob3RQYXRoQmVnaW4uanVtcEF0
T2Zmc2V0KDApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OwotICAgIAotICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9T
SVpFIC0gMSk7Ci19Ci0KLXZvaWQgcmVwYXRjaEluKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCB3YXNGb3VuZCwKLSAgICBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsK
LSAgICBpZiAodHJ5UmVwYXRjaEluKGV4ZWMsIGJhc2UsIGlkZW50LCB3YXNGb3VuZCwgc2xvdCwg
c3R1YkluZm8pKQotICAgICAgICByZXR1cm47Ci0gICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJs
b2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uSW4pOwotfQotCi1z
dGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBWTSog
dm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCi17Ci0gICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0
dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJ
U3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7Ci19Ci0KLXZvaWQg
bGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2Rl
QmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZVB0ciwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotewotICAgIEFT
U0VSVCghY2FsbExpbmtJbmZvLnN0dWIpOwotICAgIAotICAgIC8vIElmIHlvdSdyZSBiZWluZyBj
YWxsLWxpbmtlZCBmcm9tIGEgREZHIGNhbGxlciB0aGVuIHlvdSBvYnZpb3VzbHkgZGlkbid0IGdl
dCBpbmxpbmVkLgotICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0gICAgICAgIGNhbGxlZUNvZGVC
bG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAKLSAgICBDb2RlQmxv
Y2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOwot
ICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKLSAgICAKLSAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKLSAgICAKLSAgICBBU1NFUlQoIWNh
bGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAgICBjYWxsTGlua0luZm8uY2FsbGVlLnNldChleGVj
LT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luLCBjYWxsZXJD
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAgIGNhbGxMaW5rSW5mby5s
YXN0U2VlbkNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbGVyQ29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhjYWxsTGlua0luZm8uaG90UGF0aE90aGVyLCBjb2RlUHRyKTsKLSAgICAKLSAgICBpZiAoY2Fs
bGVlQ29kZUJsb2NrKQotICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwo
ZXhlYy0+Y2FsbGVyRnJhbWUoKSwgJmNhbGxMaW5rSW5mbyk7Ci0gICAgCi0gICAgaWYgKGtpbmQg
PT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
QVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRj
aEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KLXZvaWQg
bGlua1Nsb3dGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotewotICAgIENvZGVCbG9jayogY2FsbGVyQ29k
ZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0g
Y2FsbGVyQ29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotICAgIAotICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZm
ZXIsIHZtLCBjYWxsTGlua0luZm8sIGtpbmQpOwotfQotCi12b2lkIGxpbmtDbG9zdXJlQ2FsbChF
eGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNh
bGxlZUNvZGVCbG9jaywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV4ZWN1dGFibGVCYXNlKiBleGVj
dXRhYmxlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKLXsKLSAgICBBU1NFUlQoIWNh
bGxMaW5rSW5mby5zdHViKTsKLSAgICAKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9
IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9IGNhbGxlckNv
ZGVCbG9jay0+dm0oKTsKLSAgICAKLSAgICBHUFJSZWcgY2FsbGVlR1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihjYWxsTGlua0luZm8uY2FsbGVlR1BSKTsKLSAgICAKLSAgICBDQ2FsbEhlbHBlcnMg
c3R1YkppdCh2bSwgY2FsbGVyQ29kZUJsb2NrKTsKLSAgICAKLSAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IHNsb3dQYXRoOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc2xvd1BhdGgu
YXBwZW5kKAotICAgICAgICBzdHViSml0LmJyYW5jaFRlc3Q2NCgKLSAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Tm9uWmVybywgY2FsbGVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsK
LSNlbHNlCi0gICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2Fs
bGVlIGlzIGEgY2VsbC4KLSNlbmRpZgotICAgIAotICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAg
ICAgc3R1YkppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFs
LAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSkpOwotICAgIAotICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgc3R1
YkppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAotICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zm
c2V0T2ZFeGVjdXRhYmxlKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGV4ZWN1dGFibGUpKSk7Ci0gICAgCi0gICAgc3R1YkppdC5sb2FkUHRyKAotICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3Bl
Q2hhaW4oKSksCi0gICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLQotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgc3R1YkppdC5zdG9yZTY0KAotICAgICAgICBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikgKiBKU1N0
YWNrOjpTY29wZUNoYWluKSkpOwotI2Vsc2UKLSAgICBzdHViSml0LnN0b3JlUHRyKAotICAgICAg
ICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICBzdHViSml0LnN0b3Jl
MzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNj
b3BlQ2hhaW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKSk7Ci0jZW5kaWYKLSAgICAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gc3R1
YkppdC5uZWFyQ2FsbCgpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBzdHViSml0Lmp1
bXAoKTsKLSAgICAKLSAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKLSAgICBzdHViSml0Lm1v
dmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7Ci0jZW5kaWYKLSAgICBzdHViSml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIHN0dWJK
aXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uQXJnR1BSMik7
Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOwotICAgIAotICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY2FsbGVyQ29kZUJsb2NrKTsK
LSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDApKTsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxs
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgIAotICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0
dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0
aW5lKAotICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKLSAgICAgICAgICAgIHBhdGNoQnVmZmVy
LAotICAgICAgICAgICAgKCJERkcgY2xvc3VyZSBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9p
bnQgJXAsIHRhcmdldCAlcCAoJXMpIiwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmNhbGxl
ckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoMCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAgICBjb2RlUHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCksIHRvQ1N0cmluZyhwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxv
Y2spKS5kYXRhKCkpKSwKLSAgICAgICAgKnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHJ1Y3R1cmUsIGV4ZWN1dGFibGUsIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKSk7
Ci0gICAgCi0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7
Ci0gICAgCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoCi0gICAgICAgIFJlcGF0
Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5m
by5ob3RQYXRoQmVnaW4pLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKSkpOwotICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxs
TGlua0luZm8sIENvZGVGb3JDYWxsKTsKLSAgICAKLSAgICBjYWxsTGlua0luZm8uc3R1YiA9IHN0
dWJSb3V0aW5lLnJlbGVhc2UoKTsKLSAgICAKLSAgICBBU1NFUlQoIWNhbGxlZUNvZGVCbG9jayB8
fCBjYWxsZWVDb2RlQmxvY2stPmlzSW5jb21pbmdDYWxsQWxyZWFkeUxpbmtlZCgmY2FsbExpbmtJ
bmZvKSk7Ci19Ci0KLXZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZm
ZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSk7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIHN0cnVjdHVyZUxhYmVsID0gc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwotICAgIGlmIChNYWNyb0Fzc2Vt
Ymxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSkgewotICAg
ICAgICByZXBhdGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNo
UHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJs
ZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcyhzdHJ1Y3R1cmVMYWJlbCksCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpLAot
ICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOwotICAgIH0KLSAgICByZXBh
dGNoQnVmZmVyLnJlcGF0Y2goc3RydWN0dXJlTGFiZWwsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJlcGF0Y2hCdWZmZXIu
cmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7Ci0jZWxz
ZQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Rh
Z0xvYWRPclN0b3JlKSwgMCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7Ci0jZW5kaWYKLSAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UpKTsKLX0KLQotdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVw
YXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIFZfREZHT3Bl
cmF0aW9uX0VKQ0kgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxWX0RGR09wZXJh
dGlvbl9FSkNJPihNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBWX0RGR09wZXJhdGlvbl9F
SkNJIG9wdGltaXplZEZ1bmN0aW9uOwotICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0QnVpbGRMaXN0KQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KQotICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIGlm
ICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRM
aXN0KQotICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QpOwotICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RP
cHRpbWl6ZTsKLSAgICB9Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFM
YWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJ
bW1Ub0NhbGwpOwotICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFi
bGVCcmFuY2hQdHJXaXRoUGF0Y2goKSkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJldmVydEp1
bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAg
UmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVz
cyhzdHJ1Y3R1cmVMYWJlbCksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygK
LSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4o
c3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpLAotICAgICAgICAgICAgICAgIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51
c2VkUG9pbnRlcikpOwotICAgIH0KLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3RydWN0dXJl
TGFiZWwsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKTsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9Mb2FkT3JTdG9yZSksIDApOwotI2Vsc2UKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKLSAgICByZXBhdGNoQnVmZmVy
LnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7Ci0j
ZW5kaWYKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNr
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLX0KLQotdm9pZCByZXNldEluKFJlcGF0Y2hC
dWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0
KDApLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCi0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBh
dGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNo
LmgJKHJldmlzaW9uIDE1NjQ3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVw
YXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdSZXBhdGNoX2gKLSNkZWZp
bmUgREZHUmVwYXRjaF9oCi0KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLQotI2lmIEVOQUJM
RShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKLSNpbmNsdWRlICJERkdP
cGVyYXRpb25zLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotdm9pZCBy
ZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgYnVpbGRHZXRCeUlE
TGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgYnVpbGRHZXRCeUlEUHJvdG9MaXN0
KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUq
LCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKLXZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3Rh
dGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90Jiwg
U3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKLXZvaWQgcmVwYXRjaEluKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIGNvbnN0IElkZW50aWZpZXImLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0
eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENh
bGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLXZvaWQgbGlua1Nsb3dGb3IoRXhl
Y1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Ci12b2lkIGxp
bmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmUqLCBFeGVjdXRhYmxlQmFzZSosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7Ci12b2lkIHJl
c2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVz
ZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNl
dEluKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCi0KLSNlbHNlIC8vIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFJlcGF0Y2hCdWZmZXI7
Ci1zdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87Ci0KLW5hbWVzcGFjZSBERkcgewotCi1pbmxpbmUg
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwg
U3RydWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLWlu
bGluZSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgcmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZm
ZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQotaW5saW5lIE5PX1JFVFVSTiB2b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVy
ZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0KLX0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotI2VuZGlmIC8v
IERGR1JlcGF0Y2hfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCShyZXZpc2lvbiAxNTY0NzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDIwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
X2gKLSNkZWZpbmUgREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yX2gKLQotI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJERkdSZWdp
c3RlclNldC5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKLQotLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhIGxvdy1sZXZlbCBy
ZWdpc3RlciBhbGxvY2F0b3IgZm9yIHVzZSBpbiBzdHVicy4KLQotY2xhc3MgU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yIHsKLXB1YmxpYzoKLSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IoY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgICAgIDogbV91c2VkUmVnaXN0ZXJz
KHVzZWRSZWdpc3RlcnMpCi0gICAgICAgICwgbV9kaWRSZXVzZVJlZ2lzdGVycyhmYWxzZSkKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBsb2Nr
KFQgcmVnKSB7IG1fbG9ja2VkUmVnaXN0ZXJzLnNldChyZWcpOyB9Ci0gICAgCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgQmFua0luZm8+Ci0gICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlw
ZSBhbGxvY2F0ZVNjcmF0Y2goKQotICAgIHsKLSAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIGFsbG9j
YXRlIGEgcmVnaXN0ZXIgdGhhdCBpcyB0b3RhbGx5IGZyZWUuCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBCYW5rSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAg
ICAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSByZWcgPSBCYW5rSW5mbzo6dG9S
ZWdpc3RlcihpKTsKLSAgICAgICAgICAgIGlmICghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlZykK
LSAgICAgICAgICAgICAgICAmJiAhbV91c2VkUmVnaXN0ZXJzLmdldChyZWcpCi0gICAgICAgICAg
ICAgICAgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXQocmVnKSkgewotICAgICAgICAgICAgICAg
IG1fc2NyYXRjaFJlZ2lzdGVycy5zZXQocmVnKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVn
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBTaW5jZSB0
aGF0IGZhaWxlZCwgdHJ5IHRvIGFsbG9jYXRlIGEgcmVnaXN0ZXIgdGhhdCBpcyBub3QgeWV0Ci0g
ICAgICAgIC8vIGxvY2tlZCBvciB1c2VkIGZvciBzY3JhdGNoLgotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgQmFua0luZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAg
ICAgICAgIHR5cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgcmVnID0gQmFua0luZm86OnRv
UmVnaXN0ZXIoaSk7Ci0gICAgICAgICAgICBpZiAoIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChyZWcp
ICYmICFtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0KHJlZykpIHsKLSAgICAgICAgICAgICAgICBtX3Nj
cmF0Y2hSZWdpc3RlcnMuc2V0KHJlZyk7Ci0gICAgICAgICAgICAgICAgbV9kaWRSZXVzZVJlZ2lz
dGVycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlZzsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gV2UgZmFpbGVkLgotICAgICAgICBDUkFT
SCgpOwotICAgICAgICAvLyBNYWtlIHNvbWUgc2lsbHkgY29tcGlsZXJzIGhhcHB5LgotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZT4oLTEp
OwotICAgIH0KLSAgICAKLSAgICBHUFJSZWcgYWxsb2NhdGVTY3JhdGNoR1BSKCkgeyByZXR1cm4g
YWxsb2NhdGVTY3JhdGNoPEdQUkluZm8+KCk7IH0KLSAgICBGUFJSZWcgYWxsb2NhdGVTY3JhdGNo
RlBSKCkgeyByZXR1cm4gYWxsb2NhdGVTY3JhdGNoPEZQUkluZm8+KCk7IH0KLSAgICAKLSAgICBi
b29sIGRpZFJldXNlUmVnaXN0ZXJzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2Rp
ZFJldXNlUmVnaXN0ZXJzOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHByZXNlcnZlUmV1c2VkUmVn
aXN0ZXJzQnlQdXNoaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQpCi0gICAgewotICAgICAgICBpZiAo
IW1fZGlkUmV1c2VSZWdpc3RlcnMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7
ICsraSkgewotICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4
KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7Ci0gICAgICAgICAgICAg
ICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDgpLCBNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZURv
dWJsZShGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAg
ICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVn
aXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAgaml0LnB1c2goR1BSSW5m
bzo6dG9SZWdpc3RlcihpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCByZXN0
b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQpCi0gICAgewot
ICAgICAgICBpZiAoIW1fZGlkUmV1c2VSZWdpc3RlcnMpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJC
eUluZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQotICAgICAgICAg
ICAgICAgIGppdC5wb3AoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsK
LSAgICAgICAgICAgIGlmIChtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSAmJiBt
X3VzZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSkgewotICAgICAgICAgICAgICAgIGppdC5s
b2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgRlBSSW5mbzo6
dG9SZWdpc3RlcihpKSk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZFB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDgpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIGRl
c2lyZWRTY3JhdGNoQnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVycy5u
dW1iZXJPZlNldFJlZ2lzdGVycygpICogc2l6ZW9mKEpTVmFsdWUpOyB9Ci0gICAgCi0gICAgdm9p
ZCBwcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXIoTWFjcm9Bc3NlbWJsZXImIGpp
dCwgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciwgR1BSUmVnIHNjcmF0Y2hHUFIgPSBJbnZh
bGlkR1BSUmVnKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAg
ICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKSB7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjp0b1JlZ2lz
dGVyKGkpLCBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFC
dWZmZXIoKSkgKyAoY291bnQrKykpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmUz
MihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNj
cmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpOwotI2VuZGlmCi0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnICYmICFt
X2xvY2tlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpICYmICFtX3NjcmF0Y2hSZWdpc3RlcnMu
Z2V0R1BSQnlJbmRleChpKSkKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gR1BSSW5mbzo6
dG9SZWdpc3RlcihpKTsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNo
R1BSICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lz
dGVycy5nZXRGUFJCeUluZGV4KGkpKSB7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3Jh
dGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspKSwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIHNjcmF0
Y2hHUFIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNvdW50ICogc2l6ZW9mKEpTVmFsdWUpID09IGRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZSgpKTsK
LSAgICAgICAgCi0gICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAg
IGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvdW50ICogc2l6ZW9mKEpTVmFsdWUpKSksIHNjcmF0Y2hHUFIpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIHJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZmZXIoTWFjcm9B
c3NlbWJsZXImIGppdCwgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciwgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBJbnZhbGlkR1BSUmVnKQotICAgIHsKLSAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0g
SW52YWxpZEdQUlJlZykgewotICAgICAgICAgICAgLy8gRmluZCBhIHNjcmF0Y2ggcmVnaXN0ZXIu
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
czsgaS0tOykgewotICAgICAgICAgICAgICAgIGlmIChtX2xvY2tlZFJlZ2lzdGVycy5nZXRHUFJC
eUluZGV4KGkpIHx8IG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gR1BS
SW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoR1BSICE9IEludmFs
aWRHUFJSZWcpOwotICAgICAgICAKLSAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDAp
LCBzY3JhdGNoR1BSKTsKLQotICAgICAgICAvLyBSZXN0b3JlIGRvdWJsZSByZWdpc3RlcnMgZmly
c3QuCi0gICAgICAgIHVuc2lnbmVkIGNvdW50ID0gbV91c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0
R1BScygpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUlu
ZGV4KGkpKSB7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRh
QnVmZmVyKCkpICsgKGNvdW50KyspKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaml0
LmxvYWREb3VibGUoc2NyYXRjaEdQUiwgRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNvdW50ID0gMDsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAg
ICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkgewotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgaml0LmxvYWQ2NChzdGF0aWNfY2FzdDxFbmNv
ZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKyksIEdQ
UkluZm86OnRvUmVnaXN0ZXIoaSkpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBqaXQubG9hZDMy
KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigp
KSArIChjb3VudCsrKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Ci0jZW5kaWYKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgUmVnaXN0ZXJTZXQg
bV91c2VkUmVnaXN0ZXJzOwotICAgIFJlZ2lzdGVyU2V0IG1fbG9ja2VkUmVnaXN0ZXJzOwotICAg
IFJlZ2lzdGVyU2V0IG1fc2NyYXRjaFJlZ2lzdGVyczsKLSAgICBib29sIG1fZGlkUmV1c2VSZWdp
c3RlcnM7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKLQotI2VuZGlmIC8vIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcl9oCi0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTU2NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaCIKICNpbmNsdWRlICJERkdDYWxsQXJyYXlBbGxvY2F0b3JT
bG93UGF0aEdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJERkdTbG93UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2lu
Y2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgpAQCAtMjYxLDcgKzI2Miw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVs
MzIgcGF5bG9hZFN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0
UGF0Y2godmFsdWVQYXlsb2FkR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7
CiAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKLSAg
ICBWX0RGR09wZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7CisgICAgVl9KSVRPcGVyYXRpb25f
RUpDSSBvcHRpbWl6ZWRDYWxsOwogICAgIGlmIChtX2ppdC5zdHJpY3RNb2RlRm9yKG1fY3VycmVu
dE5vZGUtPmNvZGVPcmlnaW4pKSB7CiAgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKICAg
ICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemU7CkBAIC00NDAsNyArNDQxLDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVDb21wYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2Rl
LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlv
bl9FSkogaGVscGVyRnVuY3Rpb24pCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJG
dW5jdGlvbikKIHsKICAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxv
Y2soKTsKICAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxv
Y2soKTsKQEAgLTUxMiwxMyArNTEzLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlUGVlcGgKIAogdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGU+CiBjbGFzcyBDb21wYXJl
QW5kQm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yCi0gICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRo
R2VuZXJhdG9yPEp1bXBUeXBlLCBTX0RGR09wZXJhdGlvbl9FSkosIEdQUlJlZz4geworICAgIDog
cHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25fRUpK
LCBHUFJSZWc+IHsKIHB1YmxpYzoKICAgICBDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2Vu
ZXJhdG9yKAogICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LAotICAg
ICAgICBTX0RGR09wZXJhdGlvbl9FSkogZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsCisgICAgICAgIFNfSklUT3BlcmF0aW9uX0VKSiBm
dW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9h
ZCwKICAgICAgICAgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKLSAgICAgICAg
OiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfREZHT3BlcmF0aW9uX0VKSiwgR1BS
UmVnPigKKyAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIFNfSklUT3Bl
cmF0aW9uX0VKSiwgR1BSUmVnPigKICAgICAgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIE5l
ZWRUb1NwaWxsLCByZXN1bHQpCiAgICAgICAgICwgbV9hcmcxVGFnKGFyZzFUYWcpCiAgICAgICAg
ICwgbV9hcmcxUGF5bG9hZChhcmcxUGF5bG9hZCkKQEAgLTU0Niw3ICs1NDcsNyBAQCBwcml2YXRl
OgogICAgIEdQUlJlZyBtX2FyZzJQYXlsb2FkOwogfTsKIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1
bmN0aW9uKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNv
bXBhcmUoTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewogICAgIEpTVmFsdWVPcGVy
YW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOwpAQCAtMzYwNiw3ICszNjA3LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEZp
bmFsT2JqZWN0VHlwZSkpKTsKICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVQYXlsb2FkR1BS
LCB0ZW1wR1BSKTsKICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVUYWdHUFIsIHRlbXBUYWdH
UFIpOwotICAgICAgICBKX0RGR09wZXJhdGlvbl9FSiBmdW5jdGlvbjsKKyAgICAgICAgSl9KSVRP
cGVyYXRpb25fRUogZnVuY3Rpb247CiAgICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLmV4ZWN1dGFi
bGVGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmlzU3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgZnVu
Y3Rpb24gPSBvcGVyYXRpb25Ub1RoaXNTdHJpY3Q7CiAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2
aXNpb24gMTU2NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFy
cmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aCIKICNpbmNsdWRlICJERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIgor
I2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdTbG93UGF0aEdlbmVyYXRv
ci5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJv
dG90eXBlLmgiCkBAIC0yNTMsNyArMjU0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVk
UHV0QnlJZChDb2RlTwogCiAgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0
LmxhYmVsKCk7CiAgICAgCi0gICAgVl9ERkdPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRDYWxsOwor
ICAgIFZfSklUT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkQ2FsbDsKICAgICBpZiAobV9qaXQuc3Ry
aWN0TW9kZUZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKSkgewogICAgICAgICBpZiAocHV0
S2luZCA9PSBEaXJlY3QpCiAgICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwpAQCAtNDI4LDcgKzQyOSw3IEBAIGJvb2wgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSogbm9k
ZSwgTm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFu
Y2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0pJVE9w
ZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7CiAgICAgQmFzaWNCbG9jayogdGFrZW4gPSBi
cmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7CiAgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFu
Y2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CkBAIC00OTgsMTIgKzQ5OSwxMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAKIHRlbXBsYXRlPHR5cGVuYW1lIEp1bXBU
eXBlPgogY2xhc3MgQ29tcGFyZUFuZEJveEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcgotICAgIDog
cHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19ERkdPcGVyYXRpb25fRUpK
LCBHUFJSZWc+IHsKKyAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUs
IFNfSklUT3BlcmF0aW9uX0VKSiwgR1BSUmVnPiB7CiBwdWJsaWM6CiAgICAgQ29tcGFyZUFuZEJv
eEJvb2xlYW5TbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3Vs
YXRpdmVKSVQqIGppdCwKLSAgICAgICAgU19ERkdPcGVyYXRpb25fRUpKIGZ1bmN0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCi0gICAgICAgIDogQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0RGR09wZXJhdGlvbl9FSkosIEdQUlJlZz4oCisgICAg
ICAgIFNfSklUT3BlcmF0aW9uX0VKSiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyKQorICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlw
ZSwgU19KSVRPcGVyYXRpb25fRUpKLCBHUFJSZWc+KAogICAgICAgICAgICAgZnJvbSwgaml0LCBm
dW5jdGlvbiwgTmVlZFRvU3BpbGwsIHJlc3VsdCkKICAgICAgICAgLCBtX2FyZzEoYXJnMSkKICAg
ICAgICAgLCBtX2FyZzIoYXJnMikKQEAgLTUyNSw3ICs1MjYsNyBAQCBwcml2YXRlOgogICAgIEdQ
UlJlZyBtX2FyZzI7CiB9OwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5v
blBlZXBob2xlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENv
bmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiBub2Rl
LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0pJVE9wZXJhdGlv
bl9FSkogaGVscGVyRnVuY3Rpb24pCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLT5jaGls
ZDIoKSk7CkBAIC0zOTAyLDcgKzM5MDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BS
LCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKICAgICAgICAgICAgIFRydXN0ZWRJ
bW0zMihGaW5hbE9iamVjdFR5cGUpKSk7CiAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BS
LCB0ZW1wR1BSKTsKLSAgICAgICAgSl9ERkdPcGVyYXRpb25fRUogZnVuY3Rpb247CisgICAgICAg
IEpfSklUT3BlcmF0aW9uX0VKIGZ1bmN0aW9uOwogICAgICAgICBpZiAobV9qaXQuZ3JhcGgoKS5l
eGVjdXRhYmxlRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5pc1N0cmljdE1vZGUoKSkKICAgICAgICAg
ICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uVG9UaGlzU3RyaWN0OwogICAgICAgICBlbHNlCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMTU2NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NSwyMiArODk1LDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6dXNlQ2hpbGRyZW4oTm9kZSogbgogICAgIH0KIH0KIAotdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6d3JpdGVCYXJyaWVyKE1hY3JvQXNzZW1ibGVyJiBqaXQsIEdQUlJlZyBvd25lciwg
R1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIsIFdyaXRlQmFycmllclVzZUtpbmQgdXNl
S2luZCkKLXsKLSAgICBVTlVTRURfUEFSQU0oaml0KTsKLSAgICBVTlVTRURfUEFSQU0ob3duZXIp
OwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gy
KTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7Ci0gICAgQVNTRVJUKG93bmVyICE9IHNjcmF0
Y2gxKTsKLSAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDIpOwotICAgIEFTU0VSVChzY3JhdGNo
MSAhPSBzY3JhdGNoMik7Ci0KLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0g
ICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChqaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRD
b3VudGVyRm9yKHVzZUtpbmQpKTsKLSNlbmRpZgotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp3
cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVV
c2UsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcg
c2NyYXRjaDIpCiB7CiAgICAgVU5VU0VEX1BBUkFNKG93bmVyR1BSKTsKQEAgLTEwMTcsNyArMTAw
MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbihOb2RlKiBub2QKICNlbmRpZgog
fQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSogbm9k
ZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRp
b25fRUpKIGhlbHBlckZ1bmN0aW9uKQorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVDb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKICAgICB1bnNpZ25l
ZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgIGlmIChi
cmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKQEAgLTE0NjUsNyArMTQ0OSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludDMKIH0KIAogLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBjb21wYXJlIGlzIGZ1c2VkIHdpdGggYSBzdWJzZXF1ZW50IGJyYW5jaC4KLWJv
b2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW5jaChOb2RlKiBub2RlLCBNYWNy
b0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogb3Bl
cmF0aW9uKQorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKE5vZGUq
IG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24sIFNfSklUT3BlcmF0
aW9uX0VKSiBvcGVyYXRpb24pCiB7CiAgICAgLy8gRnVzZWQgY29tcGFyZSAmIGJyYW5jaC4KICAg
ICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwpA
QCAtMzg0Miw3ICszODI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTW9k
KE5vZAogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBhcmUgaXMgZnVzZWQgd2l0aCBh
IHN1YnNlcXVlbnQgYnJhbmNoLgotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlKiBu
b2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlv
bl9FSkogb3BlcmF0aW9uKQorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlKiBub2Rl
LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9F
Skogb3BlcmF0aW9uKQogewogICAgIGlmIChjb21waWxlUGVlcEhvbGVCcmFuY2gobm9kZSwgY29u
ZGl0aW9uLCBkb3VibGVDb25kaXRpb24sIG9wZXJhdGlvbikpCiAgICAgICAgIHJldHVybiB0cnVl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkocmV2aXNpb24gMTU2NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsMTEgQEAKICNpbmNsdWRl
ICJERkdKSVRDb21waWxlci5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJE
RkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkRGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCIKICNpbmNsdWRlICJERkdWYWx1
ZVNvdXJjZS5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJNYXJrZWRB
bGxvY2F0b3IuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiVmFsdWVSZWNvdmVy
eS5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCkBAIC0zMTIsOCArMzEzLDYgQEAg
cHVibGljOgogICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnRGb3JNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIHdyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYsIEdQUlJlZyBvd25lckdQUiwgR1BSUmVn
IHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllclVzZUtpbmQpOwot
CiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIs
IEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9
IEludmFsaWRHUFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWcpOwogICAg
IHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgSlNDZWxsKiB2YWx1ZSwgV3JpdGVC
YXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoSlND
ZWxsKiBvd25lciwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJV
c2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnKTsKQEAgLTc0MCw5ICs3
MzksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVs
bChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwog
ICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlKiwgRWRnZSBvcGVyYW5kLCBi
b29sIGludmVydCA9IGZhbHNlKTsKICAgICAKLSAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhv
bGVCcmFuY2goTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwotICAgIHZv
aWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24p
OwotICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6
UmVsYXRpb25hbENvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsK
KyAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSosIE5vZGUqIGJyYW5j
aE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlv
bl9FSkogaGVscGVyRnVuY3Rpb24pOworICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9s
ZUNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0pJ
VE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOworICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVD
b21wYXJlKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19KSVRP
cGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsKICAgICAKICAgICB2b2lkIG5vblNwZWN1bGF0
aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQg
PSBmYWxzZSk7CiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlU3RyaWN0RXEoTm9k
ZSosIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwpAQCAtOTMyLDE2OSArOTMxLDE2OSBAQCBwdWJsaWM6
CiAgICAgLy8gbWFjaGluZSByZWdpc3RlcnMsIGFuZCBkZWxlZ2F0ZSB0aGUgY2FsbGluZyBjb252
ZW50aW9uIHNwZWNpZmljCiAgICAgLy8gZGVjaXNpb24gYXMgdG8gaG93IHRvIGZpbGwgdGhlIHJl
Z3NpdGVycyB0byBzZXR1cEFyZ3VtZW50cyogbWV0aG9kcy4KIAotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9F
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzRXhlY1N0YXRlKCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBjZWxsKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oUF9KSVRPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgY2Vs
bCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShjZWxs
KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IG9iamVjdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0
aW9uX0VPIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9E
RkdPcGVyYXRpb25fRU9TIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwg
c2l6ZV90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9w
ZXJhdGlvbl9FT1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBzaXpl
X3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU9aIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgaW50MzJfdCBzaXplKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRU9aIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgaW50MzJfdCBzaXplKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1c3Rl
ZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1tUHRyKHN0YXRpY19j
YXN0PHNpemVfdD4oc2l6ZSkpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVfdCBzaXplKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIG9sZCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2xkLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBf
REZHT3BlcmF0aW9uX0VTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90IHNpemUpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FUyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9E
RkdPcGVyYXRpb25fRVNKc3Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBzaXplX3QgaW5kZXgs
IEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRP
cGVyYXRpb25fRVNKc3Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBzaXplX3QgaW5kZXgsIEdQ
UlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKFRydXN0ZWRJbW1QdHIoaW5kZXgpLCBhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTdCBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVN0IG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYXJnMik7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihQX0RGR09wZXJhdGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0
ZWRJbW0zMihhcmcyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VT
dFBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHZvaWQq
IHBvaW50ZXIsIHNpemVfdCBzaXplKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oUF9KSVRPcGVyYXRpb25fRVN0UFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBf
REZHT3BlcmF0aW9uX0VTdFNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHNpemVfdCBpbmRleCwgc2l6ZV90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3RTUyBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgaW5kZXgsIHNpemVfdCBzaXplKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cihpbmRleCksIFRydXN0ZWRJbW1QdHIoc2l6
ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhl
Y1N0YXRlKCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRP
cGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENf
REZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNDZWxsKiBjZWxsKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUMgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihjZWxsKSk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihD
X0RGR09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
SlNDZWxsKiBjZWxsKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRP
cGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpTQ2Vs
bCogY2VsbCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGNlbGwpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VJY2Ygb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VJY2Yg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRVN0IG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FU3Qgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Q19ERkdPcGVyYXRpb25fRUpzc1N0IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oQ19KSVRPcGVyYXRpb25fRUpzc1N0IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihDX0RGR09wZXJhdGlvbl9FSnNzSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oQ19KSVRPcGVyYXRpb25fRUpzc0pzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VKc3NKc3NKc3Mg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJl
ZyBhcmczKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRp
b25fRUpzc0pzc0pzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMiwgR1BSUmVnIGFyZzMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0VD
QyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VDQyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSnNzX0RGR09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSnNzX0pJVE9wZXJhdGlv
bl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09w
ZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSkK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsK
ICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0
aW9uX0VDSWNmIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVy
YXRpb25fRUNJY2Ygb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0NJY2Ygb3Bl
cmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVy
YXRpb25fRUNDSWNmIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxG
cmFtZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVy
YXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9E
RkdPcGVyYXRpb25fRUNaIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIGludCBhcmcyKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNaIG9wZXJhdGlv
biwgR1BSUmVnIGFyZzEsIGludCBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihhcmcyKSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0Mgb3Bl
cmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0RGR09wZXJhdGlvbl9XIG9wZXJhdGlvbiwgV2F0Y2hwb2ludFNldCogd2F0Y2hw
b2ludFNldCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0
aW9uX1cgb3BlcmF0aW9uLCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHMoVHJ1c3RlZEltbVB0cih3YXRjaHBvaW50U2V0KSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CkBAIC0xMTI2LDI0NCArMTEy
NSwyNDQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fWlogb3BlcmF0aW9uLCBGUFJSZWcg
cmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihEX0pJVE9wZXJhdGlvbl9aWiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oRF9ERkdPcGVyYXRpb25fREQgb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBGUFJSZWcg
YXJnMSwgRlBSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihE
X0pJVE9wZXJhdGlvbl9ERCBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEZQUlJlZyBhcmcxLCBG
UFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzKGFyZzEsIGFy
ZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSV9ERkdPcGVy
YXRpb25fRUpzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSV9KSVRPcGVyYXRpb25fRUpzcyBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRVogb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25f
RSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHZvaWQqIHBvaW50ZXIpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUCBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0RG
R09wZXJhdGlvbl9EIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9EIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50cyhhcmcxKTsKICAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0
LmFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBjYWxsOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUkgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3Bl
cmF0aW9uX0VBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQSBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUFaIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUFaIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUpzc1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FSnNzWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
dm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0
cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBpbnQgc3RhcnRDb25zdGFudCwgaW50IG51bUNvbnN0YW50cykKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VTUyBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIGludCBzdGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3RhbnRzKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihzdGFydENv
bnN0YW50KSwgVHJ1c3RlZEltbTMyKG51bUNvbnN0YW50cykpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAg
ICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25f
RVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIHZvaWQqIHBvaW50ZXIp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUFAg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdm9pZCogcG9pbnRlcikKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVz
dGVkSW1tUHRyKHBvaW50ZXIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgSlNDZWxsKiBjZWxsKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU0NlbGwq
IGNlbGwpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihjZWxsKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNJIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIGNvbnN0IFN0cmluZ0ltcGwqIHVpZCkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVz
dGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSSBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxLCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cih1aWQpKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VEQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEZQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
SklUT3BlcmF0aW9uX0VEQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEZQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQ
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludDMy
X3QgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50MzJfdCBhcmcxKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcx
KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQz
Ml90IGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRVpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50MzJfdCBh
cmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoYXJnMSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAg
ICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25f
RVpJY2ZaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50MzJfdCBhcmcxLCBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBpbnQzMl90IGFyZzEsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBH
UFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShUcnVzdGVkSW1tMzIoYXJnMSksIFRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lKSwg
YXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VKUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyB2YWx1ZSwgc2l6ZV90IGluZGV4KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRUpTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIHZhbHVlLCBzaXplX3QgaW5kZXgpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUodmFsdWUsIFRydXN0ZWRJbW1QdHIoaW5kZXgpKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0SiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJn
MikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VT
dEogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVn
IGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
IAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9KIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihTX0pJVE9wZXJhdGlvbl9KIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhhcmcxKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklU
T3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihT
X0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9w
ZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQUCBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0ubV92YWx1ZSkp
KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSwgR1BSUmVnIGFyZzIp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW1tLm1fdmFs
dWUpKSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNKIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNKIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRUNKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpT
VmFsdWVSZWdzIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNW
YWx1ZVJlZ3MgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyLmdwcigpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aRCBvcGVy
YXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgRlBSUmVnIGFyZzMpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FT1pEIG9wZXJhdGlvbiwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBGUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9
CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VK
UFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIHZvaWQqIHBvaW50ZXIpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSlBQIG9w
ZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCB2b2lkKiBwb2ludGVyKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRy
dXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VKQ0kgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKQ0kgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VKSkog
b3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpKSiBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAg
ICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25f
RVBaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FUFpKIG9w
ZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmcz
KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3Bl
cmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBh
cmczKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25f
RU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
MiwgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9E
RkdPcGVyYXRpb25fRUNKSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BS
UmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJh
dGlvbl9FQ0pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJn
MykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKERfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0pJVE9wZXJhdGlvbl9F
SiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CkBAIC0xMzg3LDcgKzEzODYsNyBAQCBwdWJsaWM6CiAjZGVmaW5lIFNINF8zMkJJVF9EVU1NWV9B
UkcKICNlbmRpZgogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0RGR09w
ZXJhdGlvbl9EIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9EIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBwcmVwYXJlRm9yRXh0
ZXJuYWxDYWxsKCk7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzKGFyZzEpOwpAQCAtMTM5
NSwyMzMgKzEzOTQsMjMzIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9Q
dHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBjYWxs
OwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0
aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0Ugb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5
bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0RGR09wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJl
ZyByZXN1bHRQYXlsb2FkLCB2b2lkKiBwb2ludGVyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFn
LCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQUCBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgdm9pZCogcG9p
bnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9u
X0VQUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBH
UFJSZWcgYXJnMSwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSSBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cih1
aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VBIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUEgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQVogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RUFaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1
bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZH
T3BlcmF0aW9uX0VKc3NaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3Vs
dFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKc3NaIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBh
cmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQUyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCB2b2lkKiBwb2ludGVyLCBz
aXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXls
b2FkLCB2b2lkKiBwb2ludGVyLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBUcnVzdGVk
SW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTUyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBpbnQgc3Rh
cnRDb25zdGFudCwgaW50IG51bUNvbnN0YW50cykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VTUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBpbnQgc3RhcnRDb25zdGFudCwgaW50IG51bUNvbnN0YW50
cykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tMzIoc3RhcnRDb25zdGFudCksIFRydXN0ZWRJbW0zMihudW1Db25zdGFudHMpKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKUCBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFy
ZzFQYXlsb2FkLCB2b2lkKiBwb2ludGVyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUpQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BS
UmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIHZv
aWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIFRydXN0ZWRJ
bW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpQ
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJl
ZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpQIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJS
ZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBh
cmcxVGFnLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0K
IAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUMg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgSlNDZWxs
KiBjZWxsKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwg
SlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKFRydXN0ZWRJbW1QdHIoY2VsbCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3Vs
dFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWQsIEdQUlJlZyBhcmcxLCBjb25zdCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIGNvbnN0IFN0
cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQs
IHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIFN0cmluZ0lt
cGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2Fk
LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBTdHJpbmdJbXBsKiB1aWQpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJ
VF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxVGFnLCBHUFJSZWcg
YXJnMVBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBpbnQzMl90IGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9h
ZCwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBUcnVzdGVkSW1t
MzIoYXJnMVRhZyksIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwg
cmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0RGR09wZXJhdGlvbl9FREEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRURBIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEZQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMy
QklUX0RVTU1ZX0FSRyBhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRU
YWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3Bl
cmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXls
b2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMikKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQSBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJn
MVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcx
UGF5bG9hZCwgYXJnMVRhZywgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFn
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FSkEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgVHJ1c3RlZEltbTMyIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkEg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgVHJ1c3Rl
ZEltbTMyIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1N
WV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQs
IHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBH
UFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludDMyX3QgYXJnMSkKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludDMyX3QgYXJnMSkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoYXJn
MSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVpJY2ZaIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludDMyX3QgYXJnMSwg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVpJY2ZaIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludDMyX3QgYXJnMSwg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEdQUlJlZyBhcmcyKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcx
KSwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpLCBhcmcyKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQ
YXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkLCBpbnQzMl90IGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVpaIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludDMyX3QgYXJnMSwgR1BS
UmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoVHJ1c3RlZEltbTMyKGFyZzEpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1
bHRUYWcpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9E
RkdPcGVyYXRpb25fRUpTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIHNpemVfdCBpbmRleCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBf
SklUT3BlcmF0aW9uX0VKUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTVmFsdWVSZWdzIHZh
bHVlLCBzaXplX3QgaW5kZXgpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgdmFsdWUucGF5bG9hZEdQUigpLCB2YWx1
ZS50YWdHUFIoKSwgVHJ1c3RlZEltbVB0cihpbmRleCkpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3RKIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcg
YXJnMlBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9w
ZXJhdGlvbl9FU3RKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUp
LCBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VKIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMy
QklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9K
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5
bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9u
X0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQ
YXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMVBheWxvYWQs
IGFyZzFUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19E
RkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywg
R1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
U19KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRh
ZywgR1BSUmVnIGFyZzFQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFn
KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBh
cmcyUGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3Bl
cmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJS
ZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9E
VU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIFNINF8zMkJJVF9EVU1NWV9BUkcgYXJnMlBh
eWxvYWQsIGFyZzJUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcg
YXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcs
IEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMy
QklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgU0g0XzMyQklUX0RVTU1ZX0FSRyBh
cmcyUGF5bG9hZCwgYXJnMlRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsK
ICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwg
R1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMiBpbW0pCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMiBpbW0pCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIFNI
NF8zMkJJVF9EVU1NWV9BUkcgaW1tLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyIGltbSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyIGltbSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklU
X0RVTU1ZX0FSRyBpbW0sIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIFNINF8zMkJJ
VF9EVU1NWV9BUkcgYXJnMlBheWxvYWQsIGFyZzJUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQs
IHJlc3VsdFRhZyk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcg
cmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBh
eWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMlBheWxv
YWQsIGFyZzJUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNKIG9w
ZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJn
MikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VD
SiBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpTVmFsdWVSZWdz
IGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMi5wYXlsb2FkR1BSKCksIGFyZzIudGFnR1BSKCkpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdC5w
YXlsb2FkR1BSKCksIHJlc3VsdC50YWdHUFIoKSk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDQyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFn
KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3Bl
cmF0aW9uX0VPWkQgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEZQUlJlZyBh
cmczKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25f
RU9aRCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgRlBSUmVnIGFyZzMpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
MiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FSlBQIG9wZXJhdGlvbiwgR1BSUmVn
IGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIsIHZvaWQqIHBvaW50ZXIp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSlBQ
IG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFy
ZzIsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFy
ZzIsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VKQ0kgb3BlcmF0aW9uLCBHUFJSZWcgYXJn
MVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwgU3RyaW5nSW1wbCogdWlkKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUpDSSBv
cGVyYXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcy
LCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFy
ZzIsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNKSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkLCBHUFJSZWcgYXJnM1RhZywgR1BSUmVn
IGFyZzNQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRP
cGVyYXRpb25fRUNKSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMlRhZywgR1BS
UmVnIGFyZzJQYXlsb2FkLCBHUFJSZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzJQ
YXlsb2FkLCBhcmcyVGFnLCBhcmczUGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FUFpKIG9wZXJhdGlv
biwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQ
YXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRp
b25fRVBaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzNU
YWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJXzMyQklUX0RVTU1ZX0FSRyBTSDRfMzJC
SVRfRFVNTVlfQVJHIGFyZzNQYXlsb2FkLCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxv
YWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9F
T1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnM1RhZywg
R1BSUmVnIGFyZzNQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJCSVRfRFVNTVlfQVJHIFNINF8zMkJJVF9E
VU1NWV9BUkcgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxv
YWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9F
T1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJn
M1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJCSVRfRFVNTVlfQVJHIFNINF8z
MkJJVF9EVU1NWV9BUkcgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBG
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9u
LCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRf
RFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwpAQCAtMTky
NCw4ICsxOTIzLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYmV0dGVyVXNlU3RyaWN0SW50
NTIoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKLSAgICBib29sIGNvbXBhcmUoTm9kZSosIE1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
Q29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkopOwotICAgIGJvb2wgY29tcGlsZVBlZXBIb2xl
QnJhbmNoKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpKKTsKKyAgICBib29s
IGNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkopOworICAgIGJv
b2wgY29tcGlsZVBlZXBIb2xlQnJhbmNoKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiwgU19KSVRPcGVyYXRp
b25fRUpKKTsKICAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZUludDMyQnJhbmNoKE5vZGUqLCBOb2Rl
KiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgdm9p
ZCBjb21waWxlUGVlcEhvbGVJbnQ1MkJyYW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgSklU
Q29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgIHZvaWQgY29tcGlsZVBlZXBIb2xl
Qm9vbGVhbkJyYW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgSklUQ29tcGlsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVu
a3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtz
LmNwcAkocmV2aXNpb24gMTU2NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
aHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MywyMzggKzkzLDYgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVAogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCAoIkRGRyBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIikpOwogfQogCi1pbmxp
bmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBw
b2ludGVyR1BSKQotewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgaXNOb25aZXJvID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBw
b2ludGVyR1BSKTsKLSAgICBqaXQuYnJlYWtwb2ludCgpOwotICAgIGlzTm9uWmVyby5saW5rKCZq
aXQpOwotICAgIGppdC5wdXNoKHBvaW50ZXJHUFIpOwotICAgIGppdC5sb2FkOChwb2ludGVyR1BS
LCBwb2ludGVyR1BSKTsKLSAgICBqaXQucG9wKHBvaW50ZXJHUFIpOwotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oaml0KTsKLSAgICBVTlVTRURfUEFSQU0ocG9pbnRlckdQUik7Ci0jZW5kaWYKLX0K
LQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcihWTSogdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7Ci0gICAgCi0gICAg
Ly8gV2Ugd2lsbCBqdW1wIHRvIGhlcmUgaWYgdGhlIEpJVCBjb2RlIHRoaW5rcyBpdCdzIG1ha2lu
ZyBhIGNhbGwsIGJ1dCB0aGUKLSAgICAvLyBsaW5raW5nIGhlbHBlciAoQysrIGNvZGUpIGRlY2lk
ZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGluc3RlYWQuIFdlIHdpbGwKLSAgICAvLyBoYXZlIHNh
dmVkIHRoZSBjYWxsUmV0dXJuSW5kZXggaW4gdGhlIGZpcnN0IGFyZ3VtZW50cyBvZiBKSVRTdGFj
a0ZyYW1lLgotICAgIC8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBvbiB0
aGUgc3RhY2sgYXQgdGhpcyBwb2ludCwgc28gd2UKLSAgICAvLyBuZWVkIHRvIHJlbW92ZSBpdCBh
bmQgZHJvcCBpdCBvbiB0aGUgZmxvb3IsIHNpbmNlIHdlIGRvbid0IGNhcmUgYWJvdXQgaXQuCi0g
ICAgLy8gRmluYWxseSBub3RlIHRoYXQgdGhlIGNhbGwgZnJhbWUgcmVnaXN0ZXIgcG9pbnRzIGF0
IHRoZSBjYWxsZWUgZnJhbWUsIHNvCi0gICAgLy8gd2UgbmVlZCB0byBwb3AgaXQuCi0gICAgaml0
LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25S
ZXR1cm5HUFIpOwotICAgIGppdC5sb2FkUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAg
IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpDYWxs
ZXJGcmFtZSksCi0gICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGppdC5wZWVrNjQoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOwotI2Vsc2UKLSAgICBqaXQucGVlayhHUFJJ
bmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7
Ci0jZW5kaWYKLSAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86Om5v
blByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBH
UFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJ
bmZvOjpub25BcmdHUFIwKTsKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAg
ICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwot
ICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiREZHIHRocm93IGV4Y2VwdGlvbiBmcm9tIGNh
bGwgc2xvdyBwYXRoIHRodW5rIikpOwotfQotCi1zdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKLSAg
ICBDQ2FsbEhlbHBlcnMmIGppdCwgVk0qIHZtLCBQX0RGR09wZXJhdGlvbl9FIHNsb3dQYXRoRnVu
Y3Rpb24pCi17Ci0gICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZv
Ojpub25BcmdHUFIyKTsKLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpu
b25BcmdHUFIyKTsKLSAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQ
UjIsCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBDKSk7Ci0gICAgaml0LnN0b3JlUHRy
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBqaXQucG9rZTY0KEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKLSNlbHNlCi0gICAgaml0LnBva2UoR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgp
OwotI2VuZGlmCi0gICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7Ci0gICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc2xvd1Bh
dGhGdW5jdGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBlbWl0UG9pbnRlclZhbGlk
YXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpu
b25BcmdHUFIwKTsKLSAgICAKLSAgICAvLyBUaGlzIHNsb3cgY2FsbCB3aWxsIHJldHVybiB0aGUg
YWRkcmVzcyBvZiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAgICAvLyAxKSBFeGNlcHRpb24gdGhy
b3dpbmcgdGh1bmsuCi0gICAgLy8gMikgSG9zdCBjYWxsIHJldHVybiB2YWx1ZSByZXR1cm5lciB0
aGluZ3kuCi0gICAgLy8gMykgVGhlIGZ1bmN0aW9uIHRvIGNhbGwuCi0gICAgaml0LmxvYWRQdHIo
Ci0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBDKSwKLSAgICAgICAgR1BSSW5mbzo6bm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6UmV0dXJu
UEMpKTsKLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25SZXR1cm5HUFIpOwotICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwotICAgIGVtaXRQb2ludGVyVmFs
aWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICBqaXQuanVtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bGlua0ZvclRodW5rR2VuZXJhdG9yKAotICAgIFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQotewotICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2sgb3Ig
aW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKLSAgICAvLyBzYXZlIHRoZSByZXR1
cm4gYWRkcmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZSBtYWtlIGEgQysrIGZ1bmN0aW9u
IGNhbGwKLSAgICAvLyB0byBwZXJmb3JtIGxpbmtpbmcgYW5kIGxhenkgY29tcGlsYXRpb24gaWYg
bmVjZXNzYXJ5LiBXZSBleHBlY3QgdGhlIGNhbGxlZQotICAgIC8vIHRvIGJlIGluIG5vbkFyZ0dQ
UjAvbm9uQXJnR1BSMSAocGF5bG9hZC90YWcpLCB0aGUgY2FsbCBmcmFtZSB0byBoYXZlIGFscmVh
ZHkKLSAgICAvLyBiZWVuIGFkanVzdGVkLCBub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgaG9sZHMg
dGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGluZGV4LAotICAgIC8vIGFuZCBhbGwgb3RoZXIgcmVnaXN0
ZXJzIHRvIGJlIGF2YWlsYWJsZSBmb3IgdXNlLiBXZSB1c2UgSklUU3RhY2tGcmFtZTo6YXJncwot
ICAgIC8vIHRvIHNhdmUgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFjcm9zcyBjYWxscy4KLSAgICAK
LSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKLSAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIHZt
LCBraW5kID09IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uTGlua0NhbGwgOiBvcGVyYXRpb25MaW5r
Q29uc3RydWN0KTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0
Y2hCdWZmZXIsCi0gICAgICAgICgiREZHIGxpbmsgJXMgc2xvdyBwYXRoIHRodW5rIiwga2luZCA9
PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7Ci19Ci0KLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICByZXR1cm4g
bGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCk7Ci19Ci0KLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJl
dHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QpOwotfQotCi0v
LyBGb3IgY2xvc3VyZSBvcHRpbWl6YXRpb25zLCB3ZSBvbmx5IGluY2x1ZGUgY2FsbHMsIHNpbmNl
IGlmIHlvdSdyZSB1c2luZyBjbG9zdXJlcyBmb3IKLS8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gdGhl
biB5b3UncmUgZ29pbmcgdG8gbG9zZSBiaWcgdGltZSBhbnl3YXkuCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQotewotICAgIENDYWxs
SGVscGVycyBqaXQodm0pOwotICAgIAotICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlv
bkxpbmtDbG9zdXJlQ2FsbCk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0s
ICZqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsICgiREZHIGxpbmsgY2xvc3VyZSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKLX0KLQot
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IoCi0g
ICAgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgLy8gVGhlIHJl
dHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjaywgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdl
IHdpbGwgaGVuY2UKLSAgICAvLyBqdW1wIHRvIHRoZSBjYWxsZWUsIG9yIHNhdmUgdGhlIHJldHVy
biBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdlCi0gICAgLy8gbWFrZSBhIEMrKyBm
dW5jdGlvbiBjYWxsIHRvIHRoZSBhcHByb3ByaWF0ZSBERkcgb3BlcmF0aW9uLgotCi0gICAgQ0Nh
bGxIZWxwZXJzIGppdCh2bSk7Ci0gICAgCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZTsKLQotICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBhIHN0b3J5IGZvciBlbGltaW5h
dGluZyB0aGVzZSBjaGVja3MuIEluIG1hbnkgY2FzZXMsCi0gICAgLy8gdGhlIERGRyBrbm93cyB0
aGF0IHRoZSB2YWx1ZSBpcyBkZWZpbml0ZWx5IGEgY2VsbCwgb3IgZGVmaW5pdGVseSBhIGZ1bmN0
aW9uLgotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc2xvd0Nhc2UuYXBwZW5kKAotICAg
ICAgICBqaXQuYnJhbmNoVGVzdDY0KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJv
LCBHUFJJbmZvOjpub25BcmdHUFIwLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSNlbHNl
Ci0gICAgc2xvd0Nhc2UuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoMzIoCi0gICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpub25BcmdHUFIxLAotICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKLSNlbmRp
ZgotICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdH
UFIwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7Ci0g
ICAgc2xvd0Nhc2UuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpub25BcmdHUFIyLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwKLSAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihKU0Z1bmN0aW9uOjppbmZvKCkp
KSk7Ci0gICAgCi0gICAgLy8gTm93IHdlIGtub3cgd2UgaGF2ZSBhIEpTRnVuY3Rpb24uCi0gICAg
Ci0gICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
Ojpub25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCi0gICAgICAg
IEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIHNsb3dDYXNlLmFwcGVuZCgKLSAgICAgICAgaml0
LmJyYW5jaDMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwKLSAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpub25B
cmdHUFIyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9yKGtpbmQpKSwK
LSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgCi0gICAg
Ly8gTm93IHdlIGtub3cgdGhhdCB3ZSBoYXZlIGEgQ29kZUJsb2NrLCBhbmQgd2UncmUgY29tbWl0
dGVkIHRvIG1ha2luZyBhIGZhc3QKLSAgICAvLyBjYWxsLgotICAgIAotICAgIGppdC5sb2FkUHRy
KAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLAotICAgICAgICBHUFJJbmZvOjpub25BcmdH
UFIxKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5zdG9yZTY0KAotICAgICAgICBHUFJJ
bmZvOjpub25BcmdHUFIxLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAg
ICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWluKSk7Ci0j
ZWxzZQotICAgIGppdC5zdG9yZVB0cigKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMSwKLSAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihS
ZWdpc3RlcikpICogSlNTdGFjazo6U2NvcGVDaGFpbiArCi0gICAgICAgICAgICBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgaml0
LnN0b3JlMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWluICsKLSAgICAgICAgICAg
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwot
I2VuZGlmCi0gICAgCi0gICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2Rl
V2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCkpLAotICAgICAgICBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
Ci0gICAgLy8gTWFrZSBhIHRhaWwgY2FsbC4gVGhpcyB3aWxsIHJldHVybiBiYWNrIHRvIERGRyBj
b2RlLgotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMCk7Ci0KLSAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwot
ICAgIAotICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2ZXJ0IHRvIHRo
ZSBmdWxsIHNsb3cgcGF0aC4KLSAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBraW5kID09
IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uVmlydHVhbENhbGwgOiBvcGVyYXRpb25WaXJ0dWFsQ29u
c3RydWN0KTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hC
dWZmZXIsCi0gICAgICAgICgiREZHIHZpcnR1YWwgJXMgc2xvdyBwYXRoIHRodW5rIiwga2luZCA9
PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7Ci19Ci0KLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICByZXR1
cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCk7Ci19Ci0KLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQot
ewotICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1
Y3QpOwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAkocmV2aXNp
b24gMTU2NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsMTYgKzQwLDYgQEAgbmFtZXNwYWNlIERGRyB7CiAKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0
b3IoVk0qKTsKLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3Io
Vk0qKTsKLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJh
dG9yKFZNKik7Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJh
dG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRodW5rR2Vu
ZXJhdG9yKFZNKik7Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5z
aWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE1NjQ3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCwxMiArNDgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1h
Y3JvKG9zckV4aXQsICJ3ZWJraXRfb3NyX2V4aXQiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGJv
b2xlYW4sIGludDMyLCBWYXJpYWRpYykpCiAKICNkZWZpbmUgRk9SX0VBQ0hfRlVOQ1RJT05fVFlQ
RShtYWNybykgXAotICAgIG1hY3JvKElfREZHT3BlcmF0aW9uX0VKc3MsIGZ1bmN0aW9uVHlwZShp
bnRQdHIsIGludFB0ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKEpfREZHT3BlcmF0aW9uX0UsIGZ1
bmN0aW9uVHlwZShpbnQ2NCwgaW50UHRyKSkgXAotICAgIG1hY3JvKFBfREZHT3BlcmF0aW9uX0VD
LCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKLSAgICBtYWNybyhWX0RG
R09wZXJhdGlvbl9FT1pELCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBp
bnQzMiwgZG91YmxlVHlwZSkpIFwKLSAgICBtYWNybyhWX0RGR09wZXJhdGlvbl9FT1pKLCBmdW5j
dGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgaW50NjQpKSBcCi0gICAg
bWFjcm8oWl9ERkdPcGVyYXRpb25fRCwgZnVuY3Rpb25UeXBlKGludDMyLCBkb3VibGVUeXBlKSkK
KyAgICBtYWNybyhJX0pJVE9wZXJhdGlvbl9FSnNzLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQ
dHIsIGludFB0cikpIFwKKyAgICBtYWNybyhKX0pJVE9wZXJhdGlvbl9FLCBmdW5jdGlvblR5cGUo
aW50NjQsIGludFB0cikpIFwKKyAgICBtYWNybyhQX0pJVE9wZXJhdGlvbl9FQywgZnVuY3Rpb25U
eXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIpKSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25f
RU9aRCwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0ciwgaW50MzIsIGRvdWJs
ZVR5cGUpKSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRU9aSiwgZnVuY3Rpb25UeXBlKHZv
aWRUeXBlLCBpbnRQdHIsIGludFB0ciwgaW50MzIsIGludDY0KSkgXAorICAgIG1hY3JvKFpfSklU
T3BlcmF0aW9uX0QsIGZ1bmN0aW9uVHlwZShpbnQzMiwgZG91YmxlVHlwZSkpCiAKIGNsYXNzIElu
dHJpbnNpY1JlcG9zaXRvcnkgOiBwdWJsaWMgQ29tbW9uVmFsdWVzIHsKIHB1YmxpYzoKQEAgLTc5
LDcgKzc5LDcgQEAgcHVibGljOgogI3VuZGVmIEZVTkNUSU9OX1RZUEVfR0VUVEVSCiAgICAgCiAj
ZGVmaW5lIEZVTkNUSU9OX1RZUEVfUkVTT0xWRVIodHlwZU5hbWUsIHR5cGUpIFwKLSAgICBMVHlw
ZSBvcGVyYXRpb25UeXBlKERGRzo6dHlwZU5hbWUpICAgICAgICAgXAorICAgIExUeXBlIG9wZXJh
dGlvblR5cGUoSlNDOjp0eXBlTmFtZSkgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgcmV0dXJuIHR5cGVOYW1lKCk7ICAg
ICAgICAgICAgICAgICAgICAgXAogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTY0NzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTk5Niw3ICsxOTk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IFRoaXMg
aXMgdW5hY2NlcHRhYmx5IHNsb3cuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEKICAgICAgICAgCi0gICAgICAgIEpfREZHT3BlcmF0aW9u
X0UgZnVuY3Rpb24gPQorICAgICAgICBKX0pJVE9wZXJhdGlvbl9FIGZ1bmN0aW9uID0KICAgICAg
ICAgICAgIG1fbm9kZS0+b3AoKSA9PSBDYWxsID8gb3BlcmF0aW9uRlRMQ2FsbCA6IG9wZXJhdGlv
bkZUTENvbnN0cnVjdDsKICAgICAgICAgCiAgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9
IG1fbm9kZS0+b3AoKSA9PSBDYWxsID8gMCA6IDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmgJKHJldmlzaW9uIDE1NjQ3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogLy8g
VGFrZXMgdGhlIGNhbGwgZnJhbWUgYW5kIHRoZSBpbmRleCBvZiB0aGUgZXhpdCwgYW5kIHJldHVy
bnMgdGhlIGFkZHJlc3MgdG8KIC8vIGp1bXAgdG8uCiBleHRlcm4gIkMiIHsKLXZvaWQqIERGR19P
UEVSQVRJT04gY29tcGlsZUZUTE9TUkV4aXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgZXhpdElEKSBX
VEZfSU5URVJOQUw7Cit2b2lkKiBKSVRfT1BFUkFUSU9OIGNvbXBpbGVGVExPU1JFeGl0KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIGV4aXRJRCkgV1RGX0lOVEVSTkFMOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHJldmlzaW9uIDE1NjQ3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxMyw2ICs0MTMsMjEgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApKSAqIHNpemVv
ZihSZWdpc3Rlcik7CiAgICAgfQogCisgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVy
LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyVXNlS2luZCB1
c2VLaW5kKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKHNjcmF0Y2gxKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOworICAgICAgICBBU1NFUlQob3duZXIgIT0gc2Ny
YXRjaDEpOworICAgICAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDIpOworICAgICAgICBBU1NF
UlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOworICAgICAgICAKKyNpZiBFTkFCTEUoV1JJVEVfQkFS
UklFUl9QUk9GSUxJTkcpCisgICAgICAgIGVtaXRDb3VudChXcml0ZUJhcnJpZXJDb3VudGVyczo6
aml0Q291bnRlckZvcih1c2VLaW5kKSk7CisjZW5kaWYKKyAgICB9CisKICAgICBWZWN0b3I8Qnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXBGb3IoQ29kZUJsb2NrKik7CiAg
ICAgCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lv
biAxNTY0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc5NywyMyArNzk3LDIzIEBAIHZvaWQgSklUOjpsaW5rRm9yKEV4ZWNTdGF0ZSog
ZXhlYywgSlNGdW4KICAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2Fs
bExpbmtJbmZvOjpDYWxsCiAgICAgICAgICAgICAgICB8fCBjYWxsTGlua0luZm8tPmNhbGxUeXBl
ID09IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MpOwogICAgICAgICBpZiAoY2FsbExpbmtJbmZv
LT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGwpIHsKLSAgICAgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJ
U3R1YihsaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdl
dENUSVN0dWIob2xkU3R5bGVMaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVh
bENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNh
bGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZp
cnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZp
cnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKG9sZFN0
eWxlVmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpKTsKIH0KIAogdm9pZCBKSVQ6Omxp
bmtTbG93Q2FsbChDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jaywgQ2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm8pCiB7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVC
bG9jayk7CiAKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1
cm5Mb2NhdGlvbiwgY2FsbGVyQ29kZUJsb2NrLT52bSgpLT5nZXRDVElTdHViKHZpcnR1YWxDYWxs
R2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uLCBjYWxsZXJDb2RlQmxvY2stPnZtKCktPmdldENUSVN0dWIo
b2xkU3R5bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3Bw
CShyZXZpc2lvbiAxNTY0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCiAg
ICAgZW1pdExvYWQoSlNTdGFjazo6Q2FsbGVlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXROYWtl
ZENhbGwobV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAg
ICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIob2xkU3R5bGVWaXJ0dWFsQ2FsbEdlbmVy
YXRvcikuY29kZSgpKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CiAgICAg
CkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNv
ZGVJRAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAg
ICAgCi0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9j
b25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUo
KSA6IG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgbV9j
YWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJl
dHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBt
X3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlTGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDog
bV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAg
ICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChp
bnN0cnVjdGlvbik7CkBAIC0zMzUsNyArMzM1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
Q2xvc3VyZUNhbGwoQ2FsbAogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rp
b25QdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhkb25lLCBjYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlci5sYWJlbEF0T2Zmc2V0KDApKTsKLSAg
ICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKG1fdm0tPmdldENUSVN0
dWIodmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvdywgQ29kZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxD
YWxsR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAKICAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgQ2xvc3VyZUNhbGxTdHViUm91dGlu
ZSgKICAgICAgICAgRklOQUxJWkVfQ09ERSgKQEAgLTM1Myw3ICszNTMsNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNl
V2l0aEp1bXAoCiAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0
Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luKSwKICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV92bS0+Z2V0Q1RJ
U3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV92bS0+Z2V0Q1RJU3R1Yihv
bGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgIAogICAgIGNhbGxMaW5r
SW5mby0+c3R1YiA9IHN0dWJSb3V0aW5lLnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTU2NDc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3
IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnUKICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7CiAKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KEpTU3RhY2s6
OkNhbGxlZSwgcmVnVDApOwotICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1Yih2aXJ0
dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENU
SVN0dWIob2xkU3R5bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKIAogICAgIHNhbXBs
ZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CiAgICAgCkBAIC0yMzMsNyArMjMzLDcgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRAogCiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwogICAgIAotICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwob3Bjb2RlSUQg
PT0gb3BfY29uc3RydWN0ID8gbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0R2VuZXJhdG9y
KS5jb2RlKCkgOiBtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwor
ICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhd
LmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwob3Bjb2RlSUQgPT0gb3BfY29uc3Ry
dWN0ID8gbV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNv
ZGUoKSA6IG1fdm0tPmdldENUSVN0dWIob2xkU3R5bGVMaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgp
KTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CiAgICAgCkBAIC0yNjMsNyAr
MjYzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwoQ2FsbAogICAgIAog
ICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxl
QWRkcmVzcygpKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8tPmhv
dFBhdGhPdGhlci5sYWJlbEF0T2Zmc2V0KDApKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3cs
IENvZGVMb2NhdGlvbkxhYmVsKG1fdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3Ip
LmNvZGUoKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwo
bV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpKTsK
ICAgICAKICAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBh
ZG9wdFJlZihuZXcgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09E
RSgKQEAgLTI4MSw3ICsyODEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2Fs
bChDYWxsCiAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoCiAgICAgICAgIFJlcGF0
Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5m
by0+aG90UGF0aEJlZ2luKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8t
PmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRv
cikuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgbV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJh
dG9yKS5jb2RlKCkpOwogICAgIAogICAgIGNhbGxMaW5rSW5mby0+c3R1YiA9IHN0dWJSb3V0aW5l
LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9uV3JhcHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbldyYXBwZXJzLmgJKHJldmlzaW9uIDE1NjIzNikJKGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFwcGVycy5oOjE1NjIzNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9uV3JhcHBlcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDMxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEpJVE9wZXJhdGlvbldyYXBwZXJzX2gKKyNkZWZpbmUgSklUT3BlcmF0
aW9uV3JhcHBlcnNfaAorCisjaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+CisjaW5jbHVkZSA8d3Rm
L0lubGluZUFTTS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworI2lmIENQVShNSVBTKQorI2lmIFdU
Rl9NSVBTX1BJQworI2RlZmluZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uKSBcCisgICAg
ICAgICIuc2V0IG5vcmVvcmRlciIgIlxuIiBcCisgICAgICAgICIuY3Bsb2FkICQyNSIgIlxuIiBc
CisgICAgICAgICIuc2V0IHJlb3JkZXIiICJcbiIgXAorICAgICAgICAibGEgJHQ5LCAiIExPQ0FM
X1JFRkVSRU5DRShmdW5jdGlvbikgIlxuIgorI2Vsc2UKKyNkZWZpbmUgTE9BRF9GVU5DVElPTl9U
T19UOShmdW5jdGlvbikgIiIgIlxuIgorI2VuZGlmCisjZW5kaWYKKworI2lmIENPTVBJTEVSKEdD
QykgJiYgQ1BVKFg4Nl82NCkKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1MoZnVuY3Rpb24sIHJlZ2lzdGVyKSBcCisgICAgYXNtKCBcCisgICAgIi5nbG9ibCAi
IFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9u
KSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAg
ICJtb3YgKCVyc3ApLCAlIiBTVFJJTkdJWkUocmVnaXN0ZXIpICJcbiIgXAorICAgICAgICAiam1w
ICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgIlxuIiBcCisg
ICAgKTsKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVu
Y3Rpb24pICAgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwg
cnNpKQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1
bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCBy
Y3gpCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVu
Y3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJj
eCkKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVu
Y3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcjgp
CisKKyNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFg4NikKKworI2RlZmluZSBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIG9mZnNldCkgXAorICAgIGFzbSgg
XAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rp
b24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xf
U1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgICJtb3YgKCVlc3ApLCAlZWF4XG4i
IFwKKyAgICAgICAgIm1vdiAlZWF4LCAiIFNUUklOR0laRShvZmZzZXQpICIoJWVzcClcbiIgXAor
ICAgICAgICAiam1wICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVz
cykgIlxuIiBcCisgICAgKTsKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0UoZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
UyhmdW5jdGlvbiwgOCkKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VDSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhm
dW5jdGlvbiwgMTYpCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkkoZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVu
Y3Rpb24sIDIwKQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUpDSShmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0
aW9uLCAyNCkKKworI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoQVJNX1RIVU1CMikKKworI2Rl
ZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAor
ICAgIGFzbSAoIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuYWxpZ24gMiIgIlxuIiBcCisg
ICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lN
Qk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICAiLnRodW1iIiAiXG4iIFwKKyAgICAiLnRodW1iX2Z1
bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5H
KGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgICJtb3YgYTIsIGxyIiAiXG4iIFwKKyAgICAg
ICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxu
IiBcCisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUNJKGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAg
Ii5hbGlnbiAyIiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikg
IlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgICIudGh1bWIiICJc
biIgXAorICAgICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZnVuY3Rpb24pICJcbiIg
XAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgIm1vdiBh
NCwgbHIiICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldp
dGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisvLyBFbmNvZGVkSlNWYWx1ZSBpbiBK
U1ZBTFVFMzJfNjQgaXMgYSA2NC1iaXQgaW50ZWdlci4gV2hlbiBiZWluZyBjb21waWxlZCBpbiBB
Uk0gRUFCSSwgaXQgbXVzdCBiZSBhbGlnbmVkIGV2ZW4tbnVtYmVyZWQgcmVnaXN0ZXIgKHIwLCBy
MiBvciBbc3BdKS4KKy8vIEFzIGEgcmVzdWx0LCByZXR1cm4gYWRkcmVzcyB3aWxsIGJlIGF0IGEg
NC1ieXRlIGZ1cnRoZXIgbG9jYXRpb24gaW4gdGhlIGZvbGxvd2luZyBjYXNlcy4KKyNpZiBDT01Q
SUxFUl9TVVBQT1JUUyhFQUJJKSAmJiBDUFUoQVJNKQorI2RlZmluZSBJTlNUUlVDVElPTl9TVE9S
RV9SRVRVUk5fQUREUkVTU19FSkkgInN0ciBsciwgW3NwLCAjNF0iCisjZGVmaW5lIElOU1RSVUNU
SU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgInN0ciBsciwgW3NwLCAjOF0iCisjZWxzZQor
I2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgInN0ciBsciwgW3Nw
LCAjMF0iCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgInN0
ciBsciwgW3NwLCAjNF0iCisjZW5kaWYKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAgICIudGV4dCIg
IlxuIiBcCisgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklO
RyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAg
ICIudGh1bWIiICJcbiIgXAorICAgICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZnVu
Y3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAg
ICAgICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJcbiIgXAorICAgICAg
ICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4i
IFwKKyAgICApOworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkNJKGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAg
Ii5hbGlnbiAyIiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikg
IlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgICIudGh1bWIiICJc
biIgXAorICAgICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZnVuY3Rpb24pICJcbiIg
XAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgSU5TVFJV
Q1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NB
TF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsK
KworI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKQorCisjZGVmaW5l
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAg
YXNtICggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkco
ZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBJ
TkxJTkVfQVJNX0ZVTkNUSU9OKGZ1bmN0aW9uKSBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIjoiICJcbiIgXAorICAgICAgICAibW92IGEyLCBsciIgIlxuIiBcCisgICAgICAgICJiICIg
TE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAg
ICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShm
dW5jdGlvbikgXAorICAgIGFzbSAoIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xvYmwg
IiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlv
bikgIlxuIiBcCisgICAgSU5MSU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAorICAgIFNZTUJP
TF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgIm1vdiBhNCwgbHIiICJcbiIg
XAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRy
ZXNzIiAiXG4iIFwKKyAgICApOworCisvLyBFbmNvZGVkSlNWYWx1ZSBpbiBKU1ZBTFVFMzJfNjQg
aXMgYSA2NC1iaXQgaW50ZWdlci4gV2hlbiBiZWluZyBjb21waWxlZCBpbiBBUk0gRUFCSSwgaXQg
bXVzdCBiZSBhbGlnbmVkIGV2ZW4tbnVtYmVyZWQgcmVnaXN0ZXIgKHIwLCByMiBvciBbc3BdKS4K
Ky8vIEFzIGEgcmVzdWx0LCByZXR1cm4gYWRkcmVzcyB3aWxsIGJlIGF0IGEgNC1ieXRlIGZ1cnRo
ZXIgbG9jYXRpb24gaW4gdGhlIGZvbGxvd2luZyBjYXNlcy4KKyNpZiBDT01QSUxFUl9TVVBQT1JU
UyhFQUJJKSAmJiBDUFUoQVJNKQorI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQURE
UkVTU19FSkkgInN0ciBsciwgW3NwLCAjNF0iCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JF
VFVSTl9BRERSRVNTX0VKQ0kgInN0ciBsciwgW3NwLCAjOF0iCisjZWxzZQorI2RlZmluZSBJTlNU
UlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgInN0ciBsciwgW3NwLCAjMF0iCisjZGVm
aW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgInN0ciBsciwgW3NwLCAj
NF0iCisjZW5kaWYKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUpJKGZ1bmN0aW9uKSBcCisgICAgYXNtICggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAg
Ii5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9M
KGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBJTkxJTkVfQVJNX0ZVTkNUSU9OKGZ1bmN0aW9uKSBcCisg
ICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICBJTlNUUlVDVElP
Tl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVG
RVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNk
ZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24p
IFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIg
XAorICAgIElOTElORV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwKKyAgICBTWU1CT0xfU1RSSU5H
KGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9B
RERSRVNTX0VKQ0kgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9u
KSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNlbGlmIENPTVBJTEVSKEdD
QykgJiYgQ1BVKE1JUFMpCisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBhc20oIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAg
ICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJP
TChmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIg
XAorICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSBc
CisgICAgICAgICJtb3ZlICRhMSwgJHJhIiAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZF
UkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2Rl
ZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBc
CisgICAgYXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NU
UklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAor
ICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICBMT0FEX0ZVTkNUSU9O
X1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAorICAgICAgICAibW92ZSAkYTMs
ICRyYSIgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0
aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAorICAgIGFzbSggXAorICAgICIu
dGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIg
XAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1
bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgTE9BRF9GVU5DVElPTl9UT19UOShmdW5jdGlvbiMjV2l0
aFJldHVybkFkZHJlc3MpIFwKKyAgICAgICAgInN3ICRyYSwgMjAoJHNwKSIgIlxuIiBcCisgICAg
ICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJc
biIgXAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKQ0koZnVuY3Rpb24pIFwKKyAgICBhc20oIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAg
ICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJP
TChmdW5jdGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIg
XAorICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSBc
CisgICAgICAgICJzdyAkcmEsIDI0KCRzcCkiICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JF
RkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisj
ZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShTSDQpCisKKyNkZWZpbmUgU0g0X1NDUkFUQ0hfUkVH
SVNURVIgInIxMSIKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRShmdW5jdGlvbikgXAorICAgIGFzbSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1
bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisg
ICAgICAgICJzdHMgcHIsIHI1IiAiXG4iIFwKKyAgICAgICAgImJyYSAiIExPQ0FMX1JFRkVSRU5D
RShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICAgICAgIm5vcCIgIlxu
IiBcCisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRUNJKGZ1bmN0aW9uKSBcCisgICAgYXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAi
Lmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0wo
ZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwK
KyAgICAgICAgInN0cyBwciwgcjciICJcbiIgXAorICAgICAgICAibW92LmwgMmYsICIgU0g0X1ND
UkFUQ0hfUkVHSVNURVIgIlxuIiBcCisgICAgICAgICJicmFmICIgU0g0X1NDUkFUQ0hfUkVHSVNU
RVIgIlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAgICAgICAiMTogLmJhbGlnbiA0IiAi
XG4iIFwKKyAgICAgICAgIjI6IC5sb25nICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0
aFJldHVybkFkZHJlc3MtMWIiICJcbiIgXAorICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCBvZmZzZXQsIHNjcmF0Y2gpIFwKKyAg
ICBhc20oIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5H
KGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAg
U1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICAic3RzIHByLCAiIHNj
cmF0Y2ggIlxuIiBcCisgICAgICAgICJtb3YubCAiIHNjcmF0Y2ggIiwgQCgiIFNUUklOR0laRShv
ZmZzZXQpICIsIHIxNSkiICJcbiIgXAorICAgICAgICAibW92LmwgMmYsICIgc2NyYXRjaCAiXG4i
IFwKKyAgICAgICAgImJyYWYgIiBzY3JhdGNoICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwK
KyAgICAgICAgIjE6IC5iYWxpZ24gNCIgIlxuIiBcCisgICAgICAgICIyOiAubG9uZyAiIExPQ0FM
X1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzLTFiIiAiXG4iIFwKKyAgICAp
OworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVu
Y3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDAs
IFNINF9TQ1JBVENIX1JFR0lTVEVSKQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTKGZ1bmN0aW9uLCA0LCBTSDRfU0NSQVRDSF9SRUdJU1RFUikKKworI2VuZGlmCisKKyNk
ZWZpbmUgUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikg
XAordm9pZCogSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0
YXRlKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7
IFwKK0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKQorCisj
ZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24p
IFwKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRy
ZXNzKEV4ZWNTdGF0ZSosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RG
X0lOVEVSTkFMOyBcCitGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5j
dGlvbikKKworI2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
Q0koZnVuY3Rpb24pIFwKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dp
dGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwqLCBSZXR1cm5B
ZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAorRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikKKworI2RlZmluZSBKX0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVG
RVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKK0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pCisKKyNkZWZpbmUgVl9GVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAordm9pZCBKSVRfT1BFUkFUSU9O
IGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
SlNDZWxsKiwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9B
U00gV1RGX0lOVEVSTkFMOyBcCitGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUpDSShmdW5jdGlvbikKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKSVRPcGVy
YXRpb25XcmFwcGVyc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9uV3JhcHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbldyYXBwZXJzLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9uV3JhcHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
OSArMjYsMTQgQEAKICNpZm5kZWYgSklUT3BlcmF0aW9uV3JhcHBlcnNfaAogI2RlZmluZSBKSVRP
cGVyYXRpb25XcmFwcGVyc19oCiAKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSA8d3RmL0NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0lubGluZUFTTS5oPgogCisjaWYgQ09N
UElMRVIoTVNWQykKKyNpbmNsdWRlIDxpbnRyaW4uaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgSlND
IHsKIAogI2lmIENQVShNSVBTKQpAQCAtNTMsMTAgKzU4LDExIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAibW92ICglcnNwKSwgJSIgU1RSSU5HSVpFKHJlZ2lzdGVyKSAiXG4iIFwKICAgICAg
ICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpICJc
biIgXAogICAgICk7Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVu
Y3Rpb24sIHJzaSkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VDSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5j
dGlvbiwgcmN4KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0
aW9uLCByY3gpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
SkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rp
b24sIHI4KQorI2RlZmluZSBfUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0
aW9uLCByc2kpCisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVu
Y3Rpb24sIHJzaSkKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VDSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhm
dW5jdGlvbiwgcmN4KQorI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
KGZ1bmN0aW9uLCByY3gpCisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1MoZnVuY3Rpb24sIHI4KQogCiAjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODYpCiAKQEAg
LTcwLDE0ICs3NiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgIm1vdiAlZWF4LCAiIFNU
UklOR0laRShvZmZzZXQpICIoJWVzcClcbiIgXAogICAgICAgICAiam1wICIgTE9DQUxfUkVGRVJF
TkNFKGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgIlxuIiBcCiAgICAgKTsKLSNkZWZpbmUg
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pICAgIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgOCkKLSNkZWZpbmUgRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMTYpCi0jZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pICBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDIwKQotI2RlZmluZSBGVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAyNCkKKyNkZWZpbmUgX1BfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgOCkKKyNkZWZpbmUgX0pfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgOCkKKyNkZWZpbmUgX0pfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMTYpCisjZGVmaW5lIF9KX0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pICBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDIwKQorI2RlZmluZSBfVl9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAyNCkKIAogI2VsaWYgQ09NUElM
RVIoR0NDKSAmJiBDUFUoQVJNX1RIVU1CMikKIAotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAorI2RlZmluZSBfUF9GVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAogICAgIGFzbSAoIFwKICAgICAi
LnRleHQiICJcbiIgXAogICAgICIuYWxpZ24gMiIgIlxuIiBcCkBAIC05MCw3ICs5NywxMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJX
aXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCiAgICAgKTsKIAotI2RlZmluZSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9KX0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgX1BfRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCisKKyNkZWZpbmUg
X0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAog
ICAgIGFzbSAoIFwKICAgICAiLnRleHQiICJcbiIgXAogICAgICIuYWxpZ24gMiIgIlxuIiBcCkBA
IC0xMTMsNyArMTIzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZGVmaW5lIElOU1RSVUNUSU9OX1NU
T1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kgInN0ciBsciwgW3NwLCAjNF0iCiAjZW5kaWYKIAotI2Rl
ZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBc
CisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVu
Y3Rpb24pIFwKICAgICBhc20gKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmFsaWduIDIi
ICJcbiIgXApAQCAtMTI2LDcgKzEzNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAiYiAi
IExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAg
ICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJ
KGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FSkNJKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAgICIudGV4dCIgIlxuIiBcCiAg
ICAgIi5hbGlnbiAyIiAiXG4iIFwKQEAgLTE0MSw3ICsxNTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKQogCi0jZGVmaW5l
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisjZGVm
aW5lIF9QX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBc
CiAgICAgYXNtICggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICJcbiIgXApAQCAtMTUyLDcgKzE2MiwxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRk
cmVzcyIgIlxuIiBcCiAgICAgKTsKIAotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgX1BfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCisKKyNkZWZpbmUgX0pfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAogICAgIGFzbSAoIFwK
ICAgICAiLnRleHQiICJcbiIgXAogICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9u
KSAiXG4iIFwKQEAgLTE3Myw3ICsxODYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNkZWZpbmUgSU5T
VFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM0XSIKICNl
bmRpZgogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkko
ZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKSShmdW5jdGlvbikgXAogICAgIGFzbSAoIFwKICAgICAiLnRleHQiICJcbiIgXAogICAg
ICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKQEAgLTE4NCw3ICsxOTcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rp
b24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCiAgICAgKTsKIAotI2RlZmluZSBGVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAorI2RlZmluZSBf
Vl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAog
ICAgIGFzbSAoIFwKICAgICAiLnRleHQiICJcbiIgXAogICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RS
SU5HKGZ1bmN0aW9uKSAiXG4iIFwKQEAgLTE5Nyw3ICsyMTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoTUlQUykKIAotI2RlZmluZSBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAorI2RlZmluZSBfUF9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAogICAgIGFzbSgg
XAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rp
b24pICJcbiIgXApAQCAtMjA4LDcgKzIyMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBc
CiAgICAgKTsKIAotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUNJKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgX1BfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0UoZnVuY3Rpb24pCisKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAogICAgIGFzbSggXAogICAgICIudGV4dCIg
IlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXApAQCAt
MjE5LDcgKzIzNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAiYiAiIExPQ0FMX1JFRkVS
RU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOwogCi0jZGVm
aW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwK
KyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5j
dGlvbikgXAogICAgIGFzbSggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZ
TUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXApAQCAtMjMwLDcgKzI0Niw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1
cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCiAgICAgYXNtKCBcCiAg
ICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikg
IlxuIiBcCkBAIC0yNDUsNyArMjYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNkZWZpbmUgU0g0
X1NDUkFUQ0hfUkVHSVNURVIgInIxMSIKIAotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAorI2RlZmluZSBfUF9GVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAogICAgIGFzbSggXAogICAgICIudGV4
dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXApA
QCAtMjU2LDcgKzI3MiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgIm5vcCIgIlxuIiBc
CiAgICAgKTsKIAotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUNJKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAgX1BfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0UoZnVuY3Rpb24pCisKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAogICAgIGFzbSggXAogICAgICIudGV4dCIg
IlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXApAQCAt
Mjg1LDMwICszMDQsNDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICIyOiAubG9uZyAiIExP
Q0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzLTFiIiAiXG4iIFwKICAg
ICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkko
ZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24s
IDAsIFNINF9TQ1JBVENIX1JFR0lTVEVSKQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTKGZ1bmN0aW9uLCA0LCBTSDRfU0NSQVRDSF9SRUdJU1RFUikKKyNkZWZpbmUgX0pf
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMCwgU0g0X1NDUkFUQ0hf
UkVHSVNURVIpCisjZGVmaW5lIF9WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVu
Y3Rpb24sIDQsIFNINF9TQ1JBVENIX1JFR0lTVEVSKQorCisjZWxpZiBDT01QSUxFUihNU1ZDKSAm
JiBDUFUoWDg2KQorCisjZGVmaW5lIF9QX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FKGZ1bmN0aW9uKSBcCisgICAgdm9pZCogSklUX09QRVJBVElPTiBmdW5jdGlvbihFeGVj
U3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhleGVjLCBS
ZXR1cm5BZGRyZXNzUHRyKCoodm9pZCoqKV9BZGRyZXNzT2ZSZXR1cm5BZGRyZXNzKCkpKTsgfQor
CisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0
aW9uKSBcCisgICAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMpIHsgcmV0dXJuIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhleGVjLCBSZXR1
cm5BZGRyZXNzUHRyKCoodm9pZCoqKV9BZGRyZXNzT2ZSZXR1cm5BZGRyZXNzKCkpKTsgfQorCisj
ZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rp
b24pIFwKKyAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBTdHJpbmdJbXBsKiBzdHJpbmcpIHsgcmV0dXJuIGZ1bmN0
aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhleGVjLCBjZWxsLCBzdHJpbmcsIFJldHVybkFkZHJlc3NQ
dHIoKih2b2lkKiopX0FkZHJlc3NPZlJldHVybkFkZHJlc3MoKSkpOyB9CisKKyNkZWZpbmUgX0pf
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAorICAg
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSB2YWx1ZSwgU3RyaW5nSW1wbCogc3RyaW5nKSB7IHJldHVybiBmdW5jdGlv
biMjV2l0aFJldHVybkFkZHJlc3MoZXhlYywgdmFsdWUsIHN0cmluZywgUmV0dXJuQWRkcmVzc1B0
cigqKHZvaWQqKilfQWRkcmVzc09mUmV0dXJuQWRkcmVzcygpKSk7IH0KKworI2RlZmluZSBfVl9G
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAorICAg
IHZvaWQgSklUX09QRVJBVElPTiBmdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIHZhbHVlLCBKU0NlbGwqIGNlbGwsIFN0cmluZ0ltcGwqIHN0cmluZykgeyByZXR1cm4gZnVu
Y3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMsIHZhbHVlLCBjZWxsLCBzdHJpbmcsIFJldHVy
bkFkZHJlc3NQdHIoKih2b2lkKiopX0FkZHJlc3NPZlJldHVybkFkZHJlc3MoKSkpOyB9CiAKICNl
bmRpZgogCiAjZGVmaW5lIFBfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0Uo
ZnVuY3Rpb24pIFwKIHZvaWQqIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRy
ZXNzKEV4ZWNTdGF0ZSosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RG
X0lOVEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5j
dGlvbikKK19QX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9u
KQogCiAjZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVu
Y3Rpb24pIFwKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1
cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9B
U00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RShmdW5jdGlvbikKK19KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1
bmN0aW9uKQogCiAjZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VDSShmdW5jdGlvbikgXAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbiMj
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCosIFJldHVy
bkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKQorX0pfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikKIAogI2RlZmluZSBKX0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVG
RVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pCitfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKQogCiAjZGVmaW5lIFZfRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKIHZvaWQgSklUX09QRVJBVElPTiBm
dW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpT
Q2VsbCosIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNN
IFdURl9JTlRFUk5BTDsgXAotRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
Q0koZnVuY3Rpb24pCitfVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpD
SShmdW5jdGlvbikKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU2MjM2KQkoZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwOjE1NjIzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIK
KworI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlci5o
IgorI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRp
b25XcmFwcGVycy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJSZXBhdGNo
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitleHRlcm4gIkMiIHsKKworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgYmFzZSwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOworICAgIFByb3BlcnR5
U2xvdCBzbG90KGJhc2VWYWx1ZSk7CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3Qp
KTsKK30KKworSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKG9wZXJh
dGlvbkdldEJ5SWRCdWlsZExpc3QpOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeUlkQnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIElkZW50aWZpZXIgaWRlbnQodm0s
IHVpZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2Nr
KCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CisgICAgUHJvcGVydHlT
bG90IHNsb3QoYmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQo
ZXhlYywgaWRlbnQsIHNsb3QpOworCisgICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIGJ1aWxkR2V0QnlJRExp
c3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8pOworCisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplV2l0aFJldHVybkFkZHJl
c3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQs
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAg
IElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAg
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LmFjY2Vzc1R5cGUpOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
YmFzZSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOworICAgIAorICAgIGlmIChh
Y2Nlc3NUeXBlID09IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUp
KSB7CisgICAgICAgIGlmIChzdHViSW5mby5zZWVuKQorICAgICAgICAgICAgcmVwYXRjaEdldEJ5
SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8pOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VDSShvcGVyYXRpb25Jbk9wdGltaXplKTsKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uSW5PcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiBrZXksIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBpZiAoIWJhc2UtPmlz
T2JqZWN0KCkpIHsKKyAgICAgICAgdm0tPnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUludmFs
aWRQYXJhbWV0ZXJFcnJvcihleGVjLCAiaW4iLCBiYXNlKSk7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5B
ZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIElkZW50aWZpZXIgaWRlbnQodm0sIGtl
eSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZSk7CisgICAgYm9vbCByZXN1bHQgPSBhc09i
amVjdChiYXNlKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KTsKKyAgICAKKyAg
ICBSRUxFQVNFX0FTU0VSVChhY2Nlc3NUeXBlID09IHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworICAg
IAorICAgIGlmIChzdHViSW5mby5zZWVuKQorICAgICAgICByZXBhdGNoSW4oZXhlYywgYmFzZSwg
aWRlbnQsIHJlc3VsdCwgc2xvdCwgc3R1YkluZm8pOworICAgIGVsc2UKKyAgICAgICAgc3R1Yklu
Zm8uc2VlbiA9IHRydWU7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4ocmVzdWx0KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
SW4oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIGtleSkKK3sKKyAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKKworICAgIGlmICghYmFzZS0+aXNPYmplY3QoKSkgeworICAgICAgICB2bS0+
dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlSW52YWxpZFBhcmFtZXRlckVycm9yKGV4ZWMsICJp
biIsIGJhc2UpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICB9CisKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCBrZXkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGFzT2JqZWN0KGJhc2UpLT5oYXNQcm9wZXJ0eShleGVj
LCBpZGVudCkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZW5lcmljSW4oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGtl
eSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSwgYmFz
ZSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQ3Vz
dG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYyBmdW5jdGlvbiwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShmdW5jdGlvbihleGVjLCBhc09iamVjdChiYXNlKSwgaWRlbnQpKTsKK30K
KworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGdldHRlclNldHRlcikKK3sKKyAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEdldHRlcihleGVjLCBi
YXNlLCBnZXR0ZXJTZXR0ZXIpKTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAor
ICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qo
dHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIGJhc2UtPm1l
dGhvZFRhYmxlKCktPnB1dChiYXNlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIHNsb3QpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
SlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisg
ICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChm
YWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIGJhc2UtPm1l
dGhvZFRhYmxlKCktPnB1dChiYXNlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIHNsb3QpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgQVNTRVJU
KGJhc2UtPmlzT2JqZWN0KCkpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+
dm0oKSwgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKK30KKwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3Ry
aW5nSW1wbCogdWlkKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRl
bnQodm0sIHVpZCk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVC
bG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7
CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk7
Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplV2l0aFJl
dHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwg
dWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2so
KS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
ID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNWYWx1
ZSBiYXNlVmFsdWUoYmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+
Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIGJhc2VWYWx1ZS5wdXQo
ZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNzVHlwZSAhPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGlmIChzdHViSW5mby5zZWVuKQorICAgICAgICByZXBhdGNoUHV0QnlJ
RChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKKyAg
ICBlbHNlCisgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOworfQorCitWX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RP
cHRpbWl6ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9w
dGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmll
ciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVj
LT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlw
ZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlw
ZSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qo
ZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICAKKyAgICBi
YXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgaWYgKGFj
Y2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uc2VlbikKKyAgICAgICAg
cmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIE5v
dERpcmVjdCk7CisgICAgZWxzZQorICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKK30KKwor
Vl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwq
IHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJl
c3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMt
PmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICAKKyAgICBBU1NFUlQoYmFzZS0+
aXNPYmplY3QoKSk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBp
ZGVudCwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19j
YXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMs
IGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKKyAgICBlbHNlCisgICAgICAg
IHN0dWJJbmZvLnNlZW4gPSB0cnVlOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7
Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBp
ZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5j
b2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBh
Y2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7
CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlk
Q29udGV4dCgpKTsKKyAgICAKKyAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7CisgICAgYXNP
YmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgdmFsdWUsIHNsb3QpOwor
ICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHN0dWJJbmZv
LnNlZW4pCisgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBz
dHViSW5mbywgRGlyZWN0KTsKKyAgICBlbHNlCisgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVl
OworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1
aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNz
KTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihz
dHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKKyAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQo
KSk7CisgICAgCisgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwor
ICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYnVpbGRQdXRCeUlk
TGlzdChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsK
K30KKworVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1w
bCogdWlkLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRk
cmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlw
ZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7CisgICAg
UHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29u
dGV4dCgpKTsKKyAgICAKKyAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xv
dCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBidWlsZFB1
dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJl
Y3QpOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpOwordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5m
byhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKyAgICAKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgUHV0UHJvcGVydHlTbG90
IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAor
ICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vz
c1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsIGlk
ZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKK30KKworVl9GVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVp
bGRMaXN0KTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0QnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRl
bnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8g
PSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNj
ZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygp
LT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICAKKyAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7
CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgdmFsdWUs
IHNsb3QpOworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYnVp
bGRQdXRCeUlkTGlzdChleGVjLCBiYXNlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIERpcmVjdCk7
Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZp
bmlzaFB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKworICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
PiBiYXNlLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgQVNTRVJUKCF2
bS5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKS5mYXN0UGF0aFNob3VsZFN1Y2NlZWQoc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgYmFzZS0+c2V0
U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSh2bSwgc3RydWN0dXJlKTsK
KyAgICBiYXNlLT5wdXREaXJlY3Qodm0sIG9mZnNldCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7
Cit9CisKK3N0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUs
IEpTVmFsdWUgY2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgRXhl
Y1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKworICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGV4ZWMtPnNjb3BlKCkpOwor
ICAgIGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygwKTsKKworICAgIGlmIChraW5kID09IENvZGVG
b3JDYWxsKSB7CisgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICBDYWxsVHlwZSBj
YWxsVHlwZSA9IGdldENhbGxEYXRhKGNhbGxlZSwgY2FsbERhdGEpOworICAgIAorICAgICAgICBB
U1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGVKUyk7CisgICAgCisgICAgICAgIGlmIChjYWxsVHlw
ZSA9PSBDYWxsVHlwZUhvc3QpIHsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWNDYWxsZWUpOworICAgICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVl
KGFzT2JqZWN0KGNhbGxlZSkpOworICAgICAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsK
KyAgICAgICAgICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvciku
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisKKyAgICAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKTsKKyAgICAgICAgfQorICAg
IAorICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKKyAgICAgICAgZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihleGVj
LCBjYWxsZWUpKTsKKyAgICAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cisg
ICAgfQorCisgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgCisgICAg
Q29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOworICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0
VHlwZSA9IGdldENvbnN0cnVjdERhdGEoY2FsbGVlLCBjb25zdHJ1Y3REYXRhKTsKKyAgICAKKyAg
ICBBU1NFUlQoY29uc3RydWN0VHlwZSAhPSBDb25zdHJ1Y3RUeXBlSlMpOworICAgIAorICAgIGlm
IChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVIb3N0KSB7CisgICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWNDYWxsZWUpOworICAgICAgICBleGVjQ2FsbGVl
LT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CisgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVy
blZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4
ZWNDYWxsZWUpKTsKKyAgICAgICAgaWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0
b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworCisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKTsKKyAgICB9CisgICAgCisg
ICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpOworICAgIGV4ZWMt
PnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhl
YywgY2FsbGVlKSk7CisgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cit9CisK
K2lubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNh
bGxlckZyYW1lKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSlNWYWx1ZSBjYWxsZWVBc1Zh
bHVlID0gZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpOworICAgIEpTQ2VsbCogY2FsbGVlQXNG
dW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOworICAgIGlmICghY2Fs
bGVlQXNGdW5jdGlvbkNlbGwpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
PihoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlLCBraW5kKSk7CisKKyAg
ICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rp
b25DZWxsKTsKKyAgICBleGVjQ2FsbGVlLT5zZXRTY29wZShjYWxsZWUtPnNjb3BlVW5jaGVja2Vk
KCkpOworICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxl
KCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IDA7CisgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCisg
ICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5h
ZGRyZXNzRm9yQ2FsbCgpOworICAgIGVsc2UgeworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOworICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUt
PnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsK
KyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhl
YywgY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAg
ICAgfQorICAgICAgICBjb2RlQmxvY2sgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvZGVCbG9ja0Zv
cihraW5kKTsKKyAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkK
KyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENv
ZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29k
ZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRk
cmVzc0ZvckNhbGwoKTsKKyAgICB9CisgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBl
eGVjLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkp
OworICAgIGlmICghY2FsbExpbmtJbmZvLnNlZW5PbmNlKCkpCisgICAgICAgIGNhbGxMaW5rSW5m
by5zZXRTZWVuKCk7CisgICAgZWxzZQorICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxM
aW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQpOworICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworfQor
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlZSkKK3sKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCk7Cit9
CisKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUq
IGV4ZWNDYWxsZWUpCit7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNv
bnN0cnVjdCk7Cit9CisKK2lubGluZSBjaGFyKiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEV4ZWNT
dGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU0NlbGwqJiBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCkKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVl
LT5jYWxsZXJGcmFtZSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgSlNWYWx1ZSBjYWxsZWVBc1Zh
bHVlID0gZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpOworICAgIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNh
bGxlZUFzRnVuY3Rpb25DZWxsKSkKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKKyAg
ICAKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVl
QXNGdW5jdGlvbkNlbGwpOworICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGZ1bmN0aW9uLT5zY29w
ZVVuY2hlY2tlZCgpKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9u
LT5leGVjdXRhYmxlKCk7CisgICAgaWYgKFVOTElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2Rl
Rm9yKGtpbmQpKSkgeworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0
YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAg
ICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVj
dXRpb24oZXhlY0NhbGxlZSwgZnVuY3Rpb24tPnNjb3BlKCksIGtpbmQpOworICAgICAgICBpZiAo
ZXJyb3IpIHsKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlY0NhbGxl
ZSwgZXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZt
LT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlV2l0aEFy
aXR5Q2hlY2tGb3Ioa2luZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cit9CisKK2lubGluZSBjaGFy
KiB2aXJ0dWFsRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQoreworICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkOworICAg
IHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGtpbmQsIGNhbGxlZUFz
RnVuY3Rpb25DZWxsSWdub3JlZCk7Cit9CisKK3N0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXpl
Q2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rp
b25DZWxsLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBpZiAoIWNhbGxlZUFz
RnVuY3Rpb25DZWxsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgSlNGdW5jdGlv
biogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Cisg
ICAgSlNGdW5jdGlvbiogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZvLmNhbGxlZS5nZXQoKTsKKyAg
ICAKKyAgICBpZiAoIW9sZENhbGxlZQorICAgICAgICB8fCBvbGRDYWxsZWUtPnN0cnVjdHVyZSgp
ICE9IGNhbGxlZS0+c3RydWN0dXJlKCkKKyAgICAgICAgfHwgb2xkQ2FsbGVlLT5leGVjdXRhYmxl
KCkgIT0gY2FsbGVlLT5leGVjdXRhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBBU1NFUlQoY2FsbGVlLT5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gY2FsbGVlLT5leGVjdXRhYmxlKCkt
PmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKCk7CisgICAgCisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgaWYgKGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5pc0hv
c3RGdW5jdGlvbigpKQorICAgICAgICBjb2RlQmxvY2sgPSAwOworICAgIGVsc2UgeworICAgICAg
ICBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2FsbGVlLT5leGVjdXRh
YmxlKCkpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIGxpbmtDbG9zdXJlQ2FsbCgKKyAgICAgICAgZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZv
LCBjb2RlQmxvY2ssCisgICAgICAgIGNhbGxlZS0+c3RydWN0dXJlKCksIGNhbGxlZS0+ZXhlY3V0
YWJsZSgpLCBjb2RlUHRyKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVl
KQoreworICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGw7CisgICAgY2hhciogcmVzdWx0
ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgY2FsbGVl
QXNGdW5jdGlvbkNlbGwpOworICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlY0Nh
bGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2Fs
bGVlLT5yZXR1cm5QQygpKTsKKworICAgIGlmICghYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2Fs
bChleGVjQ2FsbGVlLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgY2FsbExpbmtJbmZvKSkKKyAgICAg
ICAgbGlua1Nsb3dGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7Cisg
ICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7ICAgIAorICAgIHJldHVybiB2
aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKK30KKworY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sK
KyAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKK30K
KworSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVy
KEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgY2FsbEluZGV4KQoreworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
CisgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgIEFT
U0VSVChleGNlcHRpb25WYWx1ZSk7CisgICAgCisgICAgdW5zaWduZWQgdlBDSW5kZXggPSBleGVj
LT5jb2RlQmxvY2soKS0+Ynl0ZWNvZGVPZmZzZXRGb3JDYWxsQXRJbmRleChjYWxsSW5kZXgpOwor
ICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4
Y2VwdGlvblZhbHVlLCB2UENJbmRleCk7CisgICAgQVNTRVJUKGhhbmRsZXIuY2F0Y2hSb3V0aW5l
KTsKKyAgICByZXR1cm4gZGZnSGFuZGxlckVuY29kZWQoaGFuZGxlci5jYWxsRnJhbWUsIGhhbmRs
ZXIuY2F0Y2hSb3V0aW5lKTsKK30KKworSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBs
b29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgSlNWYWx1ZSBleGNlcHRp
b25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7
CisgICAgCisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gc3R1YkluZm8tPmNvZGVPcmlnaW47
CisgICAgd2hpbGUgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICBjb2RlT3Jp
Z2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKKyAgICAKKyAgICBFeGNl
cHRpb25IYW5kbGVyIGhhbmRsZXIgPSBnZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNlcHRpb25W
YWx1ZSwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICBBU1NFUlQoaGFuZGxlci5jYXRj
aFJvdXRpbmUpOworICAgIHJldHVybiBkZmdIYW5kbGVyRW5jb2RlZChoYW5kbGVyLmNhbGxGcmFt
ZSwgaGFuZGxlci5jYXRjaFJvdXRpbmUpOworfQorCit9IC8vIGV4dGVybiAiQyIKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg3LDcgKzU4Nyw3IEBAIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnMKICAgICByZXR1cm4gdmlydHVhbEZv
cihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAotSklUSGFuZGxlckVuY29kZWQg
SklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSogZXhlYywgdWlu
dDMyX3QgY2FsbEluZGV4KQorSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBsb29rdXBF
eGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTU5
NSwzMCArNTk1LDExMCBAQCBKSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4
CiAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgIEFT
U0VSVChleGNlcHRpb25WYWx1ZSk7CiAgICAgCi0gICAgdW5zaWduZWQgdlBDSW5kZXggPSBleGVj
LT5jb2RlQmxvY2soKS0+Ynl0ZWNvZGVPZmZzZXRGb3JDYWxsQXRJbmRleChjYWxsSW5kZXgpOwot
ICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4
Y2VwdGlvblZhbHVlLCB2UENJbmRleCk7CisgICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0g
Z2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0aW9uVmFsdWUpOwogICAgIEFTU0VSVChoYW5k
bGVyLmNhdGNoUm91dGluZSk7CiAgICAgcmV0dXJuIGRmZ0hhbmRsZXJFbmNvZGVkKGhhbmRsZXIu
Y2FsbEZyYW1lLCBoYW5kbGVyLmNhdGNoUm91dGluZSk7CiB9CiAKLUpJVEhhbmRsZXJFbmNvZGVk
IEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlckluU3R1YihFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKK30gLy8g
ZXh0ZXJuICJDIgogCi0gICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlv
bigpOwotICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7Ci0gICAgCi0gICAgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luID0gc3R1YkluZm8tPmNvZGVPcmlnaW47Ci0gICAgd2hpbGUgKGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUtPmNhbGxlcjsKLSAgICAKLSAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBn
ZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSwgY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KTsKLSAgICBBU1NFUlQoaGFuZGxlci5jYXRjaFJvdXRpbmUpOwotICAgIHJldHVybiBk
ZmdIYW5kbGVyRW5jb2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxlci5jYXRjaFJvdXRpbmUp
OworLy8gTm90ZTogZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUoKSBuZWVkcyB0
byBiZSBwbGFjZWQgYmVmb3JlIHRoZQorLy8gZGVmaW5pdGlvbiBvZiBnZXRIb3N0Q2FsbFJldHVy
blZhbHVlKCkgYmVsb3cgYmVjYXVzZSB0aGUgV2luZG93cyBidWlsZAorLy8gcmVxdWlyZXMgaXQu
CitleHRlcm4gIkMiIEVuY29kZWRKU1ZhbHVlIEhPU1RfQ0FMTF9SRVRVUk5fVkFMVUVfT1BUSU9O
IGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBpZiAoIWV4ZWMpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnZtKCkuaG9zdENhbGxSZXR1cm5W
YWx1ZSk7CiB9CiAKLX0gLy8gZXh0ZXJuICJDIgorI2lmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFg4
Nl82NCkKK2FzbSAoCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZh
bHVlKSAiXG4iCitISURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCitTWU1C
T0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6IiAiXG4iCisgICAgIm1vdiA0MCgl
cjEzKSwgJXIxM1xuIgorICAgICJtb3YgJXIxMywgJXJkaVxuIgorICAgICJqbXAgIiBMT0NBTF9S
RUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICJcbiIKKyk7CisK
KyNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFg4NikKK2FzbSAoCisiLnRleHQiICJcbiIgXAor
Ii5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgorSElE
RV9TWU1CT0woZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgorU1lNQk9MX1NUUklORyhnZXRI
b3N0Q2FsbFJldHVyblZhbHVlKSAiOiIgIlxuIgorICAgICJtb3YgNDAoJWVkaSksICVlZGlcbiIK
KyAgICAibW92ICVlZGksIDQoJWVzcClcbiIKKyAgICAiam1wICIgTE9DQUxfUkVGRVJFTkNFKGdl
dEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiXG4iCispOworCisjZWxpZiBDT01Q
SUxFUihHQ0MpICYmIENQVShBUk1fVEhVTUIyKQorYXNtICgKKyIudGV4dCIgIlxuIgorIi5hbGln
biAyIiAiXG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVl
KSAiXG4iCitISURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCisiLnRodW1i
IiAiXG4iCisiLnRodW1iX2Z1bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGdldEhvc3RDYWxsUmV0dXJu
VmFsdWUpICJcbiIKK1NZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJc
biIKKyAgICAibGRyIHI1LCBbcjUsICM0MF0iICJcbiIKKyAgICAibW92IHIwLCByNSIgIlxuIgor
ICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0
YXRlKSAiXG4iCispOworCisjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShBUk1fVFJBRElUSU9O
QUwpCithc20gKAorIi50ZXh0IiAiXG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhnZXRIb3N0
Q2FsbFJldHVyblZhbHVlKSAiXG4iCitISURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVyblZhbHVl
KSAiXG4iCitJTkxJTkVfQVJNX0ZVTkNUSU9OKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpCitTWU1C
T0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6IiAiXG4iCisgICAgImxkciByNSwg
W3I1LCAjNDBdIiAiXG4iCisgICAgIm1vdiByMCwgcjUiICJcbiIKKyAgICAiYiAiIExPQ0FMX1JF
RkVSRU5DRShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgorKTsKKwor
I2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoTUlQUykKK2FzbSAoCisiLnRleHQiICJcbiIKKyIu
Z2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK0hJREVf
U1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK1NZTUJPTF9TVFJJTkcoZ2V0SG9z
dENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKKyAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGdldEhv
c3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKQorICAgICJsdyAkczAsIDQwKCRzMCkiICJc
biIKKyAgICAibW92ZSAkYTAsICRzMCIgIlxuIgorICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGdl
dEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiXG4iCispOworCisjZWxpZiBDT01Q
SUxFUihHQ0MpICYmIENQVShTSDQpCithc20gKAorIi50ZXh0IiAiXG4iCisiLmdsb2JsICIgU1lN
Qk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCitISURFX1NZTUJPTChnZXRI
b3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCitTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJu
VmFsdWUpICI6IiAiXG4iCisgICAgImFkZCAjNDAsIHIxNCIgIlxuIgorICAgICJtb3YubCBAcjE0
LCByMTQiICJcbiIKKyAgICAibW92IHIxNCwgcjQiICJcbiIKKyAgICAibW92LmwgMmYsICIgU0g0
X1NDUkFUQ0hfUkVHSVNURVIgIlxuIgorICAgICJicmFmICIgU0g0X1NDUkFUQ0hfUkVHSVNURVIg
IlxuIgorICAgICJub3AiICJcbiIKKyAgICAiMTogLmJhbGlnbiA0IiAiXG4iCisgICAgIjI6IC5s
b25nICIgTE9DQUxfUkVGRVJFTkNFKGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRl
KSAiLTFiXG4iCispOworCisjZWxpZiBDT01QSUxFUihNU1ZDKSAmJiBDUFUoWDg2KQorZXh0ZXJu
ICJDIiB7CisgICAgX19kZWNsc3BlYyhuYWtlZCkgRW5jb2RlZEpTVmFsdWUgSE9TVF9DQUxMX1JF
VFVSTl9WQUxVRV9PUFRJT04gZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSgpCisgICAgeworICAgICAg
ICBfX2FzbSB7CisgICAgICAgICAgICBtb3YgZWRpLCBbZWRpICsgNDBdOworICAgICAgICAgICAg
bW92IFtlc3AgKyA0XSwgZWRpOworICAgICAgICAgICAgam1wIGdldEhvc3RDYWxsUmV0dXJuVmFs
dWVXaXRoRXhlY1N0YXRlCisgICAgICAgIH0KKyAgICB9Cit9CisjZW5kaWYKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCShyZXZpc2lvbiAxNTYyMzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oOjE1NjIzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSklUT3BlcmF0aW9uc19o
CisjZGVmaW5lIEpJVE9wZXJhdGlvbnNfaAorCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5j
bHVkZSAiSlNBcnJheS5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVT
dHViSW5mby5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
KyNpZiBDQUxMSU5HX0NPTlZFTlRJT05fSVNfU1REQ0FMTAorI2RlZmluZSBKSVRfT1BFUkFUSU9O
IENERUNMCisjZWxzZQorI2RlZmluZSBKSVRfT1BFUkFUSU9OCisjZW5kaWYKKworLy8gVGhlc2Ug
dHlwZWRlZnMgcHJvdmlkZSB0eXBlY2hlY2tpbmcgd2hlbiBnZW5lcmF0aW5nIGNhbGxzIG91dCB0
byBoZWxwZXIgcm91dGluZXM7CisvLyB0aGlzIGhlbHBzIHByZXZlbnQgY2FsbGluZyBhIGhlbHBl
ciByb3V0aW5lIHdpdGggdGhlIHdyb25nIGFyZ3VtZW50cyEKKy8qCisgICAgS2V5OgorICAgIFY6
IHZvaWQKKyAgICBKOiBKU1ZhbHVlCisgICAgUDogcG9pbnRlciAodm9pZCopCisgICAgQzogSlND
ZWxsKgorICAgIEE6IEpTQXJyYXkqCisgICAgUzogc2l6ZV90CisgICAgWjogaW50MzJfdAorICAg
IEQ6IGRvdWJsZQorICAgIEk6IFN0cmluZ0ltcGwqCisqLwordHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Cit0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQSkoRXhlY1N0
YXRlKiwgSlNBcnJheSopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgq
Sl9KSVRPcGVyYXRpb25fRUFaKShFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCk7Cit0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQykoRXhl
Y1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
KCpKX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwordHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUNJKShF
eGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ0opKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAo
KkpfSklUT3BlcmF0aW9uX0VEQSkoRXhlY1N0YXRlKiwgZG91YmxlLCBKU0FycmF5Kik7Cit0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSSkoRXhl
Y1N0YXRlKiwgU3RyaW5nSW1wbCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OICgqSl9KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKQSko
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQXJyYXkqKTsKK3R5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKSSkoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAo
KkpfSklUT3BlcmF0aW9uX0VKc3NaKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIGludDMyX3QpOwor
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpQ
KShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCopOwordHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVApKEV4ZWNTdGF0ZSosIHZvaWQq
KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9u
X0VQUCkoRXhlY1N0YXRlKiwgdm9pZCosIHZvaWQqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNp
emVfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJh
dGlvbl9FU1MpKEV4ZWNTdGF0ZSosIHNpemVfdCwgc2l6ZV90KTsKK3R5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQz
Ml90KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0
aW9uX0VaSWNmWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgSW5saW5lQ2FsbEZyYW1lKiwgaW50MzJf
dCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlv
bl9FWlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIGludDMyX3QpOwordHlwZWRlZiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKK3R5cGVkZWYgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMy
X3QpOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FQyko
RXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNf
SklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Cit0eXBlZGVm
IEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VJY2YpKEV4ZWNTdGF0ZSos
IElubGluZUNhbGxGcmFtZSopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJ
VE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSnNzU3QpKEV4ZWNTdGF0ZSosIEpT
U3RyaW5nKiwgU3RydWN0dXJlKik7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNf
SklUT3BlcmF0aW9uX0VKc3NKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsK
K3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpzc0pzc0pz
cykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Cit0eXBlZGVm
IEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VPWikoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBpbnQzMl90KTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19K
SVRPcGVyYXRpb25fRVN0KShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKK3R5cGVkZWYgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3Qp
OwordHlwZWRlZiBkb3VibGUgSklUX09QRVJBVElPTiAoKkRfSklUT3BlcmF0aW9uX0REKShkb3Vi
bGUsIGRvdWJsZSk7Cit0eXBlZGVmIGRvdWJsZSBKSVRfT1BFUkFUSU9OICgqRF9KSVRPcGVyYXRp
b25fWlopKGludDMyX3QsIGludDMyX3QpOwordHlwZWRlZiBkb3VibGUgSklUX09QRVJBVElPTiAo
KkRfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVm
IGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0QpKGRvdWJsZSk7Cit0eXBl
ZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUq
LCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJ
VE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBzaXpl
X3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04g
KCpTX0pJVE9wZXJhdGlvbl9KKShFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09Q
RVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwordHlwZWRlZiB2b2lkIEpJ
VF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FT1pEKShFeGVjU3RhdGUqLCBKU09iamVjdCos
IGludDMyX3QsIGRvdWJsZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3Bl
cmF0aW9uX0VPWkopKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwgRW5jb2RlZEpTVmFs
dWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQykoRXhl
Y1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3Bl
cmF0aW9uX0VDSWNmKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKTsKK3R5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNDSWNmKShFeGVjU3Rh
dGUqLCBKU0NlbGwqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKTsKK3R5cGVkZWYgdm9pZCBK
SVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNKSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFU
SU9OICgqVl9KSVRPcGVyYXRpb25fRUNaKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsK
K3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNDKShFeGVjU3Rh
dGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9K
SVRPcGVyYXRpb25fRUpDSSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCosIFN0
cmluZ0ltcGwqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25f
RUpKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VK
UFApKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCB2b2lkKiwgdm9pZCopOwordHlwZWRlZiB2
b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FUFpKKShFeGVjU3RhdGUqLCB2b2lk
KiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04g
KCpWX0pJVE9wZXJhdGlvbl9XKShXYXRjaHBvaW50U2V0Kik7Cit0eXBlZGVmIGNoYXIqIEpJVF9P
UEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKK3R5cGVkZWYgY2hhciog
SklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsK
K3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VKUykoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJ
T04gKCpQX0pJVE9wZXJhdGlvbl9FTykoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKK3R5cGVkZWYg
Y2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VPUykoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVy
YXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QpOwordHlwZWRlZiBjaGFy
KiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwg
c2l6ZV90KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VT
KShFeGVjU3RhdGUqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9K
SVRPcGVyYXRpb25fRVNKc3MpKEV4ZWNTdGF0ZSosIHNpemVfdCwgSlNTdHJpbmcqKTsKK3R5cGVk
ZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VTdCkoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKik7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlv
bl9FU3RKKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVm
IGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FU3RQUykoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04g
KCpQX0pJVE9wZXJhdGlvbl9FU3RTUykoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgc2l6ZV90LCBz
aXplX3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVN0
WikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9P
UEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FWlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIGludDMy
X3QpOwordHlwZWRlZiBTdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OICgqSV9KSVRPcGVyYXRpb25f
RUpzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsKK3R5cGVkZWYgSlNTdHJpbmcqIEpJVF9PUEVS
QVRJT04gKCpKc3NfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKKworZXh0
ZXJuICJDIiB7CisKKy8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9va3VwIGFuIGV4Y2VwdGlv
biBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdoaWNoIGlzCisvLyB0aGUgcmV0dXJu
IGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQgdG8gb25lIG9mIHRoZSBoZWxwZXIg
b3BlcmF0aW9ucyBhYm92ZS4KKworLy8gQWNjb3JkaW5nIHRvIEMrKyBydWxlcywgYSB0eXBlIHVz
ZWQgZm9yIHRoZSByZXR1cm4gc2lnbmF0dXJlIG9mIGZ1bmN0aW9uIHdpdGggQyBsaW5rYWdlIChp
LmUuCisvLyAnZXh0ZXJuICJDIicpIG5lZWRzIHRvIGJlIFBPRDsgaGVuY2UgcHV0dGluZyBhbnkg
Y29uc3RydWN0b3JzIGludG8gaXQgY291bGQgY2F1c2UgZWl0aGVyIGNvbXBpbGVyCisvLyB3YXJu
aW5ncywgb3Igd29yc2UsIGEgY2hhbmdlIGluIHRoZSBBQkkgdXNlZCB0byByZXR1cm4gdGhlc2Ug
dHlwZXMuCitzdHJ1Y3QgSklUSGFuZGxlciB7CisgICAgdW5pb24gVW5pb24geworICAgICAgICBz
dHJ1Y3QgU3RydWN0IHsKKyAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYzsKKyAgICAgICAgICAg
IHZvaWQqIGhhbmRsZXI7CisgICAgICAgIH0gczsKKyAgICAgICAgdWludDY0X3QgZW5jb2RlZDsK
KyAgICB9IHU7Cit9OworCitpbmxpbmUgSklUSGFuZGxlciBjcmVhdGVKSVRIYW5kbGVyKEV4ZWNT
dGF0ZSogZXhlYywgdm9pZCogaGFuZGxlcikKK3sKKyAgICBKSVRIYW5kbGVyIHJlc3VsdDsKKyAg
ICByZXN1bHQudS5zLmV4ZWMgPSBleGVjOworICAgIHJlc3VsdC51LnMuaGFuZGxlciA9IGhhbmRs
ZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIENQVShYODZfNjQpCit0eXBlZGVmIEpJ
VEhhbmRsZXIgSklUSGFuZGxlckVuY29kZWQ7CitpbmxpbmUgSklUSGFuZGxlckVuY29kZWQgZGZn
SGFuZGxlckVuY29kZWQoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBoYW5kbGVyKQoreworICAgIHJl
dHVybiBjcmVhdGVKSVRIYW5kbGVyKGV4ZWMsIGhhbmRsZXIpOworfQorI2Vsc2UKK3R5cGVkZWYg
dWludDY0X3QgSklUSGFuZGxlckVuY29kZWQ7CitpbmxpbmUgSklUSGFuZGxlckVuY29kZWQgZGZn
SGFuZGxlckVuY29kZWQoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBoYW5kbGVyKQoreworICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihKSVRIYW5kbGVyOjpVbmlvbikgPT0gc2l6ZW9mKHVpbnQ2NF90
KSwgSklUSGFuZGxlcl9Vbmlvbl9pc182NGJpdCk7CisgICAgcmV0dXJuIGNyZWF0ZUpJVEhhbmRs
ZXIoZXhlYywgaGFuZGxlcikudS5lbmNvZGVkOworfQorI2VuZGlmCitKSVRIYW5kbGVyRW5jb2Rl
ZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKiwgdWludDMy
X3QpIFdURl9JTlRFUk5BTDsKK0pJVEhhbmRsZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3Vw
RXhjZXB0aW9uSGFuZGxlckluU3R1YihFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyopIFdU
Rl9JTlRFUk5BTDsKKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRC
eUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFM
OworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluT3B0aW1pemUoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgU3RyaW5nSW1wbCopOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25JbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBF
bmNvZGVkSlNWYWx1ZSk7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNh
bGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgUHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmMsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikg
V1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Qo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0
cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpT
Q2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0lt
cGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5B
TDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1p
emUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2Us
IFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0lt
cGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RG
X0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBK
U0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwgRW5jb2RlZEpTVmFsdWUpIFdURl9J
TlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0
YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2Fs
bChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFM
OworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSop
IFdURl9JTlRFUk5BTDsKKworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpJ
VE9wZXJhdGlvbnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw4ICsxNzAsNyBAQCBpbmxpbmUgSklU
SGFuZGxlckVuY29kZWQgZGZnSGFuZGxlckVuY29kCiAgICAgcmV0dXJuIGNyZWF0ZUpJVEhhbmRs
ZXIoZXhlYywgaGFuZGxlcikudS5lbmNvZGVkOwogfQogI2VuZGlmCi1KSVRIYW5kbGVyRW5jb2Rl
ZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKiwgdWludDMy
X3QpIFdURl9JTlRFUk5BTDsKLUpJVEhhbmRsZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3Vw
RXhjZXB0aW9uSGFuZGxlckluU3R1YihFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyopIFdU
Rl9JTlRFUk5BTDsKK0pJVEhhbmRsZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0
aW9uSGFuZGxlcihFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiAKIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
U3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3Ry
aW5nSW1wbCopIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyU2V0LmgJKHJldmlzaW9uIDE1NjIzNikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWdpc3RlclNldC5oOjE1NjIzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFJlZ2lzdGVyU2V0
X2gKKyNkZWZpbmUgUmVnaXN0ZXJTZXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiRlBSSW5mby5oIgorI2luY2x1ZGUgIkdQUklu
Zm8uaCIKKyNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0
aWMgY29uc3QgdW5zaWduZWQgdG90YWxOdW1iZXJPZlJlZ2lzdGVycyA9CisgICAgR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsKKworc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0ID0KKyAgICAodG90YWxO
dW1iZXJPZlJlZ2lzdGVycyArIDcpID4+IDM7CisKK3R5cGVkZWYgdWludDhfdCBSZWdpc3RlclNl
dFBPRFtudW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNldF07CisKK2NsYXNzIFJlZ2lzdGVyU2V0IHsK
K3B1YmxpYzoKKyAgICBSZWdpc3RlclNldCgpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNldDsgaS0tOykKKyAgICAgICAgICAgIG1fc2V0
W2ldID0gMDsKKyAgICB9CisgICAgCisgICAgUmVnaXN0ZXJTZXQoY29uc3QgUmVnaXN0ZXJTZXRQ
T0QmIG90aGVyKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRl
c0luUmVnaXN0ZXJTZXQ7IGktLTspCisgICAgICAgICAgICBtX3NldFtpXSA9IG90aGVyW2ldOwor
ICAgIH0KKyAgICAKKyAgICBjb25zdCBSZWdpc3RlclNldFBPRCYgYXNQT0QoKSBjb25zdCB7IHJl
dHVybiBtX3NldDsgfQorICAgIAorICAgIHZvaWQgY29weUluZm8oUmVnaXN0ZXJTZXRQT0QmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZCeXRl
c0luUmVnaXN0ZXJTZXQ7IGktLTspCisgICAgICAgICAgICBvdGhlcltpXSA9IG1fc2V0W2ldOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChHUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgc2V0
Qml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0R1BS
QnlJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICAgICAgc2V0Qml0KGluZGV4KTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBjbGVhcihHUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgY2xlYXJC
aXQoR1BSSW5mbzo6dG9JbmRleChyZWcpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBnZXQoR1BS
UmVnIHJlZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5mbzo6dG9J
bmRleChyZWcpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBnZXRHUFJCeUluZGV4KHVuc2lnbmVk
IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnMpOworICAgICAgICByZXR1cm4gZ2V0Qml0KGluZGV4KTsKKyAgICB9Cisg
ICAgCisgICAgLy8gUmV0dXJuIHRoZSBpbmRleCd0aCBmcmVlIEdQUi4KKyAgICBHUFJSZWcgZ2V0
RnJlZUdQUih1bnNpZ25lZCBpbmRleCA9IDApIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAg
ICAgaWYgKCFnZXRHUFJCeUluZGV4KGkpICYmICFpbmRleC0tKQorICAgICAgICAgICAgICAgIHJl
dHVybiBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBJ
bnZhbGlkR1BSUmVnOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChGUFJSZWcgcmVnKQorICAg
IHsKKyAgICAgICAgc2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6
dG9JbmRleChyZWcpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRGUFJCeUluZGV4KHVuc2ln
bmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgRlBSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnMpOworICAgICAgICBzZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMg
KyBpbmRleCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoRlBSUmVnIHJlZykKKyAgICB7
CisgICAgICAgIGNsZWFyQml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6
dG9JbmRleChyZWcpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBnZXQoRlBSUmVnIHJlZykgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMgKyBGUFJJbmZvOjp0b0luZGV4KHJlZykpOworICAgIH0KKyAgICAKKyAgICBib29sIGdldEZQ
UkJ5SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaW5k
ZXggPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgIHJldHVybiBnZXRCaXQo
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpbmRleCk7CisgICAgfQorICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgorICAgIHZvaWQgc2V0QnlJbmRleCh1bnNpZ25lZCBp
bmRleCkKKyAgICB7CisgICAgICAgIHNldChCYW5rSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOwor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KKyAgICBib29sIGdl
dEJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0KEJhbmtJ
bmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bWJl
ck9mU2V0R1BScygpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0t
OykgeworICAgICAgICAgICAgaWYgKCFnZXRCaXQoaSkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZlNldEZQUnMoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgICAgIGlm
ICghZ2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaSkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZlNldFJlZ2lz
dGVycygpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSB0b3RhbE51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAg
ICAgICAgICBpZiAoIWdldEJpdChpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIHJlc3VsdCsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHNldEJpdCh1bnNpZ25lZCBpKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICAgICAgbV9zZXRb
aSA+PiAzXSB8PSAoMSA8PCAoaSAmIDcpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhckJp
dCh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9mUmVn
aXN0ZXJzKTsKKyAgICAgICAgbV9zZXRbaSA+PiAzXSAmPSB+KDEgPDwgKGkgJiA3KSk7CisgICAg
fQorICAgIAorICAgIGJvb2wgZ2V0Qml0KHVuc2lnbmVkIGkpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaSA8IHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAgICByZXR1cm4gISEo
bV9zZXRbaSA+PiAzXSAmICgxIDw8IChpICYgNykpKTsKKyAgICB9CisgICAgCisgICAgUmVnaXN0
ZXJTZXRQT0QgbV9zZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vsc2UgLy8gRU5B
QkxFKEpJVCkgLT4gc28gaWYgSklUIGlzIGRpc2FibGVkCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBEZWZpbmUgUmVnaXN0ZXJTZXRQT0QgdG8gc29tZXRoaW5nIHRoYXQgaXMgYSBQT0QsIGJ1dCBp
cyBvdGhlcndpc2UgdXNlbGVzcywKKy8vIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlZmVyIHRvIHRo
aXMgdHlwZSBpbiBjb2RlIHRoYXQgbWF5IGJlIGNvbXBpbGVkIHdoZW4KKy8vIHRoZSBERkcgaXMg
ZGlzYWJsZWQuCisKK3N0cnVjdCBSZWdpc3RlclNldFBPRCB7IH07CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFJlZ2lzdGVyU2V0X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNTYy
MzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHA6MTU2MjM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE0MTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlcGF0
Y2guaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNp
bmNsdWRlICJDYWxsRnJhbWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIK
KyNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCisjaW5jbHVkZSAiUmVwYXRjaEJ1
ZmZlci5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgorI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5o
IgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsK
Kworc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIENvZGVMb2Nh
dGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCit7CisgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVibG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOworfQorCitzdGF0aWMgdm9pZCByZXBhdGNo
QnlJZFNlbGZBY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29u
c3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sIGJvb2wgY29tcGFjdCkKK3sKKyAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKworICAgIC8vIE9ubHkgb3B0
aW1pemUgb25jZSEKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIHNsb3dQYXRoRnVuY3Rpb24pOworCisgICAgLy8gUGF0Y2ggdGhlIHN0cnVjdHVy
ZSBjaGVjayAmIHRoZSBvZmZzZXQgb2YgdGhlIGxvYWQuCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBh
dGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGlu
dHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKSwgc3RydWN0dXJl
KTsKKyAgICByZXBhdGNoQnVmZmVyLnNldExvYWRJbnN0cnVjdGlvbklzQWN0aXZlKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5jb252ZXJ0aWJsZUxvYWRBdE9mZnNldChzdHViSW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9TdG9yYWdlTG9hZCksIGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkp
OworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaWYgKGNvbXBhY3QpCisgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFj
dEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgb2Zm
c2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkpOworICAgIGVsc2UKKyAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFi
ZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwg
b2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkpOworI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICBpZiAoY29tcGFjdCkgeworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIG9mZnNldFJlbGF0
aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNo
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgb2Zmc2V0UmVs
YXRpdmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUp
LCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7CisgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBv
ZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOworICAgIH0KKyNlbmRpZgor
fQorCitzdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgSlNDZWxs
KiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIE1hY3JvQXNzZW1ibGVyJiBqaXQsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBHUFJSZWcgc2NyYXRjaEdQUikKK3sK
KyAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT50
cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgIHN0cnVjdHVy
ZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxv
Y2spKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIC8vIElmIHdlIGV4ZWN1dGUgdGhp
cyBjb2RlLCB0aGUgb2JqZWN0IG11c3QgaGF2ZSB0aGUgc3RydWN0dXJlIHdlIGV4cGVjdC4gQXNz
ZXJ0CisgICAgICAgIC8vIHRoaXMgaW4gZGVidWcgbW9kZXMuCisgICAgICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG9iamVjdCksIHNjcmF0Y2hHUFIpOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IGppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOworICAgICAgICBqaXQuYnJl
YWtwb2ludCgpOworICAgICAgICBvay5saW5rKCZqaXQpOworI2VuZGlmCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIob2JqZWN0KSwgc2NyYXRjaEdQUik7CisgICAgZmFpbHVyZUNhc2VzLmFwcGVuZCgKKyAgICAg
ICAgaml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSkpOworfQorCitzdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0
aW9uQ2hlY2soCisgICAgSlNWYWx1ZSBwcm90b3R5cGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQor
eworICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKKyAgICAKKyAgICBhZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uQ2hlY2soCisgICAgICAgIHByb3RvdHlwZS5hc0NlbGwoKSwgcHJvdG90eXBlLmFzQ2Vs
bCgpLT5zdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLCBzdHViSW5mbywgaml0LAorICAgICAgICBmYWls
dXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOworfQorCitzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAo
UmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KQoreworICAgIGlmIChNYWNyb0Fz
c2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSkgewor
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKKyAgICAgICAgICAgIFJlcGF0
Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MoCisg
ICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0
T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNoZWNrSW1tVG9DYWxsKSksCisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0
YXJnZXQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluaygKKyAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNl
dCgKKyAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNr
KSwKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7Cit9CisKK3N0YXRpYyB2b2lk
IGVtaXRSZXN0b3JlU2NyYXRjaChNYWNyb0Fzc2VtYmxlciYgc3R1YkppdCwgYm9vbCBuZWVkVG9S
ZXN0b3JlU2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBz
dWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGZhaWx1cmVDYXNlcykKK3sKKyAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKKyAg
ICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7CisgICAgICAgIAorICAgICAgICBzdWNjZXNz
ID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgIAorICAgICAgICAvLyBsaW5rIGZhaWx1cmUgY2Fz
ZXMgaGVyZSwgc28gd2UgY2FuIHBvcCBzY3JhdGNoR1BSLCBhbmQgdGhlbiBqdW1wIGJhY2suCisg
ICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKKyAgICAgICAgCisgICAgICAgIHN0
dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAgICAgICAKKyAgICAgICAgZmFpbCA9IHN0dWJKaXQu
anVtcCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHN1Y2Nlc3MgPSBzdHVi
Sml0Lmp1bXAoKTsKK30KKworc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZm
ZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWws
IENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4pCit7CisgICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdWNjZXNzTGFiZWwpOworICAgICAgICAKKyAgICBpZiAobmVlZFRvUmVzdG9y
ZVNjcmF0Y2gpIHsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2lu
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBsaW5rIGZhaWx1cmUgY2Fz
ZXMgZGlyZWN0bHkgYmFjayB0byBub3JtYWwgcGF0aAorICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFp
bHVyZUNhc2VzLCBzbG93Q2FzZUJlZ2luKTsKK30KKworc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVT
Y3JhdGNoKExpbmtCdWZmZXImIHBhdGNoQnVmZmVyLCBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nl
c3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBm
YWlsdXJlQ2FzZXMpCit7CisgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFD
YWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKK30KKworc3RhdGljIHZvaWQg
Z2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxh
YmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OworICAgICAgICAKKyAgICBHUFJSZWcg
YmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIp
OworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKKyNlbmRpZgor
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNo
LmRmZy52YWx1ZUdQUik7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHVi
SW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigpOworICAgIGJvb2wgbmVl
ZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoc2NyYXRjaEdQUiA9PSBJ
bnZhbGlkR1BSUmVnKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc2NyYXRjaEdQUiA9
IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOwor
I2Vsc2UKKyAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRj
aEdQUihiYXNlR1BSLCByZXN1bHRHUFIsIHJlc3VsdFRhZ0dQUik7CisjZW5kaWYKKyAgICAgICAg
c3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOworICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9
IHRydWU7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJl
Q2FzZXM7CisgICAgCisgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3Ry
dWN0dXJlOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7
CisgICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7ICsraSwgKytpdCkgeworICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0
KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7CisgICAgICAgIGFkZFN0
cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKKyAgICAgICAgICAgIHByb3RvT2JqZWN0LCBwcm90b09i
amVjdC0+c3RydWN0dXJlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwK
KyAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CisgICAgICAgIGN1cnJTdHJ1
Y3R1cmUgPSBpdC0+Z2V0KCk7CisgICAgfQorICAgIAorICAgIGlmIChpc0lubGluZU9mZnNldChv
ZmZzZXQpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3R1YkppdC5sb2FkNjQocHJv
dG9PYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCksIHJlc3VsdEdQUik7CisjZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIocHJvdG9PYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkpLCByZXN1
bHRHUFIpOworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CisjZW5kaWYKKyAgICB9IGVsc2Ug
eworICAgICAgICBzdHViSml0LmxvYWRQdHIocHJvdG9PYmplY3QtPmJ1dHRlcmZseUFkZHJlc3Mo
KSwgcmVzdWx0R1BSKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdHViSml0LmxvYWQ2
NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9m
ZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIHN0dWJKaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHko
b2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Cisj
ZW5kaWYKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwor
ICAgIAorICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRj
aCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKKyAgICAKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsK
KyAgICAKKyAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nh
c2VMYWJlbCk7CisgICAgCisgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdf
U1RVQigKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiREZHIHByb3RvdHlwZSBjaGFp
biBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICB0b0NT
dHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxl
QWRkcmVzcygpKSk7Cit9CisKK3N0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQor
eworICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBjaGVj
ayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAorICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVyIGRv
ZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4KKworICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgCisgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKKyNlbmRpZgorICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcu
dmFsdWVHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7CisgICAgICAgIGJvb2wg
bmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyIHN0dWJKaXQ7CisgICAgICAgIAorICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZh
bGlkR1BSUmVnKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsK
KyNlbHNlCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RT
Y3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKKyNlbmRpZgorICAg
ICAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbmVlZFRvUmVz
dG9yZVNjcmF0Y2ggPSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOworICAgICAgIAorICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOyAKKyAgICAgICAgc3R1YkppdC5sb2FkOChNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5i
cmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykpKTsKKyAgICAg
ICAgCisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
c3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBmYWlsdXJlQ2Fz
ZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBzY3Jh
dGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CisKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICBzdHViSml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgc3R1YkppdC5tb3ZlKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJK
aXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGZmZmZmZmZmKSwgcmVzdWx0
VGFnR1BSKTsgLy8gSlNWYWx1ZTo6SW50MzJUYWcKKyNlbmRpZgorCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7CisgICAgICAgIAorICAgICAgICBlbWl0UmVzdG9y
ZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nl
c3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CisgICAgICAgIAorICAgICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNvZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICBs
aW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHVi
SW5mbywgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKKyAgICAgICAgCisgICAgICAgIHN0
dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCisgICAgICAg
ICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiREZHIEdldEJ5SWQgYXJyYXkgbGVuZ3Ro
IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgICAgIHRvQ1N0cmlu
ZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgCisgICAgICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOworICAgICAgICByZXBsYWNl
V2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgbGVu
Z3RoIGFjY2VzcyBmb3IgU3RyaW5nLgorCisgICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFj
Y2VzcyBmb3IgaW1tZWRpYXRlcy4KKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxs
KCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7Cisg
ICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICBpZiAoc2xv
dC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgeworICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFi
bGVWYWx1ZSgpCisgICAgICAgICAgICB8fCAhTWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFs
aWduZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90
LmNhY2hlZE9mZnNldCgpKSkpIHsKKyAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmVwYXRjaEJ5
SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7CisgICAgICAgIHN0dWJJ
bmZvLmluaXRHZXRCeUlkU2VsZigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0
cnVjdHVyZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoc3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IC8vIEZJWE1FOiBvcHRpbWl6ZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzCisgICAgaWYgKCFzbG90Lmlz
Q2FjaGVhYmxlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgc2l6ZV90IGNvdW50
ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlVmFsdWUs
IHNsb3Quc2xvdEJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpOworICAgIGlmIChjb3VudCA9
PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0
cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4o
ZXhlYyk7CisgICAgCisgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHVi
SW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8uc3R1YlJvdXRp
bmUpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwor
ICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YkluZm8uc3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7CisgICAg
CisgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCB0cnVlKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCByZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGJv
b2wgY2FjaGVkID0gdHJ5Q2FjaGVHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1l
LCBzbG90LCBzdHViSW5mbyk7CisgICAgaWYgKCFjYWNoZWQpCisgICAgICAgIHJlcGF0Y2hDYWxs
KGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlv
bkdldEJ5SWQpOworfQorCitzdGF0aWMgYm9vbCBnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qo
CisgICAgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLAorICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdComIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdCwgaW50JiBsaXN0SW5kZXgsCisgICAgQ29kZUxvY2F0aW9uTGFiZWwmIHNs
b3dDYXNlKQoreworICAgIHNsb3dDYXNlID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOworICAg
IAorICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICBwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCk7
CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0LCAwLCBmYWxzZSk7CisgICAgICAgIGxpc3RJbmRleCA9IDA7CisgICAgfSBlbHNlIGlm
IChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICBwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNl
bGZNYW5hZ2VkUm91dGluZShzbG93Q2FzZSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlk
U2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxLCB0cnVlKTsKKyAgICAgICAgbGlz
dEluZGV4ID0gMTsKKyAgICB9IGVsc2UgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNz
X2dldF9ieV9pZF9jaGFpbikgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghIXN0dWJJbmZvLnN0
dWJSb3V0aW5lKTsKKyAgICAgICAgc2xvd0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5m
by5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKnZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5mby5zdHViUm91dGluZSwgc3R1YkluZm8udS5n
ZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRCeUlk
Q2hhaW4uY2hhaW4uZ2V0KCksIHRydWUpOworICAgICAgICBzdHViSW5mby5zdHViUm91dGluZS5j
bGVhcigpOworICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdCwgMSwgZmFsc2UpOworICAgICAgICBsaXN0SW5kZXggPSAxOworICAgIH0g
ZWxzZSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNj
ZXNzX2dldF9ieV9pZF9zZWxmX2xpc3QpOworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OworICAgICAgICBs
aXN0SW5kZXggPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZTsKKyAgICAgICAg
c2xvd0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxp
c3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOworICAgIH0KKyAg
ICAKKyAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKGxpc3RJbmRleCA8
IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0
YXRpYyB2b2lkIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9i
eV9pZF9zZWxmX2xpc3QpOworICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxv
Y2spOworICAgIGlmIChzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5kaWRTZWxmUGF0Y2hpbmcp
IHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgICAgICBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgIHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKKyAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZv
LCBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Cit9CisKK3N0YXRpYyBib29sIHRyeUJ1aWxk
R2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQoreworICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpCisgICAgICAgIHx8
ICFzbG90LmlzQ2FjaGVhYmxlKCkKKyAgICAgICAgfHwgIWJhc2VWYWx1ZS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZh
bHVlLmFzQ2VsbCgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVj
dHVyZSgpOworICAgIAorICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7Cisg
ICAgICAgIGlmICghc3R1YkluZm8ucGF0Y2guZGZnLnJlZ2lzdGVyc0ZsdXNoZWQpIHsKKyAgICAg
ICAgICAgIC8vIFdlIGNhbm5vdCBkbyBhcyBtdWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSByZWdp
c3RlcnMgd2VyZSBub3QgZmx1c2hlZCBwcmlvciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRpY3Vs
YXIsCisgICAgICAgICAgICAvLyBub24tVmFsdWUgY2FjaGVkIHByb3BlcnRpZXMgcmVxdWlyZSBw
bGFudGluZyBjYWxscywgd2hpY2ggcmVxdWlyZXMgcmVnaXN0ZXJzIHRvIGhhdmUgYmVlbiBmbHVz
aGVkLiBUaHVzLAorICAgICAgICAgICAgLy8gaWYgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQs
IGRvbid0IGRvIG5vbi1WYWx1ZSBjYWNoaW5nLgorICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2Fj
aGVhYmxlVmFsdWUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3Q7CisgICAgICAgIGludCBsaXN0SW5kZXg7CisgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsIHNsb3dDYXNlOworCisgICAgICAgIGlmICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qs
IGxpc3RJbmRleCwgc2xvd0Nhc2UpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemUrKzsKKyAgICAg
ICAgCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC5kZmcuYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgR1BS
UmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZn
LnZhbHVlVGFnR1BSKTsKKyNlbmRpZgorICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0
ZXJzKS5nZXRGcmVlR1BSKCk7CisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1Ykpp
dCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHdyb25nU3RydWN0ID0gc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CisgICAgICAg
IAorICAgICAgICAvLyBUaGUgc3RyYXRlZ3kgd2UgdXNlIGZvciBzdHVicyBpcyBhcyBmb2xsb3dz
OgorICAgICAgICAvLyAxKSBDYWxsIERGRyBoZWxwZXIgdGhhdCBjYWxscyB0aGUgZ2V0dGVyLgor
ICAgICAgICAvLyAyKSBDaGVjayBpZiB0aGVyZSB3YXMgYW4gZXhjZXB0aW9uLCBhbmQgaWYgdGhl
cmUgd2FzLCBjYWxsIHlldCBhbm90aGVyCisgICAgICAgIC8vICAgIGhlbHBlci4KKyAgICAgICAg
CisgICAgICAgIGJvb2wgaXNEaXJlY3QgPSBmYWxzZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgb3BlcmF0aW9uQ2FsbDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaGFuZGxl
ckNhbGw7CisgICAgICAgIEZ1bmN0aW9uUHRyIG9wZXJhdGlvbkZ1bmN0aW9uOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOworICAgICAgICAKKyAgICAgICAgaWYgKHNsb3Qu
aXNDYWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKKyAgICAg
ICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoYmFzZUdQUiAhPSBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hH
UFIpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShz
bG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOworI2Vsc2UKKyAgICAgICAgICAgICAg
ICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsK
KyNlbmRpZgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdHViSml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
ICAgICBvcGVyYXRpb25GdW5jdGlvbiA9IG9wZXJhdGlvbkNhbGxHZXR0ZXI7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKAorICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihzbG90LmN1c3RvbUdl
dHRlcigpKS5leGVjdXRhYmxlQWRkcmVzcygpKSwKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoaWRlbnQuaW1wbCgpKSk7CisgICAgICAgICAgICAgICAg
b3BlcmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRpb25DYWxsQ3VzdG9tR2V0dGVyOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0
IHdoZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRo
ZQorICAgICAgICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBtYWRlIGl0IGZyb20uIEl0IGp1c3Qgc28g
aGFwcGVucyB0byBiZSB0aGUgcGxhY2UgdGhhdCB3ZSBhcmUgYXQKKyAgICAgICAgICAgIC8vIHJp
Z2h0IG5vdyEKKyAgICAgICAgICAgIHN0dWJKaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4ZWMtPmxvY2F0aW9uQXNSYXdCaXRzKCkpLAor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxS
ZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgICAgICBzdHViSml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisjZWxzZQorICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHMocmVzdWx0R1BS
LCByZXN1bHRUYWdHUFIpOworI2VuZGlmCisgICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5l
bWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJnN0
dWJJbmZvKSk7CisgICAgICAgICAgICBoYW5kbGVyQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOworICAg
ICAgICAgICAgc3R1YkppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIHN0dWJKaXQubG9h
ZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgICAgICAg
ICAgaWYgKGJhc2VHUFIgPT0gcmVzdWx0VGFnR1BSKSB7CisgICAgICAgICAgICAgICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgICAgICAgICAgICAg
IHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJl
bGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3Vs
dEdQUik7CisjZWxzZQorICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnRhZykpLCByZXN1bHRUYWdHUFIpOworICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICAgICAgaXNEaXJl
Y3QgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dm0sICZzdHViSml0LCBjb2RlQmxvY2spOworICAgICAgICAKKyAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayh3cm9uZ1N0cnVjdCwgc2xvd0Nhc2UpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1
Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKKyAgICAgICAgaWYgKCFpc0RpcmVjdCkgewor
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBvcGVyYXRpb25GdW5j
dGlvbik7CisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBF
eGNlcHRpb25IYW5kbGVySW5TdHViKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9CisgICAgICAgICAgICBjcmVhdGVKSVRT
dHViUm91dGluZSgKKyAgICAgICAgICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKKyAgICAgICAg
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICgiREZHIEdldEJ5
SWQgcG9seW1vcnBoaWMgbGlzdCBhY2Nlc3MgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAorICAg
ICAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxl
QWRkcmVzcygpKSksCisgICAgICAgICAgICAgICAgKnZtLAorICAgICAgICAgICAgICAgIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJs
ZUdldHRlcigpIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSk7CisgICAgICAgIAorICAgICAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBpc0RpcmVj
dCk7CisgICAgICAgIAorICAgICAgICBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKGNvZGVCbG9jaywg
c3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGxpc3RJbmRleCA8
IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKTsKKyAgICB9CisgICAgCisgICAgaWYg
KGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkucHJvaGliaXRzUHJv
cGVydHlDYWNoaW5nKCkgfHwgIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNl
dCgpOworICAgIHNpemVfdCBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5B
Y2Nlc3MoZXhlYywgYmFzZVZhbHVlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LCBvZmZzZXQpOwor
ICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+
cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgCisgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7CisgICAgaW50IGxpc3RJbmRleDsKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZTsKKyAgICBpZiAoIWdldFBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdCh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgcG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LCBsaXN0SW5kZXgsIHNsb3dDYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZSsrOworICAgIAorICAgIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CisgICAgCisgICAgZ2VuZXJhdGVQcm90
b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBv
ZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSksIHNsb3dDYXNlLCBzdHViUm91
dGluZSk7CisgICAgCisgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRl
eF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0
cnVjdHVyZSwgdHJ1ZSk7CisgICAgCisgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7CisgICAgCisgICAgcmV0dXJuIGxpc3RJ
bmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKTsKK30KKwordm9pZCBidWls
ZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgYm9vbCBkb250Q2hhbmdlQ2FsbCA9IHRyeUJ1
aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJ
bmZvKTsKKyAgICBpZiAoIWRvbnRDaGFuZ2VDYWxsKQorICAgICAgICByZXBhdGNoQ2FsbChleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRC
eUlkKTsKK30KKworc3RhdGljIFZfSklUT3BlcmF0aW9uX0VKQ0kgYXBwcm9wcmlhdGVHZW5lcmlj
UHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRL
aW5kKQoreworICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7CisgICAgICAgIGlmIChwdXRL
aW5kID09IERpcmVjdCkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0OworICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKKyAgICB9Cisg
ICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQorICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdE5vblN0cmljdDsKKyAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsK
K30KKworc3RhdGljIFZfSklUT3BlcmF0aW9uX0VKQ0kgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQ
dXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtp
bmQpCit7CisgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgaWYgKHB1dEtp
bmQgPT0gRGlyZWN0KQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RCdWlsZExpc3Q7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVp
bGRMaXN0OworICAgIH0KKyAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0OworICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0OworfQorCitzdGF0aWMgdm9pZCBlbWl0
UHV0UmVwbGFjZVN0dWIoCisgICAgRXhlY1N0YXRlKiBleGVjLAorICAgIEpTVmFsdWUsCisgICAg
Y29uc3QgSWRlbnRpZmllciYsCisgICAgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LAorICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBQdXRLaW5kLAorICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlLAorICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCwKKyAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKK3sKKyAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1Yklu
Zm8ucGF0Y2guZGZnLmJhc2VHUFIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgR1BSUmVn
IHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFs
dWVUYWdHUFIpOworI2VuZGlmCisgICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVH
UFIoKTsKKyAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7CisjaWYgRU5BQkxF
KFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKKyAgICBj
b25zdCBib29sIHdyaXRlQmFycmllck5lZWRlZCA9IHRydWU7CisjZWxzZQorICAgIGNvbnN0IGJv
b2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gZmFsc2U7CisjZW5kaWYKKyAgICAKKyAgICBNYWNyb0Fz
c2VtYmxlciBzdHViSml0OworICAgIAorICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJS
ZWcgJiYgKHdyaXRlQmFycmllck5lZWRlZCB8fCBpc091dE9mTGluZU9mZnNldChzbG90LmNhY2hl
ZE9mZnNldCgpKSkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzY3JhdGNoR1BSID0g
QXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSKTsKKyNl
bHNlCisgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSKTsKKyNlbmRpZgorICAgICAgICBuZWVk
VG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7CisgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BS
KTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmUgPSBzdHVi
Sml0LmJyYW5jaFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7
CisgICAgCisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgc2NyYXRjaEdQUjIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworI2Vsc2UKKyAgICBzY3JhdGNoR1BS
MiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwg
dmFsdWVUYWdHUFIsIHNjcmF0Y2hHUFIpOworI2VuZGlmCisgICAgc3R1YkppdC5wdXNoKHNjcmF0
Y2hHUFIyKTsKKyAgICBBc3NlbWJseUhlbHBlcnM6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNl
R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nl
c3MpOworICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIyKTsKKyNlbmRpZgorICAgIAorI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
KQorICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldElu
SW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwor
ICAgIGVsc2UgeworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXpl
b2YoSlNWYWx1ZSkpKTsKKyAgICB9CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGlmIChp
c0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgeworICAgICAgICBzdHViSml0LnN0
b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9y
ZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBz
dHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5C
dXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXpl
b2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnRhZykpKTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBzdWNjZXNzOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7CisgICAgCisgICAg
aWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7CisgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hH
UFIpOworICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgIAorICAgICAg
ICBiYWRTdHJ1Y3R1cmUubGluaygmc3R1YkppdCk7CisgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0
Y2hHUFIpOworICAgICAgICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICBmYWlsdXJlID0gYmFk
U3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
JnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nl
c3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUs
IGZhaWx1cmVMYWJlbCk7CisgICAgICAgICAgICAKKyAgICBzdHViUm91dGluZSA9IEZJTkFMSVpF
X0NPREVfRk9SX0RGR19TVFVCKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJERkcg
UHV0QnlJZCByZXBsYWNlIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAg
ICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Cit9CisKK3N0YXRp
YyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsCisgICAg
SlNWYWx1ZSwKKyAgICBjb25zdCBJZGVudGlmaWVyJiwKKyAgICBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIFB1dEtpbmQg
cHV0S2luZCwKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwKKyAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4sCisgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAorICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0
dWJSb3V0aW5lKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworCisgICAgR1BSUmVnIGJh
c2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsK
KyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19j
YXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKKyNlbmRpZgorICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZn
LnZhbHVlR1BSKTsKKyAgICAKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9y
KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKTsKKyAgICBhbGxvY2F0b3IubG9jayhi
YXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGFsbG9jYXRvci5sb2NrKHZhbHVl
VGFnR1BSKTsKKyNlbmRpZgorICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlR1BSKTsKKyAgICAKKyAg
ICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7CisgICAgICAgICAgICAKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgQVNTRVJUKHNj
cmF0Y2hHUFIxICE9IGJhc2VHUFIpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMSAhPSB2YWx1ZUdQ
Uik7CisgICAgCisgICAgYm9vbCBuZWVkU2Vjb25kU2NyYXRjaCA9IGZhbHNlOworICAgIGJvb2wg
bmVlZFRoaXJkU2NyYXRjaCA9IGZhbHNlOworI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJ
TElORykKKyAgICBuZWVkU2Vjb25kU2NyYXRjaCA9IHRydWU7CisjZW5kaWYKKyAgICBpZiAoc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKQorICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsK
KyAgICAgICAgbmVlZFNlY29uZFNjcmF0Y2ggPSB0cnVlOworICAgICAgICBuZWVkVGhpcmRTY3Jh
dGNoID0gdHJ1ZTsKKyAgICB9CisKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjI7CisgICAgaWYgKG5l
ZWRTZWNvbmRTY3JhdGNoKSB7CisgICAgICAgIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOworICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gYmFzZUdQUik7
CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSB2YWx1ZUdQUik7CisgICAgICAgIEFTU0VS
VChzY3JhdGNoR1BSMiAhPSBzY3JhdGNoR1BSMSk7CisgICAgfSBlbHNlCisgICAgICAgIHNjcmF0
Y2hHUFIyID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjM7CisgICAgaWYg
KG5lZWRUaGlyZFNjcmF0Y2gpIHsKKyAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMyAhPSBiYXNlR1BS
KTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IHZhbHVlR1BSKTsKKyAgICAgICAgQVNT
RVJUKHNjcmF0Y2hHUFIzICE9IHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hH
UFIzICE9IHNjcmF0Y2hHUFIyKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NyYXRjaEdQUjMgPSBJ
bnZhbGlkR1BSUmVnOworICAgICAgICAgICAgCisgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2Vk
UmVnaXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGZhaWx1cmVDYXNlczsKKyAgICAgICAgICAgIAorICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworICAgIAorICAg
IGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2xkU3RydWN0dXJlKSkp
OworICAgIAorICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKKyAgICAgICAgb2xkU3Ry
dWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBz
dHViSml0LCBmYWlsdXJlQ2FzZXMsCisgICAgICAgIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAg
IAorICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgeworICAgICAgICBmb3IgKFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkg
eworICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgICAgICAgICAg
ICAgICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LCBzdHViSml0LCBmYWlsdXJlQ2FzZXMsCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjEpOwor
ICAgICAgICB9CisgICAgfQorCisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQor
ICAgIEFTU0VSVChuZWVkU2Vjb25kU2NyYXRjaCk7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9
IEludmFsaWRHUFJSZWcpOworICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhpcyB3cml0ZSBiYXJy
aWVyIGFzIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWlyZXMgaXQKKyAgICBB
c3NlbWJseUhlbHBlcnM6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BS
MSwgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKKyNlbmRpZgor
ICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAKKyAgICBi
b29sIHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9IGZhbHNlOworICAgIAorICAgIGlmIChzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKSB7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGll
ZEFsbG9jYXRvciA9ICZ2bS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7CisgICAgICAgIAorICAg
ICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywg
c2NyYXRjaEdQUjEpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNo
U3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKSk7CisgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRy
KHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOworICAg
ICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgc3R1Ykpp
dC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9y
LT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgc3R1Ykpp
dC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBz
Y3JhdGNoR1BSMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsK
KyAgICAgICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAg
ICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBz
Y3JhdGNoR1BSMSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hT
dWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKKyAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIo
c2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CisgICAg
ICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBzdHViSml0
LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3It
Pm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBzdHViSml0
LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNj
cmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQUjEgPSBuZXcgc3Rv
cmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwgc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUK
KyAgICAgICAgICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19j
YXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7CisgICAg
ICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIzLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSwgc2Ny
YXRjaEdQUjIpOworICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCAtKG9mZnNldCArIHNpemVvZihK
U1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworICAg
ICAgICBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSB0cnVlOworICAgIH0KKworICAgIHN0dWJKaXQu
c3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKQorICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9m
ZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSkpOworICAgIGVsc2UgeworICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKKyAg
ICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN0
dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpKSk7CisgICAgfQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1
ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFzY3Jh
dGNoR1BSMUhhc1N0b3JhZ2UpCisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaEdQUjEpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZh
bHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5C
dXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICB9Cisj
ZW5kaWYKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7CisgICAgICAgICAgICAKKyAgICBpZiAoYWxsb2NhdG9y
LmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRS
ZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7CisgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1
bXAoKTsKKworICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmc3R1YkppdCk7CisgICAgICAgIGFs
bG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOworICAgICAg
ICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7CisgICAgfSBlbHNlCisgICAgICAgIHN1Y2Nlc3Mg
PSBzdHViSml0Lmp1bXAoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRp
b25DYWxsOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3NJblNsb3dQYXRoOworICAg
IAorICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQp
OworICAgICAgICAKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBv
cHBpbmcoc3R1YkppdCk7CisgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2
bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoYWxsb2NhdG9yLmRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6
ZSgpKTsKKyAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1
ZmZlcihzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMSk7CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVHUFIpOworI2Vsc2UK
KyAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihzbG90LmNhY2hlZE9mZnNldCgpKSwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSKTsK
KyNlbmRpZgorICAgICAgICBvcGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7CisgICAgICAg
IGFsbG9jYXRvci5yZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyKHN0dWJKaXQs
IHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3VjY2Vzc0luU2xvd1BhdGgg
PSBzdHViSml0Lmp1bXAoKTsKKyAgICB9CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7CisgICAgaWYgKGFsbG9jYXRvci5kaWRS
ZXVzZVJlZ2lzdGVycygpKQorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1
cmVMYWJlbCk7CisgICAgZWxzZQorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNl
cywgZmFpbHVyZUxhYmVsKTsKKyAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmlu
aXNoUHV0KTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzSW5TbG93UGF0aCwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvRG9uZSkpOworICAgIH0KKyAgICAKKyAgICBzdHViUm91dGluZSA9CisgICAg
ICAgIGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICAgICAgRklOQUxJWkVfREZHX0NPREUo
CisgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAgICAgKCJERkcgUHV0
QnlJZCAlc3RyYW5zaXRpb24gc3R1YiAoJXAgLT4gJXApIGZvciAlcywgcmV0dXJuIHBvaW50ICVw
IiwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA/ICJyZWFsbG9jYXRpbmcgIiA6ICIi
LAorICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwKKyAgICAgICAg
ICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKSwKKyAgICAgICAgICAgICp2bSwKKyAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5v
d25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCisgICAgICAgICAgICBz
dHJ1Y3R1cmUpOworfQorCitzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5k
IHB1dEtpbmQpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKworICAgIGlmICghYmFzZVZhbHVlLmlzQ2Vs
bCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VW
YWx1ZS5hc0NlbGwoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1
Y3R1cmUoKTsKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+cHJldmlv
dXNJRCgpOworICAgIAorICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisg
ICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkgeworICAgICAgICBpZiAoc2xvdC50eXBl
KCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgeworICAgICAgICAgICAgaWYgKHN0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hl
cmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKKyAgICAgICAgICAgIC8vIGVu
b3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCisgICAgICAgICAgICBpZiAoR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2CisgICAgICAgICAgICAgICAgJiYgb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQor
ICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUg
c3RydWN0dXJlIGhhcworICAgICAgICAgICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KKyAgICAgICAg
ICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9y
bWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZUNlbGwpID09IEludmFsaWRQcm90b3R5cGVD
aGFpbikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90
eXBlQ2hhaW4oZXhlYyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVtaXRQdXRUcmFuc2l0
aW9uU3R1YigKKyAgICAgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBz
dHViSW5mbywgcHV0S2luZCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9sZFN0cnVjdHVy
ZSwgcHJvdG90eXBlQ2hhaW4sCisgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpLAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Cisg
ICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKKyAgICAgICAgICAgICAgICBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksCisgICAgICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkp
KTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0
S2luZCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRy
YW5zaXRpb24oKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUs
IHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIHB1dEtpbmQgPT0gRGlyZWN0KTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXBh
dGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNh
Y2hlZE9mZnNldCgpLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90
LCBwdXRLaW5kKSwgZmFsc2UpOworICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2Uo
KnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgcmVwYXRj
aFB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQoreworICAgIGJvb2wgY2FjaGVk
ID0gdHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBz
dHViSW5mbywgcHV0S2luZCk7CisgICAgaWYgKCFjYWNoZWQpCisgICAgICAgIHJlcGF0Y2hDYWxs
KGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJp
YXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Cit9CisKK3N0YXRpYyBi
b29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQorewor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CisgICAg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsKKyAgICAK
KyAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgorICAgIGlmIChzbG90LmJh
c2UoKSA9PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlz
dDsKKyAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKKyAgICAgICAg
CisgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5
KSB7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNraXAg
b3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3Qg
aGF2ZQorICAgICAgICAgICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4K
KyAgICAgICAgICAgIGlmIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA8IDYKKyAgICAgICAg
ICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpCisgICAgICAgICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdl
IG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCisgICAgICAgICAgICAvLyBpbmRl
eGluZyBzdG9yYWdlLgorICAgICAgICAgICAgaWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5k
ZXhpbmdIZWFkZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlQ2Vs
bCkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNo
YWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0byBjcmVhdGluZyB0aGUgc3R1Yi4gTW9n
cmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5LgorICAgICAgICAgICAgbGlzdCA9IFBvbHlt
b3JwaGljUHV0QnlJZExpc3Q6OmZyb20oCisgICAgICAgICAgICAgICAgcHV0S2luZCwgc3R1Yklu
Zm8sCisgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZW1pdFB1dFRyYW5zaXRpb25TdHViKAorICAgICAgICAgICAgICAg
IGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwK
KyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4s
CisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRo
VGFyZ2V0KCkpLAorICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNzKAorICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nl
c3M6OnRyYW5zaXRpb24oCisgICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1
cmUsIHByb3RvdHlwZUNoYWluLAorICAgICAgICAgICAgICAgICAgICBzdHViUm91dGluZSkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0byBj
cmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5LgorICAg
ICAgICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20oCisgICAgICAgICAg
ICAgICAgcHV0S2luZCwgc3R1YkluZm8sCisgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZW1pdFB1dFJlcGxhY2VTdHVi
KAorICAgICAgICAgICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBz
dHViSW5mbywgcHV0S2luZCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlv
bkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwgc3R1YlJvdXRpbmUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCisgICAgICAgICAgICAgICAg
UHV0QnlJZEFjY2Vzczo6cmVwbGFjZSgKKyAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHN0
dWJSb3V0aW5lKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkK
KyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1
dEtpbmQpCit7CisgICAgYm9vbCBjYWNoZWQgPSB0cnlCdWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJh
c2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7CisgICAgaWYg
KCFjYWNoZWQpCisgICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihz
bG90LCBwdXRLaW5kKSk7Cit9CisKK3N0YXRpYyBib29sIHRyeVJlcGF0Y2hJbigKKyAgICBFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wg
d2FzRm91bmQsCisgICAgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pCit7CisgICAgaWYgKCFiYXNlLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlBY2Nl
c3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYg
KHdhc0ZvdW5kKSB7CisgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCk7CisgICAgCisgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0SWdub3JlZDsKKyAgICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5
cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2UsIHdhc0ZvdW5kID8gc2xvdC5zbG90QmFz
ZSgpIDogSlNWYWx1ZSgpLCBpZGVudCwgb2Zmc2V0SWdub3JlZCk7CisgICAgaWYgKGNvdW50ID09
IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
OworICAgIGludCBsaXN0SW5kZXg7CisgICAgCisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vz
c0xhYmVsID0gc3R1YkluZm8uaG90UGF0aEJlZ2luOworICAgIENvZGVMb2NhdGlvbkxhYmVsIHNs
b3dDYXNlTGFiZWw7CisgICAgCisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNz
X3Vuc2V0KSB7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdEluTGlzdChw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDApOworICAgICAgICBzbG93Q2FzZUxhYmVsID0gc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICBzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgICAgIGxpc3RJbmRleCA9
IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNz
VHlwZSA9PSBhY2Nlc3NfaW5fbGlzdCk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dCA9IHN0dWJJbmZvLnUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7CisgICAgICAgIGxpc3RJbmRleCA9
IHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplOworICAgICAgICBzbG93Q2FzZUxhYmVsID0gQ29k
ZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAt
IDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChs
aXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1
Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4g
c3R1YlJvdXRpbmU7CisgICAgCisgICAgeworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFs
dWVHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7CisgICAgICAgIAorICAgICAg
ICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7CisgICAgICAgIAorICAgICAgICBib29sIG5lZWRU
b1Jlc3RvcmVTY3JhdGNoOworICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVn
KSB7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3Jh
dGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzdHViSml0LnB1c2goc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Cisg
ICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsKKyAgICAgICAgCisg
ICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksICsraXQpIHsKKyAgICAgICAgICAgIEpTT2Jq
ZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29r
dXAoZXhlYykpOworICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAg
ICAgICAgICAgICAgIHByb3RvdHlwZSwgcHJvdG90eXBlLT5zdHJ1Y3R1cmUoKSwgZXhlYy0+Y29k
ZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LAorICAgICAgICAgICAgICAgIGZhaWx1cmVDYXNl
cywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOwor
ICAgICAgICB9CisgICAgICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHN0dWJKaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4od2FzRm91bmQpKSksIHJlc3VsdEdQUik7CisjZWxzZQorICAgICAgICBzdHViSml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih3YXNGb3VuZCksIHJlc3VsdEdQUik7CisjZW5k
aWYKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7
CisgICAgICAgIAorICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Cisg
ICAgICAgIAorICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4
ZWMtPmNvZGVCbG9jaygpKTsKKworICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZm
ZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1
Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7CisgICAgICAgIAorICAgICAgICBzdHViUm91dGlu
ZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RGR19TVFVCKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIs
CisgICAgICAgICAgICAoIkRGRyBJbiAoZm91bmQgPSAlcykgc3R1YiBmb3IgJXMsIHJldHVybiBw
b2ludCAlcCIsCisgICAgICAgICAgICAgICAgd2FzRm91bmQgPyAieWVzIiA6ICJubyIsIHRvQ1N0
cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICBzdWNjZXNz
TGFiZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIH0KKyAgICAKKyAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKKyAgICBzdHViSW5m
by51LmluTGlzdC5saXN0U2l6ZSsrOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjb2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmhvdFBh
dGhCZWdpbi5qdW1wQXRPZmZzZXQoMCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKSk7CisgICAgCisgICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJ
Q19MSVNUX0NBQ0hFX1NJWkUgLSAxKTsKK30KKwordm9pZCByZXBhdGNoSW4oCisgICAgRXhlY1N0
YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIHdh
c0ZvdW5kLAorICAgIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQoreworICAgIGlmICh0cnlSZXBhdGNoSW4oZXhlYywgYmFzZSwgaWRlbnQsIHdh
c0ZvdW5kLCBzbG90LCBzdHViSW5mbykpCisgICAgICAgIHJldHVybjsKKyAgICByZXBhdGNoQ2Fs
bChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRp
b25Jbik7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFJlcGF0Y2hCdWZmZXImIHJlcGF0
Y2hCdWZmZXIsIFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKK3sKKyAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgeworICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9u
LCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3Qp
OworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikuY29kZSgp
KTsKK30KKwordm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKU0Z1bmN0aW9uKiBjYWxsZWUs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCit7CisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7CisgICAgCisgICAgLy8gSWYg
eW91J3JlIGJlaW5nIGNhbGwtbGlua2VkIGZyb20gYSBERkcgY2FsbGVyIHRoZW4geW91IG9idmlv
dXNseSBkaWRuJ3QgZ2V0IGlubGluZWQuCisgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAg
ICAgY2FsbGVlQ29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAg
IAorICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+
Y29kZUJsb2NrKCk7CisgICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOworICAgIAor
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOworICAgIAor
ICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOworICAgIGNhbGxMaW5rSW5mby5j
YWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPnZtKCksIGNhbGxMaW5rSW5mby5ob3RQYXRo
QmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CisgICAg
Y2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgp
LCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOworICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIsIGNvZGVQdHIpOworICAg
IAorICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCisgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlu
a0luY29taW5nQ2FsbChleGVjLT5jYWxsZXJGcmFtZSgpLCAmY2FsbExpbmtJbmZvKTsKKyAgICAK
KyAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihsaW5r
Q2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICBsaW5r
U2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ29uc3RydWN0
KTsKK30KKwordm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgQ29kZUJs
b2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsK
KyAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CisgICAgCisgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CisgICAgCisgICAgbGlua1Nsb3dG
b3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywga2luZCk7Cit9CisKK3ZvaWQgbGlu
a0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8s
IENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXhlY3V0
YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQorewor
ICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIpOworICAgIAorICAgIENvZGVCbG9jayogY2Fs
bGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CisgICAgVk0q
IHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOworICAgIAorICAgIEdQUlJlZyBjYWxsZWVHUFIg
PSBzdGF0aWNfY2FzdDxHUFJSZWc+KGNhbGxMaW5rSW5mby5jYWxsZWVHUFIpOworICAgIAorICAg
IENDYWxsSGVscGVycyBzdHViSml0KHZtLCBjYWxsZXJDb2RlQmxvY2spOworICAgIAorICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgIHN0dWJKaXQuYnJhbmNoVGVzdDY0KAorICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBjYWxsZWVHUFIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3RlcikpOworI2Vsc2UKKyAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tl
ZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgorI2VuZGlmCisgICAgCisgICAgc2xvd1BhdGgu
YXBwZW5kKAorICAgICAgICBzdHViSml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7CisgICAgCisgICAgc2xvd1BhdGguYXBwZW5k
KAorICAgICAgICBzdHViSml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Tm90RXF1YWwsCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpKTsKKyAgICAKKyAgICBzdHViSml0LmxvYWRQ
dHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246
Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKKyAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzdHViSml0LnN0b3JlNjQoCisgICAgICAgIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJl
Z2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7CisjZWxzZQorICAgIHN0dWJKaXQuc3Rv
cmVQdHIoCisgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAorICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAg
IHN0dWJKaXQuc3RvcmUzMigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZyksCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIp
ICogSlNTdGFjazo6U2NvcGVDaGFpbikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyNlbmRpZgorICAgIAorICAgIEFzc2VtYmx5SGVscGVy
czo6Q2FsbCBjYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOworICAgIEFzc2VtYmx5SGVscGVyczo6
SnVtcCBkb25lID0gc3R1YkppdC5qdW1wKCk7CisgICAgCisgICAgc2xvd1BhdGgubGluaygmc3R1
YkppdCk7CisgICAgc3R1YkppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86Om5vbkFyZ0dQUjEpOworI2Vu
ZGlmCisgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlu
a0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpu
b25BcmdHUFIyKTsKKyAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93ID0g
c3R1YkppdC5qdW1wKCk7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZz
dHViSml0LCBjYWxsZXJDb2RlQmxvY2spOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgcGF0Y2hC
dWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoMCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwo
dm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAg
CisgICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRvcHRS
ZWYobmV3IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0RGR19DT0RF
KAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkRGRyBjbG9zdXJlIGNh
bGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0ICVwICglcykiLAorICAgICAg
ICAgICAgICAgIHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygp
LAorICAgICAgICAgICAgICAgIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgdG9DU3RyaW5n
KHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jaykpLmRhdGEoKSkpLAorICAgICAgICAqdm0sIGNh
bGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwg
Y2FsbExpbmtJbmZvLmNvZGVPcmlnaW4pKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAKKyAgICByZXBhdGNoQnVmZmVyLnJlcGxh
Y2VXaXRoSnVtcCgKKyAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQ
YXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbiksCisgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgbGlua1Nsb3dG
b3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwpOworICAgIAor
ICAgIGNhbGxMaW5rSW5mby5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOworICAgIAorICAg
IEFTU0VSVCghY2FsbGVlQ29kZUJsb2NrIHx8IGNhbGxlZUNvZGVCbG9jay0+aXNJbmNvbWluZ0Nh
bGxBbHJlYWR5TGlua2VkKCZjYWxsTGlua0luZm8pKTsKK30KKwordm9pZCByZXNldEdldEJ5SUQo
UmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQoreworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQ
dHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
UHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRv
Q2FsbCk7CisgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJy
YW5jaFB0cldpdGhQYXRjaCgpKSB7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJl
cGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICBSZXBh
dGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKHN0
cnVjdHVyZUxhYmVsKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHVi
SW5mby5wYXRjaC5kZmcuYmFzZUdQUiksCisgICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQ
b2ludGVyKSk7CisgICAgfQorICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHJ1Y3R1cmVMYWJl
bCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2Fs
bFRvTG9hZE9yU3RvcmUpLCAwKTsKKyNlbHNlCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAwKTsKKyAgICByZXBhdGNo
QnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBh
Y3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3Rv
cmUpLCAwKTsKKyNlbmRpZgorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
U3RydWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworfQorCit2b2lkIHJlc2V0
UHV0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCit7CisgICAgVl9KSVRPcGVyYXRpb25fRUpDSSB1bm9wdGltaXplZEZ1bmN0aW9u
ID0gYml0d2lzZV9jYXN0PFZfSklUT3BlcmF0aW9uX0VKQ0k+KE1hY3JvQXNzZW1ibGVyOjpyZWFk
Q2FsbFRhcmdldChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOworICAgIFZfSklUT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkRnVuY3Rpb247CisgICAgaWYg
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpCisgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAg
IGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWls
ZExpc3QpCisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdE9wdGltaXplOworICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpCisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgIGVsc2UgeworICAg
ICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dE5vblN0cmljdEJ1aWxkTGlzdCk7CisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIH0KKyAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0aW9u
KTsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRvQ2FsbCk7CisgICAgaWYgKE1hY3JvQXNzZW1i
bGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7CisgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQ
dHJXaXRoUGF0Y2goCisgICAgICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxl
QnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUiksCisg
ICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7CisgICAgfQorICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHJ1Y3R1cmVMYWJlbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
dW51c2VkUG9pbnRlcikpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgcmVwYXRjaEJ1ZmZlci5y
ZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7CisjZWxzZQorICAg
IHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9y
ZSksIDApOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Q
YXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKKyNlbmRpZgorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwor
fQorCit2b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZv
LmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoMCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEzLDggKzUxMyw3IEBAIHN0
YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICNlbmRpZgogICAgICAgICAg
ICAgc3VjY2VzcyA9IHN0dWJKaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52
ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKCZzdHViSW5mbykpOworICAgICAgICAgICAgc3R1YkppdC5zZXR1
cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAgICAgICAgICAgaGFuZGxlckNhbGwgPSBzdHViSml0
LmNhbGwoKTsKICAgICAgICAgICAgIHN0dWJKaXQuanVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UjIpOwogICAgICAgICB9IGVsc2UgewpAQCAtNTQ5LDcgKzU0OCw3IEBAIHN0YXRpYyBib29sIHRy
eUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNj
ZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgICAgIGlmICghaXNEaXJlY3QpIHsKICAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uRnVuY3Rp
b24pOwotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhj
ZXB0aW9uSGFuZGxlckluU3R1Yik7CisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRs
ZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMTU2MjM2KQkoZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaDoxNTYyMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVwYXRjaF9o
CisjZGVmaW5lIFJlcGF0Y2hfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBF
TkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSklUT3Bl
cmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCByZXBhdGNoR2V0QnlJRChFeGVj
U3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jiwg
U3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgYnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqLCBK
U1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJl
U3R1YkluZm8mKTsKK3ZvaWQgYnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZWNTdGF0ZSosIEpTVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwordm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQ
dXRLaW5kKTsKK3ZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8m
LCBQdXRLaW5kKTsKK3ZvaWQgcmVwYXRjaEluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGNvbnN0IElk
ZW50aWZpZXImLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVT
dHViSW5mbyYpOwordm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVC
bG9jayosIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kKTsKK3ZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJ
bmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Cit2b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVj
U3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmUqLCBFeGVjdXRhYmxl
QmFzZSosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7Cit2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNo
QnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRQdXRCeUlEKFJlcGF0Y2hC
dWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldEluKFJlcGF0Y2hCdWZmZXIm
LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vsc2UgLy8g
RU5BQkxFKEpJVCkKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBSZXBhdGNoQnVmZmVyOworc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOwor
CitpbmxpbmUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNo
QnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KK2lubGluZSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgcmVzZXRQdXRCeUlEKFJl
cGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQoraW5saW5lIE5PX1JFVFVSTiB2b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYs
IFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKyNlbmRpZiAvLyBS
ZXBhdGNoX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkocmV2aXNpb24gMTU2MjM2KQkoZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oOjE1NjIzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAorI2Rl
ZmluZSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNp
bmNsdWRlICJSZWdpc3RlclNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBjbGFz
cyBwcm92aWRlcyBhIGxvdy1sZXZlbCByZWdpc3RlciBhbGxvY2F0b3IgZm9yIHVzZSBpbiBzdHVi
cy4KKworY2xhc3MgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCisg
ICAgICAgIDogbV91c2VkUmVnaXN0ZXJzKHVzZWRSZWdpc3RlcnMpCisgICAgICAgICwgbV9kaWRS
ZXVzZVJlZ2lzdGVycyhmYWxzZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgdm9pZCBsb2NrKFQgcmVnKSB7IG1fbG9ja2VkUmVnaXN0ZXJzLnNldChy
ZWcpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CisgICAgdHlwZW5h
bWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSBhbGxvY2F0ZVNjcmF0Y2goKQorICAgIHsKKyAgICAg
ICAgLy8gRmlyc3QgdHJ5IHRvIGFsbG9jYXRlIGEgcmVnaXN0ZXIgdGhhdCBpcyB0b3RhbGx5IGZy
ZWUuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7ICsraSkgeworICAgICAgICAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVy
VHlwZSByZWcgPSBCYW5rSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgICAgIGlmICghbV9s
b2NrZWRSZWdpc3RlcnMuZ2V0KHJlZykKKyAgICAgICAgICAgICAgICAmJiAhbV91c2VkUmVnaXN0
ZXJzLmdldChyZWcpCisgICAgICAgICAgICAgICAgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXQo
cmVnKSkgeworICAgICAgICAgICAgICAgIG1fc2NyYXRjaFJlZ2lzdGVycy5zZXQocmVnKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyBTaW5jZSB0aGF0IGZhaWxlZCwgdHJ5IHRvIGFsbG9jYXRlIGEgcmVn
aXN0ZXIgdGhhdCBpcyBub3QgeWV0CisgICAgICAgIC8vIGxvY2tlZCBvciB1c2VkIGZvciBzY3Jh
dGNoLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFua0luZm86Om51bWJlck9m
UmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgICAgIHR5cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3Rl
clR5cGUgcmVnID0gQmFua0luZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgICAgICBpZiAoIW1f
bG9ja2VkUmVnaXN0ZXJzLmdldChyZWcpICYmICFtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0KHJlZykp
IHsKKyAgICAgICAgICAgICAgICBtX3NjcmF0Y2hSZWdpc3RlcnMuc2V0KHJlZyk7CisgICAgICAg
ICAgICAgICAgbV9kaWRSZXVzZVJlZ2lzdGVycyA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
V2UgZmFpbGVkLgorICAgICAgICBDUkFTSCgpOworICAgICAgICAvLyBNYWtlIHNvbWUgc2lsbHkg
Y29tcGlsZXJzIGhhcHB5LgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQmFu
a0luZm86OlJlZ2lzdGVyVHlwZT4oLTEpOworICAgIH0KKyAgICAKKyAgICBHUFJSZWcgYWxsb2Nh
dGVTY3JhdGNoR1BSKCkgeyByZXR1cm4gYWxsb2NhdGVTY3JhdGNoPEdQUkluZm8+KCk7IH0KKyAg
ICBGUFJSZWcgYWxsb2NhdGVTY3JhdGNoRlBSKCkgeyByZXR1cm4gYWxsb2NhdGVTY3JhdGNoPEZQ
UkluZm8+KCk7IH0KKyAgICAKKyAgICBib29sIGRpZFJldXNlUmVnaXN0ZXJzKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2RpZFJldXNlUmVnaXN0ZXJzOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKE1hY3JvQXNzZW1ibGVyJiBq
aXQpCisgICAgeworICAgICAgICBpZiAoIW1fZGlkUmV1c2VSZWdpc3RlcnMpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICAgICAgaWYgKG1fc2NyYXRj
aFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUlu
ZGV4KGkpKSB7CisgICAgICAgICAgICAgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDgpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
ICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQ
UkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCisgICAgICAg
ICAgICAgICAgaml0LnB1c2goR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgdm9pZCByZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKE1hY3Jv
QXNzZW1ibGVyJiBqaXQpCisgICAgeworICAgICAgICBpZiAoIW1fZGlkUmV1c2VSZWdpc3RlcnMp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1f
c2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRH
UFJCeUluZGV4KGkpKQorICAgICAgICAgICAgICAgIGppdC5wb3AoR1BSSW5mbzo6dG9SZWdpc3Rl
cihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX3NjcmF0Y2hSZWdpc3Rl
cnMuZ2V0RlBSQnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSkg
eworICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDgpLCBNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHVuc2lnbmVkIGRlc2lyZWRTY3JhdGNoQnVmZmVyU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpICogc2l6ZW9mKEpT
VmFsdWUpOyB9CisgICAgCisgICAgdm9pZCBwcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hC
dWZmZXIoTWFjcm9Bc3NlbWJsZXImIGppdCwgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciwg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBJbnZhbGlkR1BSUmVnKQorICAgIHsKKyAgICAgICAgdW5zaWdu
ZWQgY291bnQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRH
UFJCeUluZGV4KGkpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBqaXQu
c3RvcmU2NChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1
ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpOworI2Vsc2UKKyAg
ICAgICAgICAgICAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBzdGF0aWNf
Y2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291
bnQrKykpOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2NyYXRjaEdQ
UiA9PSBJbnZhbGlkR1BSUmVnICYmICFtX2xvY2tlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkp
ICYmICFtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKKyAgICAgICAgICAgICAg
ICBzY3JhdGNoR1BSID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgfQorICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAg
ICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7CisgICAgICAg
ICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nh
c3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50
KyspKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUklu
Zm86OnRvUmVnaXN0ZXIoaSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvdW50ICogc2l6ZW9mKEpTVmFsdWUpID09IGRlc2ly
ZWRTY3JhdGNoQnVmZmVyU2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihzdGF0aWNfY2FzdDxzaXplX3Q+KGNvdW50ICogc2l6ZW9mKEpTVmFsdWUpKSks
IHNjcmF0Y2hHUFIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlc3RvcmVVc2VkUmVnaXN0ZXJz
RnJvbVNjcmF0Y2hCdWZmZXIoTWFjcm9Bc3NlbWJsZXImIGppdCwgU2NyYXRjaEJ1ZmZlciogc2Ny
YXRjaEJ1ZmZlciwgR1BSUmVnIHNjcmF0Y2hHUFIgPSBJbnZhbGlkR1BSUmVnKQorICAgIHsKKyAg
ICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgLy8g
RmluZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBH
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgICAgIGlmICht
X2xvY2tlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpIHx8IG1fc2NyYXRjaFJlZ2lzdGVycy5n
ZXRHUFJCeUluZGV4KGkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICBzY3JhdGNoR1BSID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FT
U0VSVChzY3JhdGNoR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICAKKyAgICAgICAgaml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZl
TGVuZ3RoUHRyKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSKTsKKworICAgICAgICAvLyBSZXN0
b3JlIGRvdWJsZSByZWdpc3RlcnMgZmlyc3QuCisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gbV91
c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0R1BScygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1f
dXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7CisgICAgICAgICAgICAgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFs
dWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoc2NyYXRjaEdQUiwgRlBSSW5mbzo6
dG9SZWdpc3RlcihpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGNvdW50ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0
R1BSQnlJbmRleChpKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgaml0
LmxvYWQ2NChzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFC
dWZmZXIoKSkgKyAoY291bnQrKyksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworI2Vsc2UKKyAg
ICAgICAgICAgICAgICBqaXQubG9hZDMyKHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2Ny
YXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSwgR1BSSW5mbzo6dG9SZWdpc3Rl
cihpKSk7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyU2V0
IG1fbG9ja2VkUmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyU2V0IG1fc2NyYXRjaFJlZ2lzdGVyczsK
KyAgICBib29sIG1fZGlkUmV1c2VSZWdpc3RlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCShyZXZpc2lvbiAxNTY0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlNwZWNpYWxpemVkVGh1bmtKSVQuaCIKQEAgLTM4LDcg
KzM5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBKU0ludGVyZmFjZUpJVDo6Q2Fs
bCBnZW5lcmF0ZVNsb3dDYXNlRm9yKFZNKiB2bSwgSlNJbnRlcmZhY2VKSVQmIGppdCkKK3N0YXRp
YyBKU0ludGVyZmFjZUpJVDo6Q2FsbCBvbGRTdHlsZUdlbmVyYXRlU2xvd0Nhc2VGb3IoVk0qIHZt
LCBKU0ludGVyZmFjZUpJVCYgaml0KQogewogICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKICAg
ICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFpbiwg
SlNJbnRlcmZhY2VKSVQ6OnJlZ1QyLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwpAQCAtNTksNyAr
NjAsNyBAQCBzdGF0aWMgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgZ2VuZXJhdGVTbG93CiAgICAgcmV0
dXJuIGNhbGxOb3RKU0Z1bmN0aW9uOwogfQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGxpbmtGb3JHZW5lcmF0b3IoVk0qIHZtLCBGdW5jdGlvblB0ciBsYXp5TGluaywgRnVuY3Rpb25Q
dHIgbm90SlNGdW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSkKK3N0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgb2xkU3R5bGVMaW5rRm9yR2VuZXJhdG9yKFZNKiB2bSwgRnVuY3Rpb25QdHIgbGF6
eUxpbmssIEZ1bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAg
ICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKICAgICAKQEAgLTg4LDcgKzg5LDcgQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yR2VuZQogICAgIGppdC5qdW1wKEpTSW50ZXJm
YWNlSklUOjpyZWdUMCk7CiAgICAgCiAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKLSAgICBKU0lu
dGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IGdlbmVyYXRlU2xvd0Nhc2VGb3Io
dm0sIGppdCk7CisgICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBv
bGRTdHlsZUdlbmVyYXRlU2xvd0Nhc2VGb3Iodm0sIGppdCk7CiAgICAgCiAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZm
ZXIubGluayhjYWxsTGF6eUxpbmssIGxhenlMaW5rKTsKQEAgLTk3LDIyICs5OCwyMiBAQCBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JHZW5lCiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsICgibGluayAlcyB0cmFtcG9saW5lIiwgbmFtZSkpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIG9sZFN0eWxlTGlua0NhbGxHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJl
dHVybiBsaW5rRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDYWxs
KSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjYWxsIik7CisgICAg
cmV0dXJuIG9sZFN0eWxlTGlua0ZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xh
enlMaW5rQ2FsbCksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2Fs
bCIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdEdlbmVyYXRvcihW
TSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVMaW5rQ29uc3RydWN0R2VuZXJh
dG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlua0ZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25Q
dHIoY3RpX3ZtX2xhenlMaW5rQ29uc3RydWN0KSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVj
dF9Ob3RKU0NvbnN0cnVjdCksICJjb25zdHJ1Y3QiKTsKKyAgICByZXR1cm4gb2xkU3R5bGVMaW5r
Rm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDb25zdHJ1Y3QpLCBG
dW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KSwgImNvbnN0cnVjdCIp
OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKFZN
KiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZUxpbmtDbG9zdXJlQ2FsbEdlbmVy
YXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9u
UHRyKGN0aV92bV9sYXp5TGlua0Nsb3N1cmVDYWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxf
Tm90SlNGdW5jdGlvbiksICJjbG9zdXJlIGNhbGwiKTsKKyAgICByZXR1cm4gb2xkU3R5bGVMaW5r
Rm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDbG9zdXJlQ2FsbCks
IEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2xvc3VyZSBjYWxsIik7
CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvckdlbmVyYXRvcihW
TSogdm0sIEZ1bmN0aW9uUHRyIGNvbXBpbGUsIEZ1bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNv
bnN0IGNoYXIqIG5hbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3N0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVWaXJ0dWFsRm9yR2VuZXJhdG9yKFZNKiB2bSwgRnVu
Y3Rpb25QdHIgY29tcGlsZSwgRnVuY3Rpb25QdHIgbm90SlNGdW5jdGlvbiwgY29uc3QgY2hhciog
bmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIEpTSW50ZXJmYWNlSklU
IGppdCh2bSk7CiAgICAgCkBAIC0xNDgsNyArMTQ5LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiB2aXJ0dWFsRm9yRwogICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7
CiAgICAgCiAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKLSAgICBKU0ludGVyZmFjZUpJVDo6Q2Fs
bCBjYWxsTm90SlNGdW5jdGlvbiA9IGdlbmVyYXRlU2xvd0Nhc2VGb3Iodm0sIGppdCk7CisgICAg
SlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBvbGRTdHlsZUdlbmVyYXRl
U2xvd0Nhc2VGb3Iodm0sIGppdCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQ29t
cGlsZSwgY29tcGlsZSk7CkBAIC0xNTcsMTQgKzE1OCwyNDYgQEAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB2aXJ0dWFsRm9yRwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCAoInZpcnR1YWwgJXMgdHJhbXBvbGluZSIsIG5hbWUpKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHZpcnR1YWxDYWxsR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4g
dmlydHVhbEZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfaml0Q29tcGls
ZSksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2FsbCIsIENvZGVG
b3JDYWxsKTsKKyAgICByZXR1cm4gb2xkU3R5bGVWaXJ0dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5j
dGlvblB0cihjdGlfb3BfY2FsbF9qaXRDb21waWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxf
Tm90SlNGdW5jdGlvbiksICJjYWxsIiwgQ29kZUZvckNhbGwpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgb2xkU3R5bGVWaXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAg
ICByZXR1cm4gdmlydHVhbEZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0
cnVjdF9qaXRDb21waWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0
cnVjdCksICJjb25zdHJ1Y3QiLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1cm4gb2xkU3R5
bGVWaXJ0dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2pp
dENvbXBpbGUpLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KSwg
ImNvbnN0cnVjdCIsIENvZGVGb3JDb25zdHJ1Y3QpOworfQorCitpbmxpbmUgdm9pZCBlbWl0UG9p
bnRlclZhbGlkYXRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwb2ludGVyR1BSKQorewor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNOb25aZXJvID0g
aml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBwb2ludGVyR1BSKTsKKyAg
ICBqaXQuYnJlYWtwb2ludCgpOworICAgIGlzTm9uWmVyby5saW5rKCZqaXQpOworICAgIGppdC5w
dXNoKHBvaW50ZXJHUFIpOworICAgIGppdC5sb2FkOChwb2ludGVyR1BSLCBwb2ludGVyR1BSKTsK
KyAgICBqaXQucG9wKHBvaW50ZXJHUFIpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaml0KTsK
KyAgICBVTlVTRURfUEFSQU0ocG9pbnRlckdQUik7CisjZW5kaWYKK30KKworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0p
Cit7CisgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgCisgICAgLy8gV2Ugd2lsbCBqdW1w
IHRvIGhlcmUgaWYgdGhlIEpJVCBjb2RlIHRoaW5rcyBpdCdzIG1ha2luZyBhIGNhbGwsIGJ1dCB0
aGUKKyAgICAvLyBsaW5raW5nIGhlbHBlciAoQysrIGNvZGUpIGRlY2lkZWQgdG8gdGhyb3cgYW4g
ZXhjZXB0aW9uIGluc3RlYWQuIFdlIHdpbGwKKyAgICAvLyBoYXZlIHNhdmVkIHRoZSBjYWxsUmV0
dXJuSW5kZXggaW4gdGhlIGZpcnN0IGFyZ3VtZW50cyBvZiBKSVRTdGFja0ZyYW1lLgorICAgIC8v
IE5vdGUgdGhhdCB0aGUgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBvbiB0aGUgc3RhY2sgYXQgdGhp
cyBwb2ludCwgc28gd2UKKyAgICAvLyBuZWVkIHRvIHJlbW92ZSBpdCBhbmQgZHJvcCBpdCBvbiB0
aGUgZmxvb3IsIHNpbmNlIHdlIGRvbid0IGNhcmUgYWJvdXQgaXQuCisgICAgLy8gRmluYWxseSBu
b3RlIHRoYXQgdGhlIGNhbGwgZnJhbWUgcmVnaXN0ZXIgcG9pbnRzIGF0IHRoZSBjYWxsZWUgZnJh
bWUsIHNvCisgICAgLy8gd2UgbmVlZCB0byBwb3AgaXQuCisgICAgaml0LnByZXNlcnZlUmV0dXJu
QWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAg
IGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAg
ICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpDYWxsZXJGcmFtZSksCisgICAg
ICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IGppdC5wZWVrNjQoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZS
QU1FX0FSR1NfSU5ERVgpOworI2Vsc2UKKyAgICBqaXQucGVlayhHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZW5kaWYKKyAgICBq
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJl
dHVybkdQUik7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdp
c2VfY2FzdDx2b2lkKj4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIw
KTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZh
bGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAgIGppdC5qdW1wKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsICgiVGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsi
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAorICAgIENDYWxsSGVscGVycyYgaml0
LCBWTSogdm0sIFBfSklUT3BlcmF0aW9uX0Ugc2xvd1BhdGhGdW5jdGlvbikKK3sKKyAgICBqaXQu
cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAg
IGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIGpp
dC5zdG9yZVB0cigKKyAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMiwKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICog
SlNTdGFjazo6UmV0dXJuUEMpKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGpp
dC5wb2tlNjQoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1F
X0FSR1NfSU5ERVgpOworI2Vsc2UKKyAgICBqaXQucG9rZShHUFJJbmZvOjpub25QcmVzZXJ2ZWRO
b25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZW5kaWYKKyAgICBqaXQu
c2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86
Om5vbkFyZ0dQUjApOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIAor
ICAgIC8vIFRoaXMgc2xvdyBjYWxsIHdpbGwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIG9uZSBvZiB0
aGUgZm9sbG93aW5nOgorICAgIC8vIDEpIEV4Y2VwdGlvbiB0aHJvd2luZyB0aHVuay4KKyAgICAv
LyAyKSBIb3N0IGNhbGwgcmV0dXJuIHZhbHVlIHJldHVybmVyIHRoaW5neS4KKyAgICAvLyAzKSBU
aGUgZnVuY3Rpb24gdG8gY2FsbC4KKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNT
dGFjazo6UmV0dXJuUEMpLAorICAgICAgICBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5H
UFIpOworICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKDApLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQykpOworICAgIGVtaXRQb2lu
dGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Cisg
ICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86Om5vblByZXNl
cnZlZE5vblJldHVybkdQUik7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKK30KKworc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yVGh1bmtHZW5lcmF0
b3IoCisgICAgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgLy8g
VGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjayBvciBpbiB0aGUgbGluayByZWdpc3Rl
ci4gV2Ugd2lsbCBoZW5jZQorICAgIC8vIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZSBj
YWxsIGZyYW1lIHdoaWxlIHdlIG1ha2UgYSBDKysgZnVuY3Rpb24gY2FsbAorICAgIC8vIHRvIHBl
cmZvcm0gbGlua2luZyBhbmQgbGF6eSBjb21waWxhdGlvbiBpZiBuZWNlc3NhcnkuIFdlIGV4cGVj
dCB0aGUgY2FsbGVlCisgICAgLy8gdG8gYmUgaW4gbm9uQXJnR1BSMC9ub25BcmdHUFIxIChwYXls
b2FkL3RhZyksIHRoZSBjYWxsIGZyYW1lIHRvIGhhdmUgYWxyZWFkeQorICAgIC8vIGJlZW4gYWRq
dXN0ZWQsIG5vblByZXNlcnZlZE5vblJldHVybkdQUiBob2xkcyB0aGUgZXhjZXB0aW9uIGhhbmRs
ZXIgaW5kZXgsCisgICAgLy8gYW5kIGFsbCBvdGhlciByZWdpc3RlcnMgdG8gYmUgYXZhaWxhYmxl
IGZvciB1c2UuIFdlIHVzZSBKSVRTdGFja0ZyYW1lOjphcmdzCisgICAgLy8gdG8gc2F2ZSBpbXBv
cnRhbnQgaW5mb3JtYXRpb24gYWNyb3NzIGNhbGxzLgorICAgIAorICAgIENDYWxsSGVscGVycyBq
aXQodm0pOworICAgIAorICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNh
bGwgPyBvcGVyYXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOworICAgIAor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwor
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAg
KCJMaW5rICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIg
OiAiY29uc3RydWN0IikpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVu
a0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2
bSwgQ29kZUZvckNhbGwpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVj
dFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJh
dG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKK30KKworLy8gRm9yIGNsb3N1cmUgb3B0aW1pemF0
aW9ucywgd2Ugb25seSBpbmNsdWRlIGNhbGxzLCBzaW5jZSBpZiB5b3UncmUgdXNpbmcgY2xvc3Vy
ZXMgZm9yCisvLyBvYmplY3QgY29uc3RydWN0aW9uIHRoZW4geW91J3JlIGdvaW5nIHRvIGxvc2Ug
YmlnIHRpbWUgYW55d2F5LgorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRo
dW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICAK
KyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwpOworICAg
IAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQp
OworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgY2xvc3VyZSBj
YWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKK30KKworc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IoCisgICAgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCit7CisgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFj
aywgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKKyAgICAvLyBqdW1wIHRv
IHRoZSBjYWxsZWUsIG9yIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1l
IHdoaWxlIHdlCisgICAgLy8gbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsIHRvIHRoZSBhcHByb3By
aWF0ZSBKSVQgb3BlcmF0aW9uLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgCisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKKworICAgIC8vIEZJWE1FOiB3ZSBz
aG91bGQgaGF2ZSBhIHN0b3J5IGZvciBlbGltaW5hdGluZyB0aGVzZSBjaGVja3MuIEluIG1hbnkg
Y2FzZXMsCisgICAgLy8gdGhlIERGRyBrbm93cyB0aGF0IHRoZSB2YWx1ZSBpcyBkZWZpbml0ZWx5
IGEgY2VsbCwgb3IgZGVmaW5pdGVseSBhIGZ1bmN0aW9uLgorICAgIAorI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAgICBqaXQuYnJhbmNoVGVzdDY0KAorICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpub25BcmdHUFIwLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyNlbHNlCisgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAg
ICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBH
UFJJbmZvOjpub25BcmdHUFIxLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyNlbmRpZgorICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAg
ICBqaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIyLCBTdHJ1
Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihKU0Z1bmN0aW9uOjppbmZvKCkpKSk7CisgICAgCisgICAgLy8gTm93IHdlIGtu
b3cgd2UgaGF2ZSBhIEpTRnVuY3Rpb24uCisgICAgCisgICAgaml0LmxvYWRQdHIoCisgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpv
ZmZzZXRPZkV4ZWN1dGFibGUoKSksCisgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAg
IHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAgaml0LmJyYW5jaDMyKAorICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpMZXNzVGhhbiwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygK
KyAgICAgICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyLCBFeGVjdXRhYmxlQmFzZTo6b2Zm
c2V0T2ZOdW1QYXJhbWV0ZXJzRm9yKGtpbmQpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKDApKSk7CisgICAgCisgICAgLy8gTm93IHdlIGtub3cgdGhhdCB3ZSBoYXZl
IGEgQ29kZUJsb2NrLCBhbmQgd2UncmUgY29tbWl0dGVkIHRvIG1ha2luZyBhIGZhc3QKKyAgICAv
LyBjYWxsLgorICAgIAorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWlu
KCkpLAorICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIGppdC5zdG9yZTY0KAorICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIxLAorICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVy
KSkgKiBKU1N0YWNrOjpTY29wZUNoYWluKSk7CisjZWxzZQorICAgIGppdC5zdG9yZVB0cigKKyAg
ICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6U2NvcGVD
aGFpbiArCisgICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgaml0LnN0b3JlMzIoCisgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0
YWNrOjpTY29wZUNoYWluICsKKyAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworI2VuZGlmCisgICAgCisgICAgaml0LmxvYWRQ
dHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIyLCBF
eGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCkpLAor
ICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgLy8gTWFrZSBhIHRhaWwgY2FsbC4g
VGhpcyB3aWxsIHJldHVybiBiYWNrIHRvIEpJVCBjb2RlLgorICAgIGVtaXRQb2ludGVyVmFsaWRh
dGlvbihqaXQsIEdQUkluZm86OnJlZ1QwKTsKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMCk7
CisKKyAgICBzbG93Q2FzZS5saW5rKCZqaXQpOworICAgIAorICAgIC8vIEhlcmUgd2UgZG9uJ3Qg
a25vdyBhbnl0aGluZywgc28gcmV2ZXJ0IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KKyAgICAKKyAg
ICBzbG93UGF0aEZvcihqaXQsIHZtLCBraW5kID09IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uVmly
dHVhbENhbGwgOiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KTsKKyAgICAKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICByZXR1cm4g
RklOQUxJWkVfQ09ERSgKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiVmlydHVhbCAl
cyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0
cnVjdCIpKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5l
cmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0s
IENvZGVGb3JDYWxsKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dl
bmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBzdHJpbmdMZW5ndGhUcmFtcG9saW5lR2VuZXJhdG9yKFZNKiB2bSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMTU2NDc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsMTEgKzMxLDIyIEBACiAjaWYgRU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0Mg
ewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxHZW5lcmF0b3IoVk0qKTsKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgdmlydHVhbENhbGxHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB2aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
b2xkU3R5bGVMaW5rQ2FsbEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9s
ZFN0eWxlTGlua0NvbnN0cnVjdEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG9sZFN0eWxlTGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgb2xkU3R5bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG9sZFN0eWxlVmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcihWTSopOworCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZN
Kik7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKik7
CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihW
TSopOworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihW
TSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRv
cihWTSopOworCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBvbGluZUdl
bmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNhbGxHZW5lcmF0b3Io
Vk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IoVk0q
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212729</attachid>
            <date>2013-09-26 11:35:46 -0700</date>
            <delta_ts>2013-09-26 12:13:27 -0700</delta_ts>
            <desc>patch 7: one more after rollout of r156474 which broke the 32-bt build.</desc>
            <filename>bug-121749.patch</filename>
            <type>text/plain</type>
            <size>481877</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2NDgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxMy0wOS0yNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
TW92ZSBERkcgaW5saW5lIGNhY2hpbmcgbG9naWMgaW50byBqaXQvLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzQ5LgorCisgICAgICAgIFJldmll
d2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFJlbGFuZGluZyBodHRwOi8vdHJhYy53
ZWJraXQub3JnL2NoYW5nZXNldC8xNTYyMzUgYWZ0ZXIgcmViYXNpbmcgdG8gbGF0ZXN0CisgICAg
ICAgIHJldmlzaW9uIGFuZCBmaXhpbmcgYnVpbGQgYnJlYWthZ2VzIG9uIFdpbmRvd3MuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVzZXRTdHViSW50ZXJu
YWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICog
ZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Q2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxBcnJheUFsbG9j
YXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5oOgorICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRp
b25QdXRCeVZhbEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAg
ICAgICAoSlNDOjpERkc6Om9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUpOgor
ICAgICAgICAoSlNDOjpERkc6Om9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRG
b3JUeXBlKToKKyAgICAgICAgKiBkZmcvREZHUmVnaXN0ZXJTZXQuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1JlcGF0
Y2guaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhv
bGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1Bh
dGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
Q29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlND
OjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRC
b3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3Mu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuaDoKKyAgICAgICAgKiBmdGwvRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3Qp
OgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuaDoKKyAgICAgICAgKiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6d3JpdGVCYXJy
aWVyKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9y
KToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rU2xvd0NhbGwpOgorICAgICAgICAqIGppdC9KSVRD
YWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0
aW9uV3JhcHBlcnMuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25XcmFwcGVycy5oLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcC4KKyAg
ICAgICAgKEpTQzo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpOgorICAgICAg
ICAqIGppdC9KSVRPcGVyYXRpb25zLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oLgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmguCisgICAgICAg
ICogaml0L1JlcGF0Y2guY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwLgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAg
ICAgKiBqaXQvUmVwYXRjaC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guaC4KKyAgICAgICAgKiBqaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmguCisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6
Om9sZFN0eWxlR2VuZXJhdGVTbG93Q2FzZUZvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlTGlu
a0ZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlTGlua0NhbGxHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpvbGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpvbGRTdHlsZUxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
Om9sZFN0eWxlVmlydHVhbEZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlVmly
dHVhbENhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpvbGRTdHlsZVZpcnR1YWxDb25zdHJ1
Y3RHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjplbWl0UG9pbnRlclZhbGlkYXRpb24pOgorICAg
ICAgICAoSlNDOjp0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpzbG93UGF0aEZvcik6CisgICAgICAgIChKU0M6OmxpbmtGb3JUaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OmxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2xv
c3VyZUNhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxGb3JUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjp2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGpp
dC9UaHVua0dlbmVyYXRvcnMuaDoKKwogMjAxMy0wOS0yNiAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0
LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE1
NjQ3NC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1
NjQ4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTUwLDcgKzE1MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAg
ZGZnL0RGR1BsYW4uY3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAK
ICAgICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCi0gICAgZGZnL0RGR1Jl
cGF0Y2guY3BwCiAgICAgZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKICAgICBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBA
IC0yMjUsNiArMjI0LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBqaXQvSklU
RXhjZXB0aW9ucy5jcHAKICAgICBqaXQvSklUT3Bjb2Rlcy5jcHAKICAgICBqaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAorICAgIGppdC9KSVRPcGVyYXRpb25zLmNwcAogICAgIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAKICAgICBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKICAgICBqaXQv
SklUU3R1YlJvdXRpbmUuY3BwCkBAIC0yMzIsNiArMjMyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3Jl
X1NPVVJDRVMKICAgICBqaXQvSklUVGh1bmtzLmNwcAogICAgIGppdC9KSVRUb0RGR0RlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHAKICAgICBqaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5jcHAKKyAgICBqaXQvUmVwYXRjaC5jcHAKICAgICBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAog
CiAgICAgcGFyc2VyL0xleGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1NjQ4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zMzksMTMgKzMzOSw5IEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJCYW5rLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUmVnaXN0ZXJTZXQuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBh
dGNoLmNwcCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oIFwKLQlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIFwKQEAgLTYzMiw2
ICs2MjgsOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbldyYXBwZXJzLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgXAorCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHViQ2FsbC5oIFwKQEAgLTY1NCw2ICs2NTMsOSBAQCBqYXZhc2NyaXB0Y29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TbG93UGF0aENhbGwuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXpl
ZFRodW5rSklULmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Iu
aCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTU2NDgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw3
ICsxODMsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBkZmcvREZHUGxhbi5jcHAgXAogICAgIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgXAogICAgIGRmZy9ERkdQcmVkaWN0aW9u
SW5qZWN0aW9uUGhhc2UuY3BwIFwKLSAgICBkZmcvREZHUmVwYXRjaC5jcHAgXAogICAgIGRmZy9E
RkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwIFwKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
IFwKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgXApAQCAtMjIyLDYgKzIyMSw3
IEBAIFNPVVJDRVMgKz0gXAogICAgIGppdC9KSVRFeGNlcHRpb25zLmNwcCBcCiAgICAgaml0L0pJ
VE9wY29kZXMuY3BwIFwKICAgICBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBcCisgICAgaml0L0pJ
VE9wZXJhdGlvbnMuY3BwIFwKICAgICBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIFwKICAgICBq
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgXAogICAgIGppdC9KSVRTdHViUm91dGluZS5j
cHAgXApAQCAtMjI5LDYgKzIyOSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGppdC9KSVRUaHVua3Mu
Y3BwIFwKICAgICBqaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIFwK
ICAgICBqaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgXAorICAgIGppdC9SZXBhdGNo
LmNwcCBcCiAgICAgaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgXAogICAgIGxsaW50L0xMSW50Q0xv
b3AuY3BwIFwKICAgICBsbGludC9MTEludERhdGEuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTU2NDgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzc4LDYgKzM3OCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcSklURXhjZXB0aW9ucy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caml0XEpJVE9wY29kZXMuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxKSVRPcGNvZGVzMzJfNjQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxKSVRPcGVyYXRpb25zLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRc
SklUUHJvcGVydHlBY2Nlc3MuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcSklUU3R1YlJvdXRpbmUuY3BwIiAvPg0KQEAgLTM4NSw2ICszODYsNyBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFRodW5rcy5jcHAiIC8+DQogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSnVtcFJlcGxhY2VtZW50
V2F0Y2hwb2ludC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFJlcGF0
Y2guY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRv
cnMuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsaW50XExMSW50Q0xvb3Au
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsaW50XExMSW50RGF0YS5jcHAi
IC8+DQpAQCAtNzY5LDYgKzc3MSw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRc
SklURGlzYXNzZW1ibGVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJ
VEV4Y2VwdGlvbnMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUSW5s
aW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRpb25X
cmFwcGVycy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRp
b25zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJDYWxsLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJSb3V0aW5lLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJzLmgiIC8+DQpAQCAtNzgw
LDYgKzc4NCw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUV3JpdGVCYXJy
aWVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpTSW50ZXJmYWNlSklU
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEp1bXBSZXBsYWNlbWVudFdh
dGNocG9pbnQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVnaXN0ZXJT
ZXQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVwYXRjaC5oIiAvPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Iu
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcU3BlY2lhbGl6ZWRUaHVua0pJ
VC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRvci5o
IiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRvcnMuaCIg
Lz4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU2NDgyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsMTMgQEAKIAkJMEYyNEU1NDQx
N0VBOUY1OTAwQUJCMjE3IC8qIEdQUkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTNGMTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1
NTUxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU1MzE3RjBCNzFDMDBBQkIy
MTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmNwcCAqLzsgfTsKIAkJMEYyNEU1NTYxN0YwQjcxQzAw
QUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNh
bGxGcmFtZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGMjRFNTRDMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ1MTdFRTI3
NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCAqLzsgfTsKKwkJMEYyNEU1NEQxN0VFMjc0
OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ2MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRp
b25zLmggKi87IH07CisJCTBGMjRFNTRFMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25X
cmFwcGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyNEU1NDcxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbldyYXBwZXJzLmggKi87IH07
CisJCTBGMjRFNTRGMTdFRTI3NDkwMEFCQjIxNyAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NDgxN0VFMjc0OTAwQUJC
MjE3IC8qIFJlZ2lzdGVyU2V0LmggKi87IH07CisJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAv
KiBSZXBhdGNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLzsgfTsKKwkJMEYy
NEU1NTExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBh
dGNoLmggKi87IH07CisJCTBGMjRFNTUyMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Iu
aCAqLzsgfTsKIAkJMEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9j
YXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxs
b2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2NkFE
MTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0Qw
MEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjY2LDggKzI3Myw2IEBACiAJCTBG
NzY2RDM1MTVBRTI1M0IwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQzMzE1QUUy
NTM1MDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDM4MTVBRTRBMUMwMDhG
MzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDM2MTVBRTRBMUEwMDhGMzYz
RSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEY3NjZE
MzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDM3MTVB
RTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY3NjZENDQxNUIy
QTNDMDAwOEYzNjNFIC8qIERGR1JlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQ0MjE1QjJBM0JEMDA4RjM2M0UgLyogREZHUmVn
aXN0ZXJTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkwRjc2NkQ0NjE1QjM3MDFGMDA4RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2
NkQ0NTE1QjM3MDFEMDA4RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAwOTIx
NDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyog
U2FtcGxpbmdDb3VudGVyLmNwcCAqLzsgfTsKIAkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8q
IERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0IyOTRE
MTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21t
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
NzMxLDggKzczNiw2IEBACiAJCTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QUU2
NEE3MTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYg
LyogQ29kZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLzsg
fTsKIAkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYwM0NFRjIxNEM3NTQ2
NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovOyB9OwotCQk4NkJCMDlDMDEzOEUzODFC
MDA1NjcwMkYgLyogREZHUmVwYXRjaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NkJCMDlCRTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5j
cHAgKi87IH07Ci0JCTg2QkIwOUMxMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkJCMDlCRjEzOEUz
ODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTg2QzM2RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZDNTY4RTAxMUEyMTNFRTAw
MDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QzU2OEREMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fz
c2VtYmxlckFSTS5jcHAgKi87IH07CiAJCTg2QzU2OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNy
b0Fzc2VtYmxlck1JUFMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTMyMiw2
ICsxMzI1LDEzIEBACiAJCTBGMjRFNTNGMTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdQUkluZm8uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTMxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFt
ZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVDYWxs
RnJhbWVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU1NDE3RjBC
NzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElubGluZUNhbGxGcmFtZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjI0RTU0NTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRPcGVyYXRpb25zLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNEU1NDYxN0VFMjc0OTAwQUJCMjE3IC8qIEpJ
VE9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUT3BlcmF0
aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI0RTU0NzE3RUUyNzQ5MDBB
QkIyMTcgLyogSklUT3BlcmF0aW9uV3JhcHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUT3BlcmF0aW9uV3JhcHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyNEU1NDgxN0VFMjc0OTAwQUJCMjE3IC8qIFJlZ2lzdGVyU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjU2
QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVy
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYWxsQXJyYXlBbGxv
Y2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRv
clNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2
NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHQ0luY29taW5nUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ2Nyw4ICsxNDc3LDYgQEAKIAkJMEY3NjZEMzMxNUFF
MjUzNTAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQzNjE1QUU0QTFBMDA4RjM2M0UgLyogU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMzcxNUFFNEExQTAwOEYzNjNFIC8qIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRjc2NkQ0MjE1QjJBM0JEMDA4RjM2M0UgLyogREZHUmVnaXN0ZXJTZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUmVnaXN0ZXJTZXQuaDsgcGF0aCA9
IGRmZy9ERkdSZWdpc3RlclNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjc2
NkQ0NTE1QjM3MDFEMDA4RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oOyBwYXRoID0gZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdD
b3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVC
MzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xOTI3LDggKzE5MzUsNiBAQAogCQk4NkI1ODIyRTE0RDIzNzNCMDBBOUMzMDYgLyogQ29k
ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZVBy
b2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI1ODIyRjE0RDIzNzNC
MDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29kZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCNTgyNkEx
NEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJlZE1NYXBBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUaWVyZWRNTWFwQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJODZCQjA5QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUmVwYXRjaC5jcHA7IHBhdGggPSBkZmcv
REZHUmVwYXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2QkIwOUJGMTM4
RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1JlcGF0Y2guaDsgcGF0aCA9IGRmZy9ERkdSZXBhdGNoLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg2QkY2NDJBMTQ4REIyQjUwMDRERTM2QSAvKiBJbnRyaW5zaWMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50cmluc2ljLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QzM2RUU5MEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkM1NjhERDExQTIxM0VFMDAwN0Y3
RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjcxMSwxNiArMjcxNywxNiBAQAogCQkJCTBGMjRFNTNCMTdFQTlGNTkwMEFCQjIxNyAv
KiBBc3NlbWJseUhlbHBlcnMuY3BwICovLAogCQkJCTBGMjRFNTNDMTdFQTlGNTkwMEFCQjIxNyAv
KiBBc3NlbWJseUhlbHBlcnMuaCAqLywKIAkJCQkwRjI0RTUzRDE3RUE5RjU5MDBBQkIyMTcgLyog
Q0NhbGxIZWxwZXJzLmggKi8sCi0JCQkJMEYyNEU1M0UxN0VBOUY1OTAwQUJCMjE3IC8qIEZQUklu
Zm8uaCAqLywKLQkJCQkwRjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oICovLAog
CQkJCTBGNzNEN0FCMTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNw
cCAqLywKIAkJCQkwRjczRDdBQzE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91
dGluZS5oICovLAogCQkJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29k
ZU1hcC5oICovLAogCQkJCUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcCAqLywKIAkJCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvci5oICovLAogCQkJCTg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRh
YmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwICovLAorCQkJCTBGMjRFNTNFMTdFQTlGNTkwMEFC
QjIxNyAvKiBGUFJJbmZvLmggKi8sCiAJCQkJMEY3NjZEMkQxNUE4RENERDAwOEYzNjNFIC8qIEdD
QXdhcmVKSVRTdHViUm91dGluZS5jcHAgKi8sCiAJCQkJMEY3NjZEMkUxNUE4RENERDAwOEYzNjNF
IC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oICovLAorCQkJCTBGMjRFNTNGMTdFQTlGNTkwMEFC
QjIxNyAvKiBHUFJJbmZvLmggKi8sCiAJCQkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhv
c3RDYWxsUmV0dXJuVmFsdWUuY3BwICovLAogCQkJCTBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAv
KiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi8sCiAJCQkJMTQyOUQ5MkQwRUQyMkQ3MDAwQjg5NjE5
IC8qIEpJVC5jcHAgKi8sCkBAIC0yNzM5LDYgKzI3NDUsOSBAQAogCQkJCTg2Q0M4NUEwMEVFNzlB
NDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVzLmggKi8sCiAJCQkJQkNERDUxRTkwRkI4REY3NDAwNEE4
QkRDIC8qIEpJVE9wY29kZXMuY3BwICovLAogCQkJCUE3MTIzNkU0MTE5NUYzM0MwMEJEMjE3NCAv
KiBKSVRPcGNvZGVzMzJfNjQuY3BwICovLAorCQkJCTBGMjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAv
KiBKSVRPcGVyYXRpb25zLmNwcCAqLywKKwkJCQkwRjI0RTU0NjE3RUUyNzQ5MDBBQkIyMTcgLyog
SklUT3BlcmF0aW9ucy5oICovLAorCQkJCTBGMjRFNTQ3MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRP
cGVyYXRpb25XcmFwcGVycy5oICovLAogCQkJCTg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBK
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8sCiAJCQkJQTdDMUU4QzgxMTJFNzAxQzAwQTM3Rjk4IC8q
IEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovLAogCQkJCTk2MDYyNjk1MEZCOEVDMDIwMDk3
OThBQiAvKiBKSVRTdHViQ2FsbC5oICovLApAQCAtMjc2MSw2ICsyNzcwLDEwIEBACiAJCQkJQTc2
QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8sCiAJCQkJMEY3NjZE
MzIxNUFFMjUzNTAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwICovLAog
CQkJCTBGNzY2RDMzMTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50
LmggKi8sCisJCQkJMEYyNEU1NDgxN0VFMjc0OTAwQUJCMjE3IC8qIFJlZ2lzdGVyU2V0LmggKi8s
CisJCQkJMEYyNEU1NDkxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwICovLAorCQkJCTBG
MjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi8sCisJCQkJMEYyNEU1NEIxN0VF
Mjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oICovLAogCQkJCUE3MDlG
MkVGMTdBMEFDMDQwMDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCAqLywKIAkJCQlBNzM4NjU1MTEx
ODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oICovLAogCQkJCTBGNTcyRDRE
MTY4NzlGREIwMEU1N0ZCRCAvKiBUaHVua0dlbmVyYXRvci5oICovLApAQCAtMzYxOCwxMyArMzYz
MSw5IEBACiAJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhERjgyMDAy
QjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8sCi0JCQkJMEY3NjZENDIxNUIyQTNCRDAwOEYz
NjNFIC8qIERGR1JlZ2lzdGVyU2V0LmggKi8sCi0JCQkJODZCQjA5QkUxMzhFMzgxQjAwNTY3MDJG
IC8qIERGR1JlcGF0Y2guY3BwICovLAotCQkJCTg2QkIwOUJGMTM4RTM4MUIwMDU2NzAyRiAvKiBE
RkdSZXBhdGNoLmggKi8sCiAJCQkJQTc3QTQyM0MxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVU
b0V4ZWN1dGUuaCAqLywKIAkJCQlBNzQxMDE3RTE3OURBRjgwMDAyRUI4QkEgLyogREZHU2FuZVN0
cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCAqLywKIAkJCQk4NkVDQTNGOTEzMkRGMjVB
MDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oICovLAotCQkJCTBGNzY2RDQ1MTVCMzcwMUQwMDhG
MzYzRSAvKiBERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQkwRjFFM0E2NTE1
M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovLAogCQkJCTBG
MUUzQTUwMTUzN0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovLAogCQkJ
CTg2RUM5REMyMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAgKi8sCkBA
IC0zOTUyLDYgKzM5NjEsNyBAQAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdB
ZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1NUE1
REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM3ODEwQzE3OTlFQTJF
MDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjRFNTRFMTdF
RTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25XcmFwcGVycy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMTYwMTVFMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA1QzNCNDE2ODNDRjky
MDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zOTYyLDYgKzM5NzIsNyBAQAogCQkJCTBGRkI5MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBE
RkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwQjA4MzMxN0EwQjc5
QjAwREFGMTRCIC8qIERGR0JpbmFyeVN3aXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlD
RjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjI0RTU1MjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZH
QnJhbmNoRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAy
QjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjU2QzM2
MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDM2LDE0ICs0MDQ3LDExIEBACiAJCQkJMEZCRTBGNzUx
NkMxREIwQjAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJB
RDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjc2NkQ0NDE1QjJB
M0MwMDA4RjM2M0UgLyogREZHUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2QkIw
OUMxMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggaW4gSGVhZGVycyAqLywKIAkJCQky
QUQ4OTMyQjE3RTM4NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzdBNDI0MzE3QTBCQkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVT
dHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVD
QTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEOEEzMTQxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8q
IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFE
MTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZFQzlERDMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggaW4g
SGVhZGVycyAqLywKQEAgLTQxNzgsNiArNDE4Niw3IEBACiAJCQkJQTdBNEFFMTAxNzk3M0I0RDAw
NTYxMkIxIC8qIEpJVFN0dWJzWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkx
RjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3
MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRP
cGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0Ug
LyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDA0ODAxMzEw
MjFBMUQ5MDA4RTdGMDEgLyogSlNBUElWYWx1ZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
NDQ3Myw2ICs0NDgyLDggQEAKIAkJCQkwRkY0Mjc0MjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2
X2V4dGVybi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDQxNThFQkU5MTAwNENCOUZGIC8q
IHVkaXM4Nl9pbnB1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDgxNThFQkU5MTAwNENC
OUZGIC8qIHVkaXM4Nl9zeW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjRFNTUxMTdFRTI3NDkw
MEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI0RTU0RjE3RUUyNzQ5
MDBBQkIyMTcgLyogUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ5MTU4
RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVB
QjM5MTc5OUU0QjIwMEQyODMzRCAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3QThBRjQxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGluIEhlYWRl
cnMgKi8sCkBAIC00OTQyLDYgKzQ5NTMsNyBAQAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkx
MCAvKiBERkdGaXh1cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0Y3MTdBMEI4
Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4
OUNGOTE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEYyNEU1NEMxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJh
dGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8q
IERGR0dyYXBoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDREOTA1MTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVB
MEEzMzE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTQ5NzIsNyArNDk4NCw2IEBACiAJCQkJQTc4QTk3N0ExNzk3MzhCODAwOURGNzQ0IC8qIERGR1Bs
YW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzQxNkMxREIwOTAwODJDNUU4IC8qIERG
R1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1
RDE0RUY5MEIzMDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJODZCQjA5QzAxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2gu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlERDIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1Nw
ZWN1bGF0aXZlSklULmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIw
OEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2
ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNTIzOCw2ICs1MjQ5LDcgQEAKIAkJCQk5MzM1RjI0RDEyRTY3NjVCMDAyQjU1
NTMgLyogU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0RF
M0I0MzBFNkM4MzJEMDAxNDUzQTcgLyogU3RydWN0dXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdFNEVFNzBGMEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjI0RTU1MDE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDMkYwRjJEMTE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNFIC8qIFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkND
RjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAJKHJldmlzaW9uIDE1NjQ4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAg
dm9pZCBDYWxsTGlua0luZm86OnVubGluayhWTSYgdm0sIFJlcGF0YwogICAgIHJlcGF0Y2hCdWZm
ZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goUmVwYXRjaEJ1ZmZl
cjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoaG90UGF0aEJlZ2luKSwgc3Rh
dGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KGNhbGxlZUdQUiksIDApOwogICAg
IGlmIChpc0RGRykgewogI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5n
ZXRDVElTdHViKERGRzo6bGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKSA6IHZtLmdldENUSVN0
dWIoREZHOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpKTsKKyAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCAoY2FsbFR5cGUgPT0gQ29uc3RydWN0
ID8gdm0uZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpIDogdm0uZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpKTsKICNlbHNlCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKICAgICB9IGVsc2UKLSAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCBjYWxsVHlwZSA9PSBDb25z
dHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IHZt
LmdldENUSVN0dWIobGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8g
dm0uZ2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IHZt
LmdldENUSVN0dWIob2xkU3R5bGVMaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICBoYXNT
ZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNlOwogICAgIGNhbGxlZS5jbGVhcigpOwogICAgIHN0dWIu
Y2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAxNTY0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR05v
ZGUuaCIKLSNpbmNsdWRlICJERkdSZXBhdGNoLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIK
ICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC01MCw2
ICs0OSw3IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGlj
UHV0QnlJZExpc3QuaCIKICNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCisjaW5jbHVkZSAi
UmVwYXRjaC5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTbG90Vmlz
aXRvcklubGluZXMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMjM4NiwxMiArMjM4NiwxMiBA
QCB2b2lkIENvZGVCbG9jazo6cmVzZXRTdHViSW50ZXJuYWwoUmVwYXRjCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgogICAgICAgICBpZiAoaXNHZXRCeUlkQWNjZXNz
KGFjY2Vzc1R5cGUpKQotICAgICAgICAgICAgREZHOjpyZXNldEdldEJ5SUQocmVwYXRjaEJ1ZmZl
ciwgc3R1YkluZm8pOworICAgICAgICAgICAgcmVzZXRHZXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0
dWJJbmZvKTsKICAgICAgICAgZWxzZSBpZiAoaXNQdXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKQot
ICAgICAgICAgICAgREZHOjpyZXNldFB1dEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOwor
ICAgICAgICAgICAgcmVzZXRQdXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0luQWNjZXNzKGFjY2Vzc1R5
cGUpKTsKLSAgICAgICAgICAgIERGRzo6cmVzZXRJbihyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7
CisgICAgICAgICAgICByZXNldEluKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAgICAgICAg
fQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE1NjQ4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTIgQEAKICNpZiBFTkFCTEUoSklUKQogCiAj
aW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1ZGUgIkRGR1JlZ2lzdGVyU2V0LmgiCiAjaW5j
bHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgogI2luY2x1
ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtMjMxLDcgKzIzMSw3IEBA
IHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgICAgICBpbnQ4X3QgdmFsdWVUYWdH
UFI7CiAjZW5kaWYKICAgICAgICAgICAgIGludDhfdCB2YWx1ZUdQUjsKLSAgICAgICAgICAgIERG
Rzo6UmVnaXN0ZXJTZXRQT0QgdXNlZFJlZ2lzdGVyczsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0
UE9EIHVzZWRSZWdpc3RlcnM7CiAgICAgICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvRG9uZTsK
ICAgICAgICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9TdG9yYWdlTG9hZDsKICAgICAgICAgICAg
IGludDMyX3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNs
b3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE1NjQ4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiBjbGFzcyBDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1w
aW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0PiB7CiBwdWJsaWM6
CiAgICAgQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBQX0RGR09wZXJh
dGlvbl9FU3RaIGZ1bmN0aW9uLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZnJv
bSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgUF9KSVRPcGVyYXRpb25fRVN0WiBmdW5jdGlvbiwKICAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHN0b3JhZ2VHUFIsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBzaXplX3Qgc2l6ZSkKICAgICAgICAgOiBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Pihmcm9tLCBqaXQpCiAgICAgICAgICwgbV9mdW5jdGlv
bihmdW5jdGlvbikKQEAgLTY4LDcgKzY4LDcgQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICAKIHBy
aXZhdGU6Ci0gICAgUF9ERkdPcGVyYXRpb25fRVN0WiBtX2Z1bmN0aW9uOworICAgIFBfSklUT3Bl
cmF0aW9uX0VTdFogbV9mdW5jdGlvbjsKICAgICBHUFJSZWcgbV9yZXN1bHRHUFI7CiAgICAgR1BS
UmVnIG1fc3RvcmFnZUdQUjsKICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOwpAQCAtNzksNyAr
NzksNyBAQCBwcml2YXRlOgogY2xhc3MgQ2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6
ZVNsb3dQYXRoR2VuZXJhdG9yIDogcHVibGljIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Q+IHsKIHB1YmxpYzoKICAgICBDYWxsQXJyYXlBbGxvY2F0b3JX
aXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBQX0RGR09wZXJhdGlvbl9FU3Ra
IGZ1bmN0aW9uLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZnJvbSwgU3BlY3Vs
YXRpdmVKSVQqIGppdCwgUF9KSVRPcGVyYXRpb25fRVN0WiBmdW5jdGlvbiwKICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlKiBjb250aWd1b3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUq
IGFycmF5U3RvcmFnZVN0cnVjdHVyZSwgR1BSUmVnIHNpemVHUFIpCiAgICAgICAgIDogSnVtcGlu
Z1Nsb3dQYXRoR2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdD4oZnJvbSwgaml0KQog
ICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCkBAIC0xMTIsNyArMTEyLDcgQEAgcHJvdGVj
dGVkOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgUF9ERkdPcGVyYXRpb25fRVN0WiBtX2Z1
bmN0aW9uOworICAgIFBfSklUT3BlcmF0aW9uX0VTdFogbV9mdW5jdGlvbjsKICAgICBHUFJSZWcg
bV9yZXN1bHRHUFI7CiAgICAgU3RydWN0dXJlKiBtX2NvbnRpZ3VvdXNTdHJ1Y3R1cmU7CiAgICAg
U3RydWN0dXJlKiBtX2FycmF5U3RvcmFnZVN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE1NjQ4MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsMTIgKzM2LDEyIEBACiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09T
UkV4aXRDb21waWxhdGlvbkluZm8uaCIKICNpbmNsdWRlICJERkdSZWdpc3RlckJhbmsuaCIKLSNp
bmNsdWRlICJERkdSZWdpc3RlclNldC5oIgogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRl
ICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0Lmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJKHJldmlzaW9uIDE1NjQ4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDcgKzc2LDcgQEAgcHJpdmF0ZToKIH07CiAKIGV4dGVybiAiQyIgewotdm9pZCBERkdfT1BFUkFU
SU9OIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09Q
RVJBVElPTiBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU2NDgyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NiBAQAogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RyaXZl
ci5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKLSNpbmNsdWRlICJERkdSZXBhdGNoLmgiCiAj
aW5jbHVkZSAiREZHVGh1bmtzLmgiCiAjaW5jbHVkZSAiREZHVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCIKICNpbmNsdWRlICJERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmgiCkBAIC00NSwyOTUgKzQ0LDIxIEBACiAjaW5jbHVkZSAiSW50ZXJw
cmV0ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCisj
aW5jbHVkZSAiSklUT3BlcmF0aW9uV3JhcHBlcnMuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24u
aCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCiAjaW5jbHVkZSAi
TmFtZUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUmVwYXRjaC5oIgogI2luY2x1ZGUgIlN0cmluZ0Nv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRlIDx3
dGYvSW5saW5lQVNNLmg+CiAKICNpZiBFTkFCTEUoSklUKQotCi0jaWYgQ1BVKE1JUFMpCi0jaWYg
V1RGX01JUFNfUElDCi0jZGVmaW5lIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24pIFwKLSAg
ICAgICAgIi5zZXQgbm9yZW9yZGVyIiAiXG4iIFwKLSAgICAgICAgIi5jcGxvYWQgJDI1IiAiXG4i
IFwKLSAgICAgICAgIi5zZXQgcmVvcmRlciIgIlxuIiBcCi0gICAgICAgICJsYSAkdDksICIgTE9D
QUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiXG4iCi0jZWxzZQotI2RlZmluZSBMT0FEX0ZVTkNUSU9O
X1RPX1Q5KGZ1bmN0aW9uKSAiIiAiXG4iCi0jZW5kaWYKLSNlbmRpZgotCiAjaWYgRU5BQkxFKERG
R19KSVQpCiAKLSNpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODZfNjQpCi0KLSNkZWZpbmUgRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByZWdpc3RlcikgXAot
ICAgIGFzbSggXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwK
LSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5j
dGlvbikgIjoiICJcbiIgXAotICAgICAgICAibW92ICglcnNwKSwgJSIgU1RSSU5HSVpFKHJlZ2lz
dGVyKSAiXG4iIFwKLSAgICAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbiMjV2l0
aFJldHVybkFkZHJlc3MpICJcbiIgXAotICAgICk7Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJzaSkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByY3gpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1MoZnVuY3Rpb24sIHI4KQotCi0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShY
ODYpCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0
aW9uLCBvZmZzZXQpIFwKLSAgICBhc20oIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAg
ICAgICAibW92ICglZXNwKSwgJWVheFxuIiBcCi0gICAgICAgICJtb3YgJWVheCwgIiBTVFJJTkdJ
WkUob2Zmc2V0KSAiKCVlc3ApXG4iIFwKLSAgICAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShm
dW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpICJcbiIgXAotICAgICk7Ci0jZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDgpCi0jZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDE2KQotI2RlZmluZSBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAyMCkKLSNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMjQpCi0KLSNlbGlmIENPTVBJTEVSKEdDQykg
JiYgQ1BVKEFSTV9USFVNQjIpCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKLSAgICBhc20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwK
LSAgICAiLmFsaWduIDIiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0
aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgIi50aHVt
YiIgIlxuIiBcCi0gICAgIi50aHVtYl9mdW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikg
IlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAi
bW92IGEyLCBsciIgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9u
KSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwK
LSAgICAiLnRleHQiICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAi
IFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9u
KSAiXG4iIFwKLSAgICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9G
VU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
OiIgIlxuIiBcCi0gICAgICAgICJtb3YgYTQsIGxyIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NB
TF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsK
LQotLy8gRW5jb2RlZEpTVmFsdWUgaW4gSlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGludGVnZXIu
IFdoZW4gYmVpbmcgY29tcGlsZWQgaW4gQVJNIEVBQkksIGl0IG11c3QgYmUgYWxpZ25lZCBldmVu
LW51bWJlcmVkIHJlZ2lzdGVyIChyMCwgcjIgb3IgW3NwXSkuCi0vLyBBcyBhIHJlc3VsdCwgcmV0
dXJuIGFkZHJlc3Mgd2lsbCBiZSBhdCBhIDQtYnl0ZSBmdXJ0aGVyIGxvY2F0aW9uIGluIHRoZSBm
b2xsb3dpbmcgY2FzZXMuCi0jaWYgQ09NUElMRVJfU1VQUE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkK
LSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtz
cCwgIzRdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJz
dHIgbHIsIFtzcCwgIzhdIgotI2Vsc2UKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJO
X0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzBdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9S
RV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzRdIgotI2VuZGlmCi0KLSNkZWZp
bmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAot
ICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBcCi0g
ICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lN
Qk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1iX2Z1
bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5H
KGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9B
RERSRVNTX0VKSSAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24p
ICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwK
LSAgICAiLnRleHQiICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAi
IFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9u
KSAiXG4iIFwKLSAgICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9G
VU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
OiIgIlxuIiBcCi0gICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kg
IlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVy
bkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFS
TV9UUkFESVRJT05BTCkKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAg
ICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJP
TChmdW5jdGlvbikgIlxuIiBcCi0gICAgSU5MSU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAot
ICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgIm1vdiBhMiwg
bHIiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhS
ZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLSAgICBhc20gKCBcCi0gICAgIi50
ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBc
Ci0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIElOTElORV9BUk1fRlVOQ1RJ
T04oZnVuY3Rpb24pIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0g
ICAgICAgICJtb3YgYTQsIGxyIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0Uo
ZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotLy8gRW5jb2Rl
ZEpTVmFsdWUgaW4gSlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGludGVnZXIuIFdoZW4gYmVpbmcg
Y29tcGlsZWQgaW4gQVJNIEVBQkksIGl0IG11c3QgYmUgYWxpZ25lZCBldmVuLW51bWJlcmVkIHJl
Z2lzdGVyIChyMCwgcjIgb3IgW3NwXSkuCi0vLyBBcyBhIHJlc3VsdCwgcmV0dXJuIGFkZHJlc3Mg
d2lsbCBiZSBhdCBhIDQtYnl0ZSBmdXJ0aGVyIGxvY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgY2Fz
ZXMuCi0jaWYgQ09NUElMRVJfU1VQUE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkKLSNkZWZpbmUgSU5T
VFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzRdIgotI2Rl
ZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwg
IzhdIgotI2Vsc2UKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJ
ICJzdHIgbHIsIFtzcCwgIzBdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQURE
UkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzRdIgotI2VuZGlmCi0KLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwK
LSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9u
KSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgSU5MSU5FX0FS
TV9GVU5DVElPTihmdW5jdGlvbikgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAi
XG4iIFwKLSAgICAgICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJcbiIg
XAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRy
ZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtICggXAotICAgICIudGV4dCIgIlxu
IiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJ
REVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBJTkxJTkVfQVJNX0ZVTkNUSU9OKGZ1bmN0
aW9uKSBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICBJ
TlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJcbiIgXAotICAgICAgICAiYiAi
IExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAg
ICApOwotCi0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShNSVBTKQotCi0jZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBc
Ci0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0
aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAotICAgICAgICAibW92ZSAkYTEsICRyYSIgIlxuIiBc
Ci0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJl
c3MiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSggXAotICAgICIudGV4dCIgIlxuIiBc
Ci0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVf
U1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIg
IlxuIiBcCi0gICAgTE9BRF9GVU5DVElPTl9UT19UOShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJl
c3MpIFwKLSAgICAgICAgIm1vdmUgJGEzLCAkcmEiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FM
X1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwot
Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rp
b24pIFwKLSAgICBhc20oIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxu
IiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgIExPQURfRlVO
Q1RJT05fVE9fVDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSBcCi0gICAgICAgICJzdyAk
cmEsIDIwKCRzcCkiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlv
bikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBc
Ci0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0
aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAotICAgICAgICAic3cgJHJhLCAyNCgkc3ApIiAiXG4i
IFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRk
cmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoU0g0KQot
Ci0jZGVmaW5lIFNINF9TQ1JBVENIX1JFR0lTVEVSICJyMTEiCi0KLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKLSAgICBhc20oIFwKLSAg
ICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
XG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklO
RyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAic3RzIHByLCByNSIgIlxuIiBcCi0gICAg
ICAgICJicmEgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIg
IlxuIiBcCi0gICAgICAgICJub3AiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSggXAot
ICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24p
ICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RS
SU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgICJzdHMgcHIsIHI3IiAiXG4iIFwKLSAg
ICAgICAgIm1vdi5sIDJmLCAiIFNINF9TQ1JBVENIX1JFR0lTVEVSICJcbiIgXAotICAgICAgICAi
YnJhZiAiIFNINF9TQ1JBVENIX1JFR0lTVEVSICJcbiIgXAotICAgICAgICAibm9wIiAiXG4iIFwK
LSAgICAgICAgIjE6IC5iYWxpZ24gNCIgIlxuIiBcCi0gICAgICAgICIyOiAubG9uZyAiIExPQ0FM
X1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzLTFiIiAiXG4iIFwKLSAgICAp
OwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlv
biwgb2Zmc2V0LCBzY3JhdGNoKSBcCi0gICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAg
ICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1C
T0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4i
IFwKLSAgICAgICAgInN0cyBwciwgIiBzY3JhdGNoICJcbiIgXAotICAgICAgICAibW92LmwgIiBz
Y3JhdGNoICIsIEAoIiBTVFJJTkdJWkUob2Zmc2V0KSAiLCByMTUpIiAiXG4iIFwKLSAgICAgICAg
Im1vdi5sIDJmLCAiIHNjcmF0Y2ggIlxuIiBcCi0gICAgICAgICJicmFmICIgc2NyYXRjaCAiXG4i
IFwKLSAgICAgICAgIm5vcCIgIlxuIiBcCi0gICAgICAgICIxOiAuYmFsaWduIDQiICJcbiIgXAot
ICAgICAgICAiMjogLmxvbmcgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJu
QWRkcmVzcy0xYiIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAwLCBTSDRfU0NSQVRDSF9SRUdJU1RFUikKLSNkZWZpbmUg
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgNCwgU0g0X1NDUkFUQ0hf
UkVHSVNURVIpCi0KLSNlbmRpZgotCi0jZGVmaW5lIFBfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKLXZvaWQqIERGR19PUEVSQVRJT04gZnVuY3Rpb24j
I1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5D
RURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRShmdW5jdGlvbikKLQotI2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmlu
Z0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5B
TDsgXAotRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikK
LQotI2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVu
Y3Rpb24pIFwKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1
cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKiwgUmV0dXJu
QWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pCi0KLSNkZWZpbmUgVl9G
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotdm9p
ZCBERkdfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJF
RkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikKLQogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KQEAgLTM1Nyw3ICs4Miw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBwdXRCeVZhbChFeGVjU3RhdGUqIGUKIH0KIAogdGVtcGxhdGU8Ym9vbCBz
dHJpY3Q+Ci1BTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK0FMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNDY2LDcgKzE5MSw3IEBAIGNoYXIqIG5l
d1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQoCiAKIGV4dGVybiAiQyIgewogCi1FbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVG9UaGlzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwpAQCAtNDc0LDcgKzE5OSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uVG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3ApLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Ub1RoaXNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3ApCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC00ODIsNyArMjA3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25UbwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUp
KTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGludDMyX3QgaW5saW5lQ2FwYWNpdHkp
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgaW50MzJfdCBpbmxpbmVDYXBhY2l0eSkKIHsKICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKQEAgLTQ5NSw3ICsyMjAsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlVGhpCiAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLT5hbGxvY2F0aW9uUHJvZmlsZShleGVjLCBp
bmxpbmVDYXBhY2l0eSktPnN0cnVjdHVyZSgpKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNTAzLDcgKzIy
OCw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QKICAgICByZXR1
cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgc3RydWN0dXJlKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikK
IHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKQEAgLTUxNCw3ICsyMzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblZhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0FkZChl
eGVjLCBvcDEsIG9wMikpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblZhbHVlQWRkTm90TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwpAQCAtNTQ3LDcgKzI3Miw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUgZ2V0QnlWYWwoRXgKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSku
Z2V0KGV4ZWMsIGluZGV4KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQorRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CkBAIC01NzgsNyArMzAzLDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVj
LCBpZGVudCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEJ5VmFsQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFByb3BlcnR5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCeVZhbENlbGwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRQcm9wZXJ0eSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTYxOCwxNDAgKzM0MywxNyBA
QCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdldEJ5VmFsQ2VsCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKGJhc2UpLmdldChleGVjLCBpbmRleCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQoRXhlY1N0
YXRlKiBleGVjLCBKU0FycmF5KiBiYXNlLCBpbnQzMl90IGluZGV4KQorRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50KEV4ZWNTdGF0ZSogZXhlYywg
SlNBcnJheSogYmFzZSwgaW50MzJfdCBpbmRleCkKIHsKICAgICByZXR1cm4gZ2V0QnlWYWxDZWxs
SW50KGV4ZWMsIGJhc2UsIGluZGV4KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBi
YXNlLCBpbnQzMl90IGluZGV4KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeVZhbFN0cmluZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBiYXNlLCBpbnQz
Ml90IGluZGV4KQogewogICAgIHJldHVybiBnZXRCeVZhbENlbGxJbnQoZXhlYywgYmFzZSwgaW5k
ZXgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17
Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoYmFzZSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBJZGVu
dGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZh
bHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkpOwotfQotCi1KX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7Ci1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3RXaXRoUmV0dXJu
QWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwq
IHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
Ci0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7
Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShiYXNlKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7Ci0KLSAgICBpZiAo
YWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBl
KSkKLSAgICAgICAgYnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90
LCBzdHViSW5mbyk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0K
LUpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1
YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGlj
X2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJh
c2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChi
YXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVu
dCwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNz
VHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpIHsKLSAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4p
Ci0gICAgICAgICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90
LCBzdHViSW5mbyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0
cnVlOwotICAgIH0KLQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQot
Sl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKG9wZXJhdGlvbkluT3B0
aW1pemUpOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXpl
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0lt
cGwqIGtleSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwotICAgIAotICAgIGlmICghYmFzZS0+aXNPYmplY3QoKSkgewotICAgICAgICB2bS0+dGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlSW52YWxpZFBhcmFtZXRlckVycm9yKGV4ZWMsICJpbiIsIGJh
c2UpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAg
ICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJs
b2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0g
ICAgSWRlbnRpZmllciBpZGVudCh2bSwga2V5KTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNl
KTsKLSAgICBib29sIHJlc3VsdCA9IGFzT2JqZWN0KGJhc2UpLT5nZXRQcm9wZXJ0eVNsb3QoZXhl
YywgaWRlbnQsIHNsb3QpOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0g
c3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0gICAgCi0gICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAg
ICAgIHJlcGF0Y2hJbihleGVjLCBiYXNlLCBpZGVudCwgcmVzdWx0LCBzbG90LCBzdHViSW5mbyk7
Ci0gICAgZWxzZQotICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKLSAgICAKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZXN1bHQpKTsKLX0KLQotRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25JbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFz
ZSwgU3RyaW5nSW1wbCoga2V5KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgaWYgKCFiYXNlLT5p
c09iamVjdCgpKSB7Ci0gICAgICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVJbnZh
bGlkUGFyYW1ldGVyRXJyb3IoZXhlYywgImluIiwgYmFzZSkpOwotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIH0KLQotICAgIElkZW50aWZpZXIgaWRl
bnQodm0sIGtleSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNPYmpl
Y3QoYmFzZSktPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkpOwotfQotCi1FbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogYmFzZSwgRW5jb2RlZEpTVmFsdWUga2V5KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluKGV4ZWMs
IEpTVmFsdWU6OmRlY29kZShrZXkpLCBiYXNlKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIGJhc2UsIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGZ1bmN0aW9uLCBTdHJpbmdJbXBs
KiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwg
dWlkKTsKLSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZ1bmN0aW9uKGV4ZWMsIGFz
T2JqZWN0KGJhc2UpLCBpZGVudCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2Vs
bCogZ2V0dGVyU2V0dGVyKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjYWxsR2V0dGVyKGV4ZWMsIGJhc2UsIGdldHRlclNldHRlcikpOwotfQotCi12b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC03NTksNyArMzYxLDcgQEAgdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaQogICAgIG9wZXJhdGlvblB1dEJ5VmFsSW50
ZXJuYWw8dHJ1ZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZh
bHVlKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0
eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzY3
LDcgKzM2OSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblMKICAg
ICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5j
b2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0
YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzc1LDcg
KzM3Nyw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBv
cGVyYXRpb25QdXRCeVZhbEludGVybmFsPHRydWU+KGV4ZWMsIEpTVmFsdWU6OmVuY29kZShjZWxs
KSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxOb25T
dHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwpAQCAtNzgzLDcgKzM4NSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bENlbGwKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBKU1ZhbHVl
OjplbmNvZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5
LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CkBAIC03OTgsNyArNDAwLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsQmV5bwogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBp
bmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFy
cmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CkBAIC04MTMsNyArNDE1LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsQmV5bwogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNT
dHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIGRv
dWJsZSB2YWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJl
eW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBp
bnQzMl90IGluZGV4LCBkb3VibGUgdmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04MzAsNyAr
NDMyLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VgogICAgICAg
ICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIGpzVmFsdWUsIHNs
b3QpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlv
bmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwg
aW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKICAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKQEAgLTg0Nyw3ICs0NDksNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0RG91YmxlQnlWCiAgICAgICAgIGFycmF5LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IGluZGV4KSwganNWYWx1ZSwgc2xvdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0FycmF5KiBhcnJheSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU0FycmF5KiBhcnJheSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTg1Niw3ICs0NTgs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhcnJheS0+bGVuZ3RoKCkpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRl
KiBleGVjLCBkb3VibGUgdmFsdWUsIEpTQXJyYXkqIGFycmF5KQorRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiBleGVjLCBkb3Vi
bGUgdmFsdWUsIEpTQXJyYXkqIGFycmF5KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtODY1LDcgKzQ2
Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXIKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGFycmF5LT5sZW5ndGgoKSkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSogZXhl
YywgSlNBcnJheSogYXJyYXkpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkFycmF5UG9wKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CkBAIC04NzMsNyArNDc1LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25BcgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7CiB9
CiAgICAgICAgIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBv
cEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04
ODMsNyArNDg1LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Bcgog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7CiB9CiAgICAgICAg
IAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50KQorRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtODk2LDcg
KzQ5OCw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzUmVnRXhwT2JqZWN0KGJhc2UpLT5leGVjKGV4ZWMsIGlu
cHV0KSk7CiB9CiAgICAgICAgIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhw
VGVzdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKK3Np
emVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIGJhc2UsIEpTQ2VsbCogYXJndW1lbnQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC05MTEs
MjM3ICs1MTMsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0CiAg
ICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0KGJhc2UpLT50ZXN0KGV4ZWMsIGlucHV0KTsKIH0KICAg
ICAgICAgCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJp
bmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVu
dCh2bSwgdWlkKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxv
Y2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJh
c2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19
Ci0KLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmlu
Z0ltcGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50
KHZtLCB1aWQpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlLCBleGVjLT5jb2RlQmxv
Y2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJh
c2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19
Ci0KLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0
cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlk
ZW50KHZtLCB1aWQpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVC
bG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7
Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwotfQotCi12b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250
ZXh0KCkpOwotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNl
KS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgc2xvdCk7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJp
bmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1
cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsK
LSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJ
ZENvbnRleHQoKSk7Ci0gICAgCi0gICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUs
IHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYg
KHN0dWJJbmZvLnNlZW4pCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwg
aWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc3R1
YkluZm8uc2VlbiA9IHRydWU7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKTsKLXZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRk
cmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxs
KiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykK
LXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwot
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRT
dHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VW
YWx1ZShiYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJs
b2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywg
aWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGlmIChzdHViSW5mby5zZWVuKQotICAgICAgICByZXBhdGNoUHV0QnlJRChleGVj
LCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKLSAgICBlbHNl
Ci0gICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRp
bWl6ZSk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9w
dGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmll
ciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVj
LT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlw
ZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlw
ZSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5
SWRDb250ZXh0KCkpOwotICAgIAotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBh
c09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7
Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoc3R1Yklu
Zm8uc2VlbikKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3Qs
IHN0dWJJbmZvLCBEaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRy
dWU7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHVi
SW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAot
ICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vz
c1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uc2VlbikKLSAgICAgICAgcmVw
YXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwot
ICAgIGVsc2UKLSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Ci19Ci0KLVZfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1
aWxkTGlzdCk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxk
TGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIg
aWRlbnQodm0sIHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+
Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUp
OwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwot
ICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJhc2UpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRy
dWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICAKLSAgICBiYXNl
VmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vz
c1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1
ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOwotfQotCi1WX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RC
dWlsZExpc3QpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RC
dWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlm
aWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4
ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NU
eXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAg
IGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAo
YWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBl
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFz
ZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7Ci19Ci0KLVZfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdEJ1aWxkTGlzdCk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAot
ICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwot
ICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLmFjY2Vzc1R5cGUpOwotICAgIAotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5j
b2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgCi0gICAgQVNTRVJUKGJhc2UtPmlz
T2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRl
bnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZv
LCBEaXJlY3QpOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
SkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0
dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
SlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1
aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygp
LT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUg
PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkp
OwotICAgIAotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNl
KS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAg
aWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNz
VHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMs
IGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKLX0KLQotc2l6ZV90IERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwpAQCAtMTE0OSw3ICs1MjEsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25D
b21wYXJlTGVzCiAgICAgcmV0dXJuIGpzTGVzczx0cnVlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiB9CiAKLXNpemVfdCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CkBAIC0xMTU3LDcgKzUyOSw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNvbXBhcmVMZXMKICAgICByZXR1cm4ganNMZXNzRXE8dHJ1ZT4oZXhlYywgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQog
Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDIpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTY1LDcgKzUzNyw3IEBAIHNpemVfdCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmUKICAgICByZXR1cm4ganNMZXNzPGZhbHNlPihl
eGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMiksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AxKSk7CiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVy
RXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdy
ZWF0ZXJFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTczLDcgKzU0NSw3
IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmUKICAgICByZXR1cm4g
anNMZXNzRXE8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDEpKTsKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNvbXBhcmVFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTgyLDkgKzU1
NCw5IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcSgKIH0KIAogI2lm
IFVTRShKU1ZBTFVFNjQpCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdo
dCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0Vx
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBsZWZ0LCBKU0NlbGwqIHJpZ2h0KQogI2Vsc2UKLXNp
emVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlND
ZWxsKiByaWdodCkKICNlbmRpZgogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtMTE5
OCw3ICs1NzAsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyCiAj
ZW5kaWYKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
Q2VsbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDIpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXFDZWxsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTEyMTIsNyAr
NTg0LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgogICAgIHJl
dHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKGV4ZWMsIG9wMSwgb3AyKTsK
IH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMjIzLDE5MyArNTk1LDcgQEAgc2l6
ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgogICAgIHJldHVybiBKU1ZhbHVl
OjpzdHJpY3RFcXVhbChleGVjLCBzcmMxLCBzcmMyKTsKIH0KIAotc3RhdGljIHZvaWQqIGhhbmRs
ZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVl
LT5jYWxsZXJGcmFtZSgpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotCi0gICAgZXhlY0Nh
bGxlZS0+c2V0U2NvcGUoZXhlYy0+c2NvcGUoKSk7Ci0gICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJs
b2NrKDApOwotCi0gICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgQ2FsbERh
dGEgY2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY2Fs
bGVlLCBjYWxsRGF0YSk7Ci0gICAgCi0gICAgICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlw
ZUpTKTsKLSAgICAKLSAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCkgewotICAg
ICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7Ci0g
ICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAg
ICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0
YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwotICAgICAgICAgICAgaWYgKHZtLT5leGNl
cHRpb24oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKLQotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIEFTU0VSVChjYWxsVHlw
ZSA9PSBDYWxsVHlwZU5vbmUpOwotICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxlZSkpOwotICAgICAgICByZXR1
cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoa2luZCA9
PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAKLSAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERh
dGE7Ci0gICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YShj
YWxsZWUsIGNvbnN0cnVjdERhdGEpOwotICAgIAotICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlICE9
IENvbnN0cnVjdFR5cGVKUyk7Ci0gICAgCi0gICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3Ry
dWN0VHlwZUhvc3QpIHsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlY0NhbGxlZSk7Ci0gICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxs
ZWUpKTsKLSAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
Y29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwotICAgICAgICBpZiAo
dm0tPmV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7Ci0KLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9
PSBDb25zdHJ1Y3RUeXBlTm9uZSk7Ci0gICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpKTsKLSAgICByZXR1cm4g
dm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLX0KLQotaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhl
Y1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAg
RXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLSAgICAKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVB
c1ZhbHVlKCk7Ci0gICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rp
b24oY2FsbGVlQXNWYWx1ZSk7Ci0gICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKLSAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxs
ZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKLQotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIGV4ZWNDYWxsZWUt
PnNldFNjb3BlKGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKSk7Ci0gICAgRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKLQotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjb2RlUHRyOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKLSAgICBpZiAo
ZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFi
bGUtPmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgIEpTT2Jq
ZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVj
Q2FsbGVlLCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAg
ICAgICAgICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVTdGFja092ZXJmbG93RXJy
b3IoZXhlYykpOwotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZt
LT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGNvZGVCbG9jayA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpOwotICAgICAgICBpZiAoZXhl
Y0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVf
dD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxl
LT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwotICAgIH0KLSAg
ICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxs
TGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7Ci0gICAgaWYgKCFjYWxsTGlua0luZm8u
c2Vlbk9uY2UoKSkKLSAgICAgICAgY2FsbExpbmtJbmZvLnNldFNlZW4oKTsKLSAgICBlbHNlCi0g
ICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxl
ZSwgY29kZVB0ciwga2luZCk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci19Ci0KLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQotewotICAgIHJldHVybiBsaW5r
Rm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKLX0KLQotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKLXsKLSAgICByZXR1
cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQotaW5saW5lIGNo
YXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQotewot
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7Ci0KLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVB
c1ZhbHVlKCk7Ci0gICAgY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxl
ZUFzVmFsdWUpOwotICAgIGlmIChVTkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKQotICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaGFuZGxlSG9zdENhbGwoZXhlY0Nh
bGxlZSwgY2FsbGVlQXNWYWx1ZSwga2luZCkpOwotICAgIAotICAgIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgZXhl
Y0NhbGxlZS0+c2V0U2NvcGUoZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCkpOwotICAgIEV4ZWN1
dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKLSAgICBpZiAo
VU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7Ci0gICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBmdW5jdGlv
bi0+c2NvcGUoKSwga2luZCk7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjQ2FsbGVlLCBlcnJvcik7Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGV4
ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKLX0KLQotaW5saW5lIGNoYXIqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBl
eGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgSlNDZWxsKiBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQ7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRoRnVu
Y3Rpb24oZXhlY0NhbGxlZSwga2luZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsKLX0K
LQotc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUsIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwsIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvKQotewotICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5j
dGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBKU0Z1bmN0aW9uKiBvbGRDYWxsZWUg
PSBjYWxsTGlua0luZm8uY2FsbGVlLmdldCgpOwotICAgIAotICAgIGlmICghb2xkQ2FsbGVlCi0g
ICAgICAgIHx8IG9sZENhbGxlZS0+c3RydWN0dXJlKCkgIT0gY2FsbGVlLT5zdHJ1Y3R1cmUoKQot
ICAgICAgICB8fCBvbGRDYWxsZWUtPmV4ZWN1dGFibGUoKSAhPSBjYWxsZWUtPmV4ZWN1dGFibGUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEFTU0VSVChjYWxsZWUtPmV4ZWN1
dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGNvZGVQdHIgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwo
KS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAgICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKLSAg
ICBpZiAoY2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIGNv
ZGVCbG9jayA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihjYWxsZWUtPmV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvckNhbGwo
KTsKLSAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkg
PCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgbGlua0Nsb3N1cmVDYWxsKAot
ICAgICAgICBleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVCbG9jaywKLSAgICAgICAgY2Fs
bGVlLT5zdHJ1Y3R1cmUoKSwgY2FsbGVlLT5leGVjdXRhYmxlKCksIGNvZGVQdHIpOwotICAgIAot
ICAgIHJldHVybiB0cnVlOwotfQotCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtD
bG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCi17Ci0gICAgSlNDZWxsKiBjYWxsZWVB
c0Z1bmN0aW9uQ2VsbDsKLSAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9u
KGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLT5jb2Rl
QmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwotCi0gICAg
aWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzRnVu
Y3Rpb25DZWxsLCBjYWxsTGlua0luZm8pKQotICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVl
LCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSog
ZXhlY0NhbGxlZSkKLXsgICAgCi0gICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29k
ZUZvckNhbGwpOwotfQotCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25z
dHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQotewotICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4
ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgdmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CkBAIC0xNDE3LDcgKzYwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uVG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZSh2YWx1
ZSkudG9QcmltaXRpdmUoZXhlYykpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0FycmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgdm9p
ZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCB2b2lkKiBi
dWZmZXIsIHNpemVfdCBzaXplKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTQyNSw3ICs2MTEsNyBA
QCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5KEV4CiAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxjaGFyKj4oY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgYXJy
YXlTdHJ1Y3R1cmUsIHN0YXRpY19jYXN0PEpTVmFsdWUqPihidWZmZXIpLCBzaXplKSk7CiB9CiAK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0VtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0
dXJlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTQzMyw3ICs2MTksNyBAQCBjaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFy
Kj4oSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJyYXlTdHJ1Y3R1cmUpKTsKIH0KIAotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgaW50MzJfdCBzaXplKQorY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBh
cnJheVN0cnVjdHVyZSwgaW50MzJfdCBzaXplKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTQ0NCwx
MjIgKzYzMCwxMjIgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdAog
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KEpTQXJyYXk6OmNyZWF0ZSgqdm0sIGFycmF5
U3RydWN0dXJlLCBzaXplKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBz
aXplX3Qgc3RhcnQsIHNpemVfdCBzaXplKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUs
IHNpemVfdCBzdGFydCwgc2l6ZV90IHNpemUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxjaGFyKj4oY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywg
YXJyYXlTdHJ1Y3R1cmUsIGV4ZWMtPmNvZGVCbG9jaygpLT5jb25zdGFudEJ1ZmZlcihzdGFydCks
IHNpemUpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlX
aXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aFNp
emUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBs
ZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0ludDhBcnJheT4o
ZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0ludDhBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3SW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAg
ICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU0ludDhBcnJheT4oZXhlYywg
c3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3SW50MTZBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0
aFNpemU8SlNJbnQxNkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudCgKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudCgK
ICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1l
bnQ8SlNJbnQxNkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhTaXplKAorY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAg
cmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0ludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVy
ZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFy
cmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQz
MkFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3
VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU0ludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwg
ZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50
OEFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJy
YXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBp
bnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTVWlu
dDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTVWludDhB
cnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aFNpemUoCiAgICAgRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAg
ICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU1VpbnQ4Q2xhbXBlZEFycmF5PihleGVj
LCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3VWludDhDbGFtcGVkQXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU1VpbnQ4
Q2xhbXBlZEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICBy
ZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTVWludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVy
ZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZB
cnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWlu
dDE2QXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBu
ZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTVWludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVy
ZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdV
aW50MzJBcnJheVdpdGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50
MzJBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8
SlNVaW50MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhPbmVBcmd1bWVudCgKICAg
ICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8
SlNVaW50MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1jaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdpdGhTaXplKAorY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoU2l6ZSgKICAgICBFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAg
ICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTRmxvYXQzMkFycmF5PihleGVjLCBzdHJ1
Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3Rmxv
YXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdGbG9hdDMyQXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJl
dHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTRmxvYXQzMkFycmF5PihleGVjLCBz
dHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3RmxvYXQ2NEFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0Zsb2F0NjRBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5
V2l0aFNpemU8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoT25lQXJndW1l
bnQoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhPbmVB
cmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRo
T25lQXJndW1lbnQ8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVl
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAo
RXhlY1N0YXRlKiBleGVjLCB2b2lkKiByZWdleHBQdHIpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIHJlZ2V4cFB0
cikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE1NzIsNyArNzU4LDcgQEAgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoUmVn
RXhwT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdleHAp
KTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24o
RXhlY1N0YXRlKiBleGVjKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFj
dGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTU4MSw3ICs3
NjcsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0CiAgICAgcmV0
dXJuIGFjdGl2YXRpb247CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVh
dGVBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBA
IC0xNTkyLDcgKzc3OCw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVB
cmcKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50cygKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25DcmVhdGVJbmxpbmVkQXJndW1lbnRzKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAg
LTE2MDQsNyArNzkwLDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUlu
bAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25U
ZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBhcmd1bWVudHNDZWxsLCBK
U0NlbGwqIGFjdGl2YXRpb25DZWxsKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJP
ZmZBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGFyZ3VtZW50c0NlbGwsIEpTQ2Vs
bCogYWN0aXZhdGlvbkNlbGwpCiB7CiAgICAgQVNTRVJUKGV4ZWMtPmNvZGVCbG9jaygpLT51c2Vz
QXJndW1lbnRzKCkpOwogICAgIGlmIChhY3RpdmF0aW9uQ2VsbCkgewpAQCAtMTYxNCwxNCArODAw
LDE0IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQXJndW0KICAgICBqc0Nh
c3Q8QXJndW1lbnRzKj4oYXJndW1lbnRzQ2VsbCktPnRlYXJPZmYoZXhlYyk7CiB9CiAKLXZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cygKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cygKICAgICBFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogYXJndW1lbnRzQ2VsbCwgSlNDZWxsKiBhY3RpdmF0aW9uQ2VsbCwg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChh
Y3RpdmF0aW9uQ2VsbCwgIWFjdGl2YXRpb25DZWxsKTsgLy8gQ3VycmVudGx5LCB3ZSBkb24ndCBp
bmxpbmUgZnVuY3Rpb25zIHdpdGggYWN0aXZhdGlvbnMuCiAgICAganNDYXN0PEFyZ3VtZW50cyo+
KGFyZ3VtZW50c0NlbGwpLT50ZWFyT2ZmKGV4ZWMsIGlubGluZUNhbGxGcmFtZSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoKEV4
ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlcikKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoKEV4ZWNTdGF0ZSogZXhl
YywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE2MzMs
NyArODE5LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50
QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGFyZ3VtZW50c1JlZ2lzdGVyLCBpbnQzMl90
IGluZGV4KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVu
dEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlciwgaW50MzJf
dCBpbmRleCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE2NDgsNyArODM0LDcgQEAgRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYXJndW1lbnRzVmFsdWUuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0SW5saW5lZEFyZ3VtZW50QnlWYWwoCitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFsKAog
ICAgIEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlciwgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIGludDMyX3QgaW5kZXgpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKQEAgLTE2NjYsNyArODUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJndW1lbnRzVmFs
dWUuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25OZXdGdW5jdGlvbk5vQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhl
Y3V0YWJsZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbk5vQ2hl
Y2soRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKIHsKICAgICBB
U1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxlLT5pbmhlcml0cyhGdW5jdGlvbkV4ZWN1dGFibGU6Omlu
Zm8oKSkpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0xNjc0LDcgKzg2MCw3IEBAIEpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGkKICAgICByZXR1cm4gSlNGdW5j
dGlvbjo6Y3JlYXRlKGV4ZWMsIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0
aW9uRXhlY3V0YWJsZSksIGV4ZWMtPnNjb3BlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBm
dW5jdGlvbkV4ZWN1dGFibGUpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUp
CiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9uRXhlY3V0YWJsZS0+aW5oZXJpdHMoRnVuY3Rpb25FeGVj
dXRhYmxlOjppbmZvKCkpKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtMTY4Miw3ICs4
NjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5lCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgc3RhdGljX2Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwgZXhlYy0+c2NvcGUoKSkp
OwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNz
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGVBc0NlbGwpCitK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGVBc0NlbGwpCiB7CiAgICAgQVNT
RVJUKGZ1bmN0aW9uRXhlY3V0YWJsZUFzQ2VsbC0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRhYmxl
OjppbmZvKCkpKTsKIApAQCAtMTY5NCwzMyArODgwLDIyIEBAIEpTQ2VsbCogREZHX09QRVJBVElP
TiBvcGVyYXRpb25OZXdGdW5jdGkKICAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMs
IGZ1bmN0aW9uRXhlY3V0YWJsZSwgZXhlYy0+c2NvcGUoKSk7CiB9CiAKLXNpemVfdCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
dmFsdWUpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdChFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIHJldHVybiBqc0lzT2JqZWN0VHlw
ZShleGVjLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbklzRnVuY3Rpb24oRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgcmV0dXJuIGpzSXNGdW5jdGlvblR5cGUoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAK
LUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2YoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIHZhbHVlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZihFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogdmFsdWUpCiB7CiAgICAgcmV0dXJuIGpzVHlwZVN0cmluZ0Zv
clZhbHVlKGV4ZWMsIEpTVmFsdWUodmFsdWUpKS5hc0NlbGwoKTsKIH0KIAotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotCi0gICAg
QVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IGJhc2UtPnN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBBU1NFUlQoIXZtLmhlYXAuc3RvcmFnZUFsbG9j
YXRvcigpLmZhc3RQYXRoU2hvdWxkU3VjY2VlZChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICBiYXNlLT5zZXRTdHJ1Y3R1cmVBbmRSZWFsbG9j
YXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOwotICAgIGJhc2UtPnB1dERpcmVj
dCh2bSwgb2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKLX0KLQotY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNp
dHkoRXhlY1N0YXRlKiBleGVjKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOwpAQCAtMTcyOSw3ICs5MDQsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFsbG9jYXRlUHJvCiAgICAgICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZCh2bSwgMCwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5LCBmYWxzZSwgMCkpOwogfQogCi1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNT
dGF0ZSogZXhlYywgc2l6ZV90IG5ld1NpemUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IG5ld1NpemUp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNzM4LDcgKzkxMyw3IEBAIGNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQWxsb2NhdGVQcm8KICAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRp
YWxpemVkKHZtLCAwLCAwLCBuZXdTaXplLCBmYWxzZSwgMCkpOwogfQogCi1jaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3Bl
cnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
b2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTc0OSw3ICs5MjQsNyBAQCBjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVh
bGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQorY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CkBAIC0xNzU5LDcgKzkzNCw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxv
Y2F0ZUIKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVJbnQzMihFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNzcw
LDcgKzk0NSw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIKICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVuc3VyZUlu
dDMyKHZtKS5kYXRhKCkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3Vy
ZURvdWJsZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uRW5zdXJlRG91YmxlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOwpAQCAtMTc4MSw3ICs5NTYsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkVuc3VyZURvdWJsCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGFzT2JqZWN0KGNlbGwpLT5lbnN1cmVEb3VibGUodm0pLmRhdGEoKSk7CiB9CiAKLWNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91
cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE3
OTIsNyArOTY3LDcgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aQog
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJl
Q29udGlndW91cyh2bSkuZGF0YSgpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25SYWdlRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmFnZUVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xODAzLDcgKzk3OCw3
IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmFnZUVuc3VyZUMKICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPnJhZ2VFbnN1cmVDb250aWd1
b3VzKHZtKS5kYXRhKCkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3Vy
ZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTgxNCw3ICs5ODksNyBAQCBjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5lbnN1cmVBcnJheVN0b3JhZ2Uodm0pKTsKIH0K
IAotU3RyaW5nSW1wbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlUm9wZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcpCitTdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKQEAgLTE4MjIsNyArOTk3LDcgQEAgU3RyaW5nSW1wbCogREZHX09QRVJB
VElPTiBvcGVyYXRpb25SZXNvbAogICAgIHJldHVybiBzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwo
KTsKIH0KIAotSlNTdHJpbmcqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBjaGFyYWN0ZXIpCitKU1N0cmluZyogSklU
X09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBpbnQzMl90IGNoYXJhY3RlcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4MzAsNyArMTAwNSw3
IEBAIEpTU3RyaW5nKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUMKICAgICByZXR1cm4g
anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgc3RhdGljX2Nhc3Q8VUNoYXI+KGNoYXJhY3Rl
cikpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNTdGF0
ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CkBAIC0xODM4LDcgKzEwMTMsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3U3RyaW5nCiAgICAgcmV0dXJuIFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIHN0
cnVjdHVyZSwgc3RyaW5nKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRv
U3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQorSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg0Niw3ICsxMDIxLDcgQEAgSlNDZWxsKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nTwogICAgIHJldHVybiBKU1ZhbHVlKGNlbGwp
LnRvU3RyaW5nKGV4ZWMpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9T
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK0pTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg1NCw3ICsxMDI5LDcgQEAgSlNDZWxs
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKAogICAgIHJldHVybiBKU1ZhbHVlOjpk
ZWNvZGUodmFsdWUpLnRvU3RyaW5nKGV4ZWMpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGxlZnQsIEpTU3Ry
aW5nKiByaWdodCkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTIoRXhl
Y1N0YXRlKiBleGVjLCBKU1N0cmluZyogbGVmdCwgSlNTdHJpbmcqIHJpZ2h0KQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOwpAQCAtMTg2Miw3ICsxMDM3LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk1ha2VSb3BlMgogICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgbGVmdCwg
cmlnaHQpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzKEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGEsIEpTU3RyaW5nKiBiLCBKU1N0cmluZyogYykKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMoRXhlY1N0YXRlKiBleGVjLCBK
U1N0cmluZyogYSwgSlNTdHJpbmcqIGIsIEpTU3RyaW5nKiBjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpA
QCAtMTg3MCw3ICsxMDQ1LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VS
b3BlMwogICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgYSwgYiwgYyk7CiB9CiAK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJs
ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRv
dWJsZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
c2l6ZV90IHRhYmxlSW5kZXgpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKQEAgLTE4ODQsNyArMTA1OSw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uRmluZFN3aXRjaEkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KHRhYmxlLmN0
aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IHRhYmxlSW5kZXgs
IEpTU3RyaW5nKiBzdHJpbmcpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyogc3RyaW5n
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg5MiwzMiArMTA2NywxOSBAQCBjaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIq
PihleGVjLT5jb2RlQmxvY2soKS0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0
aUZvclZhbHVlKHN0cmluZy0+dmFsdWUoZXhlYykuaW1wbCgpKS5leGVjdXRhYmxlQWRkcmVzcygp
KTsKIH0KIAotZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90
IGEsIGludDMyX3QgYikKK2RvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMo
aW50MzJfdCBhLCBpbnQzMl90IGIpCiB7CiAgICAgcmV0dXJuIGZtb2QoYSwgYik7CiB9CiAKLUpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRl
KiBleGVjLCBpbnQzMl90IG9wMSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJp
bmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IG9wMSkKIHsKICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICByZXR1cm4gSlNDOjpzdHJpbmdGcm9tQ2hhckNvZGUoZXhlYywgb3AxKTsKIH0K
IAotREZHSGFuZGxlckVuY29kZWQgREZHX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVy
KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgIEpTVmFsdWUgZXhjZXB0
aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUp
OwotICAgIAotICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVyaWNVbndpbmQodm0s
IGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICBBU1NFUlQoaGFuZGxlci5jYXRjaFJvdXRpbmUp
OwotICAgIHJldHVybiBkZmdIYW5kbGVyRW5jb2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxl
ci5jYXRjaFJvdXRpbmUpOwotfQotCi1zaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNW
YWx1ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVf
dCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTkyNiw3ICsxMDg4
LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUbwogICAgIHJldHVy
biBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvVUludDMyKGV4ZWMpOwogfQogCi1zaXplX3QgREZH
X09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZlcnRK
U1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTkzNCw3ICsxMDk2LDcgQEAgc2l6ZV90IERGR19PUEVS
QVRJT04gZGZnQ29udmVydEpTVmFsdWVUbwogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wKS50b0Jvb2xlYW4oZXhlYyk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09w
ZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogZGVi
dWdJbmZvUmF3LCB2b2lkKiBzY3JhdGNoKQordm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVnT3BlcmF0
aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBkZWJ1Z0lu
Zm9SYXcsIHZvaWQqIHNjcmF0Y2gpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xOTcyLDcgKzExMzQs
NyBAQCB2b2lkIERGR19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwCiAgICAgZGF0YUxv
ZygiXG4iKTsKIH0KIAotZXh0ZXJuICJDIiB2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlb3B0
aW1pemF0aW9uTm93KENvZGVCbG9jayogY29kZUJsb2NrKQorZXh0ZXJuICJDIiB2b2lkIEpJVF9P
UEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayogY29kZUJsb2NrKQog
ewogICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUg
aW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKICAgICAvLyByZWFsbHkgYmUgcHJv
Zml0YWJsZS4KQEAgLTIwMTYsNyArMTE3OCw3IEBAIGV4dGVybiAiQyIgdm9pZCBERkdfT1BFUkFU
SU9OIHRyaWdnZXJSZW8KIH0KIAogI2lmIEVOQUJMRShGVExfSklUKQotdm9pZCBERkdfT1BFUkFU
SU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKiBleGVjKQordm9pZCBKSVRfT1BFUkFUSU9O
IHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAt
MjA3OCw3ICsxMjQwLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhl
YwogICAgICAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNvZGVC
bG9jayksIHZtLT5lbnN1cmVXb3JrbGlzdCgpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiB0
cmlnZ2VyT1NSRW50cnlOb3coCitjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5v
dygKICAgICBFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBz
dHJlYW1JbmRleCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTIxOTcsNyArMTM1
OSw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAogCiAvLyBGSVhN
RTogTWFrZSBjYWxscyB3b3JrIHdlbGwuIEN1cnJlbnRseSB0aGV5J3JlIGEgcHVyZSByZWdyZXNz
aW9uLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQot
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GVExDYWxsKEV4ZWNTdGF0ZSog
ZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ2FsbChFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgRXhlY1N0YXRlKiBjYWxsZXJFeGVjID0gZXhlYy0+Y2FsbGVy
RnJhbWUoKTsKICAgICAKQEAgLTIyMTcsNyArMTM3OSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uRlQKIAogLy8gRklYTUU6IE1ha2UgY2FsbHMgd29yayB3ZWxsLiBD
dXJyZW50bHkgdGhleSdyZSBhIHB1cmUgcmVncmVzc2lvbi4KIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uRlRMQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBFeGVjU3RhdGUqIGNhbGxlckV4ZWMgPSBleGVjLT5jYWxsZXJGcmFtZSgpOwogICAgIApA
QCAtMjI0MSw4NiArMTQwMyw0IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uRlQKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCi1uYW1lc3BhY2UgSlNDIHsKLQot
I2lmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFg4Nl82NCkKLWFzbSAoCi0iLmdsb2JsICIgU1lNQk9M
X1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1ISURFX1NZTUJPTChnZXRIb3N0
Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1TWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFs
dWUpICI6IiAiXG4iCi0gICAgIm1vdiA0MCglcjEzKSwgJXIxM1xuIgotICAgICJtb3YgJXIxMywg
JXJkaVxuIgotICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1
ZVdpdGhFeGVjU3RhdGUpICJcbiIKLSk7Ci0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODYp
Ci1hc20gKAotIi50ZXh0IiAiXG4iIFwKLSIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpICJcbiIKLUhJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUp
ICJcbiIKLVNZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKLSAg
ICAibW92IDQwKCVlZGkpLCAlZWRpXG4iCi0gICAgIm1vdiAlZWRpLCA0KCVlc3ApXG4iCi0gICAg
ImptcCAiIExPQ0FMX1JFRkVSRU5DRShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0
ZSkgIlxuIgotKTsKLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9USFVNQjIpCi1hc20g
KAotIi50ZXh0IiAiXG4iCi0iLmFsaWduIDIiICJcbiIKLSIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5H
KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKLUhJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0
dXJuVmFsdWUpICJcbiIKLSIudGh1bWIiICJcbiIKLSIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNf
UEFSQU0oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgotU1lNQk9MX1NUUklORyhnZXRIb3N0
Q2FsbFJldHVyblZhbHVlKSAiOiIgIlxuIgotICAgICJsZHIgcjUsIFtyNSwgIzQwXSIgIlxuIgot
ICAgICJtb3YgcjAsIHI1IiAiXG4iCi0gICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENh
bGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICJcbiIKLSk7Ci0jZWxpZiBDT01QSUxFUihHQ0Mp
ICYmIENQVShBUk1fVFJBRElUSU9OQUwpCi1hc20gKAotIi50ZXh0IiAiXG4iCi0iLmdsb2JsICIg
U1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1ISURFX1NZTUJPTChn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1JTkxJTkVfQVJNX0ZVTkNUSU9OKGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpCi1TWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6
IiAiXG4iCi0gICAgImxkciByNSwgW3I1LCAjNDBdIiAiXG4iCi0gICAgIm1vdiByMCwgcjUiICJc
biIKLSAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4
ZWNTdGF0ZSkgIlxuIgotKTsKLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKE1JUFMpCi1hc20o
Ci0iLnRleHQiICJcbiIKLSIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJu
VmFsdWUpICJcbiIKLUhJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKLVNZ
TUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKLSAgICBMT0FEX0ZV
TkNUSU9OX1RPX1Q5KGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKQotICAgICJs
dyAkczAsIDQwKCRzMCkiICJcbiIKLSAgICAibW92ZSAkYTAsICRzMCIgIlxuIgotICAgICJiICIg
TE9DQUxfUkVGRVJFTkNFKGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiXG4i
Ci0pOwotI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoU0g0KQotYXNtKAotIi50ZXh0IiAiXG4i
Ci0iLmdsb2JsICIgU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1I
SURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1TWU1CT0xfU1RSSU5HKGdl
dEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6IiAiXG4iCi0gICAgImFkZCAjNDAsIHIxNCIgIlxuIgot
ICAgICJtb3YubCBAcjE0LCByMTQiICJcbiIKLSAgICAibW92IHIxNCwgcjQiICJcbiIKLSAgICAi
bW92LmwgMmYsICIgU0g0X1NDUkFUQ0hfUkVHSVNURVIgIlxuIgotICAgICJicmFmICIgU0g0X1ND
UkFUQ0hfUkVHSVNURVIgIlxuIgotICAgICJub3AiICJcbiIKLSAgICAiMTogLmJhbGlnbiA0IiAi
XG4iCi0gICAgIjI6IC5sb25nICIgTE9DQUxfUkVGRVJFTkNFKGdldEhvc3RDYWxsUmV0dXJuVmFs
dWVXaXRoRXhlY1N0YXRlKSAiLTFiXG4iCi0pOwotI2VuZGlmCi0KLWV4dGVybiAiQyIgRW5jb2Rl
ZEpTVmFsdWUgSE9TVF9DQUxMX1JFVFVSTl9WQUxVRV9PUFRJT04gZ2V0SG9zdENhbGxSZXR1cm5W
YWx1ZVdpdGhFeGVjU3RhdGUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmICghZXhlYykKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoZXhlYy0+dm0oKS5ob3N0Q2FsbFJldHVyblZhbHVlKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1NjQ4MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdKSVRDb21w
aWxlci5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzcsMjg4ICszOCwxMjkgQEAgbmFtZXNwYWNlIERGRyB7
CiAKIGV4dGVybiAiQyIgewogCi0jaWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NURENBTEwKLSNk
ZWZpbmUgREZHX09QRVJBVElPTiBDREVDTAotI2Vsc2UKLSNkZWZpbmUgREZHX09QRVJBVElPTgot
I2VuZGlmCi0KLS8vIFRoZXNlIHR5cGVkZWZzIHByb3ZpZGUgdHlwZWNoZWNraW5nIHdoZW4gZ2Vu
ZXJhdGluZyBjYWxscyBvdXQgdG8gaGVscGVyIHJvdXRpbmVzOwotLy8gdGhpcyBoZWxwcyBwcmV2
ZW50IGNhbGxpbmcgYSBoZWxwZXIgcm91dGluZSB3aXRoIHRoZSB3cm9uZyBhcmd1bWVudHMhCi0v
KgotICAgIEtleToKLSAgICBWOiB2b2lkCi0gICAgSjogSlNWYWx1ZQotICAgIFA6IHBvaW50ZXIg
KHZvaWQqKQotICAgIEM6IEpTQ2VsbCoKLSAgICBBOiBKU0FycmF5KgotICAgIFM6IHNpemVfdAot
ICAgIFo6IGludDMyX3QKLSAgICBEOiBkb3VibGUKLSAgICBJOiBTdHJpbmdJbXBsKgotKi8KLXR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0UpKEV4
ZWNTdGF0ZSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdP
cGVyYXRpb25fRUEpKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VBWikoRXhlY1N0YXRlKiwgSlNBcnJh
eSosIGludDMyX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9E
RkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBKU0NlbGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpf
REZHT3BlcmF0aW9uX0VDSSkoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwotdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNKKShF
eGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FREEpKEV4ZWNTdGF0ZSosIGRvdWJs
ZSwgSlNBcnJheSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9E
RkdPcGVyYXRpb25fRUkpKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqKTsKLXR5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpK
X0RGR09wZXJhdGlvbl9FSkEpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0FycmF5Kik7
Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
SkkpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKik7Ci10eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSnNzWikoRXhlY1N0YXRlKiwgSlNT
dHJpbmcqLCBpbnQzMl90KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAo
KkpfREZHT3BlcmF0aW9uX0VKUCkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHZvaWQqKTsK
LXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VQ
KShFeGVjU3RhdGUqLCB2b2lkKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gKCpKX0RGR09wZXJhdGlvbl9FUFApKEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lkKik7Ci10eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4
ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7
Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
WikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gKCpKX0RGR09wZXJhdGlvbl9FWkljZlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGlu
ZUNhbGxGcmFtZSosIGludDMyX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSl9ERkdPcGVyYXRpb25fRVpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsK
LXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRSkoRXhlY1N0
YXRlKik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0Va
KShFeGVjU3RhdGUqLCBpbnQzMl90KTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgq
Q19ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdHlwZWRlZiBKU0NlbGwq
IERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEpTQ2VsbCopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlv
bl9FSWNmKShFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqKTsKLXR5cGVkZWYgSlNDZWxsKiBE
RkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlKTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUpz
c1N0KShFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBKU0NlbGwq
IERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FSnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0
cmluZyosIEpTU3RyaW5nKik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZH
T3BlcmF0aW9uX0VKc3NKc3NKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBK
U1N0cmluZyopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlv
bl9FT1opKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCk7Ci10eXBlZGVmIEpTQ2VsbCog
REZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VTdCkoRXhlY1N0YXRlKiwgU3RydWN0dXJl
Kik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VaKShF
eGVjU3RhdGUqLCBpbnQzMl90KTsKLXR5cGVkZWYgZG91YmxlIERGR19PUEVSQVRJT04gKCpEX0RG
R09wZXJhdGlvbl9ERCkoZG91YmxlLCBkb3VibGUpOwotdHlwZWRlZiBkb3VibGUgREZHX09QRVJB
VElPTiAoKkRfREZHT3BlcmF0aW9uX1paKShpbnQzMl90LCBpbnQzMl90KTsKLXR5cGVkZWYgZG91
YmxlIERGR19PUEVSQVRJT04gKCpEX0RGR09wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUpOwotdHlwZWRlZiBpbnQzMl90IERGR19PUEVSQVRJT04gKCpaX0RGR09wZXJhdGlv
bl9EKShkb3VibGUpOwotdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0
aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Ci10eXBlZGVmIHNpemVfdCBE
RkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlKTsKLXR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9FSkop
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHNp
emVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUpOwot
dHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FKShFeGVjU3RhdGUq
KTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRU9aRCkoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBkb3VibGUpOwotdHlwZWRlZiB2b2lkIERGR19P
UEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FT1pKKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGlu
dDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9E
RkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdHlwZWRlZiB2b2lkIERGR19P
UEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSW5s
aW5lQ2FsbEZyYW1lKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0
aW9uX0VDQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1l
Kik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDSkopKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBl
ZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgaW50MzJfdCk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3Bl
cmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Ci10eXBlZGVmIHZvaWQg
REZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VKQ0kpKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElP
TiAoKlZfREZHT3BlcmF0aW9uX0VKSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04g
KCpWX0RGR09wZXJhdGlvbl9FSlBQKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCos
IHZvaWQqKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRVBa
SikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYg
dm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fVykoV2F0Y2hwb2ludFNldCopOwot
dHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRl
Kik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FQykoRXhl
Y1N0YXRlKiwgSlNDZWxsKik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09w
ZXJhdGlvbl9FSlMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QpOwotdHlwZWRl
ZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0Kik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9F
T1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciogREZHX09Q
RVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPWikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQz
Ml90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VQUyko
RXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04g
KCpQX0RGR09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciog
REZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTSnNzKShFeGVjU3RhdGUqLCBzaXplX3Qs
IEpTU3RyaW5nKik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlv
bl9FU3QpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFU
SU9OICgqUF9ERkdPcGVyYXRpb25fRVN0SikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2Rl
ZEpTVmFsdWUpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25f
RVN0UFMpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHZvaWQqLCBzaXplX3QpOwotdHlwZWRlZiBj
aGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0U1MpKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAo
KlBfREZHT3BlcmF0aW9uX0VTdFopKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpOwot
dHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVpaKShFeGVjU3Rh
dGUqLCBpbnQzMl90LCBpbnQzMl90KTsKLXR5cGVkZWYgU3RyaW5nSW1wbCogREZHX09QRVJBVElP
TiAoKklfREZHT3BlcmF0aW9uX0VKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7Ci10eXBlZGVm
IEpTU3RyaW5nKiBERkdfT1BFUkFUSU9OICgqSnNzX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0YXRl
KiwgaW50MzJfdCk7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvbUNo
YXJDb2RlKEV4ZWNTdGF0ZSosIGludDMyX3QpICBXVEZfSU5URVJOQUw7IAorSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqLCBpbnQzMl90
KSAgV1RGX0lOVEVSTkFMOyAKIAogLy8gVGhlc2Ugcm91dGluZXMgYXJlIHByb3ZpZGUgY2FsbGJh
Y2tzIG91dCB0byBDKysgaW1wbGVtZW50YXRpb25zIG9mIG9wZXJhdGlvbnMgdG9vIGNvbXBsZXgg
dG8gSklULgotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqLCBKU09iamVjdCogY29uc3RydWN0b3IsIGludDMy
X3QgaW5saW5lQ2FwYWNpdHkpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uVG9UaGlzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
VG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGQo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25WYWx1ZUFkZE5vdE51bWJlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxD
ZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkg
V1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRC
eVZhbEFycmF5SW50KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7
Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50
KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkluT3B0aW1pemUoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwot
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25JbihFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBTdHJpbmdJbXBsKik7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkdlbmVyaWNJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7Ci1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMsIFN0cmluZ0ltcGwqKSBXVEZf
SU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdBcnJheShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KSBXVEZfSU5URVJO
QUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyKEV4ZWNTdGF0
ZSosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikg
V1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3SW50MTZBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMy
X3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZB
cnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1
ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFy
cmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFM
OwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aE9uZUFyZ3Vt
ZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7
Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoU2l6ZShFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdVaW50MTZBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNv
ZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdVaW50MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdU
Rl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlX
aXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5
V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoT25lQXJndW1l
bnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aFNpemUoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwKEV4ZWNTdGF0ZSosIHZvaWQqKSBX
VEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3Qo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9w
ZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmlj
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBp
bnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsK
LXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91
bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZh
bHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91Ymxl
QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGlu
dDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiwgZG91Ymxl
IHZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFM
OwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292
ZXJMZW5ndGgoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqLCBKU0NlbGwq
LCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2Vs
bCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZf
SU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikg
V1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpT
Q2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZf
SU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxk
TGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmlu
Z0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0pTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRo
aXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBpbnQzMl90IGlubGluZUNhcGFj
aXR5KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blRvVGhpcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJO
QUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpc1N0cmljdChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9J
TlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGRO
b3ROdW1iZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUq
LCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpIFdURl9JTlRFUk5BTDsK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludChF
eGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludChFeGVjU3RhdGUqLCBK
U1N0cmluZyosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXkoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
LCBzaXplX3QsIHNpemVfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdFbXB0eUFycmF5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGlu
dDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50
OEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2
QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJO
QUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoT25lQXJn
dW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5B
TDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhTaXplKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdVaW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVu
Y29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50
MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50
OENsYW1wZWRBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNv
ZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdVaW50MTZBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlX
aXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlX
aXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Citj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Citj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdpdGhTaXplKEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3RmxvYXQ2NEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHks
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lO
VEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmlj
dChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFy
cmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVj
U3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgV1RGX0lOVEVS
TkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJy
YXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBk
b3VibGUgdmFsdWUpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlKEV4ZWNTdGF0ZSosIGRvdWJsZSB2YWx1ZSwgSlNBcnJh
eSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNT
dGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RG
X0lOVEVSTkFMOwogLy8gVGhlc2UgY29tcGFyaXNvbnMgcmV0dXJuIGEgYm9vbGVhbiB3aXRoaW4g
YSBzaXplX3Qgc3VjaCB0aGF0IHRoZSB2YWx1ZSBpcyB6ZXJvIGV4dGVuZGVkIHRvIGZpbGwgdGhl
IHJlZ2lzdGVyLgotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChFeGVj
U3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1zaXplX3Qg
REZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzc0VxKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5B
TDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIp
IFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJlZ0V4cFRlc3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lO
VEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MikgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxl
c3NFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK3Np
emVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJO
QUw7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiBy
aWdodCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Db21wYXJlU3RyaW5nRXEoRXhlY1N0YXRlKiwgSlNDZWxsKiBsZWZ0LCBKU0NlbGwqIHJpZ2h0
KSBXVEZfSU5URVJOQUw7CiAjZWxzZQotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29t
cGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RG
X0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0Vx
KEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFMOwog
I2VuZGlmCi1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxs
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKikg
V1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3Ry
dWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbihFeGVjU3RhdGUqKSBXVEZfSU5URVJO
QUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzKEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVh
dGVJbmxpbmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSosIElubGluZUNhbGxGcmFtZSopIFdURl9JTlRF
Uk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBK
U0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aChFeGVjU3RhdGUqLCBpbnQz
Ml90KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldElubGluZWRBcmd1bWVudEJ5VmFsKEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGluZUNhbGxG
cmFtZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uR2V0QXJndW1lbnRCeVZhbChFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90
KSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rp
b25Ob0NoZWNrKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNDZWxs
KikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0
aW9uRXhwcmVzc2lvbihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1kb3VibGUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QsIGludDMyX3QpIFdURl9J
TlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0KEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBv
cGVyYXRpb25Jc0Z1bmN0aW9uKEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9J
TlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFu
ZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zm
c2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0
YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFM
OwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZl
UHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqLCBKU09iamVjdCop
IFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1
dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVf
dCBuZXdTaXplKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVu
c3VyZUludDMyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25FbnN1cmVEb3VibGUoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1jaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1jaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJhZ2VFbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSos
IEpTQ2VsbCopOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3Jh
Z2UoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1TdHJpbmdJbXBsKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7Ci1KU1N0cmluZyogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJf
dCk7Ci0KLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QoRXhl
Y1N0YXRlKiwgSlNTdHJpbmcqLCBTdHJ1Y3R1cmUqKTsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBv
cGVyYXRpb25Ub1N0cmluZ09uQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqKTsKLUpTQ2VsbCogREZH
X09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7
Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNTdGF0ZSosIEpT
U3RyaW5nKiwgSlNTdHJpbmcqKTsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25NYWtl
Um9wZTMoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci1jaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KTsKLWNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUlu
ZGV4LCBKU1N0cmluZyopOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxQ2VsbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKikgV1RGX0lO
VEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhF
eGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlSW5saW5lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqKSBXVEZf
SU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFyZ3VtZW50cyhF
eGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVGVhck9mZklubGluZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgoRXhlY1N0YXRlKiwg
aW50MzJfdCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRJbmxpbmVkQXJndW1lbnRCeVZhbChFeGVjU3RhdGUqLCBpbnQzMl90LCBJbmxpbmVD
YWxsRnJhbWUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50QnlWYWwoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50
MzJfdCkgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1
bmN0aW9uTm9DaGVjayhFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpT
Q2VsbCopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdG
dW5jdGlvbkV4cHJlc3Npb24oRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOworZG91
YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBX
VEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZihFeGVjU3RhdGUqLCBKU0NlbGwqKSBX
VEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Citj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNT
dGF0ZSosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5p
dGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOworY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlT
dG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5B
TDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIoRXhlY1N0YXRlKiwg
SlNDZWxsKik7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsZShFeGVj
U3RhdGUqLCBKU0NlbGwqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29u
dGlndW91cyhFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUmFnZUVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlNDZWxsKik7CitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCBKU0NlbGwq
KTsKK1N0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJvcGUoRXhlY1N0
YXRlKiwgSlNTdHJpbmcqKTsKK0pTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmds
ZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90KTsKKworSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdChFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0
cnVjdHVyZSopOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxs
KEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRv
U3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK0pTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25NYWtlUm9wZTIoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwor
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqLCBKU1N0
cmluZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSwgc2l6ZV90IHRhYmxlSW5kZXgpOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0
Y2hTdHJpbmcoRXhlY1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7CiAKICNp
ZiBFTkFCTEUoRlRMX0pJVCkKIC8vIEZJWE1FOiBNYWtlIGNhbGxzIHdvcmsgd2VsbC4gQ3VycmVu
dGx5IHRoZXkncmUgYSBwdXJlIHJlZ3Jlc3Npb24uCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIxCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkZUTENhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25GVExDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVS
TkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GVExDYWxsKEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRlRMQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKICNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKIAotLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBsb29rdXAgYW4gZXhjZXB0
aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwgd2hpY2ggaXMKLS8vIHRoZSByZXR1
cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91dCB0byBvbmUgb2YgdGhlIGhlbHBl
ciBvcGVyYXRpb25zIGFib3ZlLgotCi0vLyBBY2NvcmRpbmcgdG8gQysrIHJ1bGVzLCBhIHR5cGUg
dXNlZCBmb3IgdGhlIHJldHVybiBzaWduYXR1cmUgb2YgZnVuY3Rpb24gd2l0aCBDIGxpbmthZ2Ug
KGkuZS4KLS8vICdleHRlcm4gIkMiJykgbmVlZHMgdG8gYmUgUE9EOyBoZW5jZSBwdXR0aW5nIGFu
eSBjb25zdHJ1Y3RvcnMgaW50byBpdCBjb3VsZCBjYXVzZSBlaXRoZXIgY29tcGlsZXIKLS8vIHdh
cm5pbmdzLCBvciB3b3JzZSwgYSBjaGFuZ2UgaW4gdGhlIEFCSSB1c2VkIHRvIHJldHVybiB0aGVz
ZSB0eXBlcy4KLXN0cnVjdCBERkdIYW5kbGVyIHsKLSAgICB1bmlvbiBVbmlvbiB7Ci0gICAgICAg
IHN0cnVjdCBTdHJ1Y3QgewotICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjOwotICAgICAgICAg
ICAgdm9pZCogaGFuZGxlcjsKLSAgICAgICAgfSBzOwotICAgICAgICB1aW50NjRfdCBlbmNvZGVk
OwotICAgIH0gdTsKLX07Ci0KLWlubGluZSBERkdIYW5kbGVyIGNyZWF0ZURGR0hhbmRsZXIoRXhl
Y1N0YXRlKiBleGVjLCB2b2lkKiBoYW5kbGVyKQotewotICAgIERGR0hhbmRsZXIgcmVzdWx0Owot
ICAgIHJlc3VsdC51LnMuZXhlYyA9IGV4ZWM7Ci0gICAgcmVzdWx0LnUucy5oYW5kbGVyID0gaGFu
ZGxlcjsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jaWYgQ1BVKFg4Nl82NCkKLXR5cGVkZWYg
REZHSGFuZGxlciBERkdIYW5kbGVyRW5jb2RlZDsKLWlubGluZSBERkdIYW5kbGVyRW5jb2RlZCBk
ZmdIYW5kbGVyRW5jb2RlZChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGhhbmRsZXIpCi17Ci0gICAg
cmV0dXJuIGNyZWF0ZURGR0hhbmRsZXIoZXhlYywgaGFuZGxlcik7Ci19Ci0jZWxzZQotdHlwZWRl
ZiB1aW50NjRfdCBERkdIYW5kbGVyRW5jb2RlZDsKLWlubGluZSBERkdIYW5kbGVyRW5jb2RlZCBk
ZmdIYW5kbGVyRW5jb2RlZChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGhhbmRsZXIpCi17Ci0gICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKERGR0hhbmRsZXI6OlVuaW9uKSA9PSBzaXplb2YodWludDY0
X3QpLCBERkdIYW5kbGVyX1VuaW9uX2lzXzY0Yml0KTsKLSAgICByZXR1cm4gY3JlYXRlREZHSGFu
ZGxlcihleGVjLCBoYW5kbGVyKS51LmVuY29kZWQ7Ci19Ci0jZW5kaWYKLURGR0hhbmRsZXJFbmNv
ZGVkIERGR19PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqKSBXVEZf
SU5URVJOQUw7Ci0KIC8vIFRoZXNlIG9wZXJhdGlvbnMgaW1wbGVtZW50IHRoZSBpbXBsaWNpdGx5
IGNhbGxlZCBUb0ludDMyIGFuZCBUb0Jvb2xlYW4gY29udmVyc2lvbnMgZnJvbSBFUzUuCiAvLyBU
aGlzIGNvbnZlcnNpb24gcmV0dXJucyBhbiBpbnQzMl90IHdpdGhpbiBhIHNpemVfdCBzdWNoIHRo
YXQgdGhlIHZhbHVlIGlzIHplcm8gZXh0ZW5kZWQgdG8gZmlsbCB0aGUgcmVnaXN0ZXIuCi1zaXpl
X3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZl
cnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7CitzaXplX3QgSklUX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9O
IGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBX
VEZfSU5URVJOQUw7CiAKLXZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3Bl
Y3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUo
RXhlY1N0YXRlKiwgdm9pZCosIHZvaWQqKSBXVEZfSU5URVJOQUw7CiAKLXZvaWQgREZHX09QRVJB
VElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKikgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqKSBX
VEZfSU5URVJOQUw7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKLXZvaWQgREZHX09QRVJBVElPTiB0
cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVS
QVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KEV4ZWNTdGF0ZSosIGludDMyX3QgYnl0ZWNvZGVJbmRl
eCwgaW50MzJfdCBzdHJlYW1JbmRleCkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9O
IHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09Q
RVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coRXhlY1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUlu
ZGV4LCBpbnQzMl90IHN0cmVhbUluZGV4KSBXVEZfSU5URVJOQUw7CiAjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCiAKIH0gLy8gZXh0ZXJuICJDIgogCi1pbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0
WiBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5
cGUpCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRVN0WiBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0
aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7
CiAgICAgY2FzZSBUeXBlSW50ODoKQEAgLTM0Nyw3ICsxODksNyBAQCBpbmxpbmUgUF9ERkdPcGVy
YXRpb25fRVN0WiBvcGVyYXRpb25OZXdUCiAgICAgcmV0dXJuIDA7CiB9CiAKLWlubGluZSBQX0RG
R09wZXJhdGlvbl9FU3RKIG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRGb3JU
eXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRVN0SiBvcGVy
YXRpb25OZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50Rm9yVHlwZShUeXBlZEFycmF5VHlwZSB0
eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgVHlwZUludDg6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlclNldC5oCShyZXZpc2lvbiAxNTY0
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMjE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdSZWdpc3RlclNldF9oCi0jZGVmaW5lIERGR1Jl
Z2lzdGVyU2V0X2gKLQotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKERG
R19KSVQpCi0KLSNpbmNsdWRlICJGUFJJbmZvLmgiCi0jaW5jbHVkZSAiR1BSSW5mby5oIgotI2lu
Y2x1ZGUgPHd0Zi9CaXRtYXAuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewot
Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgdG90YWxOdW1iZXJPZlJlZ2lzdGVycyA9Ci0gICAgR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsKLQot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0ID0KLSAgICAo
dG90YWxOdW1iZXJPZlJlZ2lzdGVycyArIDcpID4+IDM7Ci0KLXR5cGVkZWYgdWludDhfdCBSZWdp
c3RlclNldFBPRFtudW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNldF07Ci0KLWNsYXNzIFJlZ2lzdGVy
U2V0IHsKLXB1YmxpYzoKLSAgICBSZWdpc3RlclNldCgpCi0gICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBudW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNldDsgaS0tOykKLSAgICAgICAgICAg
IG1fc2V0W2ldID0gMDsKLSAgICB9Ci0gICAgCi0gICAgUmVnaXN0ZXJTZXQoY29uc3QgUmVnaXN0
ZXJTZXRQT0QmIG90aGVyKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVy
T2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCi0gICAgICAgICAgICBtX3NldFtpXSA9IG90aGVy
W2ldOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBSZWdpc3RlclNldFBPRCYgYXNQT0QoKSBjb25z
dCB7IHJldHVybiBtX3NldDsgfQotICAgIAotICAgIHZvaWQgY29weUluZm8oUmVnaXN0ZXJTZXRQ
T0QmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVy
T2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCi0gICAgICAgICAgICBvdGhlcltpXSA9IG1fc2V0
W2ldOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChHUFJSZWcgcmVnKQotICAgIHsKLSAgICAg
ICAgc2V0Qml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
c2V0R1BSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRl
eCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgc2V0Qml0KGluZGV4KTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhcihHUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAg
Y2xlYXJCaXQoR1BSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBn
ZXQoR1BSUmVnIHJlZykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5m
bzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBnZXRHUFJCeUluZGV4KHVu
c2lnbmVkIGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGluZGV4IDwgR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwotICAgICAgICByZXR1cm4gZ2V0Qml0KGluZGV4KTsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gUmV0dXJuIHRoZSBpbmRleCd0aCBmcmVlIEdQUi4KLSAgICBHUFJS
ZWcgZ2V0RnJlZUdQUih1bnNpZ25lZCBpbmRleCA9IDApIGNvbnN0Ci0gICAgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAg
ICAgICAgICAgaWYgKCFnZXRHUFJCeUluZGV4KGkpICYmICFpbmRleC0tKQotICAgICAgICAgICAg
ICAgIHJldHVybiBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBJbnZhbGlkR1BSUmVnOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChGUFJSZWcgcmVn
KQotICAgIHsKLSAgICAgICAgc2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBS
SW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRGUFJCeUluZGV4
KHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGluZGV4IDwgRlBSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMpOwotICAgICAgICBzZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnMgKyBpbmRleCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xlYXIoRlBSUmVnIHJlZykK
LSAgICB7Ci0gICAgICAgIGNsZWFyQml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBS
SW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBnZXQoRlBSUmVnIHJl
ZykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnMgKyBGUFJJbmZvOjp0b0luZGV4KHJlZykpOwotICAgIH0KLSAgICAKLSAgICBib29s
IGdldEZQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQoaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7Ci0gICAgICAgIHJldHVybiBn
ZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpbmRleCk7Ci0gICAgfQotICAgIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgotICAgIHZvaWQgc2V0QnlJbmRleCh1bnNp
Z25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHNldChCYW5rSW5mbzo6dG9SZWdpc3RlcihpbmRl
eCkpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICBi
b29sIGdldEJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0
KEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVk
IG51bWJlck9mU2V0R1BScygpIGNvbnN0Ci0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQg
PSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
czsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFnZXRCaXQoaSkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICByZXN1bHQrKzsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZlNldEZQUnMoKSBj
b25zdAotICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAg
ICAgIGlmICghZ2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaSkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXN1bHQrKzsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZlNl
dFJlZ2lzdGVycygpIGNvbnN0Ci0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0b3RhbE51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7
Ci0gICAgICAgICAgICBpZiAoIWdldEJpdChpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIHJlc3VsdCsrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICB2b2lkIHNldEJpdCh1bnNpZ25lZCBpKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAg
bV9zZXRbaSA+PiAzXSB8PSAoMSA8PCAoaSAmIDcpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBj
bGVhckJpdCh1bnNpZ25lZCBpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJl
ck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgbV9zZXRbaSA+PiAzXSAmPSB+KDEgPDwgKGkgJiA3KSk7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgZ2V0Qml0KHVuc2lnbmVkIGkpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQoaSA8IHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMpOwotICAgICAgICByZXR1
cm4gISEobV9zZXRbaSA+PiAzXSAmICgxIDw8IChpICYgNykpKTsKLSAgICB9Ci0gICAgCi0gICAg
UmVnaXN0ZXJTZXRQT0QgbV9zZXQ7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0K
LSNlbHNlIC8vIEVOQUJMRShERkdfSklUKSAtPiBzbyBpZiBERkcgaXMgZGlzYWJsZWQKLQotbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi0vLyBEZWZpbmUgUmVnaXN0ZXJTZXRQT0Qg
dG8gc29tZXRoaW5nIHRoYXQgaXMgYSBQT0QsIGJ1dCBpcyBvdGhlcndpc2UgdXNlbGVzcywKLS8v
IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlZmVyIHRvIHRoaXMgdHlwZSBpbiBjb2RlIHRoYXQgbWF5
IGJlIGNvbXBpbGVkIHdoZW4KLS8vIHRoZSBERkcgaXMgZGlzYWJsZWQuCi0KLXN0cnVjdCBSZWdp
c3RlclNldFBPRCB7IH07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQotCi0jZW5kaWYgLy8gREZHUmVnaXN0ZXJTZXRfaAotCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE1NjQ4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTQxOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJE
RkdSZXBhdGNoLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgotI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIKLSNpbmNsdWRlICJERkdTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgot
I2luY2x1ZGUgIkRGR1RodW5rcy5oIgotI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5o
IgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJPcGVyYXRpb25zLmgiCi0jaW5j
bHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgotI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIu
aCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYv
U3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewot
Ci1zdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVibG9jaywgQ29kZUxvY2F0
aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBuZXdDYWxsZWVGdW5jdGlvbikKLXsKLSAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZWJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcGF0Y2hC
eUlkU2VsZkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25z
dCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwgYm9vbCBjb21wYWN0KQotewotICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotCi0gICAgLy8gT25seSBvcHRp
bWl6ZSBvbmNlIQotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7Ci0KLSAgICAvLyBQYXRjaCB0aGUgc3RydWN0dXJl
IGNoZWNrICYgdGhlIG9mZnNldCBvZiB0aGUgbG9hZC4KLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50
cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBzdHJ1Y3R1cmUp
OwotICAgIHJlcGF0Y2hCdWZmZXIuc2V0TG9hZEluc3RydWN0aW9uSXNBY3RpdmUoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmNvbnZlcnRpYmxlTG9hZEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb1N0b3JhZ2VMb2FkKSwgaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoY29tcGFjdCkKLSAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZz
ZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSk7Ci0gICAgZWxzZQotICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBv
ZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSk7Ci0jZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgIGlmIChjb21wYWN0KSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRj
aChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRp
dmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2go
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxh
dGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
MzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSks
IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9m
ZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7Ci0gICAgfQotI2VuZGlmCi19
Ci0KLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU0NlbGwq
IG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewot
ICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgc3RydWN0dXJl
LT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9j
aykpOwotI2lmIERGR19FTkFCTEUoSklUX0FTU0VSVCkKLSAgICAgICAgLy8gSWYgd2UgZXhlY3V0
ZSB0aGlzIGNvZGUsIHRoZSBvYmplY3QgbXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0
LiBBc3NlcnQKLSAgICAgICAgLy8gdGhpcyBpbiBkZWJ1ZyBtb2Rlcy4KLSAgICAgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gaml0LmJyYW5jaFB0cigKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0gICAgICAgIGpp
dC5icmVha3BvaW50KCk7Ci0gICAgICAgIG9rLmxpbmsoJmppdCk7Ci0jZW5kaWYKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAot
ICAgICAgICBqaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRy
YW5zaXRpb25DaGVjaygKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBNYWNyb0Fzc2VtYmxlciYgaml0
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hH
UFIpCi17Ci0gICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOwotICAgIAotICAgIGFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgcHJvdG90eXBlLmFzQ2VsbCgpLCBwcm90b3R5cGUu
YXNDZWxsKCktPnN0cnVjdHVyZSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsCi0gICAgICAg
IGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcGxhY2VXaXRo
SnVtcChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCi17Ci0gICAgaWYgKE1h
Y3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgp
KSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKAotICAgICAgICAgICAg
UmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVz
cygKLSAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
UHRyQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsKHRhcmdldCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKAotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KAotICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0
Q2hlY2spLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKLX0KLQotc3RhdGlj
IHZvaWQgZW1pdFJlc3RvcmVTY3JhdGNoKE1hY3JvQXNzZW1ibGVyJiBzdHViSml0LCBib29sIG5l
ZWRUb1Jlc3RvcmVTY3JhdGNoLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAmIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZmFpbHVyZUNhc2VzKQotewotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkg
ewotICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKLSAgICAgICAgCi0gICAgICAgIHN1
Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGxpbmsgZmFpbHVy
ZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4gcG9wIHNjcmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFj
ay4KLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAKLSAgICAg
ICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBmYWlsID0gc3R1
YkppdC5qdW1wKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgc3VjY2VzcyA9
IHN0dWJKaXQuanVtcCgpOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlu
a0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NM
YWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbikKLXsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKHN1Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7Ci0gICAgICAgIAotICAgIGlmIChuZWVkVG9S
ZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWwsIHNsb3dDYXNl
QmVnaW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIC8vIGxpbmsgZmFpbHVy
ZSBjYXNlcyBkaXJlY3RseSBiYWNrIHRvIG5vcm1hbCBwYXRoCi0gICAgcGF0Y2hCdWZmZXIubGlu
ayhmYWlsdXJlQ2FzZXMsIHNsb3dDYXNlQmVnaW4pOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rUmVz
dG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNj
cmF0Y2gsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGZhaWx1cmVDYXNlcykKLXsKLSAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIs
IG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotfQotCi1zdGF0aWMg
dm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3Vu
dCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0
aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKLQotICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7Ci0gICAgICAgIAotICAgIEdQ
UlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFz
ZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOwotI2Vu
ZGlmCi0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgYm9v
bCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwotICAgIAotICAgIGlmIChzY3JhdGNoR1BS
ID09IEludmFsaWRHUFJSZWcpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzY3JhdGNo
R1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BS
KTsKLSNlbHNlCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2Ny
YXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIsIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLSAgICAg
ICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOwotICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRj
aCA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWls
dXJlQ2FzZXM7Ci0gICAgCi0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0g
c3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFk
KCk7Ci0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICBwcm90b09iamVjdCA9IGFzT2Jq
ZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7Ci0gICAgICAgIGFk
ZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgIHByb3RvT2JqZWN0LCBwcm90
b09iamVjdC0+c3RydWN0dXJlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1Ykpp
dCwKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgIGN1cnJT
dHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Ci0gICAgfQotICAgIAotICAgIGlmIChpc0lubGluZU9mZnNl
dChvZmZzZXQpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2FkNjQo
cHJvdG9PYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCksIHJlc3VsdEdQUik7Ci0jZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkpLCBy
ZXN1bHRHUFIpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICB9IGVs
c2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIocHJvdG9PYmplY3QtPmJ1dHRlcmZseUFkZHJl
c3MoKSwgcmVzdWx0R1BSKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0Lmxv
YWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5
KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7Ci0j
ZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIHN0dWJKaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJm
bHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7
Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWls
OwotICAgIAotICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygp
KTsKLSAgICAKLSAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xv
d0Nhc2VMYWJlbCk7Ci0gICAgCi0gICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9E
RkdfU1RVQigKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiREZHIHByb3RvdHlwZSBj
aGFpbiBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0
b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN1Y2Nlc3NMYWJlbC5leGVjdXRh
YmxlQWRkcmVzcygpKSk7Ci19Ci0KLXN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQotewotICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBj
aGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAotICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVy
IGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4KLQotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0gICAgCi0gICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5k
ZmcudmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAgIGJv
b2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyIHN0dWJKaXQ7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJ
bnZhbGlkR1BSUmVnKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIp
OwotI2Vsc2UKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0
U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIsIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLSAg
ICAgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICAgICAKLSAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsgCi0gICAgICAgIHN0dWJKaXQubG9hZDgoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQoc3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spKSk7Ci0gICAg
ICAgIAotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAg
IHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5
U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgZmFpbHVyZUNh
c2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3Rlciwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgICAgIHN0dWJKaXQubW92ZShzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICBzdHVi
Sml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigweGZmZmZmZmZmKSwgcmVzdWx0VGFn
R1BSKTsgLy8gSlNWYWx1ZTo6SW50MzJUYWcKLSNlbmRpZgotCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0gICAgICAgIAotICAgICAgICBlbWl0UmVzdG9yZVNj
cmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3Ms
IGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNvZGVCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBsaW5r
UmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5m
bywgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJJ
bmZvLnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCi0gICAgICAgICAg
ICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiREZHIEdldEJ5SWQgYXJyYXkgbGVuZ3RoIHN0
dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygq
ZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgCi0gICAgICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBsYWNlV2l0
aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICAKLSAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgbGVuZ3Ro
IGFjY2VzcyBmb3IgU3RyaW5nLgotCi0gICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2Vz
cyBmb3IgaW1tZWRpYXRlcy4KLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7Ci0gICAg
aWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
IXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICBpZiAoc2xvdC5z
bG90QmFzZSgpID09IGJhc2VWYWx1ZSkgewotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVW
YWx1ZSgpCi0gICAgICAgICAgICB8fCAhTWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWdu
ZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNh
Y2hlZE9mZnNldCgpKSkpIHsKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVwYXRjaEJ5SWRT
ZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZv
LmluaXRHZXRCeUlkU2VsZigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVj
dHVyZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8v
IEZJWE1FOiBvcHRpbWl6ZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzCi0gICAgaWYgKCFzbG90LmlzQ2Fj
aGVhYmxlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgc2l6ZV90IGNvdW50ID0g
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlVmFsdWUsIHNs
b3Quc2xvdEJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpOwotICAgIGlmIChjb3VudCA9PSBJ
bnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cnVj
dHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhl
Yyk7Ci0gICAgCi0gICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5m
bywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2Fs
bFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUp
OwotICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAg
IHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YkluZm8uc3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7Ci0gICAgCi0g
ICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCB0cnVlKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCByZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGJvb2wg
Y2FjaGVkID0gdHJ5Q2FjaGVHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbyk7Ci0gICAgaWYgKCFjYWNoZWQpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4
ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdl
dEJ5SWQpOwotfQotCi1zdGF0aWMgYm9vbCBnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QoCi0g
ICAgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLAotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdComIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdCwgaW50JiBsaXN0SW5kZXgsCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwmIHNsb3dD
YXNlKQotewotICAgIHNsb3dDYXNlID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIAot
ICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkgewotICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCk7Ci0g
ICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LCAwLCBmYWxzZSk7Ci0gICAgICAgIGxpc3RJbmRleCA9IDA7Ci0gICAgfSBlbHNlIGlmIChz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgewotICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZN
YW5hZ2VkUm91dGluZShzbG93Q2FzZSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2Vs
Zkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxLCB0cnVlKTsKLSAgICAgICAgbGlzdElu
ZGV4ID0gMTsKLSAgICB9IGVsc2UgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dl
dF9ieV9pZF9jaGFpbikgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghIXN0dWJJbmZvLnN0dWJS
b3V0aW5lKTsKLSAgICAgICAgc2xvd0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5z
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5mby5zdHViUm91dGluZSwgc3R1YkluZm8udS5nZXRC
eUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hh
aW4uY2hhaW4uZ2V0KCksIHRydWUpOwotICAgICAgICBzdHViSW5mby5zdHViUm91dGluZS5jbGVh
cigpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdCwgMSwgZmFsc2UpOwotICAgICAgICBsaXN0SW5kZXggPSAxOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNz
X2dldF9ieV9pZF9zZWxmX2xpc3QpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qg
PSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBsaXN0
SW5kZXggPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgc2xv
d0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3Rb
bGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgIH0KLSAgICAK
LSAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKGxpc3RJbmRleCA8IFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyB2b2lkIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKQotewot
ICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9p
ZF9zZWxmX2xpc3QpOwotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2sp
OwotICAgIGlmIChzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5kaWRTZWxmUGF0Y2hpbmcpIHsK
LSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCi0gICAgICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBh
dGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBz
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci19Ci0KLXN0YXRpYyBib29sIHRyeUJ1aWxkR2V0
QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQotewotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpCi0gICAgICAgIHx8ICFz
bG90LmlzQ2FjaGVhYmxlKCkKLSAgICAgICAgfHwgIWJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVl
LmFzQ2VsbCgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVy
ZSgpOwotICAgIAotICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAg
ICAgIGlmICghc3R1YkluZm8ucGF0Y2guZGZnLnJlZ2lzdGVyc0ZsdXNoZWQpIHsKLSAgICAgICAg
ICAgIC8vIFdlIGNhbm5vdCBkbyBhcyBtdWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSByZWdpc3Rl
cnMgd2VyZSBub3QgZmx1c2hlZCBwcmlvciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRpY3VsYXIs
Ci0gICAgICAgICAgICAvLyBub24tVmFsdWUgY2FjaGVkIHByb3BlcnRpZXMgcmVxdWlyZSBwbGFu
dGluZyBjYWxscywgd2hpY2ggcmVxdWlyZXMgcmVnaXN0ZXJzIHRvIGhhdmUgYmVlbiBmbHVzaGVk
LiBUaHVzLAotICAgICAgICAgICAgLy8gaWYgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQsIGRv
bid0IGRvIG5vbi1WYWx1ZSBjYWNoaW5nLgotICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVh
YmxlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGludCBsaXN0SW5kZXg7Ci0gICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsIHNsb3dDYXNlOwotCi0gICAgICAgIGlmICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxp
c3RJbmRleCwgc2xvd0Nhc2UpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAK
LSAgICAgICAgc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemUrKzsKLSAgICAgICAg
Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgR1BSUmVn
IHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZh
bHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJz
KS5nZXRGcmVlR1BSKCk7Ci0gICAgICAgIAotICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2
bSwgY29kZUJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdy
b25nU3RydWN0ID0gc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0gICAgICAgIAot
ICAgICAgICAvLyBUaGUgc3RyYXRlZ3kgd2UgdXNlIGZvciBzdHVicyBpcyBhcyBmb2xsb3dzOgot
ICAgICAgICAvLyAxKSBDYWxsIERGRyBoZWxwZXIgdGhhdCBjYWxscyB0aGUgZ2V0dGVyLgotICAg
ICAgICAvLyAyKSBDaGVjayBpZiB0aGVyZSB3YXMgYW4gZXhjZXB0aW9uLCBhbmQgaWYgdGhlcmUg
d2FzLCBjYWxsIHlldCBhbm90aGVyCi0gICAgICAgIC8vICAgIGhlbHBlci4KLSAgICAgICAgCi0g
ICAgICAgIGJvb2wgaXNEaXJlY3QgPSBmYWxzZTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgb3BlcmF0aW9uQ2FsbDsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaGFuZGxlckNh
bGw7Ci0gICAgICAgIEZ1bmN0aW9uUHRyIG9wZXJhdGlvbkZ1bmN0aW9uOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOwotICAgICAgICAKLSAgICAgICAgaWYgKHNsb3QuaXND
YWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAg
ICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
YmFzZUdQUiAhPSBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAg
ICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIp
OwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90
LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAg
ICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNl
bmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAg
ICBvcGVyYXRpb25GdW5jdGlvbiA9IG9wZXJhdGlvbkNhbGxHZXR0ZXI7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKAotICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRl
cigpKS5leGVjdXRhYmxlQWRkcmVzcygpKSwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoaWRlbnQuaW1wbCgpKSk7Ci0gICAgICAgICAgICAgICAgb3Bl
cmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRpb25DYWxsQ3VzdG9tR2V0dGVyOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdo
ZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQot
ICAgICAgICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBtYWRlIGl0IGZyb20uIEl0IGp1c3Qgc28gaGFw
cGVucyB0byBiZSB0aGUgcGxhY2UgdGhhdCB3ZSBhcmUgYXQKLSAgICAgICAgICAgIC8vIHJpZ2h0
IG5vdyEKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4ZWMtPmxvY2F0aW9uQXNSYXdCaXRzKCkpLAotICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgICAgICBzdHViSml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQ
Uik7Ci0jZWxzZQotICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHMocmVzdWx0R1BSLCBy
ZXN1bHRUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5lbWl0
RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgp
OwotICAgICAgICAgICAgaGFuZGxlckNhbGwgPSBzdHViSml0LmNhbGwoKTsKLSAgICAgICAgICAg
IHN0dWJKaXQuanVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNh
Y2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGlmIChi
YXNlR1BSID09IHJlc3VsdFRhZ0dQUikgewotICAgICAgICAgICAgICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgICAgICAg
ICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgICAg
IH0KLSNlbmRpZgotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAg
ICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOwot
I2Vsc2UKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwg
cmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgICAgIGlzRGlyZWN0ID0gdHJ1
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1
YkppdCwgY29kZUJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsod3Jv
bmdTdHJ1Y3QsIHNsb3dDYXNlKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uRnVuY3Rpb24pOwot
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9u
SGFuZGxlcik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmUgPQotICAgICAgICAgICAgY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0g
ICAgICAgICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCi0gICAgICAgICAgICAgICAgICAgIHBh
dGNoQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAoIkRGRyBHZXRCeUlkIHBvbHltb3JwaGlj
IGxpc3QgYWNjZXNzIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICAg
ICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAot
ICAgICAgICAgICAgICAgICp2bSwKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLAotICAgICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSB8fCBz
bG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpOwotICAgICAgICAKLSAgICAgICAgcG9seW1vcnBoaWNT
dHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwotICAgICAgICAK
LSAgICAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHVi
Um91dGluZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFIC0gMSk7Ci0gICAgfQotICAgIAotICAgIGlmIChiYXNlVmFsdWUuYXND
ZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygp
IHx8ICFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICBzaXpl
X3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJh
c2VWYWx1ZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICBpZiAoY291bnQg
PT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBT
dHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWlu
KGV4ZWMpOwotICAgIAotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0OwotICAgIGludCBsaXN0SW5kZXg7Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWwgc2xvd0Nhc2U7Ci0gICAgaWYgKCFnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qodm0s
IGNvZGVCbG9jaywgc3R1YkluZm8sIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgbGlzdEluZGV4
LCBzbG93Q2FzZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBzdHViSW5mby51
LmdldEJ5SWRQcm90b0xpc3QubGlzdFNpemUrKzsKLSAgICAKLSAgICBSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIAotICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0
dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1
cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBzbG93Q2FzZSwgc3R1YlJvdXRpbmUpOwotICAgIAot
ICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUp
OwotICAgIAotICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHViSW5mbywg
c3R1YlJvdXRpbmUuZ2V0KCkpOwotICAgIAotICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7Ci19Ci0KLXZvaWQgYnVpbGRHZXRCeUlETGlzdChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQotewotICAgIGJvb2wgZG9udENoYW5nZUNhbGwgPSB0cnlCdWlsZEdldEJ5SURMaXN0
KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7Ci0gICAgaWYg
KCFkb250Q2hhbmdlQ2FsbCkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCks
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Ci19Ci0KLXN0
YXRpYyBWX0RGR09wZXJhdGlvbl9FSkNJIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlv
bihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3Qp
Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKLSAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7Ci0gICAgfQotICAgIGlmIChwdXRLaW5k
ID09IERpcmVjdCkKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3Q7Ci0gICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7Ci19Ci0KLXN0YXRpYyBW
X0RGR09wZXJhdGlvbl9FSkNJIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9u
KGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQotewotICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkK
LSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0
OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdDsKLSAgICB9
Ci0gICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdDsKLSAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdEJ1aWxkTGlzdDsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHVi
KAotICAgIEV4ZWNTdGF0ZSogZXhlYywKLSAgICBKU1ZhbHVlLAotICAgIGNvbnN0IElkZW50aWZp
ZXImLAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwKLSAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sCi0gICAgUHV0S2luZCwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwK
LSAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
R1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5i
YXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKLSNl
bmRpZgotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgYm9v
bCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwotI2lmIEVOQUJMRShXUklURV9CQVJSSUVS
X1BST0ZJTElORykKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjI7Ci0gICAgY29uc3QgYm9vbCB3cml0
ZUJhcnJpZXJOZWVkZWQgPSB0cnVlOwotI2Vsc2UKLSAgICBjb25zdCBib29sIHdyaXRlQmFycmll
ck5lZWRlZCA9IGZhbHNlOwotI2VuZGlmCi0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXIgc3R1Ykpp
dDsKLSAgICAKLSAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnICYmICh3cml0ZUJh
cnJpZXJOZWVkZWQgfHwgaXNPdXRPZkxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKSB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklU
OjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAgIHNj
cmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1
ZUdQUiwgdmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
ID0gdHJ1ZTsKLSAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOwotICAgIH0KLQotICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJhZFN0cnVjdHVyZSA9IHN0dWJKaXQuYnJhbmNoUHRyKAot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKLSAgICAKLSNpZiBFTkFC
TEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzY3Jh
dGNoR1BSMiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVl
R1BSLCBzY3JhdGNoR1BSKTsKLSNlbHNlCi0gICAgc2NyYXRjaEdQUjIgPSBTcGVjdWxhdGl2ZUpJ
VDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIsIHNjcmF0
Y2hHUFIpOwotI2VuZGlmCi0gICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIyKTsKLSAgICBTcGVj
dWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0gICAgc3R1YkppdC5w
b3Aoc2NyYXRjaEdQUjIpOwotI2VuZGlmCi0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBp
ZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCi0gICAgICAgIHN0dWJKaXQu
c3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9y
ZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJ
bkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAg
IH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNp
emVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMy
KHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJ
bkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0K
LSNlbmRpZgotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKLSAgICAKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNj
cmF0Y2gpIHsKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgIHN1Y2Nl
c3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIGJhZFN0cnVjdHVyZS5saW5r
KCZzdHViSml0KTsKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgIGZh
aWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdWNjZXNzID0g
c3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIGZhaWx1cmUgPSBiYWRTdHJ1Y3R1cmU7Ci0gICAgfQot
ICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29k
ZUJsb2NrKCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
RG9uZSkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKLSAg
ICAgICAgICAgIAotICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIo
Ci0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkRGRyBQdXRCeUlkIHJlcGxhY2Ugc3R1
YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMt
PmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0Rv
bmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5z
aXRpb25TdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywKLSAgICBKU1ZhbHVlLAotICAgIGNvbnN0
IElkZW50aWZpZXImLAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwKLSAgICBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgUHV0S2luZCBwdXRLaW5kLAotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlLAotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAotICAgIFN0cnVj
dHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJl
TGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOwotICAgIAot
ICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2guZGZn
LnVzZWRSZWdpc3RlcnMpOwotICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwotI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVUYWdHUFIpOwotI2VuZGlmCi0g
ICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOwotICAgIAotICAgIENDYWxsSGVscGVycyBzdHVi
Sml0KHZtKTsKLSAgICAgICAgICAgIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQ
Uik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsKLSAgICAKLSAgICBib29s
IG5lZWRTZWNvbmRTY3JhdGNoID0gZmFsc2U7Ci0gICAgYm9vbCBuZWVkVGhpcmRTY3JhdGNoID0g
ZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIG5lZWRTZWNv
bmRTY3JhdGNoID0gdHJ1ZTsKLSNlbmRpZgotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCi0gICAgICAgICYm
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBuZWVkU2Vjb25k
U2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVlOwotICAgIH0K
LQotICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKLSAgICBpZiAobmVlZFNlY29uZFNjcmF0Y2gpIHsK
LSAgICAgICAgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0g
ICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBiYXNlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNj
cmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNj
cmF0Y2hHUFIxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BS
UmVnOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKLSAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkg
ewotICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
LSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQo
c2NyYXRjaEdQUjMgIT0gdmFsdWVHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0g
c2NyYXRjaEdQUjEpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjIp
OwotICAgIH0gZWxzZQotICAgICAgICBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7Ci0gICAg
ICAgICAgICAKLSAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmco
c3R1YkppdCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwot
ICAgICAgICAgICAgCi0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgCi0gICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvbGRTdHJ1Y3R1cmUpKSk7Ci0gICAgCi0gICAgYWRkU3Ry
dWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICBvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3Rv
dHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNl
cywKLSAgICAgICAgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgCi0gICAgaWYgKHB1dEtpbmQg
PT0gTm90RGlyZWN0KSB7Ci0gICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0
ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7Ci0gICAgICAgICAgICBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgKCppdCktPnN0b3JlZFBy
b3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVD
YXNlcywKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgQVNTRVJUKG5lZWRTZWNv
bmRTY3JhdGNoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gSW52YWxpZEdQUlJlZyk7Ci0g
ICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVy
ZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1aXJlcyBpdAotICAgIFNwZWN1bGF0aXZlSklUOjp3cml0
ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0jZW5kaWYKLSAgICAKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0gICAgYm9vbCBzY3JhdGNoR1BSMUhhc1N0
b3JhZ2UgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzaXpl
X3QgbmV3U2l6ZSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1Zh
bHVlKTsKLSAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0tPmhl
YXAuc3RvcmFnZUFsbG9jYXRvcigpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigm
Y29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxl
cjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNo
R1BSMSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGll
ZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgIHN0dWJKaXQubmVn
UHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVu
ZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQo
bmV3U2l6ZSA+IG9sZFNpemUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUjEpOwotICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3ViUHRyKE1hY3JvQXNzZW1ibGVy
OjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hH
UFIxKSk7Ci0gICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVk
QWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAgICAgICAgc3R1YkppdC5uZWdQ
dHIoc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5k
KSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAg
ICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIxID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0g
b2xkIHN0b3JhZ2UsIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCi0gICAgICAgICAgICBmb3IgKHB0
cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNp
emUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewotICAgICAgICAgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMywgLShvZmZzZXQgKyBz
aXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAg
ICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoR1BSMSwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9p
ZCopKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdHVi
Sml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKLSAgICAgICAgc2NyYXRjaEdQUjFIYXNT
dG9yYWdlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdHViSml0LnN0b3JlUHRyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKLSAgICAgICAgc3R1
YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZs
eShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSB7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsg
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAr
IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQot
ICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAg
c3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWls
dXJlOwotICAgICAgICAgICAgCi0gICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygp
KSB7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0
dWJKaXQpOwotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0KLSAgICAgICAgZmFp
bHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNl
ZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0KTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQu
anVtcCgpOwotICAgIH0gZWxzZQotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0g
ICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBzdWNjZXNzSW5TbG93UGF0aDsKLSAgICAKLSAgICBpZiAoc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSkgewotICAgICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKLSAgICAgICAgCi0gICAgICAg
IGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOwotICAg
ICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JT
aXplKGFsbG9jYXRvci5kZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemUoKSk7Ci0gICAgICAgIGFsbG9j
YXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXIoc3R1YkppdCwgc2NyYXRj
aEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJK
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xv
dC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAgIHN0dWJKaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNo
ZWRPZmZzZXQoKSksIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgb3Bl
cmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVz
ZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlcihzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3Jh
dGNoR1BSMSk7Ci0gICAgICAgIHN1Y2Nlc3NJblNsb3dQYXRoID0gc3R1YkppdC5qdW1wKCk7Ci0g
ICAgfQotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhl
Yy0+Y29kZUJsb2NrKCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvRG9uZSkpOwotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkKLSAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwotICAgIGVsc2UK
LSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIGZhaWx1cmVMYWJlbCk7Ci0g
ICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25D
YWxsLCBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dCk7Ci0gICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoc3VjY2Vzc0luU2xvd1BhdGgsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsK
LSAgICB9Ci0gICAgCi0gICAgc3R1YlJvdXRpbmUgPQotICAgICAgICBjcmVhdGVKSVRTdHViUm91
dGluZSgKLSAgICAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAotICAgICAgICAgICAgICAgIHBh
dGNoQnVmZmVyLAotICAgICAgICAgICAgICAgICgiREZHIFB1dEJ5SWQgJXN0cmFuc2l0aW9uIHN0
dWIgKCVwIC0+ICVwKSBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkgPyAicmVhbGxvY2F0aW5nICIgOiAiIiwKLSAgICAgICAgICAgICAgICAg
ICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgIHRvQ1N0cmlu
ZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICAgICAq
dm0sCi0gICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksCi0g
ICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLAotICAgICAgICAgICAgc3RydWN0dXJlKTsKLX0KLQotc3Rh
dGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7Ci0KLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7Ci0gICAgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsKLSAgICAKLSAgICBp
ZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChz
dHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAgIGlmIChzbG90LmJhc2UoKSA9
PSBiYXNlVmFsdWUpIHsKLSAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xv
dDo6TmV3UHJvcGVydHkpIHsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9j
LCBpZiB3ZSBkb24ndCBoYXZlCi0gICAgICAgICAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1h
a2UgaXQgaGFwcGVuLgotICAgICAgICAgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
IDwgNgotICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgICAgICAgICAmJiBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhl
IGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKLSAgICAg
ICAgICAgIC8vIGluZGV4aW5nIHN0b3JhZ2UuCi0gICAgICAgICAgICBpZiAob2xkU3RydWN0dXJl
LT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWlu
KGV4ZWMsIGJhc2VDZWxsKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFp
biogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCi0gICAgICAgICAg
ICAgICAgZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCi0g
ICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAot
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwKLSAgICAgICAgICAgICAg
ICBzdHViSW5mby5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
Lmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvU3RydWN0Q2hlY2spLAotICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRl
TGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlw
ZUNoYWluLCBwdXRLaW5kID09IERpcmVjdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9w
cmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsK
LSAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKCp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBib29sIGNhY2hlZCA9IHRyeUNhY2hlUHV0QnlJRChl
eGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwot
ICAgIGlmICghY2FjaGVkKQotICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVu
Y3Rpb24oc2xvdCwgcHV0S2luZCkpOwotfQotCi1zdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRM
aXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotCi0g
ICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBK
U0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCk7Ci0gICAgCi0gICAgaWYgKCFzbG90LmlzQ2Fj
aGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3RydWN0dXJlLT5pc1Vu
Y2FjaGVhYmxlRGljdGlvbmFyeSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBP
cHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSB7
Ci0gICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2xvdC50
eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewotICAgICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ug
d2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKLSAgICAgICAgICAgIC8v
IGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCi0gICAgICAgICAgICBpZiAoR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2Ci0gICAgICAgICAgICAgICAgJiYgb2xkU3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KQotICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0
aGUgc3RydWN0dXJlIGhhcwotICAgICAgICAgICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KLSAgICAg
ICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZUNlbGwpID09IEludmFsaWRQcm90b3R5
cGVDaGFpbikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJv
dG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlJ3JlIG5v
dyBjb21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBh
Y2NvcmRpbmdseS4KLSAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpm
cm9tKAotICAgICAgICAgICAgICAgIHB1dEtpbmQsIHN0dWJJbmZvLAotICAgICAgICAgICAgICAg
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGVt
aXRQdXRUcmFuc2l0aW9uU3R1YigKLSAgICAgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCi0gICAgICAgICAgICAgICAgc3Ry
dWN0dXJlLCBvbGRTdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAotICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKLSAgICAgICAg
ICAgICAgICBzdHViUm91dGluZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxpc3QtPmFk
ZEFjY2VzcygKLSAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKAotICAg
ICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAg
ICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwK
LSAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1v
Z3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KLSAgICAgICAgICAgIGxpc3QgPSBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKAotICAgICAgICAgICAgICAgIHB1dEtpbmQsIHN0dWJJ
bmZvLAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGVtaXRQdXRSZXBsYWNlU3R1YigKLSAgICAgICAgICAgICAgICBl
eGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCi0g
ICAgICAgICAgICAgICAgc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50
U2xvd1BhdGhUYXJnZXQoKSksIHN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgbGlzdC0+YWRkQWNjZXNzKAotICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnJlcGxh
Y2UoCi0gICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBzdHViUm91dGluZSkpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJs
b2NrKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RD
aGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2Vu
ZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Ci0gICAgICAgIAotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIGJ1
aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIGJvb2wg
Y2FjaGVkID0gdHJ5QnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFt
ZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwotICAgIGlmICghY2FjaGVkKQotICAgICAgICBy
ZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotfQot
Ci1zdGF0aWMgYm9vbCB0cnlSZXBhdGNoSW4oCi0gICAgRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIHdhc0ZvdW5kLAotICAgIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAg
IGlmICghYmFzZS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICh3YXNGb3VuZCkgewotICAgICAg
ICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJh
c2UtPnN0cnVjdHVyZSgpOwotICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldElnbm9yZWQ7
Ci0gICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2Vz
cyhleGVjLCBiYXNlLCB3YXNGb3VuZCA/IHNsb3Quc2xvdEJhc2UoKSA6IEpTVmFsdWUoKSwgaWRl
bnQsIG9mZnNldElnbm9yZWQpOwotICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hh
aW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKLSAgICBpbnQgbGlzdEluZGV4
OwotICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmhv
dFBhdGhCZWdpbjsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsOwotICAgIAot
ICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkgewotICAgICAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KCk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRJbkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LCAwKTsKLSAgICAgICAgc2xvd0Nhc2VMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpOwotICAgICAgICBsaXN0SW5kZXggPSAwOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2luX2xp
c3QpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmluTGlz
dC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmluTGlzdC5s
aXN0U2l6ZTsKLSAgICAgICAgc2xvd0Nhc2VMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFp
bihleGVjKTsKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIAot
ICAgIHsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lz
dGVycykuZ2V0RnJlZUdQUigpOwotICAgICAgICAKLSAgICAgICAgQ0NhbGxIZWxwZXJzIHN0dWJK
aXQodm0pOwotICAgICAgICAKLSAgICAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaDsKLSAg
ICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgewotICAgICAgICAgICAgc2Ny
YXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3Vs
dEdQUik7Ci0gICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQoc3R1YkppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsKLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogY3Vy
clN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4q
IGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
dW50OyArK2ksICsraXQpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09i
amVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAg
ICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3RvdHlw
ZSwgcHJvdG90eXBlLT5zdHJ1Y3R1cmUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBz
dHViSml0LAotICAgICAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4od2FzRm91bmQpKSksIHJlc3Vs
dEdQUik7Ci0jZWxzZQotICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMih3YXNGb3VuZCksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0gICAgICAgIAotICAgICAgICBl
bWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hH
UFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgICAgIAotICAgICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKLQot
ICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3Jh
dGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VM
YWJlbCk7Ci0gICAgICAgIAotICAgICAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9S
X0RGR19TVFVCKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBJ
biAoZm91bmQgPSAlcykgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAg
ICAgICAgd2FzRm91bmQgPyAieWVzIiA6ICJubyIsIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2Nr
KCkpLmRhdGEoKSwKLSAgICAgICAgICAgICAgICBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJl
c3MoKSkpOwotICAgIH0KLSAgICAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3Rb
bGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91
dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKLSAgICBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZSsr
OwotICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQo
MCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAg
Ci0gICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAx
KTsKLX0KLQotdm9pZCByZXBhdGNoSW4oCi0gICAgRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJh
c2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIHdhc0ZvdW5kLAotICAgIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlm
ICh0cnlSZXBhdGNoSW4oZXhlYywgYmFzZSwgaWRlbnQsIHdhc0ZvdW5kLCBzbG90LCBzdHViSW5m
bykpCi0gICAgICAgIHJldHVybjsKLSAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25Jbik7Ci19Ci0KLXN0YXRpYyB2
b2lkIGxpbmtTbG93Rm9yKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFZNKiB2bSwgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsK
LSAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0
dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZp
cnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLX0KLQotdm9pZCBsaW5rRm9y
KEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayog
Y2FsbGVlQ29kZUJsb2NrLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgQVNTRVJUKCFj
YWxsTGlua0luZm8uc3R1Yik7Ci0gICAgCi0gICAgLy8gSWYgeW91J3JlIGJlaW5nIGNhbGwtbGlu
a2VkIGZyb20gYSBERkcgY2FsbGVyIHRoZW4geW91IG9idmlvdXNseSBkaWRuJ3QgZ2V0IGlubGlu
ZWQuCi0gICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKLSAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5t
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgIAotICAgIENvZGVCbG9jayogY2Fs
bGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0q
IHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotICAgIAotICAgIEFTU0VSVCghY2FsbExpbmtJ
bmZvLmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby5jYWxsZWUuc2V0KGV4ZWMtPmNhbGxl
ckZyYW1lKCktPnZtKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7Ci0gICAgY2FsbExpbmtJbmZvLmxhc3RTZWVu
Q2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsZXJDb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxM
aW5rSW5mby5ob3RQYXRoT3RoZXIsIGNvZGVQdHIpOwotICAgIAotICAgIGlmIChjYWxsZWVDb2Rl
QmxvY2spCi0gICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLT5j
YWxsZXJGcmFtZSgpLCAmY2FsbExpbmtJbmZvKTsKLSAgICAKLSAgICBpZiAoa2luZCA9PSBDb2Rl
Rm9yQ2FsbCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVy
YXRvcikuY29kZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQo
a2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVy
LCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQotdm9pZCBsaW5rU2xv
d0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sg
PSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSBjYWxsZXJD
b2RlQmxvY2stPnZtKCk7Ci0gICAgCi0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNh
bGxlckNvZGVCbG9jayk7Ci0gICAgCi0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0s
IGNhbGxMaW5rSW5mbywga2luZCk7Ci19Ci0KLXZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0
ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29k
ZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQotewotICAgIEFTU0VSVCghY2FsbExpbmtJ
bmZvLnN0dWIpOwotICAgIAotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+
Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2Nr
LT52bSgpOwotICAgIAotICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+
KGNhbGxMaW5rSW5mby5jYWxsZWVHUFIpOwotICAgIAotICAgIENDYWxsSGVscGVycyBzdHViSml0
KHZtLCBjYWxsZXJDb2RlQmxvY2spOwotICAgIAotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzbG93UGF0aC5hcHBlbmQo
Ci0gICAgICAgIHN0dWJKaXQuYnJhbmNoVGVzdDY0KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpOb25aZXJvLCBjYWxsZWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotI2Vsc2UK
LSAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMg
YSBjZWxsLgotI2VuZGlmCi0gICAgCi0gICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICBzdHVi
Sml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUpKSk7Ci0gICAgCi0gICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICBzdHViSml0LmJy
YW5jaFB0cigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4
ZWN1dGFibGUoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhl
Y3V0YWJsZSkpKTsKLSAgICAKLSAgICBzdHViSml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigp
KSwKLSAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBzdHViSml0LnN0b3JlNjQoCi0gICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BS
LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNj
b3BlQ2hhaW4pKSk7Ci0jZWxzZQotICAgIHN0dWJKaXQuc3RvcmVQdHIoCi0gICAgICAgIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lz
dGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgIHN0dWJKaXQuc3RvcmUzMigKLSAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCi0gICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFp
bikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
KTsKLSNlbmRpZgotICAgIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBzdHViSml0Lm5l
YXJDYWxsKCk7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IHN0dWJKaXQuanVtcCgpOwot
ICAgIAotICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOwotICAgIHN0dWJKaXQubW92ZShjYWxs
ZWVHUFIsIEdQUkluZm86Om5vbkFyZ0dQUjApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
c3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
LCBHUFJJbmZvOjpub25BcmdHUFIxKTsKLSNlbmRpZgotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7Ci0gICAgc3R1YkppdC5yZXN0
b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBK
SVRDb21waWxlcjo6SnVtcCBzbG93ID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBjYWxsZXJDb2RlQmxvY2spOwotICAgIAot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxl
QWRkcmVzcygpKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvdywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dl
bmVyYXRvcikuY29kZSgpKSk7Ci0gICAgCi0gICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRp
bmU+IHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCi0g
ICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAg
ICAgICAgICAoIkRGRyBjbG9zdXJlIGNhbGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwg
dGFyZ2V0ICVwICglcykiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqY2FsbGVyQ29kZUJs
b2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIGNvZGVQdHIuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgdG9DU3RyaW5nKHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jaykpLmRh
dGEoKSkpLAotICAgICAgICAqdm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4pKTsKLSAgICAK
LSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKLSAgICAK
LSAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKLSAgICAgICAgUmVwYXRjaEJ1ZmZl
cjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBh
dGhCZWdpbiksCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKSk7Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5m
bywgQ29kZUZvckNhbGwpOwotICAgIAotICAgIGNhbGxMaW5rSW5mby5zdHViID0gc3R1YlJvdXRp
bmUucmVsZWFzZSgpOwotICAgIAotICAgIEFTU0VSVCghY2FsbGVlQ29kZUJsb2NrIHx8IGNhbGxl
ZUNvZGVCbG9jay0+aXNJbmNvbWluZ0NhbGxBbHJlYWR5TGlua2VkKCZjYWxsTGlua0luZm8pKTsK
LX0KLQotdm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKLSAg
ICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5w
YXRjaC5kZmcuZGVsdGFDaGVja0ltbVRvQ2FsbCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpj
YW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRo
UGF0Y2goCi0gICAgICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNo
UHRyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUiksCi0gICAgICAg
ICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7Ci0gICAgfQotICAgIHJlcGF0Y2hCdWZm
ZXIucmVwYXRjaChzdHJ1Y3R1cmVMYWJlbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2Vk
UG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNo
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKLSNlbHNlCi0gICAg
cmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFi
ZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9y
U3RvcmUpLCAwKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNlbmRpZgotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93
Q2FzZSkpOwotfQotCi12b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVm
ZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgVl9ERkdPcGVyYXRpb25f
RUpDSSB1bm9wdGltaXplZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfREZHT3BlcmF0aW9uX0VK
Q0k+KE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgb3B0
aW1pemVkRnVuY3Rpb247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
dHJpY3RCdWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpCi0g
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9w
dGltaXplOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdCk7Ci0gICAgICAgIG9w
dGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXpl
OwotICAgIH0KLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIg
c3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRy
QXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRvQ2Fs
bCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5j
aFB0cldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxh
Y2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICBSZXBhdGNo
QnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVj
dHVyZUxhYmVsKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5m
by5wYXRjaC5kZmcuYmFzZUdQUiksCi0gICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2lu
dGVyKSk7Ci0gICAgfQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHJ1Y3R1cmVMYWJlbCwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRP
clN0b3JlKSwgMCk7Ci0jZWxzZQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRj
aChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNlbmRpZgot
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1w
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotfQotCi12b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYg
cmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoMCksIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
LQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2
aXNpb24gMTU2NDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIERGR1JlcGF0Y2hfaAotI2RlZmluZSBERkdS
ZXBhdGNoX2gKLQotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKERGR19K
SVQpCi0KLSNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgotI2luY2x1ZGUgIkRGR09wZXJhdGlv
bnMuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi12b2lkIHJlcGF0Y2hH
ZXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBidWlsZEdldEJ5SURMaXN0KEV4
ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0
YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0
cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIFB1dEtpbmQpOwotdm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSosIEpT
VmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIFB1dEtpbmQpOwotdm9pZCByZXBhdGNoSW4oRXhlY1N0YXRlKiwgSlNDZWxs
KiwgY29uc3QgSWRlbnRpZmllciYsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYs
IFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJ
bmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotdm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUq
LCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLXZvaWQgbGlua0Nsb3N1
cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIFN0cnVjdHVyZSos
IEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsKLXZvaWQgcmVzZXRHZXRC
eUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldFB1dEJ5
SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0SW4oUmVw
YXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKLQotI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKLXN0cnVj
dCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotbmFtZXNwYWNlIERGRyB7Ci0KLWlubGluZSBOT19SRVRV
Uk5fRFVFX1RPX0NSQVNIIHZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotaW5saW5lIE5P
X1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0
cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci1pbmxp
bmUgTk9fUkVUVVJOIHZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1Yklu
Zm8mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLQotfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0jZW5kaWYgLy8gREZHUmVw
YXRjaF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE1NjQ4MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMjAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAotI2Rl
ZmluZSBERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAotCi0jaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkRGR1JlZ2lzdGVyU2V0
LmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewotCi0vLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgbG93LWxldmVsIHJlZ2lzdGVy
IGFsbG9jYXRvciBmb3IgdXNlIGluIHN0dWJzLgotCi1jbGFzcyBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IgewotcHVibGljOgotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcihjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycykKLSAgICAgICAgOiBtX3VzZWRSZWdpc3RlcnModXNlZFJl
Z2lzdGVycykKLSAgICAgICAgLCBtX2RpZFJldXNlUmVnaXN0ZXJzKGZhbHNlKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGxvY2soVCByZWcp
IHsgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHJlZyk7IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBCYW5rSW5mbz4KLSAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIGFsbG9j
YXRlU2NyYXRjaCgpCi0gICAgewotICAgICAgICAvLyBGaXJzdCB0cnkgdG8gYWxsb2NhdGUgYSBy
ZWdpc3RlciB0aGF0IGlzIHRvdGFsbHkgZnJlZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEJhbmtJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgICAgICB0
eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIHJlZyA9IEJhbmtJbmZvOjp0b1JlZ2lzdGVy
KGkpOwotICAgICAgICAgICAgaWYgKCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVnKQotICAgICAg
ICAgICAgICAgICYmICFtX3VzZWRSZWdpc3RlcnMuZ2V0KHJlZykKLSAgICAgICAgICAgICAgICAm
JiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdldChyZWcpKSB7Ci0gICAgICAgICAgICAgICAgbV9zY3Jh
dGNoUmVnaXN0ZXJzLnNldChyZWcpOwotICAgICAgICAgICAgICAgIHJldHVybiByZWc7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFNpbmNlIHRoYXQgZmFp
bGVkLCB0cnkgdG8gYWxsb2NhdGUgYSByZWdpc3RlciB0aGF0IGlzIG5vdCB5ZXQKLSAgICAgICAg
Ly8gbG9ja2VkIG9yIHVzZWQgZm9yIHNjcmF0Y2guCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBCYW5rSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICAgICAg
dHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSByZWcgPSBCYW5rSW5mbzo6dG9SZWdpc3Rl
cihpKTsKLSAgICAgICAgICAgIGlmICghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlZykgJiYgIW1f
c2NyYXRjaFJlZ2lzdGVycy5nZXQocmVnKSkgewotICAgICAgICAgICAgICAgIG1fc2NyYXRjaFJl
Z2lzdGVycy5zZXQocmVnKTsKLSAgICAgICAgICAgICAgICBtX2RpZFJldXNlUmVnaXN0ZXJzID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVnOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICAvLyBXZSBmYWlsZWQuCi0gICAgICAgIENSQVNIKCk7Ci0g
ICAgICAgIC8vIE1ha2Ugc29tZSBzaWxseSBjb21waWxlcnMgaGFwcHkuCi0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlPigtMSk7Ci0gICAg
fQotICAgIAotICAgIEdQUlJlZyBhbGxvY2F0ZVNjcmF0Y2hHUFIoKSB7IHJldHVybiBhbGxvY2F0
ZVNjcmF0Y2g8R1BSSW5mbz4oKTsgfQotICAgIEZQUlJlZyBhbGxvY2F0ZVNjcmF0Y2hGUFIoKSB7
IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8RlBSSW5mbz4oKTsgfQotICAgIAotICAgIGJvb2wgZGlk
UmV1c2VSZWdpc3RlcnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkUmV1c2VS
ZWdpc3RlcnM7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnNC
eVB1c2hpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9kaWRS
ZXVzZVJlZ2lzdGVycykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkgJiYg
bV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKLSAgICAgICAgICAgICAgICBqaXQu
c3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQ
UkluZm86OnRvUmVnaXN0ZXIoaSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMu
Z2V0R1BSQnlJbmRleChpKSkKLSAgICAgICAgICAgICAgICBqaXQucHVzaChHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlc3RvcmVSZXVz
ZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCkKLSAgICB7Ci0gICAgICAg
IGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBp
LS07KSB7Ci0gICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgo
aSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAg
aml0LnBvcChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAgfQotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAg
ICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpICYmIG1fdXNlZFJl
Z2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7Ci0gICAgICAgICAgICAgICAgaml0LmxvYWREb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBGUFJJbmZvOjp0b1JlZ2lz
dGVyKGkpKTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgZGVzaXJlZFNj
cmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLm51bWJlck9m
U2V0UmVnaXN0ZXJzKCkgKiBzaXplb2YoSlNWYWx1ZSk7IH0KLSAgICAKLSAgICB2b2lkIHByZXNl
cnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3Jh
dGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJS
ZWcpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAg
ICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpIHsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIoaSks
IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigp
KSArIChjb3VudCsrKSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUklu
Zm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1
ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcgJiYgIW1fbG9ja2Vk
UmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJC
eUluZGV4KGkpKQotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lz
dGVyKGkpOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0g
SW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdl
dEZQUkJ5SW5kZXgoaSkpIHsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZm
ZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
ICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSwgc2NyYXRjaEdQUik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQg
KiBzaXplb2YoSlNWYWx1ZSkgPT0gZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkpOwotICAgICAg
ICAKLSAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRj
aEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgaml0LnN0
b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4o
Y291bnQgKiBzaXplb2YoSlNWYWx1ZSkpKSwgc2NyYXRjaEdQUik7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgcmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxl
ciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9
IEludmFsaWRHUFJSZWcpCi0gICAgewotICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlk
R1BSUmVnKSB7Ci0gICAgICAgICAgICAvLyBGaW5kIGEgc2NyYXRjaCByZWdpc3Rlci4KLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgo
aSkgfHwgbV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0
b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJl
Zyk7Ci0gICAgICAgIAotICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIHNjcmF0
Y2hHUFIpOwotCi0gICAgICAgIC8vIFJlc3RvcmUgZG91YmxlIHJlZ2lzdGVycyBmaXJzdC4KLSAg
ICAgICAgdW5zaWduZWQgY291bnQgPSBtX3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRHUFJzKCk7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBp
LS07KSB7Ci0gICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkp
IHsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIo
KSkgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZERv
dWJsZShzY3JhdGNoR1BSLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY291bnQgPSAwOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAg
ICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKSB7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgICAgICAgICBqaXQubG9hZDY0KHN0YXRpY19jYXN0PEVuY29kZWRKU1Zh
bHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSwgR1BSSW5mbzo6
dG9SZWdpc3RlcihpKSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoc3RhdGlj
X2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNv
dW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSNlbmRpZgotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBSZWdpc3RlclNldCBtX3VzZWRS
ZWdpc3RlcnM7Ci0gICAgUmVnaXN0ZXJTZXQgbV9sb2NrZWRSZWdpc3RlcnM7Ci0gICAgUmVnaXN0
ZXJTZXQgbV9zY3JhdGNoUmVnaXN0ZXJzOwotICAgIGJvb2wgbV9kaWRSZXVzZVJlZ2lzdGVyczsK
LX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQotCi0jZW5kaWYgLy8gREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yX2gKLQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCShyZXZpc2lvbiAxNTY0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRo
R2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Ns
b3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAi
T2JqZWN0UHJvdG90eXBlLmgiCkBAIC0yNjEsNyArMjYyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBwYXls
b2FkU3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2
YWx1ZVBheWxvYWRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKIAogICAg
IEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwotICAgIFZfREZH
T3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkQ2FsbDsKKyAgICBWX0pJVE9wZXJhdGlvbl9FSkNJIG9w
dGltaXplZENhbGw7CiAgICAgaWYgKG1faml0LnN0cmljdE1vZGVGb3IobV9jdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbikpIHsKICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQogICAgICAgICAg
ICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsK
QEAgLTQ0MCw3ICs0NDEsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNv
bXBhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBo
ZWxwZXJGdW5jdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhv
bGVCcmFuY2goTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9u
KQogewogICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOwog
ICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwpA
QCAtNTEyLDEzICs1MTMsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQ
ZWVwaAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZT4KIGNsYXNzIENvbXBhcmVBbmRCb3hC
b29sZWFuU2xvd1BhdGhHZW5lcmF0b3IKLSAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0
b3I8SnVtcFR5cGUsIFNfREZHT3BlcmF0aW9uX0VKSiwgR1BSUmVnPiB7CisgICAgOiBwdWJsaWMg
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0pJVE9wZXJhdGlvbl9FSkosIEdQUlJl
Zz4gewogcHVibGljOgogICAgIENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3Io
CiAgICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsCi0gICAgICAgIFNf
REZHT3BlcmF0aW9uX0VKSiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcs
IEdQUlJlZyBhcmcxUGF5bG9hZCwKKyAgICAgICAgU19KSVRPcGVyYXRpb25fRUpKIGZ1bmN0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLAogICAg
ICAgICBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQotICAgICAgICA6IENhbGxT
bG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19ERkdPcGVyYXRpb25fRUpKLCBHUFJSZWc+KAor
ICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25f
RUpKLCBHUFJSZWc+KAogICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgTmVlZFRvU3Bp
bGwsIHJlc3VsdCkKICAgICAgICAgLCBtX2FyZzFUYWcoYXJnMVRhZykKICAgICAgICAgLCBtX2Fy
ZzFQYXlsb2FkKGFyZzFQYXlsb2FkKQpAQCAtNTQ2LDcgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAg
R1BSUmVnIG1fYXJnMlBheWxvYWQ7CiB9OwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24p
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShO
b2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0pJ
VE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7CkBAIC0zNjA2LDcgKzM2MDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoRmluYWxPYmpl
Y3RUeXBlKSkpOwogICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZVBheWxvYWRHUFIsIHRlbXBH
UFIpOwogICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZVRhZ0dQUiwgdGVtcFRhZ0dQUik7Ci0g
ICAgICAgIEpfREZHT3BlcmF0aW9uX0VKIGZ1bmN0aW9uOworICAgICAgICBKX0pJVE9wZXJhdGlv
bl9FSiBmdW5jdGlvbjsKICAgICAgICAgaWYgKG1faml0LmdyYXBoKCkuZXhlY3V0YWJsZUZvcihu
b2RlLT5jb2RlT3JpZ2luKS0+aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICBmdW5jdGlvbiA9
IG9wZXJhdGlvblRvVGhpc1N0cmljdDsKICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAx
NTY0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQXJyYXlQcm90
b3R5cGUuaCIKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkRGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiCisjaW5jbHVk
ZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAj
aW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUu
aCIKQEAgLTI1Myw3ICsyNTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlk
KENvZGVPCiAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwo
KTsKICAgICAKLSAgICBWX0RGR09wZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7CisgICAgVl9K
SVRPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRDYWxsOwogICAgIGlmIChtX2ppdC5zdHJpY3RNb2Rl
Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pKSB7CiAgICAgICAgIGlmIChwdXRLaW5kID09
IERpcmVjdCkKICAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemU7CkBAIC00MjgsNyArNDI5LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVDb21wYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBOb2Rl
KiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBT
X0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCit2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9u
X0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKICAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5v
ZGUtPnRha2VuQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUt
Pm5vdFRha2VuQmxvY2soKTsKQEAgLTQ5OCwxMiArNDk5LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKIAogdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGU+CiBj
bGFzcyBDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yCi0gICAgOiBwdWJsaWMg
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0RGR09wZXJhdGlvbl9FSkosIEdQUlJl
Zz4geworICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19KSVRP
cGVyYXRpb25fRUpKLCBHUFJSZWc+IHsKIHB1YmxpYzoKICAgICBDb21wYXJlQW5kQm94Qm9vbGVh
blNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJ
VCogaml0LAotICAgICAgICBTX0RGR09wZXJhdGlvbl9FSkogZnVuY3Rpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKLSAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5l
cmF0b3I8SnVtcFR5cGUsIFNfREZHT3BlcmF0aW9uX0VKSiwgR1BSUmVnPigKKyAgICAgICAgU19K
SVRPcGVyYXRpb25fRUpKIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIpCisgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0pJ
VE9wZXJhdGlvbl9FSkosIEdQUlJlZz4oCiAgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9u
LCBOZWVkVG9TcGlsbCwgcmVzdWx0KQogICAgICAgICAsIG1fYXJnMShhcmcxKQogICAgICAgICAs
IG1fYXJnMihhcmcyKQpAQCAtNTI1LDcgKzUyNiw3IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1f
YXJnMjsKIH07CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhv
bGVDb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUqIG5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBo
ZWxwZXJGdW5jdGlvbikKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
QEAgLTM5MDIsNyArMzkwMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVj
dHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEZp
bmFsT2JqZWN0VHlwZSkpKTsKICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHRlbXBH
UFIpOwotICAgICAgICBKX0RGR09wZXJhdGlvbl9FSiBmdW5jdGlvbjsKKyAgICAgICAgSl9KSVRP
cGVyYXRpb25fRUogZnVuY3Rpb247CiAgICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLmV4ZWN1dGFi
bGVGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmlzU3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgZnVu
Y3Rpb24gPSBvcGVyYXRpb25Ub1RoaXNTdHJpY3Q7CiAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biAxNTY0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk1LDIyICs4OTUsNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjp1c2VDaGlsZHJlbihOb2RlKiBuCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojp3cml0ZUJhcnJpZXIoTWFjcm9Bc3NlbWJsZXImIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcg
c2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQot
ewotICAgIFVOVVNFRF9QQVJBTShqaXQpOwotICAgIFVOVVNFRF9QQVJBTShvd25lcik7Ci0gICAg
VU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOwotICAg
IFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKLSAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDEpOwot
ICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoMik7Ci0gICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNj
cmF0Y2gyKTsKLQotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBKSVRD
b21waWxlcjo6ZW1pdENvdW50KGppdCwgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJG
b3IodXNlS2luZCkpOwotI2VuZGlmCi19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFy
cmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3Jp
dGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNo
MikKIHsKICAgICBVTlVTRURfUEFSQU0ob3duZXJHUFIpOwpAQCAtMTAxNyw3ICsxMDAxLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluKE5vZGUqIG5vZAogI2VuZGlmCiB9CiAKLWJv
b2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNy
b0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkog
aGVscGVyRnVuY3Rpb24pCitib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBh
cmUoTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwg
U19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewogICAgIHVuc2lnbmVkIGJyYW5j
aEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaElu
ZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewpAQCAtMTQ2NSw3ICsxNDQ5LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50MwogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIGNvbXBhcmUgaXMgZnVzZWQgd2l0aCBhIHN1YnNlcXVlbnQgYnJhbmNoLgotYm9vbCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24p
Citib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSogbm9kZSwg
TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbiwgU19KSVRPcGVyYXRpb25fRUpK
IG9wZXJhdGlvbikKIHsKICAgICAvLyBGdXNlZCBjb21wYXJlICYgYnJhbmNoLgogICAgIHVuc2ln
bmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CkBAIC0zODQy
LDcgKzM4MjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiB9
CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2Vx
dWVudCBicmFuY2guCi1ib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsIE1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBv
cGVyYXRpb24pCitib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBvcGVy
YXRpb24pCiB7CiAgICAgaWYgKGNvbXBpbGVQZWVwSG9sZUJyYW5jaChub2RlLCBjb25kaXRpb24s
IGRvdWJsZUNvbmRpdGlvbiwgb3BlcmF0aW9uKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZp
c2lvbiAxNTY0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEwICszNiwxMSBAQAogI2luY2x1ZGUgIkRGR0pJ
VENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR09TUkV4
aXRKdW1wUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIgogI2luY2x1ZGUgIkRGR1ZhbHVlU291cmNl
LmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRv
ci5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTMxMSw4ICszMTIsNiBAQCBwdWJs
aWM6CiAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
d3JpdGVCYXJyaWVyKE1hY3JvQXNzZW1ibGVyJiwgR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgc2Ny
YXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyVXNlS2luZCk7Ci0KICAg
ICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRn
ZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52
YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CiAgICAgdm9p
ZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJp
ZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2Ny
YXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnKTsKICAgICB2b2lkIHdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtp
bmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcpOwpAQCAtNzM5LDkgKzczOCw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKEVk
Z2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CiAgICAg
Ym9vbCBub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKE5vZGUqLCBFZGdlIG9wZXJhbmQsIGJvb2wg
aW52ZXJ0ID0gZmFsc2UpOwogICAgIAotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7Ci0gICAgdm9pZCBu
b25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7Ci0g
ICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxh
dGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOworICAg
IHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9k
ZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VK
SiBoZWxwZXJGdW5jdGlvbik7CisgICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29t
cGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfSklUT3Bl
cmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7CisgICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBh
cmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJh
dGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwogICAgIAogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQ
ZWVwaG9sZVN0cmljdEVxKE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCA9IGZh
bHNlKTsKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcShOb2RlKiwg
Ym9vbCBpbnZlcnQgPSBmYWxzZSk7CkBAIC05MzEsMTY5ICs5MzAsMTY5IEBAIHB1YmxpYzoKICAg
ICAvLyBtYWNoaW5lIHJlZ2lzdGVycywgYW5kIGRlbGVnYXRlIHRoZSBjYWxsaW5nIGNvbnZlbnRp
b24gc3BlY2lmaWMKICAgICAvLyBkZWNpc2lvbiBhcyB0byBob3cgdG8gZmlsbCB0aGUgcmVnc2l0
ZXJzIHRvIHNldHVwQXJndW1lbnRzKiBtZXRob2RzLgogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0Ugb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGNlbGwpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQ
X0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBjZWxsKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGNlbGwpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oUF9ERkdPcGVyYXRpb25fRU8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2Jq
ZWN0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25f
RU8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0KQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09w
ZXJhdGlvbl9FT1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBzaXpl
X3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0
aW9uX0VPUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIHNpemVfdCBz
aXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9i
amVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FT1ogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1t
UHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBvYmplY3QsIGludDMyX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBvYmplY3QsIGludDMyX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8
c2l6ZV90PihzaXplKSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIG9sZCwgc2l6ZV90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgb2xkLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShvbGQsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdP
cGVyYXRpb25fRVMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBzaXplX3Qgc2l6ZSkKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09w
ZXJhdGlvbl9FU0pzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHNpemVfdCBpbmRleCwgR1BS
UmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJh
dGlvbl9FU0pzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHNpemVfdCBpbmRleCwgR1BSUmVn
IGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihpbmRleCksIGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0IG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3Qgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
UF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFBfSklUT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihQX0pJVE9wZXJhdGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZElt
bTMyKGFyZzIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0UFMg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdm9pZCogcG9p
bnRlciwgc2l6ZV90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQ
X0pJVE9wZXJhdGlvbl9FU3RQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCB2b2lkKiBwb2ludGVyLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdP
cGVyYXRpb25fRVN0U1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgc2l6ZV90IGluZGV4LCBzaXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTdFNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBpbmRleCwgc2l6ZV90IHNpemUpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKGluZGV4KSwgVHJ1c3RlZEltbVB0cihzaXplKSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihDX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3Rh
dGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJh
dGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdP
cGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU0NlbGwqIGNlbGwpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGNlbGwpKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZH
T3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU0Nl
bGwqIGNlbGwpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJh
dGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNDZWxsKiBj
ZWxsKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIFRydXN0ZWRJbW1QdHIoY2VsbCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUljZiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUljZiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW1QdHIoaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FU3Qgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VTdCBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RG
R09wZXJhdGlvbl9FSnNzU3Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihDX0pJVE9wZXJhdGlvbl9FSnNzU3Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KENfREZHT3BlcmF0aW9uX0VKc3NKc3Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihD
X0pJVE9wZXJhdGlvbl9FSnNzSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUpzc0pzc0pzcyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFy
ZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9F
SnNzSnNzSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUNDIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
c3NfREZHT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKc3NfSklUT3BlcmF0aW9uX0Va
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
ICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0
aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAg
IH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25f
RUNJY2Ygb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlv
bl9FQ0ljZiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSkpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDQ0ljZiBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlv
bl9FQ0NJY2Ygb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1l
KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09w
ZXJhdGlvbl9FQ1ogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgaW50IGFyZzIpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ1ogb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMSwgaW50IGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbTMyKGFyZzIpKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfREZHT3BlcmF0aW9uX1cgb3BlcmF0aW9uLCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50
U2V0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25f
VyBvcGVyYXRpb24sIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhUcnVzdGVkSW1tUHRyKHdhdGNocG9pbnRTZXQpKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKQEAgLTExMjUsMjQ0ICsxMTI0LDI0
NCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJn
MSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlvbl9aWiBvcGVyYXRpb24sIEZQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX1paIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHMoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihEX0RGR09wZXJhdGlvbl9ERCBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEZQUlJlZyBhcmcx
LCBGUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfSklU
T3BlcmF0aW9uX0REIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEZQUlJl
ZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSwgYXJnMik7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
ICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihJX0RGR09wZXJhdGlv
bl9FSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihJX0pJVE9wZXJhdGlvbl9FSnNzIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FWiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfREZHT3Bl
cmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzKGFyZzEpOwogICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQuYXBw
ZW5kQ2FsbChvcGVyYXRpb24pOwogICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUkg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSSBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRUEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VBIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQVogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQVogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FSnNzWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9u
X0VKc3NaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
dm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCB2b2lk
KiBwb2ludGVyLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBUcnVzdGVkSW1tUHRyKHNp
emUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGlu
dCBzdGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgaW50IHN0YXJ0Q29uc3RhbnQsIGludCBudW1Db25zdGFudHMpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKHN0YXJ0Q29uc3Rh
bnQpLCBUcnVzdGVkSW1tMzIobnVtQ29uc3RhbnRzKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FUFAg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdm9pZCogcG9pbnRlcikKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQUCBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJ
bW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBKU0NlbGwqIGNlbGwpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTQ2VsbCogY2Vs
bCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyKGNlbGwpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBjb25zdCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5nSW1wbCogdWlkKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJ
bW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRURBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRURBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50MzJfdCBh
cmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQzMl90IGFyZzEpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludDMyX3Qg
YXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQzMl90IGFyZzEs
IEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWklj
Zlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQzMl90IGFyZzEsIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VaSWNmWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIGludDMyX3QgYXJnMSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEdQUlJl
ZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KFRydXN0ZWRJbW0zMihhcmcxKSwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpLCBhcmcy
KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRUpTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIHZhbHVlLCBzaXplX3QgaW5kZXgpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihQX0pJVE9wZXJhdGlvbl9FSlMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
dmFsdWUsIHNpemVfdCBpbmRleCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZSh2YWx1ZSwgVHJ1c3RlZEltbVB0cihpbmRleCkpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3RKIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVN0SiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJn
MikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNf
SklUT3BlcmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzKGFyZzEpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZH
T3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0
aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGltbS5tX3ZhbHVlKSkpKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJnMikKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0ubV92YWx1ZSkp
KSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNWYWx1
ZVJlZ3MgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVl
UmVncyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIGFyZzIuZ3ByKCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FT1pEIG9wZXJhdGlv
biwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBGUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkQgb3BlcmF0aW9uLCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEZQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpQUCBv
cGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKUFAgb3BlcmF0
aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3Rl
ZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9ERkdPcGVyYXRpb25fRUpDSSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oVl9KSVRPcGVyYXRpb25fRUpDSSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MiwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpKSiBvcGVy
YXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkpKIG9wZXJhdGlvbiwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FUFpK
IG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VQWkogb3BlcmF0
aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwog
ICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRp
b25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FT1pK
IG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBh
cmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09w
ZXJhdGlvbl9FQ0pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcg
YXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9u
X0VDSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhv
cGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
RF9ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX0VKIG9w
ZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAg
LTEzODYsNyArMTM4NSw3IEBAIHB1YmxpYzoKICNkZWZpbmUgU0g0XzMyQklUX0RVTU1ZX0FSRwog
I2VuZGlmCiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0
aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIHByZXBhcmVGb3JFeHRlcm5h
bENhbGwoKTsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSk7CkBAIC0xMzk0LDIz
MyArMTM5MywyMzMgQEAgcHVibGljOgogICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAg
ICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25f
RSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRSBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2Fk
LCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIHZvaWQqIHBvaW50ZXIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkLCB2b2lkKiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVy
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBQ
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJl
ZyBhcmcxLCB2b2lkKiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFn
LCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQ
YXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BS
UmVnIHJlc3VsdFBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHVpZCkp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQSBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VBWiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQVog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRh
Zyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRUpzc1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpzc1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIHZvaWQqIHBvaW50ZXIsIHNpemVf
dCBzaXplKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQs
IHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJbW1Q
dHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVNTIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludCBzdGFydENv
bnN0YW50LCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BS
UmVnIHJlc3VsdFBheWxvYWQsIGludCBzdGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3RhbnRzKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW0zMihzdGFydENvbnN0YW50KSwgVHJ1c3RlZEltbTMyKG51bUNvbnN0YW50cykpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBh
eWxvYWQsIHZvaWQqIHBvaW50ZXIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FSlAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcg
cmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgdm9pZCog
cG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgVHJ1c3RlZEltbVB0
cihwb2ludGVyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSlAgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFy
ZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSlAgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBh
cmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFU
YWcsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogCi0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBKU0NlbGwqIGNl
bGwpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
QyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBKU0Nl
bGwqIGNlbGwpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoVHJ1c3RlZEltbVB0cihjZWxsKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFn
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgR1BSUmVnIGFyZzEsIGNvbnN0IFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5n
SW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVz
dWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0
UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgU3RyaW5nSW1wbCog
dWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQ
UlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RV
TU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBpbnQzMl90IGFyZzFUYWcsIEdQUlJlZyBhcmcx
UGF5bG9hZCwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BS
UmVnIHJlc3VsdFBheWxvYWQsIGludDMyX3QgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBT
dHJpbmdJbXBsKiB1aWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIFRydXN0ZWRJbW0zMihh
cmcxVGFnKSwgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1
bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZH
T3BlcmF0aW9uX0VEQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBGUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FREEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRf
RFVNTVlfQVJHIGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQs
IEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpBIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFn
LCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXls
b2FkLCBhcmcxVGFnLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VKQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBU
cnVzdGVkSW1tMzIgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMikKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQSBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBUcnVzdGVkSW1t
MzIgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FS
RyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVz
dWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJl
ZyBhcmcxUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFn
LCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpLCBU
cnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxv
YWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9ERkdPcGVyYXRpb25fRVpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVn
IHJlc3VsdFBheWxvYWQsIGludDMyX3QgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWlogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBHUFJSZWcg
YXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tMzIoYXJnMSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRh
Zyk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09w
ZXJhdGlvbl9FSlMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU1ZhbHVlUmVncyB2YWx1ZSwg
c2l6ZV90IGluZGV4KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRP
cGVyYXRpb25fRUpTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgdmFsdWUs
IHNpemVfdCBpbmRleCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyB2YWx1ZS5wYXlsb2FkR1BSKCksIHZhbHVlLnRh
Z0dQUigpLCBUcnVzdGVkSW1tUHRyKGluZGV4KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcy
UGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0
aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
R1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFy
ZzJQYXlsb2FkLCBhcmcyVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRf
RFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0ogb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2Fk
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fSiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxv
YWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhhcmcxUGF5bG9hZCwgYXJn
MVRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09w
ZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJS
ZWcgYXJnMVBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJ
VE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBH
UFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihTX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQ
YXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRp
b25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBh
cmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1Z
X0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmcyUGF5bG9h
ZCwgYXJnMlRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcx
UGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BS
UmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRf
RFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBTSDRfMzJCSVRfRFVNTVlfQVJHIGFyZzJQ
YXlsb2FkLCBhcmcyVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VK
SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJS
ZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyIGltbSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2Fk
LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyIGltbSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgU0g0XzMy
QklUX0RVTU1ZX0FSRyBpbW0sIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIgaW1tLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVN
TVlfQVJHIGltbSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgU0g0XzMyQklUX0RV
TU1ZX0FSRyBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVz
dWx0VGFnKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9h
ZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VD
SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyUGF5bG9hZCwg
YXJnMlRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0
aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNKIG9w
ZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJn
MikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMi50YWdHUFIoKSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0LnBheWxv
YWRHUFIoKSwgcmVzdWx0LnRhZ0dQUigpKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNDIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwog
ICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRp
b25fRU9aRCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgRlBSUmVnIGFyZzMp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FT1pE
IG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBGUFJSZWcgYXJnMykKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBF
QUJJXzMyQklUX0RVTU1ZX0FSRyBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJn
MVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKUFAgb3Bl
cmF0aW9uLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwg
dm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwg
VHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpDSSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFn
LCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyLCBTdHJpbmdJbXBsKiB1aWQpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkNJIG9wZXJh
dGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIsIFN0
cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwg
VHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJn
M1BheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJh
dGlvbl9FQ0pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcg
YXJnMlBheWxvYWQsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMlBheWxv
YWQsIGFyZzJUYWcsIGFyZzNQYXlsb2FkLCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxv
YWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9F
UFpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnM1RhZywg
R1BSUmVnIGFyZzNQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJCSVRfRFVNTVlfQVJHIFNINF8zMkJJVF9E
VU1NWV9BUkcgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkog
b3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJS
ZWcgYXJnM1BheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgU0g0XzMyQklUX0RVTU1Z
X0FSRyBhcmczUGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkog
b3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczVGFn
LCBHUFJSZWcgYXJnM1BheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgU0g0XzMyQklU
X0RVTU1ZX0FSRyBhcmczUGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1N
WV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC0xOTIzLDgg
KzE5MjIsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiZXR0ZXJVc2VTdHJpY3RJbnQ1Mihl
ZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgY29tcGFyZShOb2RlKiwgTWFjcm9B
c3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25k
aXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSik7Ci0gICAgYm9vbCBjb21waWxlUGVlcEhvbGVCcmFu
Y2goTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkopOworICAgIGJvb2wgY29t
cGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSik7CisgICAgYm9vbCBj
b21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9F
SkopOwogICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlSW50MzJCcmFuY2goTm9kZSosIE5vZGUqIGJy
YW5jaE5vZGUsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICB2b2lkIGNv
bXBpbGVQZWVwSG9sZUludDUyQnJhbmNoKE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21w
aWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVCb29s
ZWFuQnJhbmNoKE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3Bw
CShyZXZpc2lvbiAxNTY0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5r
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDIzOCArOTMsNiBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsICgiREZHIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsiKSk7CiB9CiAKLWlubGluZSB2
b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50
ZXJHUFIpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIENDYWxsSGVscGVyczo6SnVtcCBp
c05vblplcm8gPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHBvaW50
ZXJHUFIpOwotICAgIGppdC5icmVha3BvaW50KCk7Ci0gICAgaXNOb25aZXJvLmxpbmsoJmppdCk7
Ci0gICAgaml0LnB1c2gocG9pbnRlckdQUik7Ci0gICAgaml0LmxvYWQ4KHBvaW50ZXJHUFIsIHBv
aW50ZXJHUFIpOwotICAgIGppdC5wb3AocG9pbnRlckdQUik7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShqaXQpOwotICAgIFVOVVNFRF9QQVJBTShwb2ludGVyR1BSKTsKLSNlbmRpZgotfQotCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKFZNKiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKLSAgICAKLSAgICAvLyBX
ZSB3aWxsIGp1bXAgdG8gaGVyZSBpZiB0aGUgSklUIGNvZGUgdGhpbmtzIGl0J3MgbWFraW5nIGEg
Y2FsbCwgYnV0IHRoZQotICAgIC8vIGxpbmtpbmcgaGVscGVyIChDKysgY29kZSkgZGVjaWRlZCB0
byB0aHJvdyBhbiBleGNlcHRpb24gaW5zdGVhZC4gV2Ugd2lsbAotICAgIC8vIGhhdmUgc2F2ZWQg
dGhlIGNhbGxSZXR1cm5JbmRleCBpbiB0aGUgZmlyc3QgYXJndW1lbnRzIG9mIEpJVFN0YWNrRnJh
bWUuCi0gICAgLy8gTm90ZSB0aGF0IHRoZSByZXR1cm4gYWRkcmVzcyB3aWxsIGJlIG9uIHRoZSBz
dGFjayBhdCB0aGlzIHBvaW50LCBzbyB3ZQotICAgIC8vIG5lZWQgdG8gcmVtb3ZlIGl0IGFuZCBk
cm9wIGl0IG9uIHRoZSBmbG9vciwgc2luY2Ugd2UgZG9uJ3QgY2FyZSBhYm91dCBpdC4KLSAgICAv
LyBGaW5hbGx5IG5vdGUgdGhhdCB0aGUgY2FsbCBmcmFtZSByZWdpc3RlciBwb2ludHMgYXQgdGhl
IGNhbGxlZSBmcmFtZSwgc28KLSAgICAvLyB3ZSBuZWVkIHRvIHBvcCBpdC4KLSAgICBqaXQucHJl
c2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUik7Ci0gICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygK
LSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OkNhbGxlckZy
YW1lKSwKLSAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgaml0LnBlZWs2NChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIs
IEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7Ci0jZWxzZQotICAgIGppdC5wZWVrKEdQUkluZm86
Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKLSNl
bmRpZgotICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86
Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVt
aXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAg
aml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJERkcgdGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBz
bG93IHBhdGggdGh1bmsiKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAotICAgIEND
YWxsSGVscGVycyYgaml0LCBWTSogdm0sIFBfREZHT3BlcmF0aW9uX0Ugc2xvd1BhdGhGdW5jdGlv
bikKLXsKLSAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5v
bkFyZ0dQUjIpOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFy
Z0dQUjIpOwotICAgIGppdC5zdG9yZVB0cigKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMiwK
LSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikpICogSlNTdGFjazo6UmV0dXJuUEMpKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGppdC5wb2tlNjQoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BS
LCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOwotI2Vsc2UKLSAgICBqaXQucG9rZShHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7Ci0j
ZW5kaWYKLSAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKLSAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzbG93UGF0aEZ1
bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlv
bihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFy
Z0dQUjApOwotICAgIAotICAgIC8vIFRoaXMgc2xvdyBjYWxsIHdpbGwgcmV0dXJuIHRoZSBhZGRy
ZXNzIG9mIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgIC8vIDEpIEV4Y2VwdGlvbiB0aHJvd2lu
ZyB0aHVuay4KLSAgICAvLyAyKSBIb3N0IGNhbGwgcmV0dXJuIHZhbHVlIHJldHVybmVyIHRoaW5n
eS4KLSAgICAvLyAzKSBUaGUgZnVuY3Rpb24gdG8gY2FsbC4KLSAgICBqaXQubG9hZFB0cigKLSAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihS
ZWdpc3RlcikpICogSlNTdGFjazo6UmV0dXJuUEMpLAotICAgICAgICBHUFJJbmZvOjpub25QcmVz
ZXJ2ZWROb25SZXR1cm5HUFIpOwotICAgIGppdC5zdG9yZVB0cigKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKDApLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0g
ICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQykp
OwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vblByZXNlcnZlZE5v
blJldHVybkdQUik7Ci0gICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQ
UkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0
aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgIGppdC5qdW1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKLX0KLQotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5r
Rm9yVGh1bmtHZW5lcmF0b3IoCi0gICAgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCi17Ci0gICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjayBvciBpbiB0
aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQotICAgIC8vIHNhdmUgdGhlIHJldHVybiBh
ZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdlIG1ha2UgYSBDKysgZnVuY3Rpb24gY2Fs
bAotICAgIC8vIHRvIHBlcmZvcm0gbGlua2luZyBhbmQgbGF6eSBjb21waWxhdGlvbiBpZiBuZWNl
c3NhcnkuIFdlIGV4cGVjdCB0aGUgY2FsbGVlCi0gICAgLy8gdG8gYmUgaW4gbm9uQXJnR1BSMC9u
b25BcmdHUFIxIChwYXlsb2FkL3RhZyksIHRoZSBjYWxsIGZyYW1lIHRvIGhhdmUgYWxyZWFkeQot
ICAgIC8vIGJlZW4gYWRqdXN0ZWQsIG5vblByZXNlcnZlZE5vblJldHVybkdQUiBob2xkcyB0aGUg
ZXhjZXB0aW9uIGhhbmRsZXIgaW5kZXgsCi0gICAgLy8gYW5kIGFsbCBvdGhlciByZWdpc3RlcnMg
dG8gYmUgYXZhaWxhYmxlIGZvciB1c2UuIFdlIHVzZSBKSVRTdGFja0ZyYW1lOjphcmdzCi0gICAg
Ly8gdG8gc2F2ZSBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWNyb3NzIGNhbGxzLgotICAgIAotICAg
IENDYWxsSGVscGVycyBqaXQodm0pOwotICAgIAotICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtp
bmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25z
dHJ1Y3QpOwotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9C
QUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1
ZmZlciwKLSAgICAgICAgKCJERkcgbGluayAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENv
ZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVjdCIpKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiBsaW5r
Rm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJu
IGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KLS8vIEZv
ciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYg
eW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgotLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlv
dSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1lIGFueXdheS4KLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgQ0NhbGxIZWxw
ZXJzIGppdCh2bSk7Ci0gICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlu
a0Nsb3N1cmVDYWxsKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmpp
dCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgKCJERkcgbGluayBjbG9zdXJlIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwotfQotCi1zdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigKLSAgICBW
TSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAgICAvLyBUaGUgcmV0dXJu
IGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrLCBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2ls
bCBoZW5jZQotICAgIC8vIGp1bXAgdG8gdGhlIGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFk
ZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UKLSAgICAvLyBtYWtlIGEgQysrIGZ1bmN0
aW9uIGNhbGwgdG8gdGhlIGFwcHJvcHJpYXRlIERGRyBvcGVyYXRpb24uCi0KLSAgICBDQ2FsbEhl
bHBlcnMgaml0KHZtKTsKLSAgICAKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNl
OwotCi0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZlIGEgc3RvcnkgZm9yIGVsaW1pbmF0aW5n
IHRoZXNlIGNoZWNrcy4gSW4gbWFueSBjYXNlcywKLSAgICAvLyB0aGUgREZHIGtub3dzIHRoYXQg
dGhlIHZhbHVlIGlzIGRlZmluaXRlbHkgYSBjZWxsLCBvciBkZWZpbml0ZWx5IGEgZnVuY3Rpb24u
Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0gICAgICAg
IGppdC5icmFuY2hUZXN0NjQoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQ
UkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotI2Vsc2UKLSAg
ICBzbG93Q2FzZS5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2gzMigKLSAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86Om5vbkFyZ0dQUjEsCi0gICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotI2VuZGlmCi0g
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBz
bG93Q2FzZS5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86Om5vbkFyZ0dQUjIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAotICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb246OmluZm8oKSkpKTsK
LSAgICAKLSAgICAvLyBOb3cgd2Uga25vdyB3ZSBoYXZlIGEgSlNGdW5jdGlvbi4KLSAgICAKLSAg
ICBqaXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5v
bkFyZ0dQUjAsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKLSAgICAgICAgR1BS
SW5mbzo6bm9uQXJnR1BSMik7Ci0gICAgc2xvd0Nhc2UuYXBwZW5kKAotICAgICAgICBqaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLAotICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQ
UjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3Ioa2luZCkpLAotICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAKLSAgICAvLyBO
b3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSBDb2RlQmxvY2ssIGFuZCB3ZSdyZSBjb21taXR0ZWQg
dG8gbWFraW5nIGEgZmFzdAotICAgIC8vIGNhbGwuCi0gICAgCi0gICAgaml0LmxvYWRQdHIoCi0g
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksCi0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEp
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaml0LnN0b3JlNjQoCi0gICAgICAgIEdQUkluZm86
Om5vbkFyZ0dQUjEsCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAg
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKLSNlbHNl
Ci0gICAgaml0LnN0b3JlUHRyKAotICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIxLAotICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lz
dGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWluICsKLSAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICBqaXQuc3Rv
cmUzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4gKwotICAgICAgICAgICAgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0jZW5k
aWYKLSAgICAKLSAgICBqaXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRo
QXJpdHlDaGVja0ZvcihraW5kKSksCi0gICAgICAgIEdQUkluZm86OnJlZ1QwKTsKLSAgICAKLSAg
ICAvLyBNYWtlIGEgdGFpbCBjYWxsLiBUaGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gREZHIGNvZGUu
Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDApOwotICAgIGpp
dC5qdW1wKEdQUkluZm86OnJlZ1QwKTsKLQotICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7Ci0gICAg
Ci0gICAgLy8gSGVyZSB3ZSBkb24ndCBrbm93IGFueXRoaW5nLCBzbyByZXZlcnQgdG8gdGhlIGZ1
bGwgc2xvdyBwYXRoLgotICAgIAotICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29k
ZUZvckNhbGwgPyBvcGVyYXRpb25WaXJ0dWFsQ2FsbCA6IG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1
Y3QpOwotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxf
VEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZl
ciwKLSAgICAgICAgKCJERkcgdmlydHVhbCAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENv
ZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVjdCIpKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiB2
aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsKTsKLX0KLQotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0g
ICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7
Ci19Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCShyZXZpc2lvbiAx
NTY0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCwxNiArNDAsNiBAQCBuYW1lc3BhY2UgREZHIHsKIAogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihW
TSopOwotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSop
OwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSop
OwotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0
b3IoVk0qKTsKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1Jl
cG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
dHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2aXNpb24gMTU2NDgyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDEyICs0OCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8o
b3NyRXhpdCwgIndlYmtpdF9vc3JfZXhpdCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgYm9vbGVh
biwgaW50MzIsIFZhcmlhZGljKSkKIAogI2RlZmluZSBGT1JfRUFDSF9GVU5DVElPTl9UWVBFKG1h
Y3JvKSBcCi0gICAgbWFjcm8oSV9ERkdPcGVyYXRpb25fRUpzcywgZnVuY3Rpb25UeXBlKGludFB0
ciwgaW50UHRyLCBpbnRQdHIpKSBcCi0gICAgbWFjcm8oSl9ERkdPcGVyYXRpb25fRSwgZnVuY3Rp
b25UeXBlKGludDY0LCBpbnRQdHIpKSBcCi0gICAgbWFjcm8oUF9ERkdPcGVyYXRpb25fRUMsIGZ1
bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKFZfREZHT3Bl
cmF0aW9uX0VPWkQsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludDMy
LCBkb3VibGVUeXBlKSkgXAotICAgIG1hY3JvKFZfREZHT3BlcmF0aW9uX0VPWkosIGZ1bmN0aW9u
VHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludDMyLCBpbnQ2NCkpIFwKLSAgICBtYWNy
byhaX0RGR09wZXJhdGlvbl9ELCBmdW5jdGlvblR5cGUoaW50MzIsIGRvdWJsZVR5cGUpKQorICAg
IG1hY3JvKElfSklUT3BlcmF0aW9uX0VKc3MsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwg
aW50UHRyKSkgXAorICAgIG1hY3JvKEpfSklUT3BlcmF0aW9uX0UsIGZ1bmN0aW9uVHlwZShpbnQ2
NCwgaW50UHRyKSkgXAorICAgIG1hY3JvKFBfSklUT3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5cGUo
aW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FT1pE
LCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgZG91YmxlVHlw
ZSkpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FT1pKLCBmdW5jdGlvblR5cGUodm9pZFR5
cGUsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgaW50NjQpKSBcCisgICAgbWFjcm8oWl9KSVRPcGVy
YXRpb25fRCwgZnVuY3Rpb25UeXBlKGludDMyLCBkb3VibGVUeXBlKSkKIAogY2xhc3MgSW50cmlu
c2ljUmVwb3NpdG9yeSA6IHB1YmxpYyBDb21tb25WYWx1ZXMgewogcHVibGljOgpAQCAtNzksNyAr
NzksNyBAQCBwdWJsaWM6CiAjdW5kZWYgRlVOQ1RJT05fVFlQRV9HRVRURVIKICAgICAKICNkZWZp
bmUgRlVOQ1RJT05fVFlQRV9SRVNPTFZFUih0eXBlTmFtZSwgdHlwZSkgXAotICAgIExUeXBlIG9w
ZXJhdGlvblR5cGUoREZHOjp0eXBlTmFtZSkgICAgICAgICBcCisgICAgTFR5cGUgb3BlcmF0aW9u
VHlwZShKU0M6OnR5cGVOYW1lKSAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICByZXR1cm4gdHlwZU5hbWUoKTsgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1NjQ4MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTk0LDcgKzE5OTQsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyB1
bmFjY2VwdGFibHkgc2xvdy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExMzYyMQogICAgICAgICAKLSAgICAgICAgSl9ERkdPcGVyYXRpb25fRSBm
dW5jdGlvbiA9CisgICAgICAgIEpfSklUT3BlcmF0aW9uX0UgZnVuY3Rpb24gPQogICAgICAgICAg
ICAgbV9ub2RlLT5vcCgpID09IENhbGwgPyBvcGVyYXRpb25GVExDYWxsIDogb3BlcmF0aW9uRlRM
Q29uc3RydWN0OwogICAgICAgICAKICAgICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gbV9u
b2RlLT5vcCgpID09IENhbGwgPyAwIDogMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuaAkocmV2aXNpb24gMTU2NDgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAvLyBUYWtl
cyB0aGUgY2FsbCBmcmFtZSBhbmQgdGhlIGluZGV4IG9mIHRoZSBleGl0LCBhbmQgcmV0dXJucyB0
aGUgYWRkcmVzcyB0bwogLy8ganVtcCB0by4KIGV4dGVybiAiQyIgewotdm9pZCogREZHX09QRVJB
VElPTiBjb21waWxlRlRMT1NSRXhpdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBleGl0SUQpIFdURl9J
TlRFUk5BTDsKK3ZvaWQqIEpJVF9PUEVSQVRJT04gY29tcGlsZUZUTE9TUkV4aXQoRXhlY1N0YXRl
KiwgdW5zaWduZWQgZXhpdElEKSBXVEZfSU5URVJOQUw7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuaAkocmV2aXNpb24gMTU2NDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEzLDYgKzQxMywyMSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpICogc2l6ZW9mKFJl
Z2lzdGVyKTsKICAgICB9CiAKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQ
UlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtp
bmQpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0ob3duZXIpOworICAgICAgICBVTlVTRURf
UEFSQU0oc2NyYXRjaDEpOworICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOworICAgICAg
ICBVTlVTRURfUEFSQU0odXNlS2luZCk7CisgICAgICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNo
MSk7CisgICAgICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoMik7CisgICAgICAgIEFTU0VSVChz
Y3JhdGNoMSAhPSBzY3JhdGNoMik7CisgICAgICAgIAorI2lmIEVOQUJMRShXUklURV9CQVJSSUVS
X1BST0ZJTElORykKKyAgICAgICAgZW1pdENvdW50KFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRD
b3VudGVyRm9yKHVzZUtpbmQpKTsKKyNlbmRpZgorICAgIH0KKwogICAgIFZlY3RvcjxCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqKTsKICAgICAK
IHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1
NjQ4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzk3LDIzICs3OTcsMjMgQEAgdm9pZCBKSVQ6OmxpbmtGb3IoRXhlY1N0YXRlKiBleGVj
LCBKU0Z1bgogICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlu
a0luZm86OkNhbGwKICAgICAgICAgICAgICAgIHx8IGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0g
Q2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncyk7CiAgICAgICAgIGlmIChjYWxsTGlua0luZm8tPmNh
bGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbCkgewotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHVi
KGxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJ
U3R1YihvbGRTdHlsZUxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNh
bGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2Fs
bEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExp
bmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVh
bENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBB
U1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVh
bENvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhj
YWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIob2xkU3R5bGVW
aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkpOwogfQogCiB2b2lkIEpJVDo6bGlua1Ns
b3dDYWxsKENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbykKIHsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2Nr
KTsKIAotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLCBjYWxsZXJDb2RlQmxvY2stPnZtKCktPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5l
cmF0b3IpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24sIGNhbGxlckNvZGVCbG9jay0+dm0oKS0+Z2V0Q1RJU3R1YihvbGRT
dHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJl
dmlzaW9uIDE1NjQ4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgSklUOjpjb21waWxl
Q2FsbEV2YWxTbG93Q2FzZShJbnN0cnUKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKICAgICBl
bWl0TG9hZChKU1N0YWNrOjpDYWxsZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5ha2VkQ2Fs
bChtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIGVt
aXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9y
KS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAg
LTMwNiw3ICszMDYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlE
CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAK
LSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0
cnVjdCA/IG1fdm0tPmdldENUSVN0dWIobGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDog
bV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBtX2NhbGxT
dHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJu
TG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0t
PmdldENUSVN0dWIob2xkU3R5bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkgOiBtX3Zt
LT5nZXRDVElTdHViKG9sZFN0eWxlTGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBz
YW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3Ry
dWN0aW9uKTsKQEAgLTMzNSw3ICszMzUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9z
dXJlQ2FsbChDYWxsCiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0
cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRv
bmUsIGNhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1Yih2
aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93
LCBDb2RlTG9jYXRpb25MYWJlbChtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxH
ZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIAogICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0
aW5lPiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAog
ICAgICAgICBGSU5BTElaRV9DT0RFKApAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUNsb3N1cmVDYWxsKENhbGwKICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRo
SnVtcCgKICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9u
UmVnaXN0ZXIoY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4pLAogICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHVi
KHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHViKG9sZFN0
eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgCiAgICAgY2FsbExpbmtJbmZv
LT5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxNTY0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydQogICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsKIAogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoSlNTdGFjazo6Q2Fs
bGVlLCByZWdUMCk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxD
YWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1
YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29k
ZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CiAgICAgCi0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBv
cF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNv
ZGUoKSA6IG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAg
bV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2Fs
bFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3Qg
PyBtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlTGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgp
IDogbV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwog
CiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTI2Myw3ICsyNjMs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgCiAgICAg
cGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby0+aG90UGF0
aE90aGVyLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29k
ZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29k
ZSgpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbChtX3Zt
LT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAg
IAogICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0
UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RFKApA
QCAtMjgxLDcgKzI4MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKENh
bGwKICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKICAgICAgICAgUmVwYXRjaEJ1
ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLT5o
b3RQYXRoQmVnaW4pLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5j
b2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVy
bkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3Ip
LmNvZGUoKSk7CiAgICAgCiAgICAgY2FsbExpbmtJbmZvLT5zdHViID0gc3R1YlJvdXRpbmUucmVs
ZWFzZSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25X
cmFwcGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9uV3JhcHBlcnMuaAkocmV2aXNpb24gMTU2MjM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbldyYXBwZXJzLmg6MTU2MjM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFwcGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgSklUT3BlcmF0aW9uV3JhcHBlcnNfaAorI2RlZmluZSBKSVRPcGVyYXRpb25X
cmFwcGVyc19oCisKKyNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvSW5s
aW5lQVNNLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisjaWYgQ1BVKE1JUFMpCisjaWYgV1RGX01J
UFNfUElDCisjZGVmaW5lIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24pIFwKKyAgICAgICAg
Ii5zZXQgbm9yZW9yZGVyIiAiXG4iIFwKKyAgICAgICAgIi5jcGxvYWQgJDI1IiAiXG4iIFwKKyAg
ICAgICAgIi5zZXQgcmVvcmRlciIgIlxuIiBcCisgICAgICAgICJsYSAkdDksICIgTE9DQUxfUkVG
RVJFTkNFKGZ1bmN0aW9uKSAiXG4iCisjZWxzZQorI2RlZmluZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5
KGZ1bmN0aW9uKSAiIiAiXG4iCisjZW5kaWYKKyNlbmRpZgorCisjaWYgQ09NUElMRVIoR0NDKSAm
JiBDUFUoWDg2XzY0KQorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTUyhmdW5jdGlvbiwgcmVnaXN0ZXIpIFwKKyAgICBhc20oIFwKKyAgICAiLmdsb2JsICIgU1lN
Qk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJc
biIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgIm1v
diAoJXJzcCksICUiIFNUUklOR0laRShyZWdpc3RlcikgIlxuIiBcCisgICAgICAgICJqbXAgIiBM
T0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSAiXG4iIFwKKyAgICAp
OworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlv
bikgICAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByc2kp
CisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rp
b24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkK
KyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlv
bikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4KQor
I2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlv
bikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByOCkKKwor
I2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoWDg2KQorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgb2Zmc2V0KSBcCisgICAgYXNtKCBcCisg
ICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikg
IlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJ
TkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgIm1vdiAoJWVzcCksICVlYXhcbiIgXAor
ICAgICAgICAibW92ICVlYXgsICIgU1RSSU5HSVpFKG9mZnNldCkgIiglZXNwKVxuIiBcCisgICAg
ICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSAi
XG4iIFwKKyAgICApOworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1
bmN0aW9uLCA4KQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0
aW9uLCAxNikKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
SShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlv
biwgMjApCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJ
KGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24s
IDI0KQorCisjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShBUk1fVEhVTUIyKQorCisjZGVmaW5l
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAg
YXNtICggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAi
Lmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0wo
ZnVuY3Rpb24pICJcbiIgXAorICAgICIudGh1bWIiICJcbiIgXAorICAgICIudGh1bWJfZnVuYyAi
IFRIVU1CX0ZVTkNfUEFSQU0oZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgIm1vdiBhMiwgbHIiICJcbiIgXAorICAgICAgICAi
YiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwK
KyAgICApOworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
Q0koZnVuY3Rpb24pIFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmFs
aWduIDIiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4i
IFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgIi50aHVtYiIgIlxuIiBc
CisgICAgIi50aHVtYl9mdW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCisg
ICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICAibW92IGE0LCBs
ciIgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJl
dHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKy8vIEVuY29kZWRKU1ZhbHVlIGluIEpTVkFM
VUUzMl82NCBpcyBhIDY0LWJpdCBpbnRlZ2VyLiBXaGVuIGJlaW5nIGNvbXBpbGVkIGluIEFSTSBF
QUJJLCBpdCBtdXN0IGJlIGFsaWduZWQgZXZlbi1udW1iZXJlZCByZWdpc3RlciAocjAsIHIyIG9y
IFtzcF0pLgorLy8gQXMgYSByZXN1bHQsIHJldHVybiBhZGRyZXNzIHdpbGwgYmUgYXQgYSA0LWJ5
dGUgZnVydGhlciBsb2NhdGlvbiBpbiB0aGUgZm9sbG93aW5nIGNhc2VzLgorI2lmIENPTVBJTEVS
X1NVUFBPUlRTKEVBQkkpICYmIENQVShBUk0pCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JF
VFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICM0XSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05f
U1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM4XSIKKyNlbHNlCisjZGVm
aW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICMw
XSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxy
LCBbc3AsICM0XSIKKyNlbmRpZgorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4i
IFwKKyAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1
bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgIi50
aHVtYiIgIlxuIiBcCisgICAgIi50aHVtYl9mdW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlv
bikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAg
ICBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgIlxuIiBcCisgICAgICAgICJi
ICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAor
ICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
Q0koZnVuY3Rpb24pIFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmFs
aWduIDIiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4i
IFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgIi50aHVtYiIgIlxuIiBc
CisgICAgIi50aHVtYl9mdW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCisg
ICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICBJTlNUUlVDVElP
Tl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JF
RkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisj
ZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShBUk1fVFJBRElUSU9OQUwpCisKKyNkZWZpbmUgRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBhc20g
KCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5j
dGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIElOTElO
RV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
OiIgIlxuIiBcCisgICAgICAgICJtb3YgYTIsIGxyIiAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NB
TF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsK
KworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0
aW9uKSBcCisgICAgYXNtICggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZ
TUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAi
XG4iIFwKKyAgICBJTkxJTkVfQVJNX0ZVTkNUSU9OKGZ1bmN0aW9uKSBcCisgICAgU1lNQk9MX1NU
UklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICAibW92IGE0LCBsciIgIlxuIiBcCisg
ICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3Mi
ICJcbiIgXAorICAgICk7CisKKy8vIEVuY29kZWRKU1ZhbHVlIGluIEpTVkFMVUUzMl82NCBpcyBh
IDY0LWJpdCBpbnRlZ2VyLiBXaGVuIGJlaW5nIGNvbXBpbGVkIGluIEFSTSBFQUJJLCBpdCBtdXN0
IGJlIGFsaWduZWQgZXZlbi1udW1iZXJlZCByZWdpc3RlciAocjAsIHIyIG9yIFtzcF0pLgorLy8g
QXMgYSByZXN1bHQsIHJldHVybiBhZGRyZXNzIHdpbGwgYmUgYXQgYSA0LWJ5dGUgZnVydGhlciBs
b2NhdGlvbiBpbiB0aGUgZm9sbG93aW5nIGNhc2VzLgorI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVB
QkkpICYmIENQVShBUk0pCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNT
X0VKSSAic3RyIGxyLCBbc3AsICM0XSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJO
X0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM4XSIKKyNlbHNlCisjZGVmaW5lIElOU1RSVUNU
SU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICMwXSIKKyNkZWZpbmUg
SU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM0XSIK
KyNlbmRpZgorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
SkkoZnVuY3Rpb24pIFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmds
b2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVu
Y3Rpb24pICJcbiIgXAorICAgIElOTElORV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwKKyAgICBT
WU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgIElOU1RSVUNUSU9OX1NU
T1JFX1JFVFVSTl9BRERSRVNTX0VKSSAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVO
Q0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2RlZmlu
ZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAor
ICAgIGFzbSAoIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RS
SU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisg
ICAgSU5MSU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJF
U1NfRUpDSSAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJX
aXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2VsaWYgQ09NUElMRVIoR0NDKSAm
JiBDUFUoTUlQUykKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRShmdW5jdGlvbikgXAorICAgIGFzbSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1
bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisg
ICAgTE9BRF9GVU5DVElPTl9UT19UOShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKKyAg
ICAgICAgIm1vdmUgJGExLCAkcmEiICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5D
RShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZGVmaW5l
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyAg
ICBhc20oIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5H
KGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAg
U1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgIExPQURfRlVOQ1RJT05fVE9f
VDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSBcCisgICAgICAgICJtb3ZlICRhMywgJHJh
IiAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0
dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCisgICAgYXNtKCBcCisgICAgIi50ZXh0
IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisg
ICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rp
b24pICI6IiAiXG4iIFwKKyAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0
dXJuQWRkcmVzcykgXAorICAgICAgICAic3cgJHJhLCAyMCgkc3ApIiAiXG4iIFwKKyAgICAgICAg
ImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBc
CisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUpDSShmdW5jdGlvbikgXAorICAgIGFzbSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1
bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisg
ICAgTE9BRF9GVU5DVElPTl9UT19UOShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKKyAg
ICAgICAgInN3ICRyYSwgMjQoJHNwKSIgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJF
TkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNlbGlm
IENPTVBJTEVSKEdDQykgJiYgQ1BVKFNINCkKKworI2RlZmluZSBTSDRfU0NSQVRDSF9SRUdJU1RF
UiAicjExIgorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
KGZ1bmN0aW9uKSBcCisgICAgYXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2Js
ICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rp
b24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAg
ICAgInN0cyBwciwgcjUiICJcbiIgXAorICAgICAgICAiYnJhICIgTE9DQUxfUkVGRVJFTkNFKGZ1
bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwK
KyAgICApOworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
Q0koZnVuY3Rpb24pIFwKKyAgICBhc20oIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAg
ICAgICAic3RzIHByLCByNyIgIlxuIiBcCisgICAgICAgICJtb3YubCAyZiwgIiBTSDRfU0NSQVRD
SF9SRUdJU1RFUiAiXG4iIFwKKyAgICAgICAgImJyYWYgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAi
XG4iIFwKKyAgICAgICAgIm5vcCIgIlxuIiBcCisgICAgICAgICIxOiAuYmFsaWduIDQiICJcbiIg
XAorICAgICAgICAiMjogLmxvbmcgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0
dXJuQWRkcmVzcy0xYiIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIG9mZnNldCwgc2NyYXRjaCkgXAorICAgIGFz
bSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgICJzdHMgcHIsICIgc2NyYXRj
aCAiXG4iIFwKKyAgICAgICAgIm1vdi5sICIgc2NyYXRjaCAiLCBAKCIgU1RSSU5HSVpFKG9mZnNl
dCkgIiwgcjE1KSIgIlxuIiBcCisgICAgICAgICJtb3YubCAyZiwgIiBzY3JhdGNoICJcbiIgXAor
ICAgICAgICAiYnJhZiAiIHNjcmF0Y2ggIlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAg
ICAgICAiMTogLmJhbGlnbiA0IiAiXG4iIFwKKyAgICAgICAgIjI6IC5sb25nICIgTE9DQUxfUkVG
RVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MtMWIiICJcbiIgXAorICAgICk7CisK
KyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlv
bikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMCwgU0g0
X1NDUkFUQ0hfUkVHSVNURVIpCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1MoZnVuY3Rpb24sIDQsIFNINF9TQ1JBVENIX1JFR0lTVEVSKQorCisjZW5kaWYKKworI2RlZmlu
ZSBQX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCit2
b2lkKiBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUq
LCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAor
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCisKKyNkZWZp
bmUgSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5U
RVJOQUw7IFwKK0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9u
KQorCisjZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShm
dW5jdGlvbikgXAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJl
dHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJl
c3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCitGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKQorCisjZGVmaW5lIEpfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAorRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVO
Q0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAorRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VKSShmdW5jdGlvbikKKworI2RlZmluZSBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCit2b2lkIEpJVF9PUEVSQVRJT04gZnVu
Y3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0Nl
bGwqLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBX
VEZfSU5URVJOQUw7IFwKK0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJ
KGZ1bmN0aW9uKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpJVE9wZXJhdGlv
bldyYXBwZXJzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25XcmFwcGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9uV3JhcHBlcnMuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25XcmFwcGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsy
NiwxNCBAQAogI2lmbmRlZiBKSVRPcGVyYXRpb25XcmFwcGVyc19oCiAjZGVmaW5lIEpJVE9wZXJh
dGlvbldyYXBwZXJzX2gKIAorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3
dGYvQ29tcGlsZXIuaD4KICNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CiAKKyNpZiBDT01QSUxF
UihNU1ZDKQorI2luY2x1ZGUgPGludHJpbi5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0Mgewog
CiAjaWYgQ1BVKE1JUFMpCkBAIC01MywxMCArNTgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICJtb3YgKCVyc3ApLCAlIiBTVFJJTkdJWkUocmVnaXN0ZXIpICJcbiIgXAogICAgICAgICAi
am1wICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgIlxuIiBc
CiAgICAgKTsKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0Uo
ZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlv
biwgcnNpKQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJ
KGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9u
LCByY3gpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkko
ZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24s
IHJjeCkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0ko
ZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwg
cjgpCisjZGVmaW5lIF9QX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1
bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24s
IHJzaSkKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0Uo
ZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlv
biwgcnNpKQorI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0
aW9uLCByY3gpCisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkkoZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVu
Y3Rpb24sIHJjeCkKKyNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhm
dW5jdGlvbiwgcjgpCiAKICNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFg4NikKIApAQCAtNzAs
MTQgKzc2LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAibW92ICVlYXgsICIgU1RSSU5H
SVpFKG9mZnNldCkgIiglZXNwKVxuIiBcCiAgICAgICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0Uo
ZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSAiXG4iIFwKICAgICApOwotI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCA4KQotI2RlZmluZSBGVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAxNikKLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMjApCi0jZGVmaW5lIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDI0KQorI2RlZmluZSBfUF9GVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCA4KQorI2RlZmluZSBfSl9GVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCA4KQorI2RlZmluZSBfSl9GVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAxNikKKyNkZWZpbmUgX0pfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMjApCisjZGVmaW5lIF9WX0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDI0KQogCiAjZWxpZiBDT01QSUxFUihH
Q0MpICYmIENQVShBUk1fVEhVTUIyKQogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9QX0ZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAgICIudGV4
dCIgIlxuIiBcCiAgICAgIi5hbGlnbiAyIiAiXG4iIFwKQEAgLTkwLDcgKzk3LDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhS
ZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBfUF9GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikKKworI2RlZmluZSBfSl9G
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCiAgICAg
YXNtICggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5hbGlnbiAyIiAiXG4iIFwKQEAgLTEx
Myw3ICsxMjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVf
UkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM0XSIKICNlbmRpZgogCi0jZGVmaW5l
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKKyNk
ZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlv
bikgXAogICAgIGFzbSAoIFwKICAgICAiLnRleHQiICJcbiIgXAogICAgICIuYWxpZ24gMiIgIlxu
IiBcCkBAIC0xMjYsNyArMTM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICJiICIgTE9D
QUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAogICAgICk7
CiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVu
Y3Rpb24pIFwKKyNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VKQ0koZnVuY3Rpb24pIFwKICAgICBhc20gKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAi
LmFsaWduIDIiICJcbiIgXApAQCAtMTQxLDcgKzE1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAj
ZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShBUk1fVFJBRElUSU9OQUwpCiAKLSNkZWZpbmUgRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyNkZWZpbmUg
X1BfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKICAg
ICBhc20gKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklO
RyhmdW5jdGlvbikgIlxuIiBcCkBAIC0xNTIsNyArMTYyLDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNz
IiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBfUF9GVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikKKworI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAg
ICIudGV4dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJc
biIgXApAQCAtMTczLDcgKzE4Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2RlZmluZSBJTlNUUlVD
VElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzRdIgogI2VuZGlm
CiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5j
dGlvbikgXAorI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUpJKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXApAQCAtMTg0LDcgKzE5Nyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikg
IldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9WX0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCiAgICAg
YXNtICggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkco
ZnVuY3Rpb24pICJcbiIgXApAQCAtMTk3LDcgKzIxMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAj
ZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShNSVBTKQogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9QX0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCiAgICAgYXNtKCBcCiAg
ICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikg
IlxuIiBcCkBAIC0yMDgsNyArMjIxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAiYiAi
IExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAg
ICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0ko
ZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0UoZnVuY3Rpb24pIFwKKyAgICBfUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRShmdW5jdGlvbikKKworI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAiXG4i
IFwKICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0yMTks
NyArMjM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNF
KGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAogICAgICk7CiAKLSNkZWZpbmUg
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAorI2Rl
ZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9u
KSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0yMzAsNyArMjQ2LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFk
ZHJlc3MiICJcbiIgXAogICAgICk7CiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKKyNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKICAgICBhc20oIFwKICAgICAi
LnRleHQiICJcbiIgXAogICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4i
IFwKQEAgLTI0NSw3ICsyNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2RlZmluZSBTSDRfU0NS
QVRDSF9SRUdJU1RFUiAicjExIgogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9QX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAi
XG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0y
NTYsNyArMjcyLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAibm9wIiAiXG4iIFwKICAg
ICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0ko
ZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0UoZnVuY3Rpb24pIFwKKyAgICBfUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRShmdW5jdGlvbikKKworI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAiXG4i
IFwKICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0yODUs
MzAgKzMwNCw0NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgIjI6IC5sb25nICIgTE9DQUxf
UkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MtMWIiICJcbiIgXAogICAgICk7
CiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5j
dGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMCwg
U0g0X1NDUkFUQ0hfUkVHSVNURVIpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1MoZnVuY3Rpb24sIDQsIFNINF9TQ1JBVENIX1JFR0lTVEVSKQorI2RlZmluZSBfSl9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAwLCBTSDRfU0NSQVRDSF9SRUdJ
U1RFUikKKyNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
Q0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlv
biwgNCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCisKKyNlbGlmIENPTVBJTEVSKE1TVkMpICYmIENQ
VShYODYpCisKKyNkZWZpbmUgX1BfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0UoZnVuY3Rpb24pIFwKKyAgICB2b2lkKiBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYykgeyByZXR1cm4gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMsIFJldHVy
bkFkZHJlc3NQdHIoKih2b2lkKiopX0FkZHJlc3NPZlJldHVybkFkZHJlc3MoKSkpOyB9CisKKyNk
ZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24p
IFwKKyAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYykgeyByZXR1cm4gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMsIFJldHVybkFk
ZHJlc3NQdHIoKih2b2lkKiopX0FkZHJlc3NPZlJldHVybkFkZHJlc3MoKSkpOyB9CisKKyNkZWZp
bmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikg
XAorICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGNlbGwsIFN0cmluZ0ltcGwqIHN0cmluZykgeyByZXR1cm4gZnVuY3Rpb24j
I1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMsIGNlbGwsIHN0cmluZywgUmV0dXJuQWRkcmVzc1B0cigq
KHZvaWQqKilfQWRkcmVzc09mUmV0dXJuQWRkcmVzcygpKSk7IH0KKworI2RlZmluZSBfSl9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCisgICAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIHZhbHVlLCBTdHJpbmdJbXBsKiBzdHJpbmcpIHsgcmV0dXJuIGZ1bmN0aW9uIyNX
aXRoUmV0dXJuQWRkcmVzcyhleGVjLCB2YWx1ZSwgc3RyaW5nLCBSZXR1cm5BZGRyZXNzUHRyKCoo
dm9pZCoqKV9BZGRyZXNzT2ZSZXR1cm5BZGRyZXNzKCkpKTsgfQorCisjZGVmaW5lIF9WX0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCisgICAgdm9p
ZCBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
dmFsdWUsIEpTQ2VsbCogY2VsbCwgU3RyaW5nSW1wbCogc3RyaW5nKSB7IHJldHVybiBmdW5jdGlv
biMjV2l0aFJldHVybkFkZHJlc3MoZXhlYywgdmFsdWUsIGNlbGwsIHN0cmluZywgUmV0dXJuQWRk
cmVzc1B0cigqKHZvaWQqKilfQWRkcmVzc09mUmV0dXJuQWRkcmVzcygpKSk7IH0KIAogI2VuZGlm
CiAKICNkZWZpbmUgUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5j
dGlvbikgXAogdm9pZCogSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5U
RVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9u
KQorX1BfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCiAK
ICNkZWZpbmUgSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlv
bikgXAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFk
ZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBX
VEZfSU5URVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1
bmN0aW9uKQorX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rp
b24pCiAKICNkZWZpbmUgSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJ
KGZ1bmN0aW9uKSBcCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRo
UmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRk
cmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pCitfSl9GVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKQogCiAjZGVmaW5lIEpfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVO
Q0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAotRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VKSShmdW5jdGlvbikKK19KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkkoZnVuY3Rpb24pCiAKICNkZWZpbmUgVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAogdm9pZCBKSVRfT1BFUkFUSU9OIGZ1bmN0
aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxs
KiwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RG
X0lOVEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShm
dW5jdGlvbikKK19WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1
bmN0aW9uKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTYyMzYpCShmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHA6MTU2MjM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgorCisj
aW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisj
aW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbldy
YXBwZXJzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlcGF0Y2guaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2V4dGVybiAiQyIgeworCitFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CisgICAgUHJvcGVydHlTbG90
IHNsb3QoYmFzZVZhbHVlKTsKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkpOwor
fQorCitKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9u
R2V0QnlJZEJ1aWxkTGlzdCk7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldEJ5SWRCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlk
KTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+
Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKKyAgICBQcm9wZXJ0eVNsb3Qg
c2xvdChiYXNlVmFsdWUpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVj
LCBpZGVudCwgc2xvdCk7CisKKyAgICBpZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAgICAgICAgYnVpbGRHZXRCeUlETGlzdChl
eGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbyk7CisKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VKSShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgSWRl
bnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8g
PSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNj
ZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNl
KTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vz
c1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpIHsK
KyAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgICAgICByZXBhdGNoR2V0QnlJRChl
eGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbyk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRUNJKG9wZXJhdGlvbkluT3B0aW1pemUpOworRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIGtleSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIGlmICghYmFzZS0+aXNPYmpl
Y3QoKSkgeworICAgICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlSW52YWxpZFBh
cmFtZXRlckVycm9yKGV4ZWMsICJpbiIsIGJhc2UpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJl
c3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwga2V5KTsK
KyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlKTsKKyAgICBib29sIHJlc3VsdCA9IGFzT2JqZWN0
KGJhc2UpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOworICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gc3R1YkluZm8uYWNjZXNzVHlwZSk7CisgICAgCisg
ICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgIHJlcGF0Y2hJbihleGVjLCBiYXNlLCBpZGVu
dCwgcmVzdWx0LCBzbG90LCBzdHViSW5mbyk7CisgICAgZWxzZQorICAgICAgICBzdHViSW5mby5z
ZWVuID0gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihy
ZXN1bHQpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbihF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCoga2V5KQoreworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworCisgICAgaWYgKCFiYXNlLT5pc09iamVjdCgpKSB7CisgICAgICAgIHZtLT50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVJbnZhbGlkUGFyYW1ldGVyRXJyb3IoZXhlYywgImluIiwg
YmFzZSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIH0KKworICAgIElkZW50aWZpZXIgaWRlbnQodm0sIGtleSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oYXNPYmplY3QoYmFzZSktPmhhc1Byb3BlcnR5KGV4ZWMsIGlk
ZW50KSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVy
aWNJbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUga2V5KQor
eworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
Q29tbW9uU2xvd1BhdGhzOjpvcEluKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBiYXNlKSkp
OworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21H
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jIGZ1bmN0aW9uLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGZ1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KGJhc2UpLCBpZGVudCkpOworfQorCitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogZ2V0dGVyU2V0dGVyKQoreworICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsR2V0dGVyKGV4ZWMsIGJhc2Us
IGdldHRlclNldHRlcikpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAg
SWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVl
LCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgYmFzZS0+bWV0aG9k
VGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgc2xvdCk7Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0Nl
bGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJ
ZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNl
LCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgYmFzZS0+bWV0aG9k
VGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgc2xvdCk7Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBK
U0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAg
ICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRy
dWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoYmFz
ZS0+aXNPYmplY3QoKSk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgp
LCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworfQorCit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJ
bXBsKiB1aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2
bSwgdWlkKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2Nr
KCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAg
ICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKTsKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJu
QWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQp
OworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5n
ZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1ZhbHVlIGJh
c2VWYWx1ZShiYXNlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2Rl
QmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgCisgICAgYmFzZVZhbHVlLnB1dChleGVj
LCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4
ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworICAgIGVs
c2UKKyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplKTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlk
ZW50KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsK
KworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxz
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIGJhc2VW
YWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNz
VHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChzdHViSW5mby5zZWVuKQorICAgICAgICByZXBh
dGNoUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGly
ZWN0KTsKKyAgICBlbHNlCisgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOworfQorCitWX0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RPcHRpbWl6ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlk
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7
CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29k
ZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIEFTU0VSVChiYXNlLT5pc09i
amVjdCgpKTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50
LCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBpZiAoc3R1YkluZm8uc2VlbikKKyAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFz
ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOworICAgIGVsc2UKKyAgICAgICAgc3R1
YkluZm8uc2VlbiA9IHRydWU7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemVX
aXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50
KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVC
bG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250
ZXh0KCkpOworICAgIAorICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVj
dChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAg
CisgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8u
YWNjZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uc2Vl
bikKKyAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJ
bmZvLCBEaXJlY3QpOworICAgIGVsc2UKKyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Cit9
CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9u
UHV0QnlJZFN0cmljdEJ1aWxkTGlzdCk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAor
ICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwor
ICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLmFjY2Vzc1R5cGUpOworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJhc2UpOworICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsK
KyAgICAKKyAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAg
CisgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8u
YWNjZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBidWlsZFB1dEJ5SWRMaXN0
KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworfQor
CitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1
aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNz
KTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihz
dHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKKyAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOworICAgIAorICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsK
KyAgICAKKyAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby5hY2Nlc3NUeXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGJ1aWxkUHV0QnlJ
ZExpc3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7
Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdCk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0
cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJl
dHVybkFkZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworICAgIAorICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgCisgICAg
QVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNzVHlw
ZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZSwgaWRlbnQs
IHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExp
c3QpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RC
dWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlm
aWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4
ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NU
eXBlKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1
dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAg
ICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xv
dCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBidWlsZFB1
dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKK30K
Kwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNo
UHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworCisgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IGJh
c2UtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBBU1NFUlQoIXZtLmhl
YXAuc3RvcmFnZUFsbG9jYXRvcigpLmZhc3RQYXRoU2hvdWxkU3VjY2VlZChzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICBiYXNlLT5zZXRTdHJ1
Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOworICAg
IGJhc2UtPnB1dERpcmVjdCh2bSwgb2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKK30K
Kworc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNW
YWx1ZSBjYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworCisgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoZXhlYy0+c2NvcGUoKSk7CisgICAg
ZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOworCisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNh
bGwpIHsKKyAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gZ2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7CisgICAgCisgICAgICAgIEFTU0VS
VChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKTsKKyAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBlID09
IENhbGxUeXBlSG9zdCkgeworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlY0NhbGxlZSk7CisgICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNP
YmplY3QoY2FsbGVlKSk7CisgICAgICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOworICAg
ICAgICAgICAgaWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdm0t
PmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOworICAgICAgICB9CisgICAgCisg
ICAgICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOworICAgICAgICBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNh
bGxlZSkpOworICAgICAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB9
CisKKyAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAKKyAgICBDb25z
dHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CisgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBl
ID0gZ2V0Q29uc3RydWN0RGF0YShjYWxsZWUsIGNvbnN0cnVjdERhdGEpOworICAgIAorICAgIEFT
U0VSVChjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGVKUyk7CisgICAgCisgICAgaWYgKGNv
bnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhvc3QpIHsKKyAgICAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7CisgICAgICAgIGV4ZWNDYWxsZWUtPnNl
dENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKKyAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0Nh
bGxlZSkpOworICAgICAgICBpZiAodm0tPmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJu
IHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvciku
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSk7CisgICAgZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBj
YWxsZWUpKTsKKyAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KKworaW5s
aW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCit7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVy
RnJhbWUoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUg
PSBleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CisgICAgaWYgKCFjYWxsZWVB
c0Z1bmN0aW9uQ2VsbCkKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGhh
bmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKKworICAgIEpT
RnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNl
bGwpOworICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKSk7
CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsK
KworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOworICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gMDsKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAg
ICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJl
c3NGb3JDYWxsKCk7CisgICAgZWxzZSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSk7CisgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJl
cGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpOworICAg
ICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOworICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICB9
CisgICAgICAgIGNvZGVCbG9jayA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtp
bmQpOworICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQorICAg
ICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdp
dGhBcml0eUNoZWNrRm9yKGtpbmQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlUHRy
ID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNz
Rm9yQ2FsbCgpOworICAgIH0KKyAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMt
PmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7Cisg
ICAgaWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2UoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnNl
dFNlZW4oKTsKKyAgICBlbHNlCisgICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJ
bmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwga2luZCk7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cit9CisKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVl
KQoreworICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKK30KKwor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSkKK3sKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3Ry
dWN0KTsKK30KKworaW5saW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlY1N0YXRl
KiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTQ2VsbComIGNhbGxl
ZUFzRnVuY3Rpb25DZWxsKQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNh
bGxlckZyYW1lKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUg
PSBleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7CisgICAgY2FsbGVlQXNGdW5jdGlvbkNlbGwg
PSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghY2FsbGVl
QXNGdW5jdGlvbkNlbGwpKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
aGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSwga2luZCkpOworICAgIAor
ICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCk7CisgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoZnVuY3Rpb24tPnNjb3BlVW5j
aGVja2VkKCkpOworICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4
ZWN1dGFibGUoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Io
a2luZCkpKSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxl
ID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisgICAgICAg
IEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlv
bihleGVjQ2FsbGVlLCBmdW5jdGlvbi0+c2NvcGUoKSwga2luZCk7CisgICAgICAgIGlmIChlcnJv
cikgeworICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjQ2FsbGVlLCBl
cnJvcik7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlD
aGVja0ZvcihraW5kKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKK30KKworaW5saW5lIGNoYXIqIHZp
cnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCit7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQ7CisgICAgcmV0
dXJuIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwga2luZCwgY2FsbGVlQXNGdW5j
dGlvbkNlbGxJZ25vcmVkKTsKK30KKworc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9z
dXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNl
bGwsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQoreworICAgIGlmICghY2FsbGVlQXNGdW5j
dGlvbkNlbGwpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBKU0Z1bmN0aW9uKiBj
YWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBK
U0Z1bmN0aW9uKiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVlLmdldCgpOworICAgIAor
ICAgIGlmICghb2xkQ2FsbGVlCisgICAgICAgIHx8IG9sZENhbGxlZS0+c3RydWN0dXJlKCkgIT0g
Y2FsbGVlLT5zdHJ1Y3R1cmUoKQorICAgICAgICB8fCBvbGRDYWxsZWUtPmV4ZWN1dGFibGUoKSAh
PSBjYWxsZWUtPmV4ZWN1dGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IEFTU0VSVChjYWxsZWUtPmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKS0+Z2Vu
ZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoKTsKKyAgICAKKyAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jazsKKyAgICBpZiAoY2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1
bmN0aW9uKCkpCisgICAgICAgIGNvZGVCbG9jayA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIGNv
ZGVCbG9jayA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWxsZWUtPmV4ZWN1dGFibGUo
KSktPmNvZGVCbG9ja0ZvckNhbGwoKTsKKyAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisg
ICAgbGlua0Nsb3N1cmVDYWxsKAorICAgICAgICBleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNv
ZGVCbG9jaywKKyAgICAgICAgY2FsbGVlLT5zdHJ1Y3R1cmUoKSwgY2FsbGVlLT5leGVjdXRhYmxl
KCksIGNvZGVQdHIpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7
CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKKyAgICBjaGFyKiByZXN1bHQgPSB2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCk7CisgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjQ2FsbGVl
LT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUt
PnJldHVyblBDKCkpOworCisgICAgaWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4
ZWNDYWxsZWUsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBjYWxsTGlua0luZm8pKQorICAgICAgICBs
aW5rU2xvd0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsKTsKKyAgICAK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZp
cnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sgICAgCisgICAgcmV0dXJuIHZpcnR1
YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwpOworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAg
IHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOworfQorCitK
SVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhl
Y1N0YXRlKiBleGVjLCB1aW50MzJfdCBjYWxsSW5kZXgpCit7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAg
ICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgQVNTRVJU
KGV4Y2VwdGlvblZhbHVlKTsKKyAgICAKKyAgICB1bnNpZ25lZCB2UENJbmRleCA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5ieXRlY29kZU9mZnNldEZvckNhbGxBdEluZGV4KGNhbGxJbmRleCk7CisgICAg
RXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0
aW9uVmFsdWUsIHZQQ0luZGV4KTsKKyAgICBBU1NFUlQoaGFuZGxlci5jYXRjaFJvdXRpbmUpOwor
ICAgIHJldHVybiBkZmdIYW5kbGVyRW5jb2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxlci5j
YXRjaFJvdXRpbmUpOworfQorCitKSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXJJblN0dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8pCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKKyAg
ICAKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBzdHViSW5mby0+Y29kZU9yaWdpbjsKKyAg
ICB3aGlsZSAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIGNvZGVPcmlnaW4g
PSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgIAorICAgIEV4Y2VwdGlv
bkhhbmRsZXIgaGFuZGxlciA9IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVl
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgIEFTU0VSVChoYW5kbGVyLmNhdGNoUm91
dGluZSk7CisgICAgcmV0dXJuIGRmZ0hhbmRsZXJFbmNvZGVkKGhhbmRsZXIuY2FsbEZyYW1lLCBo
YW5kbGVyLmNhdGNoUm91dGluZSk7Cit9CisKK30gLy8gZXh0ZXJuICJDIgorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODcsNyArNTg3LDcgQEAgY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29ucwogICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4
ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCi1KSVRIYW5kbGVyRW5jb2RlZCBKSVRf
T1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKiBleGVjLCB1aW50MzJf
dCBjYWxsSW5kZXgpCitKSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNTk1LDMw
ICs1OTUsMTEwIEBAIEpJVEhhbmRsZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3VwRXgKICAg
ICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgQVNTRVJU
KGV4Y2VwdGlvblZhbHVlKTsKICAgICAKLSAgICB1bnNpZ25lZCB2UENJbmRleCA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5ieXRlY29kZU9mZnNldEZvckNhbGxBdEluZGV4KGNhbGxJbmRleCk7Ci0gICAg
RXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0
aW9uVmFsdWUsIHZQQ0luZGV4KTsKKyAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBnZW5l
cmljVW53aW5kKHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSk7CiAgICAgQVNTRVJUKGhhbmRsZXIu
Y2F0Y2hSb3V0aW5lKTsKICAgICByZXR1cm4gZGZnSGFuZGxlckVuY29kZWQoaGFuZGxlci5jYWxs
RnJhbWUsIGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKIH0KIAotSklUSGFuZGxlckVuY29kZWQgSklU
X09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworfSAvLyBleHRl
cm4gIkMiCiAKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7
Ci0gICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKLSAgICAKLSAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4gPSBzdHViSW5mby0+Y29kZU9yaWdpbjsKLSAgICB3aGlsZSAoY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyOwotICAgIAotICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVy
aWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgpOwotICAgIEFTU0VSVChoYW5kbGVyLmNhdGNoUm91dGluZSk7Ci0gICAgcmV0dXJuIGRmZ0hh
bmRsZXJFbmNvZGVkKGhhbmRsZXIuY2FsbEZyYW1lLCBoYW5kbGVyLmNhdGNoUm91dGluZSk7Cisv
LyBOb3RlOiBnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSgpIG5lZWRzIHRvIGJl
IHBsYWNlZCBiZWZvcmUgdGhlCisvLyBkZWZpbml0aW9uIG9mIGdldEhvc3RDYWxsUmV0dXJuVmFs
dWUoKSBiZWxvdyBiZWNhdXNlIHRoZSBXaW5kb3dzIGJ1aWxkCisvLyByZXF1aXJlcyBpdC4KK2V4
dGVybiAiQyIgRW5jb2RlZEpTVmFsdWUgSE9TVF9DQUxMX1JFVFVSTl9WQUxVRV9PUFRJT04gZ2V0
SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IGlmICghZXhlYykKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS5ob3N0Q2FsbFJldHVyblZhbHVl
KTsKIH0KIAotfSAvLyBleHRlcm4gIkMiCisjaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoWDg2XzY0
KQorYXNtICgKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUp
ICJcbiIKK0hJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK1NZTUJPTF9T
VFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKKyAgICAibW92IDQwKCVyMTMp
LCAlcjEzXG4iCisgICAgIm1vdiAlcjEzLCAlcmRpXG4iCisgICAgImptcCAiIExPQ0FMX1JFRkVS
RU5DRShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgorKTsKKworI2Vs
aWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoWDg2KQorYXNtICgKKyIudGV4dCIgIlxuIiBcCisiLmds
b2JsICIgU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCitISURFX1NZ
TUJPTChnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCitTWU1CT0xfU1RSSU5HKGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpICI6IiAiXG4iCisgICAgIm1vdiA0MCglZWRpKSwgJWVkaVxuIgorICAg
ICJtb3YgJWVkaSwgNCglZXNwKVxuIgorICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9z
dENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICJcbiIKKyk7CisKKyNlbGlmIENPTVBJTEVS
KEdDQykgJiYgQ1BVKEFSTV9USFVNQjIpCithc20gKAorIi50ZXh0IiAiXG4iCisiLmFsaWduIDIi
ICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJc
biIKK0hJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKKyIudGh1bWIiICJc
biIKKyIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZ2V0SG9zdENhbGxSZXR1cm5WYWx1
ZSkgIlxuIgorU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiOiIgIlxuIgor
ICAgICJsZHIgcjUsIFtyNSwgIzQwXSIgIlxuIgorICAgICJtb3YgcjAsIHI1IiAiXG4iCisgICAg
ImIgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUp
ICJcbiIKKyk7CisKKyNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkK
K2FzbSAoCisiLnRleHQiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxs
UmV0dXJuVmFsdWUpICJcbiIKK0hJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJc
biIKK0lOTElORV9BUk1fRlVOQ1RJT04oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkKK1NZTUJPTF9T
VFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKKyAgICAibGRyIHI1LCBbcjUs
ICM0MF0iICJcbiIKKyAgICAibW92IHIwLCByNSIgIlxuIgorICAgICJiICIgTE9DQUxfUkVGRVJF
TkNFKGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiXG4iCispOworCisjZWxp
ZiBDT01QSUxFUihHQ0MpICYmIENQVShNSVBTKQorYXNtICgKKyIudGV4dCIgIlxuIgorIi5nbG9i
bCAiIFNZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgorSElERV9TWU1C
T0woZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgorU1lNQk9MX1NUUklORyhnZXRIb3N0Q2Fs
bFJldHVyblZhbHVlKSAiOiIgIlxuIgorICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZ2V0SG9zdENh
bGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpCisgICAgImx3ICRzMCwgNDAoJHMwKSIgIlxuIgor
ICAgICJtb3ZlICRhMCwgJHMwIiAiXG4iCisgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9z
dENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICJcbiIKKyk7CisKKyNlbGlmIENPTVBJTEVS
KEdDQykgJiYgQ1BVKFNINCkKK2FzbSAoCisiLnRleHQiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xf
U1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK0hJREVfU1lNQk9MKGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpICJcbiIKK1NZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1
ZSkgIjoiICJcbiIKKyAgICAiYWRkICM0MCwgcjE0IiAiXG4iCisgICAgIm1vdi5sIEByMTQsIHIx
NCIgIlxuIgorICAgICJtb3YgcjE0LCByNCIgIlxuIgorICAgICJtb3YubCAyZiwgIiBTSDRfU0NS
QVRDSF9SRUdJU1RFUiAiXG4iCisgICAgImJyYWYgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAiXG4i
CisgICAgIm5vcCIgIlxuIgorICAgICIxOiAuYmFsaWduIDQiICJcbiIKKyAgICAiMjogLmxvbmcg
IiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICIt
MWJcbiIKKyk7CisKKyNlbGlmIENPTVBJTEVSKE1TVkMpICYmIENQVShYODYpCitleHRlcm4gIkMi
IHsKKyAgICBfX2RlY2xzcGVjKG5ha2VkKSBFbmNvZGVkSlNWYWx1ZSBIT1NUX0NBTExfUkVUVVJO
X1ZBTFVFX09QVElPTiBnZXRIb3N0Q2FsbFJldHVyblZhbHVlKCkKKyAgICB7CisgICAgICAgIF9f
YXNtIHsKKyAgICAgICAgICAgIG1vdiBlZGksIFtlZGkgKyA0MF07CisgICAgICAgICAgICBtb3Yg
W2VzcCArIDRdLCBlZGk7CisgICAgICAgICAgICBqbXAgZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdp
dGhFeGVjU3RhdGUKKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJ
KHJldmlzaW9uIDE1NjIzNikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmg6MTU2MjM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKSVRPcGVyYXRpb25zX2gKKyNk
ZWZpbmUgSklUT3BlcmF0aW9uc19oCisKKyNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRl
ICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyLmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJ
bmZvLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2lm
IENBTExJTkdfQ09OVkVOVElPTl9JU19TVERDQUxMCisjZGVmaW5lIEpJVF9PUEVSQVRJT04gQ0RF
Q0wKKyNlbHNlCisjZGVmaW5lIEpJVF9PUEVSQVRJT04KKyNlbmRpZgorCisvLyBUaGVzZSB0eXBl
ZGVmcyBwcm92aWRlIHR5cGVjaGVja2luZyB3aGVuIGdlbmVyYXRpbmcgY2FsbHMgb3V0IHRvIGhl
bHBlciByb3V0aW5lczsKKy8vIHRoaXMgaGVscHMgcHJldmVudCBjYWxsaW5nIGEgaGVscGVyIHJv
dXRpbmUgd2l0aCB0aGUgd3JvbmcgYXJndW1lbnRzIQorLyoKKyAgICBLZXk6CisgICAgVjogdm9p
ZAorICAgIEo6IEpTVmFsdWUKKyAgICBQOiBwb2ludGVyICh2b2lkKikKKyAgICBDOiBKU0NlbGwq
CisgICAgQTogSlNBcnJheSoKKyAgICBTOiBzaXplX3QKKyAgICBaOiBpbnQzMl90CisgICAgRDog
ZG91YmxlCisgICAgSTogU3RyaW5nSW1wbCoKKyovCit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKK3R5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VBKShFeGVjU3RhdGUq
LCBKU0FycmF5Kik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJ
VE9wZXJhdGlvbl9FQVopKEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90KTsKK3R5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDKShFeGVjU3Rh
dGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpf
SklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Cit0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ0kpKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5j
b2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9K
SVRPcGVyYXRpb25fRURBKShFeGVjU3RhdGUqLCBkb3VibGUsIEpTQXJyYXkqKTsKK3R5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VJKShFeGVjU3Rh
dGUqLCBTdHJpbmdJbXBsKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
KCpKX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpBKShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNBcnJheSopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpJKShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgU3RyaW5nSW1wbCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OICgqSl9KSVRPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9K
SVRPcGVyYXRpb25fRUpzc1opKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgaW50MzJfdCk7Cit0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSlApKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCB2b2lkKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FUCkoRXhlY1N0YXRlKiwgdm9pZCopOwor
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVBQ
KShFeGVjU3RhdGUqLCB2b2lkKiwgdm9pZCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90
KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9u
X0VTUykoRXhlY1N0YXRlKiwgc2l6ZV90LCBzaXplX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3Qp
OwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25f
RVpJY2ZaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBJbmxpbmVDYWxsRnJhbWUqLCBpbnQzMl90KTsK
K3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0Va
WikoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCk7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09Q
RVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwordHlwZWRlZiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7
Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VDKShFeGVj
U3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRP
cGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUljZikoRXhlY1N0YXRlKiwgSW5s
aW5lQ2FsbEZyYW1lKik7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3Bl
cmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEpTQ2VsbCog
SklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NTdCkoRXhlY1N0YXRlKiwgSlNTdHJp
bmcqLCBTdHJ1Y3R1cmUqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRP
cGVyYXRpb25fRUpzc0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwordHlw
ZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSnNzSnNzSnNzKShF
eGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKK3R5cGVkZWYgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09i
amVjdCosIGludDMyX3QpOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9w
ZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwordHlwZWRlZiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Cit0
eXBlZGVmIGRvdWJsZSBKSVRfT1BFUkFUSU9OICgqRF9KSVRPcGVyYXRpb25fREQpKGRvdWJsZSwg
ZG91YmxlKTsKK3R5cGVkZWYgZG91YmxlIEpJVF9PUEVSQVRJT04gKCpEX0pJVE9wZXJhdGlvbl9a
WikoaW50MzJfdCwgaW50MzJfdCk7Cit0eXBlZGVmIGRvdWJsZSBKSVRfT1BFUkFUSU9OICgqRF9K
SVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgaW50
MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRCkoZG91YmxlKTsKK3R5cGVkZWYg
c2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIEpTQ2VsbCopOwordHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3Bl
cmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHNpemVfdCBK
SVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNf
SklUT3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFU
SU9OICgqVl9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Cit0eXBlZGVmIHZvaWQgSklUX09Q
RVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VPWkQpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50
MzJfdCwgZG91YmxlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRp
b25fRU9aSikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7
Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDKShFeGVjU3Rh
dGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRp
b25fRUNJY2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSopOwordHlwZWRl
ZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ0NJY2YpKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSopOwordHlwZWRlZiB2b2lkIEpJVF9P
UEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ0pKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04g
KCpWX0pJVE9wZXJhdGlvbl9FQ1opKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOwordHlw
ZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIEpTQ2VsbCopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9w
ZXJhdGlvbl9FSkNJKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5n
SW1wbCopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSkpK
KShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUpQUCko
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHZvaWQqLCB2b2lkKik7Cit0eXBlZGVmIHZvaWQg
SklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VQWkopKEV4ZWNTdGF0ZSosIHZvaWQqLCBp
bnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX1cpKFdhdGNocG9pbnRTZXQqKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJB
VElPTiAoKlBfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwordHlwZWRlZiBjaGFyKiBKSVRf
T1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordHlw
ZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRUpTKShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAo
KlBfSklUT3BlcmF0aW9uX0VPKShFeGVjU3RhdGUqLCBKU09iamVjdCopOwordHlwZWRlZiBjaGFy
KiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRU9TKShFeGVjU3RhdGUqLCBKU09iamVj
dCosIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlv
bl9FT1opKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCk7Cit0eXBlZGVmIGNoYXIqIEpJ
VF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXpl
X3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVMpKEV4
ZWNTdGF0ZSosIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9w
ZXJhdGlvbl9FU0pzcykoRXhlY1N0YXRlKiwgc2l6ZV90LCBKU1N0cmluZyopOwordHlwZWRlZiBj
aGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVN0KShFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VT
dEopKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgY2hh
ciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VTdFBTKShFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBf
SklUT3BlcmF0aW9uX0VTdFNTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVf
dCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FU3RaKShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJB
VElPTiAoKlBfSklUT3BlcmF0aW9uX0VaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCk7
Cit0eXBlZGVmIFN0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gKCpJX0pJVE9wZXJhdGlvbl9FSnNz
KShFeGVjU3RhdGUqLCBKU1N0cmluZyopOwordHlwZWRlZiBKU1N0cmluZyogSklUX09QRVJBVElP
TiAoKkpzc19KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOworCitleHRlcm4g
IkMiIHsKKworLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBsb29rdXAgYW4gZXhjZXB0aW9uIGhh
bmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwgd2hpY2ggaXMKKy8vIHRoZSByZXR1cm4gbG9j
YXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91dCB0byBvbmUgb2YgdGhlIGhlbHBlciBvcGVy
YXRpb25zIGFib3ZlLgorCisvLyBBY2NvcmRpbmcgdG8gQysrIHJ1bGVzLCBhIHR5cGUgdXNlZCBm
b3IgdGhlIHJldHVybiBzaWduYXR1cmUgb2YgZnVuY3Rpb24gd2l0aCBDIGxpbmthZ2UgKGkuZS4K
Ky8vICdleHRlcm4gIkMiJykgbmVlZHMgdG8gYmUgUE9EOyBoZW5jZSBwdXR0aW5nIGFueSBjb25z
dHJ1Y3RvcnMgaW50byBpdCBjb3VsZCBjYXVzZSBlaXRoZXIgY29tcGlsZXIKKy8vIHdhcm5pbmdz
LCBvciB3b3JzZSwgYSBjaGFuZ2UgaW4gdGhlIEFCSSB1c2VkIHRvIHJldHVybiB0aGVzZSB0eXBl
cy4KK3N0cnVjdCBKSVRIYW5kbGVyIHsKKyAgICB1bmlvbiBVbmlvbiB7CisgICAgICAgIHN0cnVj
dCBTdHJ1Y3QgeworICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjOworICAgICAgICAgICAgdm9p
ZCogaGFuZGxlcjsKKyAgICAgICAgfSBzOworICAgICAgICB1aW50NjRfdCBlbmNvZGVkOworICAg
IH0gdTsKK307CisKK2lubGluZSBKSVRIYW5kbGVyIGNyZWF0ZUpJVEhhbmRsZXIoRXhlY1N0YXRl
KiBleGVjLCB2b2lkKiBoYW5kbGVyKQoreworICAgIEpJVEhhbmRsZXIgcmVzdWx0OworICAgIHJl
c3VsdC51LnMuZXhlYyA9IGV4ZWM7CisgICAgcmVzdWx0LnUucy5oYW5kbGVyID0gaGFuZGxlcjsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgSklUSGFu
ZGxlciBKSVRIYW5kbGVyRW5jb2RlZDsKK2lubGluZSBKSVRIYW5kbGVyRW5jb2RlZCBkZmdIYW5k
bGVyRW5jb2RlZChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGhhbmRsZXIpCit7CisgICAgcmV0dXJu
IGNyZWF0ZUpJVEhhbmRsZXIoZXhlYywgaGFuZGxlcik7Cit9CisjZWxzZQordHlwZWRlZiB1aW50
NjRfdCBKSVRIYW5kbGVyRW5jb2RlZDsKK2lubGluZSBKSVRIYW5kbGVyRW5jb2RlZCBkZmdIYW5k
bGVyRW5jb2RlZChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGhhbmRsZXIpCit7CisgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKEpJVEhhbmRsZXI6OlVuaW9uKSA9PSBzaXplb2YodWludDY0X3QpLCBK
SVRIYW5kbGVyX1VuaW9uX2lzXzY0Yml0KTsKKyAgICByZXR1cm4gY3JlYXRlSklUSGFuZGxlcihl
eGVjLCBoYW5kbGVyKS51LmVuY29kZWQ7Cit9CisjZW5kaWYKK0pJVEhhbmRsZXJFbmNvZGVkIEpJ
VF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqLCB1aW50MzJfdCkg
V1RGX0lOVEVSTkFMOworSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNl
cHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKikgV1RGX0lO
VEVSTkFMOworCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5PcHRpbWl6ZShFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBTdHJpbmdJbXBsKik7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwqKTsKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2VuZXJpY0luKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29k
ZWRKU1ZhbHVlKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEN1
c3RvbUdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
YywgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ2FsbEdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZf
SU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5n
SW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxs
KiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCop
IFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwq
IGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3Ry
aW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCop
IFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5U
RVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2Vs
bCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBKU09iamVj
dCosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVS
TkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4
ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlu
a0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Citj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RG
X0lOVEVSTkFMOworCit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSklUT3Bl
cmF0aW9uc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDggKzE3MCw3IEBAIGlubGluZSBKSVRIYW5k
bGVyRW5jb2RlZCBkZmdIYW5kbGVyRW5jb2QKICAgICByZXR1cm4gY3JlYXRlSklUSGFuZGxlcihl
eGVjLCBoYW5kbGVyKS51LmVuY29kZWQ7CiB9CiAjZW5kaWYKLUpJVEhhbmRsZXJFbmNvZGVkIEpJ
VF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqLCB1aW50MzJfdCkg
V1RGX0lOVEVSTkFMOwotSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNl
cHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKikgV1RGX0lO
VEVSTkFMOworSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25I
YW5kbGVyKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIAogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJp
bmdJbXBsKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJ
bXBsKikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJTZXQuaAkocmV2aXNpb24gMTU2MjM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0Lmg6MTU2MjM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVnaXN0ZXJTZXRfaAor
I2RlZmluZSBSZWdpc3RlclNldF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lm
IEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5o
IgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzID0KKyAgICBHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOworCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQgPQorICAgICh0b3RhbE51bWJl
ck9mUmVnaXN0ZXJzICsgNykgPj4gMzsKKwordHlwZWRlZiB1aW50OF90IFJlZ2lzdGVyU2V0UE9E
W251bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0XTsKKworY2xhc3MgUmVnaXN0ZXJTZXQgeworcHVi
bGljOgorICAgIFJlZ2lzdGVyU2V0KCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0OyBpLS07KQorICAgICAgICAgICAgbV9zZXRbaV0g
PSAwOworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlclNldChjb25zdCBSZWdpc3RlclNldFBPRCYg
b3RoZXIpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkJ5dGVzSW5S
ZWdpc3RlclNldDsgaS0tOykKKyAgICAgICAgICAgIG1fc2V0W2ldID0gb3RoZXJbaV07CisgICAg
fQorICAgIAorICAgIGNvbnN0IFJlZ2lzdGVyU2V0UE9EJiBhc1BPRCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2V0OyB9CisgICAgCisgICAgdm9pZCBjb3B5SW5mbyhSZWdpc3RlclNldFBPRCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkJ5dGVzSW5S
ZWdpc3RlclNldDsgaS0tOykKKyAgICAgICAgICAgIG90aGVyW2ldID0gbV9zZXRbaV07CisgICAg
fQorICAgIAorICAgIHZvaWQgc2V0KEdQUlJlZyByZWcpCisgICAgeworICAgICAgICBzZXRCaXQo
R1BSSW5mbzo6dG9JbmRleChyZWcpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRHUFJCeUlu
ZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAgICBzZXRCaXQoaW5kZXgpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNsZWFyKEdQUlJlZyByZWcpCisgICAgeworICAgICAgICBjbGVhckJpdChH
UFJJbmZvOjp0b0luZGV4KHJlZykpOworICAgIH0KKyAgICAKKyAgICBib29sIGdldChHUFJSZWcg
cmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEJpdChHUFJJbmZvOjp0b0luZGV4
KHJlZykpOworICAgIH0KKyAgICAKKyAgICBib29sIGdldEdQUkJ5SW5kZXgodW5zaWduZWQgaW5k
ZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVycyk7CisgICAgICAgIHJldHVybiBnZXRCaXQoaW5kZXgpOworICAgIH0KKyAgICAK
KyAgICAvLyBSZXR1cm4gdGhlIGluZGV4J3RoIGZyZWUgR1BSLgorICAgIEdQUlJlZyBnZXRGcmVl
R1BSKHVuc2lnbmVkIGluZGV4ID0gMCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBp
ZiAoIWdldEdQUkJ5SW5kZXgoaSkgJiYgIWluZGV4LS0pCisgICAgICAgICAgICAgICAgcmV0dXJu
IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEludmFs
aWRHUFJSZWc7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KEZQUlJlZyByZWcpCisgICAgewor
ICAgICAgICBzZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjp0b0lu
ZGV4KHJlZykpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEZQUkJ5SW5kZXgodW5zaWduZWQg
aW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycyk7CisgICAgICAgIHNldEJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGlu
ZGV4KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcihGUFJSZWcgcmVnKQorICAgIHsKKyAg
ICAgICAgY2xlYXJCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjp0b0lu
ZGV4KHJlZykpOworICAgIH0KKyAgICAKKyAgICBib29sIGdldChGUFJSZWcgcmVnKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyAr
IEZQUkluZm86OnRvSW5kZXgocmVnKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgZ2V0RlBSQnlJ
bmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8
IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIGdldEJpdChHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGluZGV4KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQmFua0luZm8+CisgICAgdm9pZCBzZXRCeUluZGV4KHVuc2lnbmVkIGluZGV4
KQorICAgIHsKKyAgICAgICAgc2V0KEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgorICAgIGJvb2wgZ2V0QnlJ
bmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQoQmFua0luZm86
OnRvUmVnaXN0ZXIoaW5kZXgpKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZT
ZXRHUFJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7
CisgICAgICAgICAgICBpZiAoIWdldEJpdChpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mU2V0RlBScygpIGNvbnN0CisgICAg
eworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFn
ZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mU2V0UmVnaXN0ZXJz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAg
ICAgIGlmICghZ2V0Qml0KGkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIHZvaWQgc2V0Qml0KHVuc2lnbmVkIGkpCisgICAgeworICAgICAg
ICBBU1NFUlQoaSA8IHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAgICBtX3NldFtpID4+
IDNdIHw9ICgxIDw8IChpICYgNykpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyQml0KHVu
c2lnbmVkIGkpCisgICAgeworICAgICAgICBBU1NFUlQoaSA8IHRvdGFsTnVtYmVyT2ZSZWdpc3Rl
cnMpOworICAgICAgICBtX3NldFtpID4+IDNdICY9IH4oMSA8PCAoaSAmIDcpKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBnZXRCaXQodW5zaWduZWQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChpIDwgdG90YWxOdW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgIHJldHVybiAhIShtX3Nl
dFtpID4+IDNdICYgKDEgPDwgKGkgJiA3KSkpOworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlclNl
dFBPRCBtX3NldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZWxzZSAvLyBFTkFCTEUo
SklUKSAtPiBzbyBpZiBKSVQgaXMgZGlzYWJsZWQKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIERl
ZmluZSBSZWdpc3RlclNldFBPRCB0byBzb21ldGhpbmcgdGhhdCBpcyBhIFBPRCwgYnV0IGlzIG90
aGVyd2lzZSB1c2VsZXNzLAorLy8gdG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVmZXIgdG8gdGhpcyB0
eXBlIGluIGNvZGUgdGhhdCBtYXkgYmUgY29tcGlsZWQgd2hlbgorLy8gdGhlIERGRyBpcyBkaXNh
YmxlZC4KKworc3RydWN0IFJlZ2lzdGVyU2V0UE9EIHsgfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gUmVnaXN0ZXJTZXRfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE1NjIzNikJ
KGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcDoxNTYyMzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTQxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVwYXRjaC5o
IgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1
ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIKKyNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUu
aCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2lu
Y2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKKyNpbmNsdWRlICJSZXBhdGNoQnVmZmVy
LmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU3Ry
dWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCisj
aW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitz
dGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVibG9jaywgQ29kZUxvY2F0aW9u
Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBuZXdDYWxsZWVGdW5jdGlvbikKK3sKKyAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZWJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIHJlcGF0Y2hCeUlk
U2VsZkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBG
dW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwgYm9vbCBjb21wYWN0KQoreworICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOworCisgICAgLy8gT25seSBvcHRpbWl6
ZSBvbmNlIQorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7CisKKyAgICAvLyBQYXRjaCB0aGUgc3RydWN0dXJlIGNo
ZWNrICYgdGhlIG9mZnNldCBvZiB0aGUgbG9hZC4KKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2go
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRy
X3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBzdHJ1Y3R1cmUpOwor
ICAgIHJlcGF0Y2hCdWZmZXIuc2V0TG9hZEluc3RydWN0aW9uSXNBY3RpdmUoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmNvbnZlcnRpYmxlTG9hZEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1N0b3JhZ2VMb2FkKSwgaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoY29tcGFjdCkKKyAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRS
ZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSk7CisgICAgZWxzZQorICAgICAgICByZXBh
dGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMy
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZz
ZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSk7CisjZWxpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgIGlmIChjb21wYWN0KSB7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVU
b1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2
ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIG9m
ZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNl
dFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgfQorI2VuZGlmCit9CisK
K3N0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKKyAgICBKU0NlbGwqIG9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAg
IGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5z
aXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgc3RydWN0dXJlLT5h
ZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykp
OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLy8gSWYgd2UgZXhlY3V0ZSB0aGlzIGNv
ZGUsIHRoZSBvYmplY3QgbXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0LiBBc3NlcnQK
KyAgICAgICAgLy8gdGhpcyBpbiBkZWJ1ZyBtb2Rlcy4KKyAgICAgICAgaml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gaml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CisgICAgICAgIGppdC5icmVha3Bv
aW50KCk7CisgICAgICAgIG9rLmxpbmsoJmppdCk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihv
YmplY3QpLCBzY3JhdGNoR1BSKTsKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAorICAgICAgICBq
aXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25D
aGVjaygKKyAgICBKU1ZhbHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCit7Cisg
ICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFT
U0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOworICAgIAorICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRp
b25DaGVjaygKKyAgICAgICAgcHJvdG90eXBlLmFzQ2VsbCgpLCBwcm90b3R5cGUuYXNDZWxsKCkt
PnN0cnVjdHVyZSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsCisgICAgICAgIGZhaWx1cmVD
YXNlcywgc2NyYXRjaEdQUik7Cit9CisKK3N0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChSZXBh
dGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCit7CisgICAgaWYgKE1hY3JvQXNzZW1i
bGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7CisgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKAorICAgICAgICAgICAgUmVwYXRjaEJ1
ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcygKKyAgICAg
ICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZz
ZXQoCisgICAgICAgICAgICAgICAgICAgIC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2hlY2tJbW1Ub0NhbGwpKSwKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdl
dCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKAorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAor
ICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAor
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKK30KKworc3RhdGljIHZvaWQgZW1p
dFJlc3RvcmVTY3JhdGNoKE1hY3JvQXNzZW1ibGVyJiBzdHViSml0LCBib29sIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIHN1Y2Nl
c3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZmFpbHVyZUNhc2VzKQoreworICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgeworICAgICAg
ICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgCisgICAgICAgIHN1Y2Nlc3MgPSBz
dHViSml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBo
ZXJlLCBzbyB3ZSBjYW4gcG9wIHNjcmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFjay4KKyAgICAg
ICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOworICAgICAgICAKKyAgICAgICAgc3R1Ykpp
dC5wb3Aoc2NyYXRjaEdQUik7CisgICAgICAgIAorICAgICAgICBmYWlsID0gc3R1YkppdC5qdW1w
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc3VjY2VzcyA9IHN0dWJKaXQu
anVtcCgpOworfQorCitzdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYg
cGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBmYWlsdXJlQ2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29k
ZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbikKK3sKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN1
Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7CisgICAgICAgIAorICAgIGlmIChuZWVkVG9SZXN0b3JlU2Ny
YXRjaCkgeworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWwsIHNsb3dDYXNlQmVnaW4pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBk
aXJlY3RseSBiYWNrIHRvIG5vcm1hbCBwYXRoCisgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJl
Q2FzZXMsIHNsb3dDYXNlQmVnaW4pOworfQorCitzdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0
Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vzcywg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1
cmVDYXNlcykKK3sKKyAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxU
b0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworfQorCitzdGF0aWMgdm9pZCBnZW5l
cmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwg
c3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KworICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7CisgICAgICAgIAorICAgIEdQUlJlZyBiYXNl
R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Cisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZn
LnZhbHVlR1BSKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7CisgICAgYm9vbCBuZWVkVG9S
ZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworICAgIAorICAgIGlmIChzY3JhdGNoR1BSID09IEludmFs
aWRHUFJSZWcpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzY3JhdGNoR1BSID0gQXNz
ZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7CisjZWxz
ZQorICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BS
KGJhc2VHUFIsIHJlc3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKKyNlbmRpZgorICAgICAgICBzdHVi
Sml0LnB1c2goc2NyYXRjaEdQUik7CisgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNl
czsKKyAgICAKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSkpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1
cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKKyAg
ICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjb3VudDsgKytpLCArK2l0KSB7CisgICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3QoY3Vy
clN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKKyAgICAgICAgYWRkU3RydWN0
dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgICAgICAgICAgcHJvdG9PYmplY3QsIHByb3RvT2JqZWN0
LT5zdHJ1Y3R1cmUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LAorICAg
ICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgY3VyclN0cnVjdHVy
ZSA9IGl0LT5nZXQoKTsKKyAgICB9CisgICAgCisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNl
dCkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdHViSml0LmxvYWQ2NChwcm90b09i
amVjdC0+bG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KSwgcmVzdWx0R1BSKTsKKyNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihwcm90b09iamVjdC0+bG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7Cisg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+YnV0dGVyZmx5QWRkcmVzcygpLCBy
ZXN1bHRHUFIpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHN0dWJKaXQubG9hZDY0KE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0
KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZz
ZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyNlbmRp
ZgorICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7CisgICAg
CisgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBz
Y3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOworICAgIAorICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAg
IAorICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0
Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxh
YmVsKTsKKyAgICAKKyAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RGR19TVFVC
KAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJERkcgcHJvdG90eXBlIGNoYWluIGFj
Y2VzcyBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgIHRvQ1N0cmlu
ZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKK30KKworc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7Cisg
ICAgLy8gRklYTUU6IFdyaXRlIGEgdGVzdCB0aGF0IHByb3ZlcyB3ZSBuZWVkIHRvIGNoZWNrIGZv
ciByZWN1cnNpb24gaGVyZSBqdXN0CisgICAgLy8gbGlrZSB0aGUgaW50ZXJwcmV0ZXIgZG9lcywg
dGhlbiBhZGQgYSBjaGVjayBmb3IgcmVjdXJzaW9uLgorCisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAK
KyAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1
ZUdQUik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8u
cGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKKyAgICAgICAgYm9vbCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXIgc3R1YkppdDsKKyAgICAgICAgCisgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRH
UFJSZWcpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFz
c2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOworI2Vs
c2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0
Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOworI2VuZGlmCisgICAgICAg
ICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7CisgICAgICAgICAgICBuZWVkVG9SZXN0b3Jl
U2NyYXRjaCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CisgICAgICAgCisgICAgICAgIHN0dWJKaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7IAorICAgICAgICBzdHViSml0LmxvYWQ4KE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0
dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSkpOworICAgICAgICAK
KyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHVi
Sml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3Jh
Z2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQoc3R1YkppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgIHN0dWJKaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAg
ICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3R1YkppdC5t
b3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmZmZmZmZmYpLCByZXN1bHRUYWdH
UFIpOyAvLyBKU1ZhbHVlOjpJbnQzMlRhZworI2VuZGlmCisKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKKyAgICAgICAgCisgICAgICAgIGVtaXRSZXN0b3JlU2Ny
YXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2Vzcywg
ZmFpbCwgZmFpbHVyZUNhc2VzKTsKKyAgICAgICAgCisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnZtLCAmc3R1YkppdCwgY29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGxpbmtS
ZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN0dWJJbmZv
LCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOworICAgICAgICAKKyAgICAgICAgc3R1Yklu
Zm8uc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKKyAgICAgICAgICAg
IHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJERkcgR2V0QnlJZCBhcnJheSBsZW5ndGggc3R1
YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpl
eGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAKKyAgICAgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgICAgIHJlcGxhY2VXaXRo
SnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBzaG91bGQgc3VwcG9ydCBsZW5ndGgg
YWNjZXNzIGZvciBTdHJpbmcuCisKKyAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNz
IGZvciBpbW1lZGlhdGVzLgorICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICBp
ZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
c3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgorICAgIGlmIChzbG90LnNs
b3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7CisgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVZh
bHVlKCkKKyAgICAgICAgICAgIHx8ICFNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25l
ZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpKSkgeworICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXBhdGNoQnlJZFNl
bGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNl
dCgpLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0LCB0cnVlKTsKKyAgICAgICAgc3R1YkluZm8u
aW5pdEdldEJ5SWRTZWxmKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0
dXJlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChzdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8g
RklYTUU6IG9wdGltaXplIGdldHRlcnMgYW5kIHNldHRlcnMKKyAgICBpZiAoIXNsb3QuaXNDYWNo
ZWFibGVWYWx1ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICBzaXplX3QgY291bnQgPSBu
b3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2VWYWx1ZSwgc2xv
dC5zbG90QmFzZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCk7CisgICAgaWYgKGNvdW50ID09IElu
dmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RydWN0
dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVj
KTsKKyAgICAKKyAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZv
LCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLCBzdHViSW5mby5zdHViUm91dGluZSk7
CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAg
cmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKKyAgICAKKyAg
ICBzdHViSW5mby5pbml0R2V0QnlJZENoYWluKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHRydWUpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgYm9vbCBj
YWNoZWQgPSB0cnlDYWNoZUdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QsIHN0dWJJbmZvKTsKKyAgICBpZiAoIWNhY2hlZCkKKyAgICAgICAgcmVwYXRjaENhbGwoZXhl
Yy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0
QnlJZCk7Cit9CisKK3N0YXRpYyBib29sIGdldFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCgKKyAg
ICBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sCisgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiYgcG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0LCBpbnQmIGxpc3RJbmRleCwKKyAgICBDb2RlTG9jYXRpb25MYWJlbCYgc2xvd0Nh
c2UpCit7CisgICAgc2xvd0Nhc2UgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgCisg
ICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KSB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFzdHViSW5mby5zdHViUm91dGluZSk7CisgICAgICAgIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKTsKKyAg
ICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QsIDAsIGZhbHNlKTsKKyAgICAgICAgbGlzdEluZGV4ID0gMDsKKyAgICB9IGVsc2UgaWYgKHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFzdHViSW5mby5zdHViUm91dGluZSk7CisgICAgICAgIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1h
bmFnZWRSb3V0aW5lKHNsb3dDYXNlKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLmdldCgpLCB0cnVlKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxm
TGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEsIHRydWUpOworICAgICAgICBsaXN0SW5k
ZXggPSAxOworICAgIH0gZWxzZSBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX2NoYWluKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhc3R1YkluZm8uc3R1YlJv
dXRpbmUpOworICAgICAgICBzbG93Q2FzZSA9IENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0
dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLnN0dWJSb3V0aW5lLCBzdHViSW5mby51LmdldEJ5
SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby51LmdldEJ5SWRDaGFp
bi5jaGFpbi5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNsZWFy
KCk7CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0LCAxLCBmYWxzZSk7CisgICAgICAgIGxpc3RJbmRleCA9IDE7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3Nf
Z2V0X2J5X2lkX3NlbGZfbGlzdCk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9
IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7CisgICAgICAgIGxpc3RJ
bmRleCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplOworICAgICAgICBzbG93
Q2FzZSA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFts
aXN0SW5kZXggLSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgfQorICAgIAor
ICAgIGlmIChsaXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQobGlzdEluZGV4IDwgUE9M
WU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj
IHZvaWQgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1YihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGZfbGlzdCk7CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7
CisgICAgaWYgKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LmRpZFNlbGZQYXRjaGluZykgewor
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKKyAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAorICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0
dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKK30KKworc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRC
eUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCit7CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkKKyAgICAgICAgfHwgIXNs
b3QuaXNDYWNoZWFibGUoKQorICAgICAgICB8fCAhYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUu
YXNDZWxsKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJl
KCk7CisgICAgCisgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKKyAgICAg
ICAgaWYgKCFzdHViSW5mby5wYXRjaC5kZmcucmVnaXN0ZXJzRmx1c2hlZCkgeworICAgICAgICAg
ICAgLy8gV2UgY2Fubm90IGRvIGFzIG11Y2ggaW5saW5lIGNhY2hpbmcgaWYgdGhlIHJlZ2lzdGVy
cyB3ZXJlIG5vdCBmbHVzaGVkIHByaW9yIHRvIHRoaXMgR2V0QnlJZC4gSW4gcGFydGljdWxhciwK
KyAgICAgICAgICAgIC8vIG5vbi1WYWx1ZSBjYWNoZWQgcHJvcGVydGllcyByZXF1aXJlIHBsYW50
aW5nIGNhbGxzLCB3aGljaCByZXF1aXJlcyByZWdpc3RlcnMgdG8gaGF2ZSBiZWVuIGZsdXNoZWQu
IFRodXMsCisgICAgICAgICAgICAvLyBpZiByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCwgZG9u
J3QgZG8gbm9uLVZhbHVlIGNhY2hpbmcuCisgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFi
bGVWYWx1ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IAorICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdDsKKyAgICAgICAgaW50IGxpc3RJbmRleDsKKyAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgc2xvd0Nhc2U7CisKKyAgICAgICAgaWYgKCFnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3Qodm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgbGlz
dEluZGV4LCBzbG93Q2FzZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSsrOworICAgICAgICAK
KyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBh
dGNoLmRmZy5iYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBHUFJSZWcg
cmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFs
dWVUYWdHUFIpOworI2VuZGlmCisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMp
LmdldEZyZWVHUFIoKTsKKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVycyBzdHViSml0KHZt
LCBjb2RlQmxvY2spOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd3Jv
bmdTdHJ1Y3QgPSBzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFRoZSBzdHJhdGVneSB3ZSB1c2UgZm9yIHN0dWJzIGlzIGFzIGZvbGxvd3M6Cisg
ICAgICAgIC8vIDEpIENhbGwgREZHIGhlbHBlciB0aGF0IGNhbGxzIHRoZSBnZXR0ZXIuCisgICAg
ICAgIC8vIDIpIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBleGNlcHRpb24sIGFuZCBpZiB0aGVyZSB3
YXMsIGNhbGwgeWV0IGFub3RoZXIKKyAgICAgICAgLy8gICAgaGVscGVyLgorICAgICAgICAKKyAg
ICAgICAgYm9vbCBpc0RpcmVjdCA9IGZhbHNlOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBvcGVyYXRpb25DYWxsOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBoYW5kbGVyQ2Fs
bDsKKyAgICAgICAgRnVuY3Rpb25QdHIgb3BlcmF0aW9uRnVuY3Rpb247CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7CisgICAgICAgIAorICAgICAgICBpZiAoc2xvdC5pc0Nh
Y2hlYWJsZUdldHRlcigpIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAg
ICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkgeworICAgICAgICAgICAgICAgIEFTU0VS
VChzY3JhdGNoR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgICAgIEFTU0VSVChi
YXNlR1BSICE9IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNl
dChzbG90LmNhY2hlZE9mZnNldCgpKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAg
ICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7
CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNl
dCgpKSksIHNjcmF0Y2hHUFIpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CisjZWxzZQorICAgICAgICAgICAgICAgICAg
ICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZz
ZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOworI2Vu
ZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAg
IG9wZXJhdGlvbkZ1bmN0aW9uID0gb3BlcmF0aW9uQ2FsbEdldHRlcjsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoCisgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVy
KCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpLAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihpZGVudC5pbXBsKCkpKTsKKyAgICAgICAgICAgICAgICBvcGVy
YXRpb25GdW5jdGlvbiA9IG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hl
bmV2ZXIgdGhpcyBjYWxsIGlzIG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCisg
ICAgICAgICAgICAvLyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4gSXQganVzdCBzbyBoYXBw
ZW5zIHRvIGJlIHRoZSBwbGFjZSB0aGF0IHdlIGFyZSBhdAorICAgICAgICAgICAgLy8gcmlnaHQg
bm93IQorICAgICAgICAgICAgc3R1YkppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZXhlYy0+bG9jYXRpb25Bc1Jhd0JpdHMoKSksCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBvcGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgICAgIHN0dWJKaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyNlbHNlCisgICAgICAgICAgICBzdHViSml0LnNldHVwUmVzdWx0cyhyZXN1bHRHUFIsIHJl
c3VsdFRhZ0dQUik7CisjZW5kaWYKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0LmVtaXRF
eGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZSgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmc3R1Yklu
Zm8pKTsKKyAgICAgICAgICAgIGhhbmRsZXJDYWxsID0gc3R1YkppdC5jYWxsKCk7CisgICAgICAg
ICAgICBzdHViSml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgp
KSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBp
ZiAoYmFzZUdQUiA9PSByZXN1bHRUYWdHUFIpIHsKKyAgICAgICAgICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVU
b0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
ICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3R1
YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRH
UFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BS
KTsKKyNlbHNlCisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNl
dCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNh
Y2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgICAgICBpc0RpcmVjdCA9
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
JnN0dWJKaXQsIGNvZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KHdyb25nU3RydWN0LCBzbG93Q2FzZSk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vz
cywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOworICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAg
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvbkZ1bmN0aW9u
KTsKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXJJblN0dWIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0KKyAgICAgICAgICAgIGNyZWF0ZUpJVFN0dWJS
b3V0aW5lKAorICAgICAgICAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAorICAgICAgICAgICAg
ICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgKCJERkcgR2V0QnlJZCBw
b2x5bW9ycGhpYyBsaXN0IGFjY2VzcyBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAg
ICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKSwKKyAgICAgICAgICAgICAgICAqdm0sCisgICAgICAgICAgICAgICAgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlR2V0
dGVyKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKTsKKyAgICAgICAgCisgICAgICAgIHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsK
KyAgICAgICAgCisgICAgICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHVi
SW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOworICAgIH0KKyAgICAKKyAgICBpZiAoYmFz
ZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0
eUNhY2hpbmcoKSB8fCAhc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7
CisgICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2Vz
cyhleGVjLCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQsIG9mZnNldCk7CisgICAg
aWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90
b3R5cGVDaGFpbihleGVjKTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKKyAgICBpbnQgbGlzdEluZGV4OworICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlOworICAgIGlmICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qs
IGxpc3RJbmRleCwgc2xvd0Nhc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
c3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7CisgICAgCisgICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKKyAgICAKKyAgICBnZW5lcmF0ZVByb3RvQ2hh
aW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNl
dCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc2xvd0Nhc2UsIHN0dWJSb3V0aW5l
KTsKKyAgICAKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5z
ZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0
dXJlLCB0cnVlKTsKKyAgICAKKyAgICBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKGNvZGVCbG9jaywg
c3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKKyAgICAKKyAgICByZXR1cm4gbGlzdEluZGV4
IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOworfQorCit2b2lkIGJ1aWxkR2V0
QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBib29sIGRvbnRDaGFuZ2VDYWxsID0gdHJ5QnVpbGRH
ZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8p
OworICAgIGlmICghZG9udENoYW5nZUNhbGwpCisgICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNv
ZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQp
OworfQorCitzdGF0aWMgVl9KSVRPcGVyYXRpb25fRUpDSSBhcHByb3ByaWF0ZUdlbmVyaWNQdXRC
eUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQp
Cit7CisgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgaWYgKHB1dEtpbmQg
PT0gRGlyZWN0KQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3Q7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAgIH0KKyAgICBp
ZiAocHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0OworICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OworfQor
CitzdGF0aWMgVl9KSVRPcGVyYXRpb25fRUpDSSBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5
SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkK
K3sKKyAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgeworICAgICAgICBpZiAocHV0S2luZCA9
PSBEaXJlY3QpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dEJ1aWxkTGlzdDsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExp
c3Q7CisgICAgfQorICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3Q7CisgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Q7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRQdXRS
ZXBsYWNlU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsCisgICAgSlNWYWx1ZSwKKyAgICBjb25z
dCBJZGVudGlmaWVyJiwKKyAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsCisgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIFB1dEtpbmQsCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsCisgICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAorICAgIFJlZlB0
cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC5kZmcuYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJSZWcgdmFs
dWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRh
Z0dQUik7CisjZW5kaWYKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+
KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBS
ZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigp
OworICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKKyNpZiBFTkFCTEUoV1JJ
VEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgR1BSUmVnIHNjcmF0Y2hHUFIyOworICAgIGNvbnN0
IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gdHJ1ZTsKKyNlbHNlCisgICAgY29uc3QgYm9vbCB3
cml0ZUJhcnJpZXJOZWVkZWQgPSBmYWxzZTsKKyNlbmRpZgorICAgIAorICAgIE1hY3JvQXNzZW1i
bGVyIHN0dWJKaXQ7CisgICAgCisgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZyAm
JiAod3JpdGVCYXJyaWVyTmVlZGVkIHx8IGlzT3V0T2ZMaW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3Nl
bWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIpOworI2Vsc2UK
KyAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihi
YXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgICAgIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoID0gdHJ1ZTsKKyAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOwor
ICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJhZFN0cnVjdHVyZSA9IHN0dWJKaXQu
YnJhbmNoUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAg
ICAKKyNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICBzY3JhdGNoR1BSMiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihi
YXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisjZWxzZQorICAgIHNjcmF0Y2hHUFIyID0g
QXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1
ZVRhZ0dQUiwgc2NyYXRjaEdQUik7CisjZW5kaWYKKyAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQ
UjIpOworICAgIEFzc2VtYmx5SGVscGVyczo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIs
IHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7
CisgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUjIpOworI2VuZGlmCisgICAgCisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCisg
ICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5Jbmxp
bmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAg
ZWxzZSB7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSkpOworICAgIH0KKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CisgICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIo
dmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRl
cmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAg
c3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSkpOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1
Y2Nlc3M7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKKyAgICAKKyAgICBpZiAo
bmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKKyAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7
CisgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGJh
ZFN0cnVjdHVyZS5saW5rKCZzdHViSml0KTsKKyAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQ
Uik7CisgICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgIGZhaWx1cmUgPSBiYWRTdHJ1
Y3R1cmU7CisgICAgfQorICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1
YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFp
bHVyZUxhYmVsKTsKKyAgICAgICAgICAgIAorICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09E
RV9GT1JfREZHX1NUVUIoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkRGRyBQdXRC
eUlkIHJlcGxhY2Ugc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICB0
b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKK30KKworc3RhdGljIHZv
aWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAorICAgIEV4ZWNTdGF0ZSogZXhlYywKKyAgICBKU1Zh
bHVlLAorICAgIGNvbnN0IElkZW50aWZpZXImLAorICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYg
c2xvdCwKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgUHV0S2luZCBwdXRL
aW5kLAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlLAorICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiwKKyAgICBDb2RlTG9jYXRp
b25MYWJlbCBmYWlsdXJlTGFiZWwsCisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJv
dXRpbmUpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOworI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgR1BS
UmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFs
dWVHUFIpOworICAgIAorICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1
YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpOworICAgIGFsbG9jYXRvci5sb2NrKGJhc2VH
UFIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVUYWdH
UFIpOworI2VuZGlmCisgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOworICAgIAorICAgIEND
YWxsSGVscGVycyBzdHViSml0KHZtKTsKKyAgICAgICAgICAgIAorICAgIEdQUlJlZyBzY3JhdGNo
R1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBBU1NFUlQoc2NyYXRj
aEdQUjEgIT0gYmFzZUdQUik7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsK
KyAgICAKKyAgICBib29sIG5lZWRTZWNvbmRTY3JhdGNoID0gZmFsc2U7CisgICAgYm9vbCBuZWVk
VGhpcmRTY3JhdGNoID0gZmFsc2U7CisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5H
KQorICAgIG5lZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsKKyNlbmRpZgorICAgIGlmIChzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpCisgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAg
ICAgICBuZWVkU2Vjb25kU2NyYXRjaCA9IHRydWU7CisgICAgICAgIG5lZWRUaGlyZFNjcmF0Y2gg
PSB0cnVlOworICAgIH0KKworICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKKyAgICBpZiAobmVlZFNl
Y29uZFNjcmF0Y2gpIHsKKyAgICAgICAgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoR1BSKCk7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBiYXNlR1BSKTsKKyAg
ICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsKKyAgICAgICAgQVNTRVJUKHNj
cmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NyYXRjaEdQ
UjIgPSBJbnZhbGlkR1BSUmVnOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKKyAgICBpZiAobmVl
ZFRoaXJkU2NyYXRjaCkgeworICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IGJhc2VHUFIpOwor
ICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gdmFsdWVHUFIpOworICAgICAgICBBU1NFUlQo
c2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjEpOworICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMg
IT0gc2NyYXRjaEdQUjIpOworICAgIH0gZWxzZQorICAgICAgICBzY3JhdGNoR1BSMyA9IEludmFs
aWRHUFJSZWc7CisgICAgICAgICAgICAKKyAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdp
c3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZmFpbHVyZUNhc2VzOworICAgICAgICAgICAgCisgICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHJh
bnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisgICAgCisgICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvbGRTdHJ1Y3R1cmUpKSk7Cisg
ICAgCisgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgICAgICBvbGRTdHJ1Y3R1
cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJK
aXQsIGZhaWx1cmVDYXNlcywKKyAgICAgICAgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgCisg
ICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7CisgICAgICAgIGZvciAoV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7Cisg
ICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAg
KCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0
dWJKaXQsIGZhaWx1cmVDYXNlcywKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAg
QVNTRVJUKG5lZWRTZWNvbmRTY3JhdGNoKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gSW52
YWxpZEdQUlJlZyk7CisgICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIg
YXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1aXJlcyBpdAorICAgIEFzc2Vt
Ymx5SGVscGVyczo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIxLCBz
Y3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworI2VuZGlmCisgICAg
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIAorICAgIGJvb2wg
c2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gZmFsc2U7CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
IHsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxs
b2NhdG9yID0gJnZtLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBz
dHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3Jh
dGNoR1BSMSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihu
ZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKKyAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2Ny
YXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CisgICAgICAg
ICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBzdHViSml0LmFk
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1f
Y3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBzdHViSml0LmFk
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0
Y2hHUFIxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0g
b2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAg
ICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgIHN0
dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0
Y2hHUFIxKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0
cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5l
d1NpemUpLCBzY3JhdGNoR1BSMSkpOworICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAgICAgICAg
ICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9j
dXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRk
UHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRj
aEdQUjEpOworICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMSA9IG5ldyBzdG9yYWdl
LCBzY3JhdGNoR1BSMyA9IG9sZCBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQorICAg
ICAgICAgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihvbGRTaXplKTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKKyAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UjMsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBzY3JhdGNo
R1BSMik7CisgICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFs
dWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CisgICAgICAg
IHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9IHRydWU7CisgICAgfQorCisgICAgc3R1YkppdC5zdG9y
ZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQo
KSkpCisgICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0
SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7
CisgICAgZWxzZSB7CisgICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQorICAgICAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1Ykpp
dC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwg
b2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkp
KTsKKyAgICB9CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGlmIChpc0lubGluZU9mZnNl
dChzbG90LmNhY2hlZE9mZnNldCgpKSkgeworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFn
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXNjcmF0Y2hH
UFIxSGFzU3RvcmFnZSkKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSMSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVU
YWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRl
cmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgIH0KKyNlbmRp
ZgorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7CisgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZmFpbHVyZTsKKyAgICAgICAgICAgIAorICAgIGlmIChhbGxvY2F0b3IuZGlk
UmV1c2VSZWdpc3RlcnMoKSkgeworICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lz
dGVyc0J5UG9wcGluZyhzdHViSml0KTsKKyAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgp
OworCisgICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKKyAgICAgICAgYWxsb2Nh
dG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7CisgICAgICAgIGZh
aWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc3VjY2VzcyA9IHN0
dWJKaXQuanVtcCgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNh
bGw7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vzc0luU2xvd1BhdGg7CisgICAgCisg
ICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7Cisg
ICAgICAgIAorICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGlu
ZyhzdHViSml0KTsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5z
Y3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkp
OworICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVy
KHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIxKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLCB2YWx1ZUdQUik7CisjZWxzZQorICAg
ICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOworI2Vu
ZGlmCisgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwoKTsKKyAgICAgICAgYWxs
b2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZmZXIoc3R1YkppdCwgc2Ny
YXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOworICAgICAgICBzdWNjZXNzSW5TbG93UGF0aCA9IHN0
dWJKaXQuanVtcCgpOworICAgIH0KKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN1
Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKKyAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNl
UmVnaXN0ZXJzKCkpCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxh
YmVsKTsKKyAgICBlbHNlCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBm
YWlsdXJlTGFiZWwpOworICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0g
b2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgIHBhdGNoQnVmZmVy
Lmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQ
dXQpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3NJblNsb3dQYXRoLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9Eb25lKSk7CisgICAgfQorICAgIAorICAgIHN0dWJSb3V0aW5lID0KKyAgICAgICAg
Y3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKKyAg
ICAgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAoIkRGRyBQdXRCeUlk
ICVzdHJhbnNpdGlvbiBzdHViICglcCAtPiAlcCkgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAor
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID8gInJlYWxsb2NhdGluZyAiIDogIiIsCisg
ICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLAorICAgICAgICAgICAg
ICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAg
c3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
LAorICAgICAgICAgICAgKnZtLAorICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVy
RXhlY3V0YWJsZSgpLAorICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKKyAgICAgICAgICAgIHN0cnVj
dHVyZSk7Cit9CisKK3N0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0
S2luZCkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwor
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworCisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVl
LmFzQ2VsbCgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVy
ZSgpOworICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lE
KCk7CisgICAgCisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICBp
ZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSB7CisgICAgICAgIGlmIChzbG90LnR5cGUoKSA9
PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CisgICAgICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3
ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQorICAgICAgICAgICAgLy8gZW5vdWdo
IHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KKyAgICAgICAgICAgIGlmIChHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycyA8IDYKKyAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCisgICAg
ICAgICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2tp
cCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1
Y3R1cmUgaGFzCisgICAgICAgICAgICAvLyBpbmRleGluZyBzdG9yYWdlLgorICAgICAgICAgICAg
aWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub3JtYWxp
emVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlQ2VsbCkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWlu
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVD
aGFpbihleGVjKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZW1pdFB1dFRyYW5zaXRpb25T
dHViKAorICAgICAgICAgICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJ
bmZvLCBwdXRLaW5kLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLCBw
cm90b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSks
CisgICAgICAgICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAgICAg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKKyAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwor
ICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5k
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNp
dGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3Ry
dWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3QpOworICAgICAgICAgICAg
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJlcGF0Y2hC
eUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCksIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEtpbmQpLCBmYWxzZSk7CisgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZSgqdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCByZXBhdGNoUHV0
QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgYm9vbCBjYWNoZWQgPSB0
cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJ
bmZvLCBwdXRLaW5kKTsKKyAgICBpZiAoIWNhY2hlZCkKKyAgICAgICAgcmVwYXRjaENhbGwoZXhl
Yy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVH
ZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKK30KKworc3RhdGljIGJvb2wg
dHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xv
dCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKworICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpOworICAgIAorICAg
IGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAgaWYgKHNsb3QuYmFzZSgp
ID09IGJhc2VWYWx1ZSkgeworICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0Owor
ICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworICAgICAgICAKKyAg
ICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsK
KyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2tpcCBvcHRp
bWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZl
CisgICAgICAgICAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgorICAg
ICAgICAgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgorICAgICAgICAgICAg
ICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVl
ZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKKyAgICAgICAgICAgIC8vIGluZGV4aW5n
IHN0b3JhZ2UuCisgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGlu
Z0hlYWRlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKSA9
PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4g
PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0aW5nIHRoZSBzdHViLiBNb2dyaWZ5
IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCisgICAgICAgICAgICBsaXN0ID0gUG9seW1vcnBo
aWNQdXRCeUlkTGlzdDo6ZnJvbSgKKyAgICAgICAgICAgICAgICBwdXRLaW5kLCBzdHViSW5mbywK
KyAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCisgICAgICAgICAgICAgICAgZXhl
YywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLAorICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAg
ICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJn
ZXQoKSksCisgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCisgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6
dHJhbnNpdGlvbigKKyAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLAorICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwg
cHJvdG90eXBlQ2hhaW4sCisgICAgICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0
aW5nIHRoZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCisgICAgICAg
ICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbSgKKyAgICAgICAgICAgICAg
ICBwdXRLaW5kLCBzdHViSW5mbywKKyAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93
Q2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBlbWl0UHV0UmVwbGFjZVN0dWIoCisg
ICAgICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJ
bmZvLCBwdXRLaW5kLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFi
ZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLCBzdHViUm91dGluZSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKKyAgICAgICAgICAgICAgICBQdXRC
eUlkQWNjZXNzOjpyZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgc3R1YlJv
dXRpbmUpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQorICAg
ICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBi
YXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2lu
ZCkKK3sKKyAgICBib29sIGNhY2hlZCA9IHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZh
bHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKKyAgICBpZiAoIWNh
Y2hlZCkKKyAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3Qs
IHB1dEtpbmQpKTsKK30KKworc3RhdGljIGJvb2wgdHJ5UmVwYXRjaEluKAorICAgIEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCB3YXNG
b3VuZCwKKyAgICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKK3sKKyAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2Vz
QXJlQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAod2Fz
Rm91bmQpIHsKKyAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXRJZ25vcmVkOworICAgIHNpemVfdCBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNo
YWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZSwgd2FzRm91bmQgPyBzbG90LnNsb3RCYXNlKCkg
OiBKU1ZhbHVlKCksIGlkZW50LCBvZmZzZXRJZ25vcmVkKTsKKyAgICBpZiAoY291bnQgPT0gSW52
YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Cisg
ICAgaW50IGxpc3RJbmRleDsKKyAgICAKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFi
ZWwgPSBzdHViSW5mby5ob3RQYXRoQmVnaW47CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nh
c2VMYWJlbDsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5z
ZXQpIHsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCgpOworICAgICAgICBzdHViSW5mby5pbml0SW5MaXN0KHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdCwgMCk7CisgICAgICAgIHNsb3dDYXNlTGFiZWwgPSBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgIHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICAgICAgbGlzdEluZGV4ID0gMDsK
KyAgICB9IGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc19pbl9saXN0KTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0g
c3R1YkluZm8udS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKKyAgICAgICAgbGlzdEluZGV4ID0gc3R1
YkluZm8udS5pbkxpc3QubGlzdFNpemU7CisgICAgICAgIHNsb3dDYXNlTGFiZWwgPSBDb2RlTG9j
YXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0u
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGxpc3RJ
bmRleCA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVy
ZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZTsKKyAgICAKKyAgICB7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQ
Uik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0
Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKKyAgICAgICAgCisgICAgICAgIEND
YWxsSGVscGVycyBzdHViSml0KHZtKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgbmVlZFRvUmVz
dG9yZVNjcmF0Y2g7CisgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsK
KyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAgICAg
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOworICAgICAgICAKKyAgICAg
ICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgeworICAgICAgICAgICAgSlNPYmplY3Qq
IHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChl
eGVjKSk7CisgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgICAg
ICAgICAgICAgcHJvdG90eXBlLCBwcm90b3R5cGUtPnN0cnVjdHVyZSgpLCBleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCisgICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3R1YkppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3
YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgIHN0dWJKaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdhc0ZvdW5kKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgor
ICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKKyAg
ICAgICAgCisgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3Jl
U2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKKyAgICAg
ICAgCisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+
Y29kZUJsb2NrKCkpOworCisgICAgICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwg
bmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vz
c0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKKyAgICAgICAgCisgICAgICAgIHN0dWJSb3V0aW5lID0g
RklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAg
ICAgICAgICAgICgiREZHIEluIChmb3VuZCA9ICVzKSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50
ICVwIiwKKyAgICAgICAgICAgICAgICB3YXNGb3VuZCA/ICJ5ZXMiIDogIm5vIiwgdG9DU3RyaW5n
KCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAorICAgICAgICAgICAgICAgIHN1Y2Nlc3NMYWJl
bC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgfQorICAgIAorICAgIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOworICAgIHN0dWJJbmZvLnUu
aW5MaXN0Lmxpc3RTaXplKys7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KGNvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uaG90UGF0aEJl
Z2luLmp1bXBBdE9mZnNldCgwKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKKyAgICAKKyAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJ
U1RfQ0FDSEVfU0laRSAtIDEpOworfQorCit2b2lkIHJlcGF0Y2hJbigKKyAgICBFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgd2FzRm91
bmQsCisgICAgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCit7CisgICAgaWYgKHRyeVJlcGF0Y2hJbihleGVjLCBiYXNlLCBpZGVudCwgd2FzRm91
bmQsIHNsb3QsIHN0dWJJbmZvKSkKKyAgICAgICAgcmV0dXJuOworICAgIHJlcGF0Y2hDYWxsKGV4
ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbklu
KTsKK30KKworc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1
ZmZlciwgVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQoreworICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CisgICAgICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZt
LT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
dm0tPmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwor
fQorCit2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
K3sKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKTsKKyAgICAKKyAgICAvLyBJZiB5b3Un
cmUgYmVpbmcgY2FsbC1saW5rZWQgZnJvbSBhIERGRyBjYWxsZXIgdGhlbiB5b3Ugb2J2aW91c2x5
IGRpZG4ndCBnZXQgaW5saW5lZC4KKyAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAgICBj
YWxsZWVDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgCisg
ICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2Rl
QmxvY2soKTsKKyAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CisgICAgCisgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CisgICAgCisgICAg
QVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CisgICAgY2FsbExpbmtJbmZvLmNhbGxl
ZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdp
biwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKKyAgICBjYWxs
TGlua0luZm8ubGFzdFNlZW5DYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPnZtKCksIGNh
bGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CisgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlciwgY29kZVB0cik7CisgICAgCisg
ICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5j
b21pbmdDYWxsKGV4ZWMtPmNhbGxlckZyYW1lKCksICZjYWxsTGlua0luZm8pOworICAgIAorICAg
IGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9z
dXJlQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgIGxpbmtTbG93
Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIENvZGVGb3JDb25zdHJ1Y3QpOwor
fQorCit2b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBDb2RlQmxvY2sq
IGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAg
IFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAKKyAgICBsaW5rU2xvd0Zvcihy
ZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBraW5kKTsKK30KKwordm9pZCBsaW5rQ2xv
c3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29k
ZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjdXRhYmxl
QmFzZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCit7CisgICAg
QVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7CisgICAgCisgICAgQ29kZUJsb2NrKiBjYWxsZXJD
b2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0g
PSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CisgICAgCisgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oY2FsbExpbmtJbmZvLmNhbGxlZUdQUik7CisgICAgCisgICAgQ0Nh
bGxIZWxwZXJzIHN0dWJKaXQodm0sIGNhbGxlckNvZGVCbG9jayk7CisgICAgCisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgc3R1YkppdC5icmFuY2hUZXN0NjQoCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZUdQUiwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKSk7CisjZWxzZQorICAgIC8vIFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRo
YXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCisjZW5kaWYKKyAgICAKKyAgICBzbG93UGF0aC5hcHBl
bmQoCisgICAgICAgIHN0dWJKaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpOb3RFcXVhbCwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsKKyAgICAKKyAgICBzbG93UGF0aC5hcHBlbmQoCisg
ICAgICAgIHN0dWJKaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVu
Y3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlKSkpOworICAgIAorICAgIHN0dWJKaXQubG9hZFB0cigK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zm
c2V0T2ZTY29wZUNoYWluKCkpLAorICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHN0dWJKaXQuc3RvcmU2NCgKKyAgICAgICAgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0
ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbikpKTsKKyNlbHNlCisgICAgc3R1YkppdC5zdG9yZVB0
cigKKyAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCisgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbikgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgc3R1
YkppdC5zdG9yZTMyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikgKiBK
U1N0YWNrOjpTY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSkpOworI2VuZGlmCisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzOjpD
YWxsIGNhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7CisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1w
IGRvbmUgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAKKyAgICBzbG93UGF0aC5saW5rKCZzdHViSml0
KTsKKyAgICBzdHViSml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7CisjZW5kaWYK
KyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86Om5vbkFy
Z0dQUjIpOworICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BS
SW5mbzo6bm9uQXJnR1BSMik7CisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHVi
Sml0Lmp1bXAoKTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJK
aXQsIGNhbGxlckNvZGVCbG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBG
dW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBwYXRjaEJ1ZmZl
ci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dCgwKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+
Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAKKyAg
ICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihu
ZXcgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCisg
ICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiREZHIGNsb3N1cmUgY2FsbCBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXQgJXAgKCVzKSIsCisgICAgICAgICAg
ICAgICAgdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDApLmV4ZWN1dGFibGVBZGRyZXNzKCksCisg
ICAgICAgICAgICAgICAgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCB0b0NTdHJpbmcocG9p
bnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSkuZGF0YSgpKSksCisgICAgICAgICp2bSwgY2FsbGVy
Q29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBleGVjdXRhYmxlLCBjYWxs
TGlua0luZm8uY29kZU9yaWdpbikpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjYWxsZXJDb2RlQmxvY2spOworICAgIAorICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdp
dGhKdW1wKAorICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNo
T25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKSwKKyAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICBsaW5rU2xvd0Zvcihy
ZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7CisgICAgCisgICAg
Y2FsbExpbmtJbmZvLnN0dWIgPSBzdHViUm91dGluZS5yZWxlYXNlKCk7CisgICAgCisgICAgQVNT
RVJUKCFjYWxsZWVDb2RlQmxvY2sgfHwgY2FsbGVlQ29kZUJsb2NrLT5pc0luY29taW5nQ2FsbEFs
cmVhZHlMaW5rZWQoJmNhbGxMaW5rSW5mbykpOworfQorCit2b2lkIHJlc2V0R2V0QnlJRChSZXBh
dGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBz
dHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJB
dE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxs
KTsKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNo
UHRyV2l0aFBhdGNoKCkpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXZlcnRKdW1wUmVwbGFj
ZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgIFJlcGF0Y2hC
dWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0
dXJlTGFiZWwpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZv
LnBhdGNoLmRmZy5iYXNlR1BSKSwKKyAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50
ZXIpKTsKKyAgICB9CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0cnVjdHVyZUxhYmVsLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9M
b2FkT3JTdG9yZSksIDApOworI2Vsc2UKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSks
IDApOworI2VuZGlmCisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cit9CisKK3ZvaWQgcmVzZXRQdXRC
eUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKK3sKKyAgICBWX0pJVE9wZXJhdGlvbl9FSkNJIHVub3B0aW1pemVkRnVuY3Rpb24gPSBi
aXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25fRUpDST4oTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxs
VGFyZ2V0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgVl9KSVRPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAgICBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdCkKKyAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8
IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlz
dCkKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
T3B0aW1pemU7CisgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdCkKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgZWxzZSB7CisgICAgICAg
IEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0QnVpbGRMaXN0KTsKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgfQorICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOwor
ICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6
OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkpIHsKKyAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldp
dGhQYXRjaCgKKyAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFu
Y2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKSwKKyAgICAg
ICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKTsKKyAgICB9CisgICAgcmVwYXRjaEJ1
ZmZlci5yZXBhdGNoKHN0cnVjdHVyZUxhYmVsLCByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVz
ZWRQb2ludGVyKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKKyNlbHNlCisgICAgcmVw
YXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwz
MkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwg
MCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxv
YWRMb2FkT3JTdG9yZSksIDApOworI2VuZGlmCisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cit9CisK
K3ZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uaG90
UGF0aEJlZ2luLmp1bXBBdE9mZnNldCgwKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTMsOCArNTEzLDcgQEAgc3RhdGlj
IGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogI2VuZGlmCiAgICAgICAgICAgICBz
dWNjZXNzID0gc3R1YkppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRl
ZEV4Y2VwdGlvbkNoZWNrKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSk7CisgICAgICAgICAgICBzdHViSml0LnNldHVwQXJn
dW1lbnRzRXhlY1N0YXRlKCk7CiAgICAgICAgICAgICBoYW5kbGVyQ2FsbCA9IHN0dWJKaXQuY2Fs
bCgpOwogICAgICAgICAgICAgc3R1YkppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7
CiAgICAgICAgIH0gZWxzZSB7CkBAIC01NDksNyArNTQ4LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVp
bGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3Ms
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBvcGVyYXRpb25GdW5jdGlvbik7
Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRp
b25IYW5kbGVySW5TdHViKTsKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlckNh
bGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5oCShyZXZpc2lvbiAxNTYyMzYpCShmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5oOjE1NjIzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZXBhdGNoX2gKKyNk
ZWZpbmUgUmVwYXRjaF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShKSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRp
b25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0
ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1
Y3R1cmVTdHViSW5mbyYpOwordm9pZCBidWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwordm9pZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7Cit2b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtp
bmQpOwordm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1
dEtpbmQpOwordm9pZCByZXBhdGNoSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgY29uc3QgSWRlbnRp
ZmllciYsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJ
bmZvJik7Cit2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2Nr
KiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOwordm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8m
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKK3ZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0
ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIFN0cnVjdHVyZSosIEV4ZWN1dGFibGVCYXNl
KiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsKK3ZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZm
ZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZl
ciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIFN0
cnVjdHVyZVN0dWJJbmZvJik7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZWxzZSAvLyBFTkFC
TEUoSklUKQorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIFJlcGF0Y2hCdWZmZXI7CitzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CisKK2lu
bGluZSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZm
ZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQoraW5saW5lIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRj
aEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CitpbmxpbmUgTk9fUkVUVVJOIHZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3Ry
dWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorI2VuZGlmIC8vIFJlcGF0
Y2hfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oCShyZXZpc2lvbiAxNTYyMzYpCShmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg6MTU2MjM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcl9oCisjZGVmaW5l
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1
ZGUgIlJlZ2lzdGVyU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNzIHBy
b3ZpZGVzIGEgbG93LWxldmVsIHJlZ2lzdGVyIGFsbG9jYXRvciBmb3IgdXNlIGluIHN0dWJzLgor
CitjbGFzcyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgeworcHVibGljOgorICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvcihjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKKyAgICAg
ICAgOiBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKKyAgICAgICAgLCBtX2RpZFJldXNl
UmVnaXN0ZXJzKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICB2b2lkIGxvY2soVCByZWcpIHsgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHJlZyk7
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KKyAgICB0eXBlbmFtZSBC
YW5rSW5mbzo6UmVnaXN0ZXJUeXBlIGFsbG9jYXRlU2NyYXRjaCgpCisgICAgeworICAgICAgICAv
LyBGaXJzdCB0cnkgdG8gYWxsb2NhdGUgYSByZWdpc3RlciB0aGF0IGlzIHRvdGFsbHkgZnJlZS4K
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbmtJbmZvOjpudW1iZXJPZlJlZ2lz
dGVyczsgKytpKSB7CisgICAgICAgICAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBl
IHJlZyA9IEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICAgICAgaWYgKCFtX2xvY2tl
ZFJlZ2lzdGVycy5nZXQocmVnKQorICAgICAgICAgICAgICAgICYmICFtX3VzZWRSZWdpc3RlcnMu
Z2V0KHJlZykKKyAgICAgICAgICAgICAgICAmJiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdldChyZWcp
KSB7CisgICAgICAgICAgICAgICAgbV9zY3JhdGNoUmVnaXN0ZXJzLnNldChyZWcpOworICAgICAg
ICAgICAgICAgIHJldHVybiByZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIFNpbmNlIHRoYXQgZmFpbGVkLCB0cnkgdG8gYWxsb2NhdGUgYSByZWdpc3Rl
ciB0aGF0IGlzIG5vdCB5ZXQKKyAgICAgICAgLy8gbG9ja2VkIG9yIHVzZWQgZm9yIHNjcmF0Y2gu
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnM7ICsraSkgeworICAgICAgICAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlw
ZSByZWcgPSBCYW5rSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgICAgIGlmICghbV9sb2Nr
ZWRSZWdpc3RlcnMuZ2V0KHJlZykgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXQocmVnKSkgewor
ICAgICAgICAgICAgICAgIG1fc2NyYXRjaFJlZ2lzdGVycy5zZXQocmVnKTsKKyAgICAgICAgICAg
ICAgICBtX2RpZFJldXNlUmVnaXN0ZXJzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBXZSBm
YWlsZWQuCisgICAgICAgIENSQVNIKCk7CisgICAgICAgIC8vIE1ha2Ugc29tZSBzaWxseSBjb21w
aWxlcnMgaGFwcHkuCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBCYW5rSW5m
bzo6UmVnaXN0ZXJUeXBlPigtMSk7CisgICAgfQorICAgIAorICAgIEdQUlJlZyBhbGxvY2F0ZVNj
cmF0Y2hHUFIoKSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8R1BSSW5mbz4oKTsgfQorICAgIEZQ
UlJlZyBhbGxvY2F0ZVNjcmF0Y2hGUFIoKSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8RlBSSW5m
bz4oKTsgfQorICAgIAorICAgIGJvb2wgZGlkUmV1c2VSZWdpc3RlcnMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fZGlkUmV1c2VSZWdpc3RlcnM7CisgICAgfQorICAgIAorICAgIHZv
aWQgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCkK
KyAgICB7CisgICAgICAgIGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVn
aXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgo
aSkpIHsKKyAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAg
ICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0R1BSQnlJ
bmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKKyAgICAgICAgICAg
ICAgICBqaXQucHVzaChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB2b2lkIHJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFjcm9Bc3Nl
bWJsZXImIGppdCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV9zY3Jh
dGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5
SW5kZXgoaSkpCisgICAgICAgICAgICAgICAgaml0LnBvcChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkp
KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVycy5n
ZXRGUFJCeUluZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7Cisg
ICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAgICAgICAgICBqaXQu
YWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1
cm4gbV91c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgKiBzaXplb2YoSlNWYWx1
ZSk7IH0KKyAgICAKKyAgICB2b2lkIHByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZl
cihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJS
ZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWcpCisgICAgeworICAgICAgICB1bnNpZ25lZCBj
b3VudCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5
SW5kZXgoaSkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGppdC5zdG9y
ZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4o
c2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSk7CisjZWxzZQorICAgICAg
ICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0
PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsr
KSk7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzY3JhdGNoR1BSID09
IEludmFsaWRHUFJSZWcgJiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYg
IW1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQorICAgICAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICB9CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAg
ICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKKyAgICAgICAgICAg
ICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxF
bmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6
dG9SZWdpc3RlcihpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgKiBzaXplb2YoSlNWYWx1ZSkgPT0gZGVzaXJlZFNj
cmF0Y2hCdWZmZXJTaXplKCkpOworICAgICAgICAKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4oY291bnQgKiBzaXplb2YoSlNWYWx1ZSkpKSwgc2Ny
YXRjaEdQUik7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9t
U2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNo
QnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWcpCisgICAgeworICAgICAg
ICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICAvLyBGaW5k
IGEgc2NyYXRjaCByZWdpc3Rlci4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9j
a2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgfHwgbV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQ
UkJ5SW5kZXgoaSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIAorICAgICAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5n
dGhQdHIoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hHUFIpOworCisgICAgICAgIC8vIFJlc3RvcmUg
ZG91YmxlIHJlZ2lzdGVycyBmaXJzdC4KKyAgICAgICAgdW5zaWduZWQgY291bnQgPSBtX3VzZWRS
ZWdpc3RlcnMubnVtYmVyT2ZTZXRHUFJzKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV91c2Vk
UmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+
KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShzY3JhdGNoR1BSLCBGUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Y291bnQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJC
eUluZGV4KGkpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBqaXQubG9h
ZDY0KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZl
cigpKSArIChjb3VudCsrKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisjZWxzZQorICAgICAg
ICAgICAgICAgIGppdC5sb2FkMzIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNo
QnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkp
KTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CisgICAgUmVnaXN0ZXJTZXQgbV9s
b2NrZWRSZWdpc3RlcnM7CisgICAgUmVnaXN0ZXJTZXQgbV9zY3JhdGNoUmVnaXN0ZXJzOworICAg
IGJvb2wgbV9kaWRSZXVzZVJlZ2lzdGVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAJKHJldmlzaW9uIDE1NjQ4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVk
ZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiU3BlY2lhbGl6ZWRUaHVua0pJVC5oIgpAQCAtMzgsNyArMzks
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEpTSW50ZXJmYWNlSklUOjpDYWxsIGdl
bmVyYXRlU2xvd0Nhc2VGb3IoVk0qIHZtLCBKU0ludGVyZmFjZUpJVCYgaml0KQorc3RhdGljIEpT
SW50ZXJmYWNlSklUOjpDYWxsIG9sZFN0eWxlR2VuZXJhdGVTbG93Q2FzZUZvcihWTSogdm0sIEpT
SW50ZXJmYWNlSklUJiBqaXQpCiB7CiAgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwogICAgIGpp
dC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWluLCBKU0lu
dGVyZmFjZUpJVDo6cmVnVDIsIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CkBAIC01OSw3ICs2MCw3
IEBAIHN0YXRpYyBKU0ludGVyZmFjZUpJVDo6Q2FsbCBnZW5lcmF0ZVNsb3cKICAgICByZXR1cm4g
Y2FsbE5vdEpTRnVuY3Rpb247CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlu
a0ZvckdlbmVyYXRvcihWTSogdm0sIEZ1bmN0aW9uUHRyIGxhenlMaW5rLCBGdW5jdGlvblB0ciBu
b3RKU0Z1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lKQorc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBvbGRTdHlsZUxpbmtGb3JHZW5lcmF0b3IoVk0qIHZtLCBGdW5jdGlvblB0ciBsYXp5TGlu
aywgRnVuY3Rpb25QdHIgbm90SlNGdW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSkKIHsKICAgICBK
U0ludGVyZmFjZUpJVCBqaXQodm0pOwogICAgIApAQCAtODgsNyArODksNyBAQCBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JHZW5lCiAgICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QwKTsKICAgICAKICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwotICAgIEpTSW50ZXJm
YWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gZ2VuZXJhdGVTbG93Q2FzZUZvcih2bSwg
aml0KTsKKyAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IG9sZFN0
eWxlR2VuZXJhdGVTbG93Q2FzZUZvcih2bSwgaml0KTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGNhbGxMYXp5TGluaywgbGF6eUxpbmspOwpAQCAtOTcsMjIgKzk4LDIyIEBAIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvckdlbmUKICAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgKCJsaW5rICVzIHRyYW1wb2xpbmUiLCBuYW1lKSk7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgb2xkU3R5bGVMaW5rQ2FsbEdlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJu
IGxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0NhbGwpLCBG
dW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNhbGwiKTsKKyAgICByZXR1
cm4gb2xkU3R5bGVMaW5rRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxp
bmtDYWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjYWxsIik7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2
bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3Io
Vk0qIHZtKQogewotICAgIHJldHVybiBsaW5rRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihj
dGlfdm1fbGF6eUxpbmtDb25zdHJ1Y3QpLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X05v
dEpTQ29uc3RydWN0KSwgImNvbnN0cnVjdCIpOworICAgIHJldHVybiBvbGRTdHlsZUxpbmtGb3JH
ZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0NvbnN0cnVjdCksIEZ1bmN0
aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QpLCAiY29uc3RydWN0Iik7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoVk0qIHZt
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9sZFN0eWxlTGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9y
KFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlua0ZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIo
Y3RpX3ZtX2xhenlMaW5rQ2xvc3VyZUNhbGwpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RK
U0Z1bmN0aW9uKSwgImNsb3N1cmUgY2FsbCIpOworICAgIHJldHVybiBvbGRTdHlsZUxpbmtGb3JH
ZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0Nsb3N1cmVDYWxsKSwgRnVu
Y3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjbG9zdXJlIGNhbGwiKTsKIH0K
IAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yR2VuZXJhdG9yKFZNKiB2
bSwgRnVuY3Rpb25QdHIgY29tcGlsZSwgRnVuY3Rpb25QdHIgbm90SlNGdW5jdGlvbiwgY29uc3Qg
Y2hhciogbmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBvbGRTdHlsZVZpcnR1YWxGb3JHZW5lcmF0b3IoVk0qIHZtLCBGdW5jdGlv
blB0ciBjb21waWxlLCBGdW5jdGlvblB0ciBub3RKU0Z1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1l
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0
KHZtKTsKICAgICAKQEAgLTE0OCw3ICsxNDksNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHZpcnR1YWxGb3JHCiAgICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKICAg
ICAKICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwotICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGNh
bGxOb3RKU0Z1bmN0aW9uID0gZ2VuZXJhdGVTbG93Q2FzZUZvcih2bSwgaml0KTsKKyAgICBKU0lu
dGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IG9sZFN0eWxlR2VuZXJhdGVTbG93
Q2FzZUZvcih2bSwgaml0KTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
JmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxDb21waWxl
LCBjb21waWxlKTsKQEAgLTE1NywxNCArMTU4LDI0NiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHZpcnR1YWxGb3JHCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
ICgidmlydHVhbCAlcyB0cmFtcG9saW5lIiwgbmFtZSkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgdmlydHVhbENhbGxHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiB2aXJ0
dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9qaXRDb21waWxlKSwg
RnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjYWxsIiwgQ29kZUZvckNh
bGwpOworICAgIHJldHVybiBvbGRTdHlsZVZpcnR1YWxGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9u
UHRyKGN0aV9vcF9jYWxsX2ppdENvbXBpbGUpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RK
U0Z1bmN0aW9uKSwgImNhbGwiLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB2aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBvbGRTdHlsZVZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJl
dHVybiB2aXJ0dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0
X2ppdENvbXBpbGUpLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0
KSwgImNvbnN0cnVjdCIsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiBvbGRTdHlsZVZp
cnR1YWxGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29t
cGlsZSksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QpLCAiY29u
c3RydWN0IiwgQ29kZUZvckNvbnN0cnVjdCk7Cit9CisKK2lubGluZSB2b2lkIGVtaXRQb2ludGVy
VmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIpCit7CisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIENDYWxsSGVscGVyczo6SnVtcCBpc05vblplcm8gPSBqaXQu
YnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHBvaW50ZXJHUFIpOworICAgIGpp
dC5icmVha3BvaW50KCk7CisgICAgaXNOb25aZXJvLmxpbmsoJmppdCk7CisgICAgaml0LnB1c2go
cG9pbnRlckdQUik7CisgICAgaml0LmxvYWQ4KHBvaW50ZXJHUFIsIHBvaW50ZXJHUFIpOworICAg
IGppdC5wb3AocG9pbnRlckdQUik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShqaXQpOworICAg
IFVOVVNFRF9QQVJBTShwb2ludGVyR1BSKTsKKyNlbmRpZgorfQorCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKiB2bSkKK3sK
KyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICAKKyAgICAvLyBXZSB3aWxsIGp1bXAgdG8g
aGVyZSBpZiB0aGUgSklUIGNvZGUgdGhpbmtzIGl0J3MgbWFraW5nIGEgY2FsbCwgYnV0IHRoZQor
ICAgIC8vIGxpbmtpbmcgaGVscGVyIChDKysgY29kZSkgZGVjaWRlZCB0byB0aHJvdyBhbiBleGNl
cHRpb24gaW5zdGVhZC4gV2Ugd2lsbAorICAgIC8vIGhhdmUgc2F2ZWQgdGhlIGNhbGxSZXR1cm5J
bmRleCBpbiB0aGUgZmlyc3QgYXJndW1lbnRzIG9mIEpJVFN0YWNrRnJhbWUuCisgICAgLy8gTm90
ZSB0aGF0IHRoZSByZXR1cm4gYWRkcmVzcyB3aWxsIGJlIG9uIHRoZSBzdGFjayBhdCB0aGlzIHBv
aW50LCBzbyB3ZQorICAgIC8vIG5lZWQgdG8gcmVtb3ZlIGl0IGFuZCBkcm9wIGl0IG9uIHRoZSBm
bG9vciwgc2luY2Ugd2UgZG9uJ3QgY2FyZSBhYm91dCBpdC4KKyAgICAvLyBGaW5hbGx5IG5vdGUg
dGhhdCB0aGUgY2FsbCBmcmFtZSByZWdpc3RlciBwb2ludHMgYXQgdGhlIGNhbGxlZSBmcmFtZSwg
c28KKyAgICAvLyB3ZSBuZWVkIHRvIHBvcCBpdC4KKyAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRy
ZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0
LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OkNhbGxlckZyYW1lKSwKKyAgICAgICAg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0
LnBlZWs2NChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVf
QVJHU19JTkRFWCk7CisjZWxzZQorICAgIGppdC5wZWVrKEdQUkluZm86Om5vblByZXNlcnZlZE5v
blJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKKyNlbmRpZgorICAgIGppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9j
YXN0PHZvaWQqPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjAp
OworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwor
ICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRh
dGlvbihqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgaml0Lmp1bXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgKCJUaHJvdyBleGNlcHRpb24gZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsK
K30KKworc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCisgICAgQ0NhbGxIZWxwZXJzJiBqaXQsIFZN
KiB2bSwgUF9KSVRPcGVyYXRpb25fRSBzbG93UGF0aEZ1bmN0aW9uKQoreworICAgIGppdC5wcmVz
ZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgZW1p
dFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgaml0LnN0
b3JlUHRyKAorICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyLAorICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0
YWNrOjpSZXR1cm5QQykpOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0LnBv
a2U2NChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJH
U19JTkRFWCk7CisjZWxzZQorICAgIGppdC5wb2tlKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJl
dHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKKyNlbmRpZgorICAgIGppdC5zZXR1
cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgCisgICAg
Ly8gVGhpcyBzbG93IGNhbGwgd2lsbCByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygb25lIG9mIHRoZSBm
b2xsb3dpbmc6CisgICAgLy8gMSkgRXhjZXB0aW9uIHRocm93aW5nIHRodW5rLgorICAgIC8vIDIp
IEhvc3QgY2FsbCByZXR1cm4gdmFsdWUgcmV0dXJuZXIgdGhpbmd5LgorICAgIC8vIDMpIFRoZSBm
dW5jdGlvbiB0byBjYWxsLgorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNr
OjpSZXR1cm5QQyksCisgICAgICAgIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7
CisgICAgaml0LnN0b3JlUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
MCksCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBDKSk7CisgICAgZW1pdFBvaW50ZXJW
YWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBq
aXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
fQorCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JUaHVua0dlbmVyYXRvcigK
KyAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICAvLyBUaGUg
cmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBX
ZSB3aWxsIGhlbmNlCisgICAgLy8gc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwg
ZnJhbWUgd2hpbGUgd2UgbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsCisgICAgLy8gdG8gcGVyZm9y
bSBsaW5raW5nIGFuZCBsYXp5IGNvbXBpbGF0aW9uIGlmIG5lY2Vzc2FyeS4gV2UgZXhwZWN0IHRo
ZSBjYWxsZWUKKyAgICAvLyB0byBiZSBpbiBub25BcmdHUFIwL25vbkFyZ0dQUjEgKHBheWxvYWQv
dGFnKSwgdGhlIGNhbGwgZnJhbWUgdG8gaGF2ZSBhbHJlYWR5CisgICAgLy8gYmVlbiBhZGp1c3Rl
ZCwgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSIGhvbGRzIHRoZSBleGNlcHRpb24gaGFuZGxlciBp
bmRleCwKKyAgICAvLyBhbmQgYWxsIG90aGVyIHJlZ2lzdGVycyB0byBiZSBhdmFpbGFibGUgZm9y
IHVzZS4gV2UgdXNlIEpJVFN0YWNrRnJhbWU6OmFyZ3MKKyAgICAvLyB0byBzYXZlIGltcG9ydGFu
dCBpbmZvcm1hdGlvbiBhY3Jvc3MgY2FsbHMuCisgICAgCisgICAgQ0NhbGxIZWxwZXJzIGppdCh2
bSk7CisgICAgCisgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/
IG9wZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7CisgICAgCisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkxp
bmsgJXMgc2xvdyBwYXRoIHRodW5rIiwga2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJj
b25zdHJ1Y3QiKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKK3sKKyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBD
b2RlRm9yQ2FsbCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Io
dm0sIENvZGVGb3JDb25zdHJ1Y3QpOworfQorCisvLyBGb3IgY2xvc3VyZSBvcHRpbWl6YXRpb25z
LCB3ZSBvbmx5IGluY2x1ZGUgY2FsbHMsIHNpbmNlIGlmIHlvdSdyZSB1c2luZyBjbG9zdXJlcyBm
b3IKKy8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gdGhlbiB5b3UncmUgZ29pbmcgdG8gbG9zZSBiaWcg
dGltZSBhbnl3YXkuCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQodm0pOworICAgIAorICAg
IHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbCk7CisgICAgCisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7Cisg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiTGluayBjbG9zdXJlIGNhbGwg
c2xvdyBwYXRoIHRodW5rIikpOworfQorCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZp
cnR1YWxGb3JUaHVua0dlbmVyYXRvcigKKyAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKK3sKKyAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrLCBv
ciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQorICAgIC8vIGp1bXAgdG8gdGhl
IGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hp
bGUgd2UKKyAgICAvLyBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGFwcHJvcHJpYXRl
IEpJVCBvcGVyYXRpb24uCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICAKKyAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOworCisgICAgLy8gRklYTUU6IHdlIHNob3Vs
ZCBoYXZlIGEgc3RvcnkgZm9yIGVsaW1pbmF0aW5nIHRoZXNlIGNoZWNrcy4gSW4gbWFueSBjYXNl
cywKKyAgICAvLyB0aGUgREZHIGtub3dzIHRoYXQgdGhlIHZhbHVlIGlzIGRlZmluaXRlbHkgYSBj
ZWxsLCBvciBkZWZpbml0ZWx5IGEgZnVuY3Rpb24uCisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBzbG93Q2FzZS5hcHBlbmQoCisgICAgICAgIGppdC5icmFuY2hUZXN0NjQoCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3RlcikpOworI2Vsc2UKKyAgICBzbG93Q2FzZS5hcHBlbmQoCisgICAgICAg
IGppdC5icmFuY2gzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUklu
Zm86Om5vbkFyZ0dQUjEsCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSkpOworI2VuZGlmCisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoCisgICAgICAgIGpp
dC5icmFuY2hQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIFN0cnVjdHVy
ZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKEpTRnVuY3Rpb246OmluZm8oKSkpKTsKKyAgICAKKyAgICAvLyBOb3cgd2Uga25vdyB3
ZSBoYXZlIGEgSlNGdW5jdGlvbi4KKyAgICAKKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTRnVuY3Rpb246Om9mZnNl
dE9mRXhlY3V0YWJsZSgpKSwKKyAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgc2xv
d0Nhc2UuYXBwZW5kKAorICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okxlc3NUaGFuLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAg
ICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRP
Zk51bVBhcmFtZXRlcnNGb3Ioa2luZCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMCkpKTsKKyAgICAKKyAgICAvLyBOb3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSBD
b2RlQmxvY2ssIGFuZCB3ZSdyZSBjb21taXR0ZWQgdG8gbWFraW5nIGEgZmFzdAorICAgIC8vIGNh
bGwuCisgICAgCisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSks
CisgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
aml0LnN0b3JlNjQoCisgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEsCisgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAq
IEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKKyNlbHNlCisgICAgaml0LnN0b3JlUHRyKAorICAgICAg
ICBHUFJJbmZvOjpub25BcmdHUFIxLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisg
ICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWlu
ICsKKyAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpKTsKKyAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6
OlNjb3BlQ2hhaW4gKworICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisjZW5kaWYKKyAgICAKKyAgICBqaXQubG9hZFB0cigK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1
dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKSksCisgICAg
ICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICAvLyBNYWtlIGEgdGFpbCBjYWxsLiBUaGlz
IHdpbGwgcmV0dXJuIGJhY2sgdG8gSklUIGNvZGUuCisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9u
KGppdCwgR1BSSW5mbzo6cmVnVDApOworICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QwKTsKKwor
ICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisgICAgCisgICAgLy8gSGVyZSB3ZSBkb24ndCBrbm93
IGFueXRoaW5nLCBzbyByZXZlcnQgdG8gdGhlIGZ1bGwgc2xvdyBwYXRoLgorICAgIAorICAgIHNs
b3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25WaXJ0dWFs
Q2FsbCA6IG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QpOworICAgIAorICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJWaXJ0dWFsICVzIHNs
b3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIgOiAiY29uc3RydWN0
IikpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRv
cihWTSogdm0pCit7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29k
ZUZvckNhbGwpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRo
dW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICByZXR1cm4gdmlydHVhbEZvclRodW5rR2VuZXJh
dG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0
cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IoVk0qIHZtKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAxNTY0ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSwxMSArMzEsMjIgQEAKICNpZiBFTkFCTEUoSklUKQogbmFtZXNwYWNlIEpTQyB7CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB2aXJ0dWFsQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZp
cnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRT
dHlsZUxpbmtDYWxsR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5
bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xk
U3R5bGVMaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgb2xkU3R5bGVWaXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CisKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qKTsK
KworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsKKwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7
CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZN
Kik7CisKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHJpbmdMZW5ndGhUcmFtcG9saW5lR2VuZXJh
dG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSop
OwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212735</attachid>
            <date>2013-09-26 12:13:27 -0700</date>
            <delta_ts>2013-09-26 12:13:27 -0700</delta_ts>
            <desc>patch 8: one more time since the EWS bots seems to be working again now.</desc>
            <filename>bug-121749.patch</filename>
            <type>text/plain</type>
            <size>481877</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2NDg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxMy0wOS0yNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
TW92ZSBERkcgaW5saW5lIGNhY2hpbmcgbG9naWMgaW50byBqaXQvLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzQ5LgorCisgICAgICAgIFJldmll
d2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFJlbGFuZGluZyBodHRwOi8vdHJhYy53
ZWJraXQub3JnL2NoYW5nZXNldC8xNTYyMzUgYWZ0ZXIgcmViYXNpbmcgdG8gbGF0ZXN0CisgICAg
ICAgIHJldmlzaW9uIGFuZCBmaXhpbmcgYnVpbGQgYnJlYWthZ2VzIG9uIFdpbmRvd3MuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVzZXRTdHViSW50ZXJu
YWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICog
ZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Q2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsQXJyYXlB
bGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxBcnJheUFsbG9j
YXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5oOgorICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRp
b25QdXRCeVZhbEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAg
ICAgICAoSlNDOjpERkc6Om9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUpOgor
ICAgICAgICAoSlNDOjpERkc6Om9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRG
b3JUeXBlKToKKyAgICAgICAgKiBkZmcvREZHUmVnaXN0ZXJTZXQuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1JlcGF0
Y2guaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhv
bGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1Bh
dGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
Q29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlND
OjpERkc6OkNvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3I6OkNvbXBhcmVBbmRC
b3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3Mu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuaDoKKyAgICAgICAgKiBmdGwvRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3Qp
OgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuaDoKKyAgICAgICAgKiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6d3JpdGVCYXJy
aWVyKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9y
KToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rU2xvd0NhbGwpOgorICAgICAgICAqIGppdC9KSVRD
YWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0
aW9uV3JhcHBlcnMuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25XcmFwcGVycy5oLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcC4KKyAg
ICAgICAgKEpTQzo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpOgorICAgICAg
ICAqIGppdC9KSVRPcGVyYXRpb25zLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oLgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmguCisgICAgICAg
ICogaml0L1JlcGF0Y2guY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwLgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAg
ICAgKiBqaXQvUmVwYXRjaC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guaC4KKyAgICAgICAgKiBqaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmguCisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6
Om9sZFN0eWxlR2VuZXJhdGVTbG93Q2FzZUZvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlTGlu
a0ZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlTGlua0NhbGxHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpvbGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpvbGRTdHlsZUxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
Om9sZFN0eWxlVmlydHVhbEZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om9sZFN0eWxlVmly
dHVhbENhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpvbGRTdHlsZVZpcnR1YWxDb25zdHJ1
Y3RHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjplbWl0UG9pbnRlclZhbGlkYXRpb24pOgorICAg
ICAgICAoSlNDOjp0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpzbG93UGF0aEZvcik6CisgICAgICAgIChKU0M6OmxpbmtGb3JUaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OmxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2xv
c3VyZUNhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxGb3JUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjp2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGpp
dC9UaHVua0dlbmVyYXRvcnMuaDoKKwogMjAxMy0wOS0yNiAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0
LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE1
NjQ3NC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1
NjQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTUwLDcgKzE1MCw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAg
ZGZnL0RGR1BsYW4uY3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAK
ICAgICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCi0gICAgZGZnL0RGR1Jl
cGF0Y2guY3BwCiAgICAgZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKICAgICBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBA
IC0yMjUsNiArMjI0LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBqaXQvSklU
RXhjZXB0aW9ucy5jcHAKICAgICBqaXQvSklUT3Bjb2Rlcy5jcHAKICAgICBqaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAorICAgIGppdC9KSVRPcGVyYXRpb25zLmNwcAogICAgIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAKICAgICBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKICAgICBqaXQv
SklUU3R1YlJvdXRpbmUuY3BwCkBAIC0yMzIsNiArMjMyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3Jl
X1NPVVJDRVMKICAgICBqaXQvSklUVGh1bmtzLmNwcAogICAgIGppdC9KSVRUb0RGR0RlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHAKICAgICBqaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5jcHAKKyAgICBqaXQvUmVwYXRjaC5jcHAKICAgICBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAog
CiAgICAgcGFyc2VyL0xleGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1NjQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zMzksMTMgKzMzOSw5IEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJCYW5rLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUmVnaXN0ZXJTZXQuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBh
dGNoLmNwcCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oIFwKLQlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIFwKQEAgLTYzMiw2
ICs2MjgsOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbldyYXBwZXJzLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgXAorCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHViQ2FsbC5oIFwKQEAgLTY1NCw2ICs2NTMsOSBAQCBqYXZhc2NyaXB0Y29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TbG93UGF0aENhbGwuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXpl
ZFRodW5rSklULmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Iu
aCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTU2NDg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw3
ICsxODMsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBkZmcvREZHUGxhbi5jcHAgXAogICAgIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgXAogICAgIGRmZy9ERkdQcmVkaWN0aW9u
SW5qZWN0aW9uUGhhc2UuY3BwIFwKLSAgICBkZmcvREZHUmVwYXRjaC5jcHAgXAogICAgIGRmZy9E
RkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwIFwKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
IFwKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgXApAQCAtMjIyLDYgKzIyMSw3
IEBAIFNPVVJDRVMgKz0gXAogICAgIGppdC9KSVRFeGNlcHRpb25zLmNwcCBcCiAgICAgaml0L0pJ
VE9wY29kZXMuY3BwIFwKICAgICBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBcCisgICAgaml0L0pJ
VE9wZXJhdGlvbnMuY3BwIFwKICAgICBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIFwKICAgICBq
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgXAogICAgIGppdC9KSVRTdHViUm91dGluZS5j
cHAgXApAQCAtMjI5LDYgKzIyOSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGppdC9KSVRUaHVua3Mu
Y3BwIFwKICAgICBqaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIFwK
ICAgICBqaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgXAorICAgIGppdC9SZXBhdGNo
LmNwcCBcCiAgICAgaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgXAogICAgIGxsaW50L0xMSW50Q0xv
b3AuY3BwIFwKICAgICBsbGludC9MTEludERhdGEuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTU2NDg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzc4LDYgKzM3OCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcSklURXhjZXB0aW9ucy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caml0XEpJVE9wY29kZXMuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxKSVRPcGNvZGVzMzJfNjQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxKSVRPcGVyYXRpb25zLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRc
SklUUHJvcGVydHlBY2Nlc3MuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcSklUU3R1YlJvdXRpbmUuY3BwIiAvPg0KQEAgLTM4NSw2ICszODYsNyBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFRodW5rcy5jcHAiIC8+DQogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSnVtcFJlcGxhY2VtZW50
V2F0Y2hwb2ludC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFJlcGF0
Y2guY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRv
cnMuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsaW50XExMSW50Q0xvb3Au
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsaW50XExMSW50RGF0YS5jcHAi
IC8+DQpAQCAtNzY5LDYgKzc3MSw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRc
SklURGlzYXNzZW1ibGVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJ
VEV4Y2VwdGlvbnMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUSW5s
aW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRpb25X
cmFwcGVycy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRp
b25zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJDYWxsLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJSb3V0aW5lLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJzLmgiIC8+DQpAQCAtNzgw
LDYgKzc4NCw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUV3JpdGVCYXJy
aWVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpTSW50ZXJmYWNlSklU
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEp1bXBSZXBsYWNlbWVudFdh
dGNocG9pbnQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVnaXN0ZXJT
ZXQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVwYXRjaC5oIiAvPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Iu
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcU3BlY2lhbGl6ZWRUaHVua0pJ
VC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRvci5o
IiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRvcnMuaCIg
Lz4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU2NDg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsMTMgQEAKIAkJMEYyNEU1NDQx
N0VBOUY1OTAwQUJCMjE3IC8qIEdQUkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTNGMTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1
NTUxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU1MzE3RjBCNzFDMDBBQkIy
MTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmNwcCAqLzsgfTsKIAkJMEYyNEU1NTYxN0YwQjcxQzAw
QUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNh
bGxGcmFtZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGMjRFNTRDMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ1MTdFRTI3
NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCAqLzsgfTsKKwkJMEYyNEU1NEQxN0VFMjc0
OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ2MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRp
b25zLmggKi87IH07CisJCTBGMjRFNTRFMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25X
cmFwcGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyNEU1NDcxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbldyYXBwZXJzLmggKi87IH07
CisJCTBGMjRFNTRGMTdFRTI3NDkwMEFCQjIxNyAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NDgxN0VFMjc0OTAwQUJC
MjE3IC8qIFJlZ2lzdGVyU2V0LmggKi87IH07CisJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAv
KiBSZXBhdGNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLzsgfTsKKwkJMEYy
NEU1NTExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBh
dGNoLmggKi87IH07CisJCTBGMjRFNTUyMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Iu
aCAqLzsgfTsKIAkJMEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9j
YXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxs
b2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkI2NkFE
MTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0Qw
MEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjY2LDggKzI3Myw2IEBACiAJCTBG
NzY2RDM1MTVBRTI1M0IwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQzMzE1QUUy
NTM1MDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDM4MTVBRTRBMUMwMDhG
MzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDM2MTVBRTRBMUEwMDhGMzYz
RSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEY3NjZE
MzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDM3MTVB
RTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY3NjZENDQxNUIy
QTNDMDAwOEYzNjNFIC8qIERGR1JlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQ0MjE1QjJBM0JEMDA4RjM2M0UgLyogREZHUmVn
aXN0ZXJTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkwRjc2NkQ0NjE1QjM3MDFGMDA4RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2
NkQ0NTE1QjM3MDFEMDA4RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAwOTIx
NDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyog
U2FtcGxpbmdDb3VudGVyLmNwcCAqLzsgfTsKIAkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8q
IERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0IyOTRE
MTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21t
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
NzMxLDggKzczNiw2IEBACiAJCTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QUU2
NEE3MTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYg
LyogQ29kZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLzsg
fTsKIAkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYwM0NFRjIxNEM3NTQ2
NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovOyB9OwotCQk4NkJCMDlDMDEzOEUzODFC
MDA1NjcwMkYgLyogREZHUmVwYXRjaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NkJCMDlCRTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5j
cHAgKi87IH07Ci0JCTg2QkIwOUMxMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkJCMDlCRjEzOEUz
ODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTg2QzM2RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZDNTY4RTAxMUEyMTNFRTAw
MDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QzU2OEREMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fz
c2VtYmxlckFSTS5jcHAgKi87IH07CiAJCTg2QzU2OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNy
b0Fzc2VtYmxlck1JUFMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2QzU2OERFMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTMyMiw2
ICsxMzI1LDEzIEBACiAJCTBGMjRFNTNGMTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdQUkluZm8uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTMxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFt
ZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVDYWxs
RnJhbWVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU1NDE3RjBC
NzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElubGluZUNhbGxGcmFtZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjI0RTU0NTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRPcGVyYXRpb25zLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNEU1NDYxN0VFMjc0OTAwQUJCMjE3IC8qIEpJ
VE9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUT3BlcmF0
aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI0RTU0NzE3RUUyNzQ5MDBB
QkIyMTcgLyogSklUT3BlcmF0aW9uV3JhcHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUT3BlcmF0aW9uV3JhcHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyNEU1NDgxN0VFMjc0OTAwQUJCMjE3IC8qIFJlZ2lzdGVyU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjU2
QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVy
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYWxsQXJyYXlBbGxv
Y2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRv
clNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2
NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHQ0luY29taW5nUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ2Nyw4ICsxNDc3LDYgQEAKIAkJMEY3NjZEMzMxNUFF
MjUzNTAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQzNjE1QUU0QTFBMDA4RjM2M0UgLyogU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMzcxNUFFNEExQTAwOEYzNjNFIC8qIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRjc2NkQ0MjE1QjJBM0JEMDA4RjM2M0UgLyogREZHUmVnaXN0ZXJTZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUmVnaXN0ZXJTZXQuaDsgcGF0aCA9
IGRmZy9ERkdSZWdpc3RlclNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjc2
NkQ0NTE1QjM3MDFEMDA4RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oOyBwYXRoID0gZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdD
b3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVC
MzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xOTI3LDggKzE5MzUsNiBAQAogCQk4NkI1ODIyRTE0RDIzNzNCMDBBOUMzMDYgLyogQ29k
ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZVBy
b2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI1ODIyRjE0RDIzNzNC
MDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29kZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCNTgyNkEx
NEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJlZE1NYXBBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUaWVyZWRNTWFwQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJODZCQjA5QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUmVwYXRjaC5jcHA7IHBhdGggPSBkZmcv
REZHUmVwYXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2QkIwOUJGMTM4
RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1JlcGF0Y2guaDsgcGF0aCA9IGRmZy9ERkdSZXBhdGNoLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg2QkY2NDJBMTQ4REIyQjUwMDRERTM2QSAvKiBJbnRyaW5zaWMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50cmluc2ljLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QzM2RUU5MEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkM1NjhERDExQTIxM0VFMDAwN0Y3
RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjcxMSwxNiArMjcxNywxNiBAQAogCQkJCTBGMjRFNTNCMTdFQTlGNTkwMEFCQjIxNyAv
KiBBc3NlbWJseUhlbHBlcnMuY3BwICovLAogCQkJCTBGMjRFNTNDMTdFQTlGNTkwMEFCQjIxNyAv
KiBBc3NlbWJseUhlbHBlcnMuaCAqLywKIAkJCQkwRjI0RTUzRDE3RUE5RjU5MDBBQkIyMTcgLyog
Q0NhbGxIZWxwZXJzLmggKi8sCi0JCQkJMEYyNEU1M0UxN0VBOUY1OTAwQUJCMjE3IC8qIEZQUklu
Zm8uaCAqLywKLQkJCQkwRjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oICovLAog
CQkJCTBGNzNEN0FCMTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNw
cCAqLywKIAkJCQkwRjczRDdBQzE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91
dGluZS5oICovLAogCQkJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29k
ZU1hcC5oICovLAogCQkJCUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcCAqLywKIAkJCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvci5oICovLAogCQkJCTg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRh
YmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwICovLAorCQkJCTBGMjRFNTNFMTdFQTlGNTkwMEFC
QjIxNyAvKiBGUFJJbmZvLmggKi8sCiAJCQkJMEY3NjZEMkQxNUE4RENERDAwOEYzNjNFIC8qIEdD
QXdhcmVKSVRTdHViUm91dGluZS5jcHAgKi8sCiAJCQkJMEY3NjZEMkUxNUE4RENERDAwOEYzNjNF
IC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oICovLAorCQkJCTBGMjRFNTNGMTdFQTlGNTkwMEFC
QjIxNyAvKiBHUFJJbmZvLmggKi8sCiAJCQkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhv
c3RDYWxsUmV0dXJuVmFsdWUuY3BwICovLAogCQkJCTBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAv
KiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi8sCiAJCQkJMTQyOUQ5MkQwRUQyMkQ3MDAwQjg5NjE5
IC8qIEpJVC5jcHAgKi8sCkBAIC0yNzM5LDYgKzI3NDUsOSBAQAogCQkJCTg2Q0M4NUEwMEVFNzlB
NDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVzLmggKi8sCiAJCQkJQkNERDUxRTkwRkI4REY3NDAwNEE4
QkRDIC8qIEpJVE9wY29kZXMuY3BwICovLAogCQkJCUE3MTIzNkU0MTE5NUYzM0MwMEJEMjE3NCAv
KiBKSVRPcGNvZGVzMzJfNjQuY3BwICovLAorCQkJCTBGMjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAv
KiBKSVRPcGVyYXRpb25zLmNwcCAqLywKKwkJCQkwRjI0RTU0NjE3RUUyNzQ5MDBBQkIyMTcgLyog
SklUT3BlcmF0aW9ucy5oICovLAorCQkJCTBGMjRFNTQ3MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRP
cGVyYXRpb25XcmFwcGVycy5oICovLAogCQkJCTg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBK
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8sCiAJCQkJQTdDMUU4QzgxMTJFNzAxQzAwQTM3Rjk4IC8q
IEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovLAogCQkJCTk2MDYyNjk1MEZCOEVDMDIwMDk3
OThBQiAvKiBKSVRTdHViQ2FsbC5oICovLApAQCAtMjc2MSw2ICsyNzcwLDEwIEBACiAJCQkJQTc2
QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8sCiAJCQkJMEY3NjZE
MzIxNUFFMjUzNTAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwICovLAog
CQkJCTBGNzY2RDMzMTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50
LmggKi8sCisJCQkJMEYyNEU1NDgxN0VFMjc0OTAwQUJCMjE3IC8qIFJlZ2lzdGVyU2V0LmggKi8s
CisJCQkJMEYyNEU1NDkxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwICovLAorCQkJCTBG
MjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi8sCisJCQkJMEYyNEU1NEIxN0VF
Mjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oICovLAogCQkJCUE3MDlG
MkVGMTdBMEFDMDQwMDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCAqLywKIAkJCQlBNzM4NjU1MTEx
ODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oICovLAogCQkJCTBGNTcyRDRE
MTY4NzlGREIwMEU1N0ZCRCAvKiBUaHVua0dlbmVyYXRvci5oICovLApAQCAtMzYxOCwxMyArMzYz
MSw5IEBACiAJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhERjgyMDAy
QjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8sCi0JCQkJMEY3NjZENDIxNUIyQTNCRDAwOEYz
NjNFIC8qIERGR1JlZ2lzdGVyU2V0LmggKi8sCi0JCQkJODZCQjA5QkUxMzhFMzgxQjAwNTY3MDJG
IC8qIERGR1JlcGF0Y2guY3BwICovLAotCQkJCTg2QkIwOUJGMTM4RTM4MUIwMDU2NzAyRiAvKiBE
RkdSZXBhdGNoLmggKi8sCiAJCQkJQTc3QTQyM0MxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVU
b0V4ZWN1dGUuaCAqLywKIAkJCQlBNzQxMDE3RTE3OURBRjgwMDAyRUI4QkEgLyogREZHU2FuZVN0
cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCAqLywKIAkJCQk4NkVDQTNGOTEzMkRGMjVB
MDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oICovLAotCQkJCTBGNzY2RDQ1MTVCMzcwMUQwMDhG
MzYzRSAvKiBERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQkwRjFFM0E2NTE1
M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovLAogCQkJCTBG
MUUzQTUwMTUzN0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovLAogCQkJ
CTg2RUM5REMyMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAgKi8sCkBA
IC0zOTUyLDYgKzM5NjEsNyBAQAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdB
ZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1NUE1
REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM3ODEwQzE3OTlFQTJF
MDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjRFNTRFMTdF
RTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25XcmFwcGVycy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMTYwMTVFMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA1QzNCNDE2ODNDRjky
MDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zOTYyLDYgKzM5NzIsNyBAQAogCQkJCTBGRkI5MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBE
RkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwQjA4MzMxN0EwQjc5
QjAwREFGMTRCIC8qIERGR0JpbmFyeVN3aXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlD
RjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjI0RTU1MjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZH
QnJhbmNoRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAy
QjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjU2QzM2
MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDM2LDE0ICs0MDQ3LDExIEBACiAJCQkJMEZCRTBGNzUx
NkMxREIwQjAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJB
RDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjc2NkQ0NDE1QjJB
M0MwMDA4RjM2M0UgLyogREZHUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2QkIw
OUMxMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggaW4gSGVhZGVycyAqLywKIAkJCQky
QUQ4OTMyQjE3RTM4NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzdBNDI0MzE3QTBCQkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVT
dHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVD
QTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEOEEzMTQxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8q
IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFE
MTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZFQzlERDMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggaW4g
SGVhZGVycyAqLywKQEAgLTQxNzgsNiArNDE4Niw3IEBACiAJCQkJQTdBNEFFMTAxNzk3M0I0RDAw
NTYxMkIxIC8qIEpJVFN0dWJzWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkx
RjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3
MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRP
cGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0Ug
LyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDA0ODAxMzEw
MjFBMUQ5MDA4RTdGMDEgLyogSlNBUElWYWx1ZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
NDQ3Myw2ICs0NDgyLDggQEAKIAkJCQkwRkY0Mjc0MjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2
X2V4dGVybi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDQxNThFQkU5MTAwNENCOUZGIC8q
IHVkaXM4Nl9pbnB1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDgxNThFQkU5MTAwNENC
OUZGIC8qIHVkaXM4Nl9zeW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjRFNTUxMTdFRTI3NDkw
MEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjI0RTU0RjE3RUUyNzQ5
MDBBQkIyMTcgLyogUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ5MTU4
RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVB
QjM5MTc5OUU0QjIwMEQyODMzRCAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3QThBRjQxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGluIEhlYWRl
cnMgKi8sCkBAIC00OTQyLDYgKzQ5NTMsNyBAQAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkx
MCAvKiBERkdGaXh1cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0Y3MTdBMEI4
Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4
OUNGOTE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEYyNEU1NEMxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJh
dGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8q
IERGR0dyYXBoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDREOTA1MTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVB
MEEzMzE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTQ5NzIsNyArNDk4NCw2IEBACiAJCQkJQTc4QTk3N0ExNzk3MzhCODAwOURGNzQ0IC8qIERGR1Bs
YW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzQxNkMxREIwOTAwODJDNUU4IC8qIERG
R1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1
RDE0RUY5MEIzMDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJODZCQjA5QzAxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2gu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlERDIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1Nw
ZWN1bGF0aXZlSklULmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIw
OEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2
ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNTIzOCw2ICs1MjQ5LDcgQEAKIAkJCQk5MzM1RjI0RDEyRTY3NjVCMDAyQjU1
NTMgLyogU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0RF
M0I0MzBFNkM4MzJEMDAxNDUzQTcgLyogU3RydWN0dXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdFNEVFNzBGMEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjI0RTU1MDE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDMkYwRjJEMTE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNFIC8qIFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkND
RjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAJKHJldmlzaW9uIDE1NjQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAg
dm9pZCBDYWxsTGlua0luZm86OnVubGluayhWTSYgdm0sIFJlcGF0YwogICAgIHJlcGF0Y2hCdWZm
ZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goUmVwYXRjaEJ1ZmZl
cjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoaG90UGF0aEJlZ2luKSwgc3Rh
dGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KGNhbGxlZUdQUiksIDApOwogICAg
IGlmIChpc0RGRykgewogI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5n
ZXRDVElTdHViKERGRzo6bGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKSA6IHZtLmdldENUSVN0
dWIoREZHOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpKTsKKyAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCAoY2FsbFR5cGUgPT0gQ29uc3RydWN0
ID8gdm0uZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpIDogdm0uZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpKTsKICNlbHNlCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKICAgICB9IGVsc2UKLSAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCBjYWxsVHlwZSA9PSBDb25z
dHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IHZt
LmdldENUSVN0dWIobGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8g
dm0uZ2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IHZt
LmdldENUSVN0dWIob2xkU3R5bGVMaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICBoYXNT
ZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNlOwogICAgIGNhbGxlZS5jbGVhcigpOwogICAgIHN0dWIu
Y2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAxNTY0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR05v
ZGUuaCIKLSNpbmNsdWRlICJERkdSZXBhdGNoLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIK
ICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC01MCw2
ICs0OSw3IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGlj
UHV0QnlJZExpc3QuaCIKICNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCisjaW5jbHVkZSAi
UmVwYXRjaC5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTbG90Vmlz
aXRvcklubGluZXMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMjM4NiwxMiArMjM4NiwxMiBA
QCB2b2lkIENvZGVCbG9jazo6cmVzZXRTdHViSW50ZXJuYWwoUmVwYXRjCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgogICAgICAgICBpZiAoaXNHZXRCeUlkQWNjZXNz
KGFjY2Vzc1R5cGUpKQotICAgICAgICAgICAgREZHOjpyZXNldEdldEJ5SUQocmVwYXRjaEJ1ZmZl
ciwgc3R1YkluZm8pOworICAgICAgICAgICAgcmVzZXRHZXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0
dWJJbmZvKTsKICAgICAgICAgZWxzZSBpZiAoaXNQdXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKQot
ICAgICAgICAgICAgREZHOjpyZXNldFB1dEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOwor
ICAgICAgICAgICAgcmVzZXRQdXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0luQWNjZXNzKGFjY2Vzc1R5
cGUpKTsKLSAgICAgICAgICAgIERGRzo6cmVzZXRJbihyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7
CisgICAgICAgICAgICByZXNldEluKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKICAgICAgICAg
fQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE1NjQ4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTIgQEAKICNpZiBFTkFCTEUoSklUKQogCiAj
aW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1ZGUgIkRGR1JlZ2lzdGVyU2V0LmgiCiAjaW5j
bHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgogI2luY2x1
ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtMjMxLDcgKzIzMSw3IEBA
IHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgICAgICBpbnQ4X3QgdmFsdWVUYWdH
UFI7CiAjZW5kaWYKICAgICAgICAgICAgIGludDhfdCB2YWx1ZUdQUjsKLSAgICAgICAgICAgIERG
Rzo6UmVnaXN0ZXJTZXRQT0QgdXNlZFJlZ2lzdGVyczsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0
UE9EIHVzZWRSZWdpc3RlcnM7CiAgICAgICAgICAgICBpbnQzMl90IGRlbHRhQ2FsbFRvRG9uZTsK
ICAgICAgICAgICAgIGludDMyX3QgZGVsdGFDYWxsVG9TdG9yYWdlTG9hZDsKICAgICAgICAgICAg
IGludDMyX3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNs
b3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE1NjQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiBjbGFzcyBDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1w
aW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0PiB7CiBwdWJsaWM6
CiAgICAgQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBQX0RGR09wZXJh
dGlvbl9FU3RaIGZ1bmN0aW9uLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZnJv
bSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgUF9KSVRPcGVyYXRpb25fRVN0WiBmdW5jdGlvbiwKICAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHN0b3JhZ2VHUFIsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBzaXplX3Qgc2l6ZSkKICAgICAgICAgOiBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Pihmcm9tLCBqaXQpCiAgICAgICAgICwgbV9mdW5jdGlv
bihmdW5jdGlvbikKQEAgLTY4LDcgKzY4LDcgQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICAKIHBy
aXZhdGU6Ci0gICAgUF9ERkdPcGVyYXRpb25fRVN0WiBtX2Z1bmN0aW9uOworICAgIFBfSklUT3Bl
cmF0aW9uX0VTdFogbV9mdW5jdGlvbjsKICAgICBHUFJSZWcgbV9yZXN1bHRHUFI7CiAgICAgR1BS
UmVnIG1fc3RvcmFnZUdQUjsKICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOwpAQCAtNzksNyAr
NzksNyBAQCBwcml2YXRlOgogY2xhc3MgQ2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6
ZVNsb3dQYXRoR2VuZXJhdG9yIDogcHVibGljIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Q+IHsKIHB1YmxpYzoKICAgICBDYWxsQXJyYXlBbGxvY2F0b3JX
aXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBmcm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBQX0RGR09wZXJhdGlvbl9FU3Ra
IGZ1bmN0aW9uLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZnJvbSwgU3BlY3Vs
YXRpdmVKSVQqIGppdCwgUF9KSVRPcGVyYXRpb25fRVN0WiBmdW5jdGlvbiwKICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlKiBjb250aWd1b3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUq
IGFycmF5U3RvcmFnZVN0cnVjdHVyZSwgR1BSUmVnIHNpemVHUFIpCiAgICAgICAgIDogSnVtcGlu
Z1Nsb3dQYXRoR2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdD4oZnJvbSwgaml0KQog
ICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCkBAIC0xMTIsNyArMTEyLDcgQEAgcHJvdGVj
dGVkOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgUF9ERkdPcGVyYXRpb25fRVN0WiBtX2Z1
bmN0aW9uOworICAgIFBfSklUT3BlcmF0aW9uX0VTdFogbV9mdW5jdGlvbjsKICAgICBHUFJSZWcg
bV9yZXN1bHRHUFI7CiAgICAgU3RydWN0dXJlKiBtX2NvbnRpZ3VvdXNTdHJ1Y3R1cmU7CiAgICAg
U3RydWN0dXJlKiBtX2FycmF5U3RvcmFnZVN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE1NjQ4NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsMTIgKzM2LDEyIEBACiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09T
UkV4aXRDb21waWxhdGlvbkluZm8uaCIKICNpbmNsdWRlICJERkdSZWdpc3RlckJhbmsuaCIKLSNp
bmNsdWRlICJERkdSZWdpc3RlclNldC5oIgogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRl
ICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0Lmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJKHJldmlzaW9uIDE1NjQ4NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDcgKzc2LDcgQEAgcHJpdmF0ZToKIH07CiAKIGV4dGVybiAiQyIgewotdm9pZCBERkdfT1BFUkFU
SU9OIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09Q
RVJBVElPTiBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU2NDg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NiBAQAogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RyaXZl
ci5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKLSNpbmNsdWRlICJERkdSZXBhdGNoLmgiCiAj
aW5jbHVkZSAiREZHVGh1bmtzLmgiCiAjaW5jbHVkZSAiREZHVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCIKICNpbmNsdWRlICJERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmgiCkBAIC00NSwyOTUgKzQ0LDIxIEBACiAjaW5jbHVkZSAiSW50ZXJw
cmV0ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCisj
aW5jbHVkZSAiSklUT3BlcmF0aW9uV3JhcHBlcnMuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24u
aCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCiAjaW5jbHVkZSAi
TmFtZUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUmVwYXRjaC5oIgogI2luY2x1ZGUgIlN0cmluZ0Nv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRlIDx3
dGYvSW5saW5lQVNNLmg+CiAKICNpZiBFTkFCTEUoSklUKQotCi0jaWYgQ1BVKE1JUFMpCi0jaWYg
V1RGX01JUFNfUElDCi0jZGVmaW5lIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24pIFwKLSAg
ICAgICAgIi5zZXQgbm9yZW9yZGVyIiAiXG4iIFwKLSAgICAgICAgIi5jcGxvYWQgJDI1IiAiXG4i
IFwKLSAgICAgICAgIi5zZXQgcmVvcmRlciIgIlxuIiBcCi0gICAgICAgICJsYSAkdDksICIgTE9D
QUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiXG4iCi0jZWxzZQotI2RlZmluZSBMT0FEX0ZVTkNUSU9O
X1RPX1Q5KGZ1bmN0aW9uKSAiIiAiXG4iCi0jZW5kaWYKLSNlbmRpZgotCiAjaWYgRU5BQkxFKERG
R19KSVQpCiAKLSNpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODZfNjQpCi0KLSNkZWZpbmUgRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByZWdpc3RlcikgXAot
ICAgIGFzbSggXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwK
LSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5j
dGlvbikgIjoiICJcbiIgXAotICAgICAgICAibW92ICglcnNwKSwgJSIgU1RSSU5HSVpFKHJlZ2lz
dGVyKSAiXG4iIFwKLSAgICAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbiMjV2l0
aFJldHVybkFkZHJlc3MpICJcbiIgXAotICAgICk7Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJzaSkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9X
SVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4KQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByY3gpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1MoZnVuY3Rpb24sIHI4KQotCi0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShY
ODYpCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0
aW9uLCBvZmZzZXQpIFwKLSAgICBhc20oIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAg
ICAgICAibW92ICglZXNwKSwgJWVheFxuIiBcCi0gICAgICAgICJtb3YgJWVheCwgIiBTVFJJTkdJ
WkUob2Zmc2V0KSAiKCVlc3ApXG4iIFwKLSAgICAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5DRShm
dW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpICJcbiIgXAotICAgICk7Ci0jZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSAgICBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDgpCi0jZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDE2KQotI2RlZmluZSBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAyMCkKLSNkZWZpbmUgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMjQpCi0KLSNlbGlmIENPTVBJTEVSKEdDQykg
JiYgQ1BVKEFSTV9USFVNQjIpCi0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKLSAgICBhc20gKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwK
LSAgICAiLmFsaWduIDIiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0
aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgIi50aHVt
YiIgIlxuIiBcCi0gICAgIi50aHVtYl9mdW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikg
IlxuIiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAi
bW92IGEyLCBsciIgIlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9u
KSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwK
LSAgICAiLnRleHQiICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAi
IFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9u
KSAiXG4iIFwKLSAgICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9G
VU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
OiIgIlxuIiBcCi0gICAgICAgICJtb3YgYTQsIGxyIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NB
TF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsK
LQotLy8gRW5jb2RlZEpTVmFsdWUgaW4gSlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGludGVnZXIu
IFdoZW4gYmVpbmcgY29tcGlsZWQgaW4gQVJNIEVBQkksIGl0IG11c3QgYmUgYWxpZ25lZCBldmVu
LW51bWJlcmVkIHJlZ2lzdGVyIChyMCwgcjIgb3IgW3NwXSkuCi0vLyBBcyBhIHJlc3VsdCwgcmV0
dXJuIGFkZHJlc3Mgd2lsbCBiZSBhdCBhIDQtYnl0ZSBmdXJ0aGVyIGxvY2F0aW9uIGluIHRoZSBm
b2xsb3dpbmcgY2FzZXMuCi0jaWYgQ09NUElMRVJfU1VQUE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkK
LSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtz
cCwgIzRdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJz
dHIgbHIsIFtzcCwgIzhdIgotI2Vsc2UKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJO
X0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzBdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9S
RV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzRdIgotI2VuZGlmCi0KLSNkZWZp
bmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAot
ICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBcCi0g
ICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lN
Qk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1iX2Z1
bmMgIiBUSFVNQl9GVU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5H
KGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9B
RERSRVNTX0VKSSAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24p
ICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwK
LSAgICAiLnRleHQiICJcbiIgXAotICAgICIuYWxpZ24gMiIgIlxuIiBcCi0gICAgIi5nbG9ibCAi
IFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9u
KSAiXG4iIFwKLSAgICAiLnRodW1iIiAiXG4iIFwKLSAgICAiLnRodW1iX2Z1bmMgIiBUSFVNQl9G
VU5DX1BBUkFNKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
OiIgIlxuIiBcCi0gICAgICAgIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKQ0kg
IlxuIiBcCi0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVy
bkFkZHJlc3MiICJcbiIgXAotICAgICk7Ci0KLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFS
TV9UUkFESVRJT05BTCkKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAg
ICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJP
TChmdW5jdGlvbikgIlxuIiBcCi0gICAgSU5MSU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAot
ICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICAgICAgIm1vdiBhMiwg
bHIiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhS
ZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLSAgICBhc20gKCBcCi0gICAgIi50
ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBc
Ci0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIElOTElORV9BUk1fRlVOQ1RJ
T04oZnVuY3Rpb24pIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0g
ICAgICAgICJtb3YgYTQsIGxyIiAiXG4iIFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0Uo
ZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCi0gICAgKTsKLQotLy8gRW5jb2Rl
ZEpTVmFsdWUgaW4gSlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGludGVnZXIuIFdoZW4gYmVpbmcg
Y29tcGlsZWQgaW4gQVJNIEVBQkksIGl0IG11c3QgYmUgYWxpZ25lZCBldmVuLW51bWJlcmVkIHJl
Z2lzdGVyIChyMCwgcjIgb3IgW3NwXSkuCi0vLyBBcyBhIHJlc3VsdCwgcmV0dXJuIGFkZHJlc3Mg
d2lsbCBiZSBhdCBhIDQtYnl0ZSBmdXJ0aGVyIGxvY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgY2Fz
ZXMuCi0jaWYgQ09NUElMRVJfU1VQUE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkKLSNkZWZpbmUgSU5T
VFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJzdHIgbHIsIFtzcCwgIzRdIgotI2Rl
ZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwg
IzhdIgotI2Vsc2UKLSNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJ
ICJzdHIgbHIsIFtzcCwgIzBdIgotI2RlZmluZSBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQURE
UkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzRdIgotI2VuZGlmCi0KLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAotICAgIGFzbSAoIFwK
LSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9u
KSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgSU5MSU5FX0FS
TV9GVU5DVElPTihmdW5jdGlvbikgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAi
XG4iIFwKLSAgICAgICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpJICJcbiIg
XAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRy
ZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtICggXAotICAgICIudGV4dCIgIlxu
IiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJ
REVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBJTkxJTkVfQVJNX0ZVTkNUSU9OKGZ1bmN0
aW9uKSBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICBJ
TlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJcbiIgXAotICAgICAgICAiYiAi
IExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAg
ICApOwotCi0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShNSVBTKQotCi0jZGVmaW5lIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBc
Ci0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0
aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAotICAgICAgICAibW92ZSAkYTEsICRyYSIgIlxuIiBc
Ci0gICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJl
c3MiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSggXAotICAgICIudGV4dCIgIlxuIiBc
Ci0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAotICAgIEhJREVf
U1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIg
IlxuIiBcCi0gICAgTE9BRF9GVU5DVElPTl9UT19UOShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJl
c3MpIFwKLSAgICAgICAgIm1vdmUgJGEzLCAkcmEiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FM
X1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwot
Ci0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rp
b24pIFwKLSAgICBhc20oIFwKLSAgICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxu
IiBcCi0gICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgIExPQURfRlVO
Q1RJT05fVE9fVDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSBcCi0gICAgICAgICJzdyAk
cmEsIDIwKCRzcCkiICJcbiIgXAotICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlv
bikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKLSAgICApOwotCi0jZGVmaW5lIEZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCi0gICAgYXNtKCBc
Ci0gICAgIi50ZXh0IiAiXG4iIFwKLSAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlv
bikgIlxuIiBcCi0gICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9T
VFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKLSAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0
aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgXAotICAgICAgICAic3cgJHJhLCAyNCgkc3ApIiAiXG4i
IFwKLSAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRk
cmVzcyIgIlxuIiBcCi0gICAgKTsKLQotI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoU0g0KQot
Ci0jZGVmaW5lIFNINF9TQ1JBVENIX1JFR0lTVEVSICJyMTEiCi0KLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKLSAgICBhc20oIFwKLSAg
ICAiLnRleHQiICJcbiIgXAotICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
XG4iIFwKLSAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCi0gICAgU1lNQk9MX1NUUklO
RyhmdW5jdGlvbikgIjoiICJcbiIgXAotICAgICAgICAic3RzIHByLCByNSIgIlxuIiBcCi0gICAg
ICAgICJicmEgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIg
IlxuIiBcCi0gICAgICAgICJub3AiICJcbiIgXAotICAgICk7Ci0KLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikgXAotICAgIGFzbSggXAot
ICAgICIudGV4dCIgIlxuIiBcCi0gICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24p
ICJcbiIgXAotICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKLSAgICBTWU1CT0xfU1RS
SU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCi0gICAgICAgICJzdHMgcHIsIHI3IiAiXG4iIFwKLSAg
ICAgICAgIm1vdi5sIDJmLCAiIFNINF9TQ1JBVENIX1JFR0lTVEVSICJcbiIgXAotICAgICAgICAi
YnJhZiAiIFNINF9TQ1JBVENIX1JFR0lTVEVSICJcbiIgXAotICAgICAgICAibm9wIiAiXG4iIFwK
LSAgICAgICAgIjE6IC5iYWxpZ24gNCIgIlxuIiBcCi0gICAgICAgICIyOiAubG9uZyAiIExPQ0FM
X1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzLTFiIiAiXG4iIFwKLSAgICAp
OwotCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlv
biwgb2Zmc2V0LCBzY3JhdGNoKSBcCi0gICAgYXNtKCBcCi0gICAgIi50ZXh0IiAiXG4iIFwKLSAg
ICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCi0gICAgSElERV9TWU1C
T0woZnVuY3Rpb24pICJcbiIgXAotICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4i
IFwKLSAgICAgICAgInN0cyBwciwgIiBzY3JhdGNoICJcbiIgXAotICAgICAgICAibW92LmwgIiBz
Y3JhdGNoICIsIEAoIiBTVFJJTkdJWkUob2Zmc2V0KSAiLCByMTUpIiAiXG4iIFwKLSAgICAgICAg
Im1vdi5sIDJmLCAiIHNjcmF0Y2ggIlxuIiBcCi0gICAgICAgICJicmFmICIgc2NyYXRjaCAiXG4i
IFwKLSAgICAgICAgIm5vcCIgIlxuIiBcCi0gICAgICAgICIxOiAuYmFsaWduIDQiICJcbiIgXAot
ICAgICAgICAiMjogLmxvbmcgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJu
QWRkcmVzcy0xYiIgIlxuIiBcCi0gICAgKTsKLQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAwLCBTSDRfU0NSQVRDSF9SRUdJU1RFUikKLSNkZWZpbmUg
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgNCwgU0g0X1NDUkFUQ0hf
UkVHSVNURVIpCi0KLSNlbmRpZgotCi0jZGVmaW5lIFBfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKLXZvaWQqIERGR19PUEVSQVRJT04gZnVuY3Rpb24j
I1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5D
RURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRShmdW5jdGlvbikKLQotI2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmlu
Z0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5B
TDsgXAotRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikK
LQotI2RlZmluZSBKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVu
Y3Rpb24pIFwKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gZnVuY3Rpb24jI1dpdGhSZXR1
cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKiwgUmV0dXJu
QWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pCi0KLSNkZWZpbmUgVl9G
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAotdm9p
ZCBERkdfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJF
RkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikKLQogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KQEAgLTM1Nyw3ICs4Miw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBwdXRCeVZhbChFeGVjU3RhdGUqIGUKIH0KIAogdGVtcGxhdGU8Ym9vbCBz
dHJpY3Q+Ci1BTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK0FMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNDY2LDcgKzE5MSw3IEBAIGNoYXIqIG5l
d1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQoCiAKIGV4dGVybiAiQyIgewogCi1FbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVG9UaGlzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwpAQCAtNDc0LDcgKzE5OSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uVG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3ApLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Ub1RoaXNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3ApCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC00ODIsNyArMjA3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25UbwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUp
KTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGludDMyX3QgaW5saW5lQ2FwYWNpdHkp
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgaW50MzJfdCBpbmxpbmVDYXBhY2l0eSkKIHsKICAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKQEAgLTQ5NSw3ICsyMjAsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlVGhpCiAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLT5hbGxvY2F0aW9uUHJvZmlsZShleGVjLCBp
bmxpbmVDYXBhY2l0eSktPnN0cnVjdHVyZSgpKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNTAzLDcgKzIy
OCw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QKICAgICByZXR1
cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgc3RydWN0dXJlKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikK
IHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKQEAgLTUxNCw3ICsyMzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblZhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0FkZChl
eGVjLCBvcDEsIG9wMikpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblZhbHVlQWRkTm90TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwpAQCAtNTQ3LDcgKzI3Miw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUgZ2V0QnlWYWwoRXgKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSku
Z2V0KGV4ZWMsIGluZGV4KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQorRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CkBAIC01NzgsNyArMzAzLDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVj
LCBpZGVudCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEJ5VmFsQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFByb3BlcnR5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCeVZhbENlbGwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRQcm9wZXJ0eSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTYxOCwxNDAgKzM0MywxNyBA
QCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdldEJ5VmFsQ2VsCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKGJhc2UpLmdldChleGVjLCBpbmRleCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQoRXhlY1N0
YXRlKiBleGVjLCBKU0FycmF5KiBiYXNlLCBpbnQzMl90IGluZGV4KQorRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50KEV4ZWNTdGF0ZSogZXhlYywg
SlNBcnJheSogYmFzZSwgaW50MzJfdCBpbmRleCkKIHsKICAgICByZXR1cm4gZ2V0QnlWYWxDZWxs
SW50KGV4ZWMsIGJhc2UsIGluZGV4KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBi
YXNlLCBpbnQzMl90IGluZGV4KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeVZhbFN0cmluZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBiYXNlLCBpbnQz
Ml90IGluZGV4KQogewogICAgIHJldHVybiBnZXRCeVZhbENlbGxJbnQoZXhlYywgYmFzZSwgaW5k
ZXgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17
Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoYmFzZSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBJZGVu
dGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZh
bHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkpOwotfQotCi1KX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7Ci1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3RXaXRoUmV0dXJu
QWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwq
IHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
Ci0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7
Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShiYXNlKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7Ci0KLSAgICBpZiAo
YWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBl
KSkKLSAgICAgICAgYnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90
LCBzdHViSW5mbyk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0K
LUpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1
YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGlj
X2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0KLSAgICBKU1ZhbHVlIGJh
c2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChi
YXNlVmFsdWUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVu
dCwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNz
VHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpIHsKLSAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4p
Ci0gICAgICAgICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90
LCBzdHViSW5mbyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0
cnVlOwotICAgIH0KLQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQot
Sl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKG9wZXJhdGlvbkluT3B0
aW1pemUpOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXpl
V2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0lt
cGwqIGtleSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwotICAgIAotICAgIGlmICghYmFzZS0+aXNPYmplY3QoKSkgewotICAgICAgICB2bS0+dGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlSW52YWxpZFBhcmFtZXRlckVycm9yKGV4ZWMsICJpbiIsIGJh
c2UpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAg
ICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJs
b2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0g
ICAgSWRlbnRpZmllciBpZGVudCh2bSwga2V5KTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNl
KTsKLSAgICBib29sIHJlc3VsdCA9IGFzT2JqZWN0KGJhc2UpLT5nZXRQcm9wZXJ0eVNsb3QoZXhl
YywgaWRlbnQsIHNsb3QpOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0g
c3R1YkluZm8uYWNjZXNzVHlwZSk7Ci0gICAgCi0gICAgaWYgKHN0dWJJbmZvLnNlZW4pCi0gICAg
ICAgIHJlcGF0Y2hJbihleGVjLCBiYXNlLCBpZGVudCwgcmVzdWx0LCBzbG90LCBzdHViSW5mbyk7
Ci0gICAgZWxzZQotICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKLSAgICAKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZXN1bHQpKTsKLX0KLQotRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25JbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFz
ZSwgU3RyaW5nSW1wbCoga2V5KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgaWYgKCFiYXNlLT5p
c09iamVjdCgpKSB7Ci0gICAgICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVJbnZh
bGlkUGFyYW1ldGVyRXJyb3IoZXhlYywgImluIiwgYmFzZSkpOwotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIH0KLQotICAgIElkZW50aWZpZXIgaWRl
bnQodm0sIGtleSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNPYmpl
Y3QoYmFzZSktPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkpOwotfQotCi1FbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogYmFzZSwgRW5jb2RlZEpTVmFsdWUga2V5KQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluKGV4ZWMs
IEpTVmFsdWU6OmRlY29kZShrZXkpLCBiYXNlKSkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIGJhc2UsIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGZ1bmN0aW9uLCBTdHJpbmdJbXBs
KiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwg
dWlkKTsKLSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZ1bmN0aW9uKGV4ZWMsIGFz
T2JqZWN0KGJhc2UpLCBpZGVudCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2Vs
bCogZ2V0dGVyU2V0dGVyKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjYWxsR2V0dGVyKGV4ZWMsIGJhc2UsIGdldHRlclNldHRlcikpOwotfQotCi12b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC03NTksNyArMzYxLDcgQEAgdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaQogICAgIG9wZXJhdGlvblB1dEJ5VmFsSW50
ZXJuYWw8dHJ1ZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZh
bHVlKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0
eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzY3
LDcgKzM2OSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblMKICAg
ICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5j
b2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0
YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNzc1LDcg
KzM3Nyw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBv
cGVyYXRpb25QdXRCeVZhbEludGVybmFsPHRydWU+KGV4ZWMsIEpTVmFsdWU6OmVuY29kZShjZWxs
KSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxOb25T
dHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwpAQCAtNzgzLDcgKzM4NSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bENlbGwKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBKU1ZhbHVl
OjplbmNvZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5
LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CkBAIC03OTgsNyArNDAwLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsQmV5bwogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBp
bmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFy
cmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CkBAIC04MTMsNyArNDE1LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsQmV5bwogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNT
dHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIGRv
dWJsZSB2YWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJl
eW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBp
bnQzMl90IGluZGV4LCBkb3VibGUgdmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04MzAsNyAr
NDMyLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VgogICAgICAg
ICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIGpzVmFsdWUsIHNs
b3QpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlv
bmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwg
aW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKICAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKQEAgLTg0Nyw3ICs0NDksNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0RG91YmxlQnlWCiAgICAgICAgIGFycmF5LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IGluZGV4KSwganNWYWx1ZSwgc2xvdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0FycmF5KiBhcnJheSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU0FycmF5KiBhcnJheSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTg1Niw3ICs0NTgs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhcnJheS0+bGVuZ3RoKCkpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRl
KiBleGVjLCBkb3VibGUgdmFsdWUsIEpTQXJyYXkqIGFycmF5KQorRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiBleGVjLCBkb3Vi
bGUgdmFsdWUsIEpTQXJyYXkqIGFycmF5KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtODY1LDcgKzQ2
Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXIKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGFycmF5LT5sZW5ndGgoKSkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSogZXhl
YywgSlNBcnJheSogYXJyYXkpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkFycmF5UG9wKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CkBAIC04NzMsNyArNDc1LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25BcgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7CiB9
CiAgICAgICAgIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBv
cEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC04
ODMsNyArNDg1LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Bcgog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7CiB9CiAgICAgICAg
IAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50KQorRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtODk2LDcg
KzQ5OCw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzUmVnRXhwT2JqZWN0KGJhc2UpLT5leGVjKGV4ZWMsIGlu
cHV0KSk7CiB9CiAgICAgICAgIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhw
VGVzdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKK3Np
emVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIGJhc2UsIEpTQ2VsbCogYXJndW1lbnQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC05MTEs
MjM3ICs1MTMsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0CiAg
ICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0KGJhc2UpLT50ZXN0KGV4ZWMsIGlucHV0KTsKIH0KICAg
ICAgICAgCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJp
bmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVu
dCh2bSwgdWlkKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxv
Y2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJh
c2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19
Ci0KLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmlu
Z0ltcGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50
KHZtLCB1aWQpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlLCBleGVjLT5jb2RlQmxv
Y2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgYmFzZS0+bWV0aG9kVGFibGUoKS0+cHV0KGJh
c2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Ci19
Ci0KLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0
cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlk
ZW50KHZtLCB1aWQpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVC
bG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICBBU1NFUlQoYmFzZS0+aXNPYmplY3QoKSk7
Ci0gICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwotfQotCi12b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0g
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250
ZXh0KCkpOwotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNl
KS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgc2xvdCk7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJp
bmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1
cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsK
LSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJ
ZENvbnRleHQoKSk7Ci0gICAgCi0gICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUs
IHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYg
KHN0dWJJbmZvLnNlZW4pCi0gICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwg
aWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc3R1
YkluZm8uc2VlbiA9IHRydWU7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKTsKLXZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRk
cmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxs
KiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykK
LXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwot
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRT
dHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBKU1ZhbHVlIGJhc2VW
YWx1ZShiYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJs
b2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywg
aWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGlmIChzdHViSW5mby5zZWVuKQotICAgICAgICByZXBhdGNoUHV0QnlJRChleGVj
LCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGlyZWN0KTsKLSAgICBlbHNl
Ci0gICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRp
bWl6ZSk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9w
dGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlkLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAgSWRlbnRpZmll
ciBpZGVudCh2bSwgdWlkKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVj
LT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Ci0gICAgQWNjZXNzVHlw
ZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlw
ZSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5
SWRDb250ZXh0KCkpOwotICAgIAotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBh
c09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7
Ci0gICAgCi0gICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoc3R1Yklu
Zm8uc2VlbikKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3Qs
IHN0dWJJbmZvLCBEaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRy
dWU7Ci19Ci0KLVZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKLXZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJuQWRkcmVz
cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKLXsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOwotICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHVi
SW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNf
Y2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAot
ICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNlKS0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vz
c1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoc3R1YkluZm8uc2VlbikKLSAgICAgICAgcmVw
YXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwot
ICAgIGVsc2UKLSAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Ci19Ci0KLVZfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1
aWxkTGlzdCk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxk
TGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIg
aWRlbnQodm0sIHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+
Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUp
OwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwot
ICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJhc2UpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRy
dWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICAKLSAgICBiYXNl
VmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgaWYgKGFjY2Vz
c1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1
ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOwotfQotCi1WX0ZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RC
dWlsZExpc3QpOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RC
dWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlm
aWVyIGlkZW50KHZtLCB1aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4
ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NU
eXBlKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIAotICAg
IGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAo
YWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBl
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFz
ZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7Ci19Ci0KLVZfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdEJ1aWxkTGlzdCk7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAot
ICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwot
ICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLmFjY2Vzc1R5cGUpOwotICAgIAotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5j
b2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgCi0gICAgQVNTRVJUKGJhc2UtPmlz
T2JqZWN0KCkpOwotICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRl
bnQsIHZhbHVlLCBzbG90KTsKLSAgICAKLSAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZv
LCBEaXJlY3QpOwotfQotCi1WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
SkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QpOwotdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0
dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
SlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1
aWQpOwotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygp
LT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUg
PSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKLQotICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkp
OwotICAgIAotICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKLSAgICBhc09iamVjdChiYXNl
KS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAg
aWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNz
VHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBidWlsZFB1dEJ5SWRMaXN0KGV4ZWMs
IGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKLX0KLQotc2l6ZV90IERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOwpAQCAtMTE0OSw3ICs1MjEsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25D
b21wYXJlTGVzCiAgICAgcmV0dXJuIGpzTGVzczx0cnVlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiB9CiAKLXNpemVfdCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CkBAIC0xMTU3LDcgKzUyOSw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNvbXBhcmVMZXMKICAgICByZXR1cm4ganNMZXNzRXE8dHJ1ZT4oZXhlYywgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQog
Ci1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDIpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTY1LDcgKzUzNyw3IEBAIHNpemVfdCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmUKICAgICByZXR1cm4ganNMZXNzPGZhbHNlPihl
eGVjLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMiksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AxKSk7CiB9CiAKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVy
RXEoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdy
ZWF0ZXJFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTczLDcgKzU0NSw3
IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmUKICAgICByZXR1cm4g
anNMZXNzRXE8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDEpKTsKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNvbXBhcmVFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMTgyLDkgKzU1
NCw5IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcSgKIH0KIAogI2lm
IFVTRShKU1ZBTFVFNjQpCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdo
dCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0Vx
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBsZWZ0LCBKU0NlbGwqIHJpZ2h0KQogI2Vsc2UKLXNp
emVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlND
ZWxsKiByaWdodCkKICNlbmRpZgogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtMTE5
OCw3ICs1NzAsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyCiAj
ZW5kaWYKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
Q2VsbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDIpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXFDZWxsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTEyMTIsNyAr
NTg0LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgogICAgIHJl
dHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKGV4ZWMsIG9wMSwgb3AyKTsK
IH0KIAotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xMjIzLDE5MyArNTk1LDcgQEAgc2l6
ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cgogICAgIHJldHVybiBKU1ZhbHVl
OjpzdHJpY3RFcXVhbChleGVjLCBzcmMxLCBzcmMyKTsKIH0KIAotc3RhdGljIHZvaWQqIGhhbmRs
ZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVl
LT5jYWxsZXJGcmFtZSgpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotCi0gICAgZXhlY0Nh
bGxlZS0+c2V0U2NvcGUoZXhlYy0+c2NvcGUoKSk7Ci0gICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJs
b2NrKDApOwotCi0gICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgQ2FsbERh
dGEgY2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY2Fs
bGVlLCBjYWxsRGF0YSk7Ci0gICAgCi0gICAgICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlw
ZUpTKTsKLSAgICAKLSAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCkgewotICAg
ICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7Ci0g
ICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAg
ICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0
YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwotICAgICAgICAgICAgaWYgKHZtLT5leGNl
cHRpb24oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKLQotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIEFTU0VSVChjYWxsVHlw
ZSA9PSBDYWxsVHlwZU5vbmUpOwotICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxlZSkpOwotICAgICAgICByZXR1
cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoa2luZCA9
PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAKLSAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERh
dGE7Ci0gICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YShj
YWxsZWUsIGNvbnN0cnVjdERhdGEpOwotICAgIAotICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlICE9
IENvbnN0cnVjdFR5cGVKUyk7Ci0gICAgCi0gICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3Ry
dWN0VHlwZUhvc3QpIHsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlY0NhbGxlZSk7Ci0gICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxs
ZWUpKTsKLSAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
Y29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwotICAgICAgICBpZiAo
dm0tPmV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7Ci0KLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9
PSBDb25zdHJ1Y3RUeXBlTm9uZSk7Ci0gICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpKTsKLSAgICByZXR1cm4g
dm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLX0KLQotaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhl
Y1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAg
RXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLSAgICAKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVB
c1ZhbHVlKCk7Ci0gICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rp
b24oY2FsbGVlQXNWYWx1ZSk7Ci0gICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKLSAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxs
ZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKLQotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIGV4ZWNDYWxsZWUt
PnNldFNjb3BlKGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKSk7Ci0gICAgRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKLQotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjb2RlUHRyOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKLSAgICBpZiAo
ZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFi
bGUtPmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgIEpTT2Jq
ZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVj
Q2FsbGVlLCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAg
ICAgICAgICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVTdGFja092ZXJmbG93RXJy
b3IoZXhlYykpOwotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZt
LT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGNvZGVCbG9jayA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpOwotICAgICAgICBpZiAoZXhl
Y0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVf
dD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxl
LT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwotICAgIH0KLSAg
ICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxs
TGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7Ci0gICAgaWYgKCFjYWxsTGlua0luZm8u
c2Vlbk9uY2UoKSkKLSAgICAgICAgY2FsbExpbmtJbmZvLnNldFNlZW4oKTsKLSAgICBlbHNlCi0g
ICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxl
ZSwgY29kZVB0ciwga2luZCk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci19Ci0KLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQotewotICAgIHJldHVybiBsaW5r
Rm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKLX0KLQotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKLXsKLSAgICByZXR1
cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQotaW5saW5lIGNo
YXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQotewot
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7Ci0KLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBleGVjQ2FsbGVlLT5jYWxsZWVB
c1ZhbHVlKCk7Ci0gICAgY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxl
ZUFzVmFsdWUpOwotICAgIGlmIChVTkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKQotICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaGFuZGxlSG9zdENhbGwoZXhlY0Nh
bGxlZSwgY2FsbGVlQXNWYWx1ZSwga2luZCkpOwotICAgIAotICAgIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgZXhl
Y0NhbGxlZS0+c2V0U2NvcGUoZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCkpOwotICAgIEV4ZWN1
dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKLSAgICBpZiAo
VU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7Ci0gICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBmdW5jdGlv
bi0+c2NvcGUoKSwga2luZCk7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjQ2FsbGVlLCBlcnJvcik7Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGV4
ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKLX0KLQotaW5saW5lIGNoYXIqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBl
eGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgSlNDZWxsKiBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQ7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRoRnVu
Y3Rpb24oZXhlY0NhbGxlZSwga2luZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsKLX0K
LQotc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUsIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwsIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvKQotewotICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5j
dGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBKU0Z1bmN0aW9uKiBvbGRDYWxsZWUg
PSBjYWxsTGlua0luZm8uY2FsbGVlLmdldCgpOwotICAgIAotICAgIGlmICghb2xkQ2FsbGVlCi0g
ICAgICAgIHx8IG9sZENhbGxlZS0+c3RydWN0dXJlKCkgIT0gY2FsbGVlLT5zdHJ1Y3R1cmUoKQot
ICAgICAgICB8fCBvbGRDYWxsZWUtPmV4ZWN1dGFibGUoKSAhPSBjYWxsZWUtPmV4ZWN1dGFibGUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEFTU0VSVChjYWxsZWUtPmV4ZWN1
dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGNvZGVQdHIgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwo
KS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAgICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKLSAg
ICBpZiAoY2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIGNv
ZGVCbG9jayA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihjYWxsZWUtPmV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvckNhbGwo
KTsKLSAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkg
PCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgbGlua0Nsb3N1cmVDYWxsKAot
ICAgICAgICBleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVCbG9jaywKLSAgICAgICAgY2Fs
bGVlLT5zdHJ1Y3R1cmUoKSwgY2FsbGVlLT5leGVjdXRhYmxlKCksIGNvZGVQdHIpOwotICAgIAot
ICAgIHJldHVybiB0cnVlOwotfQotCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtD
bG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCi17Ci0gICAgSlNDZWxsKiBjYWxsZWVB
c0Z1bmN0aW9uQ2VsbDsKLSAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9u
KGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLT5jb2Rl
QmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwotCi0gICAg
aWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzRnVu
Y3Rpb25DZWxsLCBjYWxsTGlua0luZm8pKQotICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVl
LCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSog
ZXhlY0NhbGxlZSkKLXsgICAgCi0gICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29k
ZUZvckNhbGwpOwotfQotCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25z
dHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQotewotICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4
ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgdmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CkBAIC0xNDE3LDcgKzYwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uVG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZSh2YWx1
ZSkudG9QcmltaXRpdmUoZXhlYykpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0FycmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgdm9p
ZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCB2b2lkKiBi
dWZmZXIsIHNpemVfdCBzaXplKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTQyNSw3ICs2MTEsNyBA
QCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5KEV4CiAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxjaGFyKj4oY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgYXJy
YXlTdHJ1Y3R1cmUsIHN0YXRpY19jYXN0PEpTVmFsdWUqPihidWZmZXIpLCBzaXplKSk7CiB9CiAK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0VtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0
dXJlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTQzMyw3ICs2MTksNyBAQCBjaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFy
Kj4oSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJyYXlTdHJ1Y3R1cmUpKTsKIH0KIAotY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgaW50MzJfdCBzaXplKQorY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBh
cnJheVN0cnVjdHVyZSwgaW50MzJfdCBzaXplKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTQ0NCwx
MjIgKzYzMCwxMjIgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdAog
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KEpTQXJyYXk6OmNyZWF0ZSgqdm0sIGFycmF5
U3RydWN0dXJlLCBzaXplKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBz
aXplX3Qgc3RhcnQsIHNpemVfdCBzaXplKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUs
IHNpemVfdCBzdGFydCwgc2l6ZV90IHNpemUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxjaGFyKj4oY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywg
YXJyYXlTdHJ1Y3R1cmUsIGV4ZWMtPmNvZGVCbG9jaygpLT5jb25zdGFudEJ1ZmZlcihzdGFydCks
IHNpemUpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlX
aXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aFNp
emUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBs
ZW5ndGgpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0ludDhBcnJheT4o
ZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0ludDhBcnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3SW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAg
ICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU0ludDhBcnJheT4oZXhlYywg
c3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3SW50MTZBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0
aFNpemU8SlNJbnQxNkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudCgKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudCgK
ICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1l
bnQ8SlNJbnQxNkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhTaXplKAorY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aFNpemUoCiAgICAgRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAgICAg
cmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0ludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVy
ZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFy
cmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQz
MkFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gbmV3
VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU0ludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwg
ZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50
OEFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJy
YXlXaXRoU2l6ZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBp
bnQzMl90IGxlbmd0aCkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTVWlu
dDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTVWludDhB
cnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1jaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aFNpemUoCiAgICAgRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCiB7CiAg
ICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU1VpbnQ4Q2xhbXBlZEFycmF5PihleGVj
LCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3VWludDhDbGFtcGVkQXJyYXlXaXRoT25lQXJndW1lbnQoCitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50KAogICAgIEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKICAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU1VpbnQ4
Q2xhbXBlZEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoU2l6ZSgKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoU2l6ZSgKICAgICBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAgICBy
ZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTVWludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVy
ZSwgbGVuZ3RoKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZB
cnJheVdpdGhPbmVBcmd1bWVudCgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWlu
dDE2QXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJldHVybiBu
ZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTVWludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVy
ZSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdV
aW50MzJBcnJheVdpdGhTaXplKAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50
MzJBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8
SlNVaW50MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogfQogCi1jaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhPbmVBcmd1bWVudCgKICAg
ICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8
SlNVaW50MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwogfQogCi1jaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdpdGhTaXplKAorY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoU2l6ZSgKICAgICBFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKIHsKICAg
ICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTRmxvYXQzMkFycmF5PihleGVjLCBzdHJ1
Y3R1cmUsIGxlbmd0aCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3Rmxv
YXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdGbG9hdDMyQXJyYXlXaXRoT25lQXJndW1lbnQoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIHJl
dHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTRmxvYXQzMkFycmF5PihleGVjLCBz
dHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3RmxvYXQ2NEFycmF5V2l0aFNpemUoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0Zsb2F0NjRBcnJheVdpdGhTaXplKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQogewogICAgIHJldHVybiBuZXdUeXBlZEFycmF5
V2l0aFNpemU8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKIH0KIAot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoT25lQXJndW1l
bnQoCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhPbmVB
cmd1bWVudCgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRo
T25lQXJndW1lbnQ8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVl
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAo
RXhlY1N0YXRlKiBleGVjLCB2b2lkKiByZWdleHBQdHIpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIHJlZ2V4cFB0
cikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE1NzIsNyArNzU4LDcgQEAgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoUmVn
RXhwT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdleHAp
KTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24o
RXhlY1N0YXRlKiBleGVjKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFj
dGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTU4MSw3ICs3
NjcsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0CiAgICAgcmV0
dXJuIGFjdGl2YXRpb247CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVh
dGVBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBA
IC0xNTkyLDcgKzc3OCw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVB
cmcKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50cygKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25DcmVhdGVJbmxpbmVkQXJndW1lbnRzKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAg
LTE2MDQsNyArNzkwLDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUlu
bAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25U
ZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBhcmd1bWVudHNDZWxsLCBK
U0NlbGwqIGFjdGl2YXRpb25DZWxsKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJP
ZmZBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGFyZ3VtZW50c0NlbGwsIEpTQ2Vs
bCogYWN0aXZhdGlvbkNlbGwpCiB7CiAgICAgQVNTRVJUKGV4ZWMtPmNvZGVCbG9jaygpLT51c2Vz
QXJndW1lbnRzKCkpOwogICAgIGlmIChhY3RpdmF0aW9uQ2VsbCkgewpAQCAtMTYxNCwxNCArODAw
LDE0IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQXJndW0KICAgICBqc0Nh
c3Q8QXJndW1lbnRzKj4oYXJndW1lbnRzQ2VsbCktPnRlYXJPZmYoZXhlYyk7CiB9CiAKLXZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cygKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cygKICAgICBFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogYXJndW1lbnRzQ2VsbCwgSlNDZWxsKiBhY3RpdmF0aW9uQ2VsbCwg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChh
Y3RpdmF0aW9uQ2VsbCwgIWFjdGl2YXRpb25DZWxsKTsgLy8gQ3VycmVudGx5LCB3ZSBkb24ndCBp
bmxpbmUgZnVuY3Rpb25zIHdpdGggYWN0aXZhdGlvbnMuCiAgICAganNDYXN0PEFyZ3VtZW50cyo+
KGFyZ3VtZW50c0NlbGwpLT50ZWFyT2ZmKGV4ZWMsIGlubGluZUNhbGxGcmFtZSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoKEV4
ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlcikKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoKEV4ZWNTdGF0ZSogZXhl
YywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE2MzMs
NyArODE5LDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50
QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGFyZ3VtZW50c1JlZ2lzdGVyLCBpbnQzMl90
IGluZGV4KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVu
dEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlciwgaW50MzJf
dCBpbmRleCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE2NDgsNyArODM0LDcgQEAgRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYXJndW1lbnRzVmFsdWUuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0SW5saW5lZEFyZ3VtZW50QnlWYWwoCitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFsKAog
ICAgIEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmd1bWVudHNSZWdpc3RlciwgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIGludDMyX3QgaW5kZXgpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKQEAgLTE2NjYsNyArODUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJndW1lbnRzVmFs
dWUuZ2V0KGV4ZWMsIGluZGV4KSk7CiB9CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25OZXdGdW5jdGlvbk5vQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhl
Y3V0YWJsZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbk5vQ2hl
Y2soRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKIHsKICAgICBB
U1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxlLT5pbmhlcml0cyhGdW5jdGlvbkV4ZWN1dGFibGU6Omlu
Zm8oKSkpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0xNjc0LDcgKzg2MCw3IEBAIEpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGkKICAgICByZXR1cm4gSlNGdW5j
dGlvbjo6Y3JlYXRlKGV4ZWMsIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0
aW9uRXhlY3V0YWJsZSksIGV4ZWMtPnNjb3BlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBm
dW5jdGlvbkV4ZWN1dGFibGUpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUp
CiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9uRXhlY3V0YWJsZS0+aW5oZXJpdHMoRnVuY3Rpb25FeGVj
dXRhYmxlOjppbmZvKCkpKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtMTY4Miw3ICs4
NjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5lCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgc3RhdGljX2Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwgZXhlYy0+c2NvcGUoKSkp
OwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNz
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGVBc0NlbGwpCitK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25FeHByZXNzaW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGVBc0NlbGwpCiB7CiAgICAgQVNT
RVJUKGZ1bmN0aW9uRXhlY3V0YWJsZUFzQ2VsbC0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRhYmxl
OjppbmZvKCkpKTsKIApAQCAtMTY5NCwzMyArODgwLDIyIEBAIEpTQ2VsbCogREZHX09QRVJBVElP
TiBvcGVyYXRpb25OZXdGdW5jdGkKICAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMs
IGZ1bmN0aW9uRXhlY3V0YWJsZSwgZXhlYy0+c2NvcGUoKSk7CiB9CiAKLXNpemVfdCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
dmFsdWUpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdChFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIHJldHVybiBqc0lzT2JqZWN0VHlw
ZShleGVjLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKIH0KIAotc2l6ZV90IERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbklzRnVuY3Rpb24oRW5jb2RlZEpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgcmV0dXJuIGpzSXNGdW5jdGlvblR5cGUoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAK
LUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2YoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIHZhbHVlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZihFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogdmFsdWUpCiB7CiAgICAgcmV0dXJuIGpzVHlwZVN0cmluZ0Zv
clZhbHVlKGV4ZWMsIEpTVmFsdWUodmFsdWUpKS5hc0NlbGwoKTsKIH0KIAotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotCi0gICAg
QVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IGJhc2UtPnN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBBU1NFUlQoIXZtLmhlYXAuc3RvcmFnZUFsbG9j
YXRvcigpLmZhc3RQYXRoU2hvdWxkU3VjY2VlZChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICBiYXNlLT5zZXRTdHJ1Y3R1cmVBbmRSZWFsbG9j
YXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOwotICAgIGJhc2UtPnB1dERpcmVj
dCh2bSwgb2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKLX0KLQotY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNp
dHkoRXhlY1N0YXRlKiBleGVjKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOwpAQCAtMTcyOSw3ICs5MDQsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFsbG9jYXRlUHJvCiAgICAgICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZCh2bSwgMCwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5LCBmYWxzZSwgMCkpOwogfQogCi1j
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNT
dGF0ZSogZXhlYywgc2l6ZV90IG5ld1NpemUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IG5ld1NpemUp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNzM4LDcgKzkxMyw3IEBAIGNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQWxsb2NhdGVQcm8KICAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRp
YWxpemVkKHZtLCAwLCAwLCBuZXdTaXplLCBmYWxzZSwgMCkpOwogfQogCi1jaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3Bl
cnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
b2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTc0OSw3ICs5MjQsNyBAQCBjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVh
bGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQorY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CkBAIC0xNzU5LDcgKzkzNCw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxv
Y2F0ZUIKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVJbnQzMihFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xNzcw
LDcgKzk0NSw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIKICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPmVuc3VyZUlu
dDMyKHZtKS5kYXRhKCkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3Vy
ZURvdWJsZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uRW5zdXJlRG91YmxlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOwpAQCAtMTc4MSw3ICs5NTYsNyBAQCBjaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkVuc3VyZURvdWJsCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGFzT2JqZWN0KGNlbGwpLT5lbnN1cmVEb3VibGUodm0pLmRhdGEoKSk7CiB9CiAKLWNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91
cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE3
OTIsNyArOTY3LDcgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aQog
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihhc09iamVjdChjZWxsKS0+ZW5zdXJl
Q29udGlndW91cyh2bSkuZGF0YSgpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25SYWdlRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmFnZUVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC0xODAzLDcgKzk3OCw3
IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmFnZUVuc3VyZUMKICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYXNPYmplY3QoY2VsbCktPnJhZ2VFbnN1cmVDb250aWd1
b3VzKHZtKS5kYXRhKCkpOwogfQogCi1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3Vy
ZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTgxNCw3ICs5ODksNyBAQCBjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGFzT2JqZWN0KGNlbGwpLT5lbnN1cmVBcnJheVN0b3JhZ2Uodm0pKTsKIH0K
IAotU3RyaW5nSW1wbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlUm9wZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcpCitTdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKQEAgLTE4MjIsNyArOTk3LDcgQEAgU3RyaW5nSW1wbCogREZHX09QRVJB
VElPTiBvcGVyYXRpb25SZXNvbAogICAgIHJldHVybiBzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwo
KTsKIH0KIAotSlNTdHJpbmcqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBjaGFyYWN0ZXIpCitKU1N0cmluZyogSklU
X09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBpbnQzMl90IGNoYXJhY3RlcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTE4MzAsNyArMTAwNSw3
IEBAIEpTU3RyaW5nKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUMKICAgICByZXR1cm4g
anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgc3RhdGljX2Nhc3Q8VUNoYXI+KGNoYXJhY3Rl
cikpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNTdGF0
ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CkBAIC0xODM4LDcgKzEwMTMsNyBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3U3RyaW5nCiAgICAgcmV0dXJuIFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIHN0
cnVjdHVyZSwgc3RyaW5nKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRv
U3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQorSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBjZWxsKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg0Niw3ICsxMDIxLDcgQEAgSlNDZWxsKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nTwogICAgIHJldHVybiBKU1ZhbHVlKGNlbGwp
LnRvU3RyaW5nKGV4ZWMpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9T
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK0pTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg1NCw3ICsxMDI5LDcgQEAgSlNDZWxs
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKAogICAgIHJldHVybiBKU1ZhbHVlOjpk
ZWNvZGUodmFsdWUpLnRvU3RyaW5nKGV4ZWMpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGxlZnQsIEpTU3Ry
aW5nKiByaWdodCkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTIoRXhl
Y1N0YXRlKiBleGVjLCBKU1N0cmluZyogbGVmdCwgSlNTdHJpbmcqIHJpZ2h0KQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOwpAQCAtMTg2Miw3ICsxMDM3LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk1ha2VSb3BlMgogICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgbGVmdCwg
cmlnaHQpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzKEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGEsIEpTU3RyaW5nKiBiLCBKU1N0cmluZyogYykKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMoRXhlY1N0YXRlKiBleGVjLCBK
U1N0cmluZyogYSwgSlNTdHJpbmcqIGIsIEpTU3RyaW5nKiBjKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpA
QCAtMTg3MCw3ICsxMDQ1LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VS
b3BlMwogICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgYSwgYiwgYyk7CiB9CiAK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJs
ZSgKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRv
dWJsZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
c2l6ZV90IHRhYmxlSW5kZXgpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKQEAgLTE4ODQsNyArMTA1OSw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uRmluZFN3aXRjaEkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KHRhYmxlLmN0
aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiB9CiAKLWNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IHRhYmxlSW5kZXgs
IEpTU3RyaW5nKiBzdHJpbmcpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyogc3RyaW5n
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtMTg5MiwzMiArMTA2NywxOSBAQCBjaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIq
PihleGVjLT5jb2RlQmxvY2soKS0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0
aUZvclZhbHVlKHN0cmluZy0+dmFsdWUoZXhlYykuaW1wbCgpKS5leGVjdXRhYmxlQWRkcmVzcygp
KTsKIH0KIAotZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90
IGEsIGludDMyX3QgYikKK2RvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMo
aW50MzJfdCBhLCBpbnQzMl90IGIpCiB7CiAgICAgcmV0dXJuIGZtb2QoYSwgYik7CiB9CiAKLUpT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRl
KiBleGVjLCBpbnQzMl90IG9wMSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJp
bmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IG9wMSkKIHsKICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKICAgICByZXR1cm4gSlNDOjpzdHJpbmdGcm9tQ2hhckNvZGUoZXhlYywgb3AxKTsKIH0K
IAotREZHSGFuZGxlckVuY29kZWQgREZHX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVy
KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgIEpTVmFsdWUgZXhjZXB0
aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUp
OwotICAgIAotICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVyaWNVbndpbmQodm0s
IGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICBBU1NFUlQoaGFuZGxlci5jYXRjaFJvdXRpbmUp
OwotICAgIHJldHVybiBkZmdIYW5kbGVyRW5jb2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxl
ci5jYXRjaFJvdXRpbmUpOwotfQotCi1zaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNW
YWx1ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVf
dCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTkyNiw3ICsxMDg4
LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUbwogICAgIHJldHVy
biBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvVUludDMyKGV4ZWMpOwogfQogCi1zaXplX3QgREZH
X09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIGRmZ0NvbnZlcnRK
U1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
KQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtMTkzNCw3ICsxMDk2LDcgQEAgc2l6ZV90IERGR19PUEVS
QVRJT04gZGZnQ29udmVydEpTVmFsdWVUbwogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wKS50b0Jvb2xlYW4oZXhlYyk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09w
ZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogZGVi
dWdJbmZvUmF3LCB2b2lkKiBzY3JhdGNoKQordm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVnT3BlcmF0
aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBkZWJ1Z0lu
Zm9SYXcsIHZvaWQqIHNjcmF0Y2gpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CkBAIC0xOTcyLDcgKzExMzQs
NyBAQCB2b2lkIERGR19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwCiAgICAgZGF0YUxv
ZygiXG4iKTsKIH0KIAotZXh0ZXJuICJDIiB2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlb3B0
aW1pemF0aW9uTm93KENvZGVCbG9jayogY29kZUJsb2NrKQorZXh0ZXJuICJDIiB2b2lkIEpJVF9P
UEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayogY29kZUJsb2NrKQog
ewogICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUg
aW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKICAgICAvLyByZWFsbHkgYmUgcHJv
Zml0YWJsZS4KQEAgLTIwMTYsNyArMTE3OCw3IEBAIGV4dGVybiAiQyIgdm9pZCBERkdfT1BFUkFU
SU9OIHRyaWdnZXJSZW8KIH0KIAogI2lmIEVOQUJMRShGVExfSklUKQotdm9pZCBERkdfT1BFUkFU
SU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKiBleGVjKQordm9pZCBKSVRfT1BFUkFUSU9O
IHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAt
MjA3OCw3ICsxMjQwLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhl
YwogICAgICAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNvZGVC
bG9jayksIHZtLT5lbnN1cmVXb3JrbGlzdCgpKTsKIH0KIAotY2hhciogREZHX09QRVJBVElPTiB0
cmlnZ2VyT1NSRW50cnlOb3coCitjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5v
dygKICAgICBFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBz
dHJlYW1JbmRleCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTIxOTcsNyArMTM1
OSw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAogCiAvLyBGSVhN
RTogTWFrZSBjYWxscyB3b3JrIHdlbGwuIEN1cnJlbnRseSB0aGV5J3JlIGEgcHVyZSByZWdyZXNz
aW9uLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQot
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GVExDYWxsKEV4ZWNTdGF0ZSog
ZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ2FsbChFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgRXhlY1N0YXRlKiBjYWxsZXJFeGVjID0gZXhlYy0+Y2FsbGVy
RnJhbWUoKTsKICAgICAKQEAgLTIyMTcsNyArMTM3OSw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uRlQKIAogLy8gRklYTUU6IE1ha2UgY2FsbHMgd29yayB3ZWxsLiBD
dXJyZW50bHkgdGhleSdyZSBhIHB1cmUgcmVncmVzc2lvbi4KIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uRlRMQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRlRMQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBFeGVjU3RhdGUqIGNhbGxlckV4ZWMgPSBleGVjLT5jYWxsZXJGcmFtZSgpOwogICAgIApA
QCAtMjI0MSw4NiArMTQwMyw0IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uRlQKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCi1uYW1lc3BhY2UgSlNDIHsKLQot
I2lmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFg4Nl82NCkKLWFzbSAoCi0iLmdsb2JsICIgU1lNQk9M
X1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1ISURFX1NZTUJPTChnZXRIb3N0
Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1TWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFs
dWUpICI6IiAiXG4iCi0gICAgIm1vdiA0MCglcjEzKSwgJXIxM1xuIgotICAgICJtb3YgJXIxMywg
JXJkaVxuIgotICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1
ZVdpdGhFeGVjU3RhdGUpICJcbiIKLSk7Ci0jZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShYODYp
Ci1hc20gKAotIi50ZXh0IiAiXG4iIFwKLSIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpICJcbiIKLUhJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUp
ICJcbiIKLVNZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKLSAg
ICAibW92IDQwKCVlZGkpLCAlZWRpXG4iCi0gICAgIm1vdiAlZWRpLCA0KCVlc3ApXG4iCi0gICAg
ImptcCAiIExPQ0FMX1JFRkVSRU5DRShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0
ZSkgIlxuIgotKTsKLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9USFVNQjIpCi1hc20g
KAotIi50ZXh0IiAiXG4iCi0iLmFsaWduIDIiICJcbiIKLSIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5H
KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKLUhJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0
dXJuVmFsdWUpICJcbiIKLSIudGh1bWIiICJcbiIKLSIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNf
UEFSQU0oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgotU1lNQk9MX1NUUklORyhnZXRIb3N0
Q2FsbFJldHVyblZhbHVlKSAiOiIgIlxuIgotICAgICJsZHIgcjUsIFtyNSwgIzQwXSIgIlxuIgot
ICAgICJtb3YgcjAsIHI1IiAiXG4iCi0gICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENh
bGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICJcbiIKLSk7Ci0jZWxpZiBDT01QSUxFUihHQ0Mp
ICYmIENQVShBUk1fVFJBRElUSU9OQUwpCi1hc20gKAotIi50ZXh0IiAiXG4iCi0iLmdsb2JsICIg
U1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1ISURFX1NZTUJPTChn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1JTkxJTkVfQVJNX0ZVTkNUSU9OKGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpCi1TWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6
IiAiXG4iCi0gICAgImxkciByNSwgW3I1LCAjNDBdIiAiXG4iCi0gICAgIm1vdiByMCwgcjUiICJc
biIKLSAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4
ZWNTdGF0ZSkgIlxuIgotKTsKLSNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKE1JUFMpCi1hc20o
Ci0iLnRleHQiICJcbiIKLSIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJu
VmFsdWUpICJcbiIKLUhJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKLVNZ
TUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKLSAgICBMT0FEX0ZV
TkNUSU9OX1RPX1Q5KGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKQotICAgICJs
dyAkczAsIDQwKCRzMCkiICJcbiIKLSAgICAibW92ZSAkYTAsICRzMCIgIlxuIgotICAgICJiICIg
TE9DQUxfUkVGRVJFTkNFKGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiXG4i
Ci0pOwotI2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoU0g0KQotYXNtKAotIi50ZXh0IiAiXG4i
Ci0iLmdsb2JsICIgU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1I
SURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCi1TWU1CT0xfU1RSSU5HKGdl
dEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6IiAiXG4iCi0gICAgImFkZCAjNDAsIHIxNCIgIlxuIgot
ICAgICJtb3YubCBAcjE0LCByMTQiICJcbiIKLSAgICAibW92IHIxNCwgcjQiICJcbiIKLSAgICAi
bW92LmwgMmYsICIgU0g0X1NDUkFUQ0hfUkVHSVNURVIgIlxuIgotICAgICJicmFmICIgU0g0X1ND
UkFUQ0hfUkVHSVNURVIgIlxuIgotICAgICJub3AiICJcbiIKLSAgICAiMTogLmJhbGlnbiA0IiAi
XG4iCi0gICAgIjI6IC5sb25nICIgTE9DQUxfUkVGRVJFTkNFKGdldEhvc3RDYWxsUmV0dXJuVmFs
dWVXaXRoRXhlY1N0YXRlKSAiLTFiXG4iCi0pOwotI2VuZGlmCi0KLWV4dGVybiAiQyIgRW5jb2Rl
ZEpTVmFsdWUgSE9TVF9DQUxMX1JFVFVSTl9WQUxVRV9PUFRJT04gZ2V0SG9zdENhbGxSZXR1cm5W
YWx1ZVdpdGhFeGVjU3RhdGUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmICghZXhlYykKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoZXhlYy0+dm0oKS5ob3N0Q2FsbFJldHVyblZhbHVlKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1NjQ4NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdKSVRDb21w
aWxlci5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzcsMjg4ICszOCwxMjkgQEAgbmFtZXNwYWNlIERGRyB7
CiAKIGV4dGVybiAiQyIgewogCi0jaWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NURENBTEwKLSNk
ZWZpbmUgREZHX09QRVJBVElPTiBDREVDTAotI2Vsc2UKLSNkZWZpbmUgREZHX09QRVJBVElPTgot
I2VuZGlmCi0KLS8vIFRoZXNlIHR5cGVkZWZzIHByb3ZpZGUgdHlwZWNoZWNraW5nIHdoZW4gZ2Vu
ZXJhdGluZyBjYWxscyBvdXQgdG8gaGVscGVyIHJvdXRpbmVzOwotLy8gdGhpcyBoZWxwcyBwcmV2
ZW50IGNhbGxpbmcgYSBoZWxwZXIgcm91dGluZSB3aXRoIHRoZSB3cm9uZyBhcmd1bWVudHMhCi0v
KgotICAgIEtleToKLSAgICBWOiB2b2lkCi0gICAgSjogSlNWYWx1ZQotICAgIFA6IHBvaW50ZXIg
KHZvaWQqKQotICAgIEM6IEpTQ2VsbCoKLSAgICBBOiBKU0FycmF5KgotICAgIFM6IHNpemVfdAot
ICAgIFo6IGludDMyX3QKLSAgICBEOiBkb3VibGUKLSAgICBJOiBTdHJpbmdJbXBsKgotKi8KLXR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0UpKEV4
ZWNTdGF0ZSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdP
cGVyYXRpb25fRUEpKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VBWikoRXhlY1N0YXRlKiwgSlNBcnJh
eSosIGludDMyX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9E
RkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBKU0NlbGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpf
REZHT3BlcmF0aW9uX0VDSSkoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwotdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNKKShF
eGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FREEpKEV4ZWNTdGF0ZSosIGRvdWJs
ZSwgSlNBcnJheSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9E
RkdPcGVyYXRpb25fRUkpKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqKTsKLXR5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpK
X0RGR09wZXJhdGlvbl9FSkEpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0FycmF5Kik7
Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
SkkpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKik7Ci10eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSnNzWikoRXhlY1N0YXRlKiwgSlNT
dHJpbmcqLCBpbnQzMl90KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAo
KkpfREZHT3BlcmF0aW9uX0VKUCkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHZvaWQqKTsK
LXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VQ
KShFeGVjU3RhdGUqLCB2b2lkKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gKCpKX0RGR09wZXJhdGlvbl9FUFApKEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lkKik7Ci10eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4
ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7
Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
WikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gKCpKX0RGR09wZXJhdGlvbl9FWkljZlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGlu
ZUNhbGxGcmFtZSosIGludDMyX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSl9ERkdPcGVyYXRpb25fRVpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsK
LXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRSkoRXhlY1N0
YXRlKik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0Va
KShFeGVjU3RhdGUqLCBpbnQzMl90KTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgq
Q19ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdHlwZWRlZiBKU0NlbGwq
IERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEpTQ2VsbCopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlv
bl9FSWNmKShFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqKTsKLXR5cGVkZWYgSlNDZWxsKiBE
RkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlKTsKLXR5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUpz
c1N0KShFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBKU0NlbGwq
IERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FSnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0
cmluZyosIEpTU3RyaW5nKik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZH
T3BlcmF0aW9uX0VKc3NKc3NKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBK
U1N0cmluZyopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlv
bl9FT1opKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCk7Ci10eXBlZGVmIEpTQ2VsbCog
REZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VTdCkoRXhlY1N0YXRlKiwgU3RydWN0dXJl
Kik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VaKShF
eGVjU3RhdGUqLCBpbnQzMl90KTsKLXR5cGVkZWYgZG91YmxlIERGR19PUEVSQVRJT04gKCpEX0RG
R09wZXJhdGlvbl9ERCkoZG91YmxlLCBkb3VibGUpOwotdHlwZWRlZiBkb3VibGUgREZHX09QRVJB
VElPTiAoKkRfREZHT3BlcmF0aW9uX1paKShpbnQzMl90LCBpbnQzMl90KTsKLXR5cGVkZWYgZG91
YmxlIERGR19PUEVSQVRJT04gKCpEX0RGR09wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUpOwotdHlwZWRlZiBpbnQzMl90IERGR19PUEVSQVRJT04gKCpaX0RGR09wZXJhdGlv
bl9EKShkb3VibGUpOwotdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0
aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Ci10eXBlZGVmIHNpemVfdCBE
RkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlKTsKLXR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9FSkop
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHNp
emVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUpOwot
dHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FKShFeGVjU3RhdGUq
KTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRU9aRCkoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBkb3VibGUpOwotdHlwZWRlZiB2b2lkIERGR19P
UEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FT1pKKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGlu
dDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9E
RkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotdHlwZWRlZiB2b2lkIERGR19P
UEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSW5s
aW5lQ2FsbEZyYW1lKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0
aW9uX0VDQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1l
Kik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDSkopKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBl
ZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgaW50MzJfdCk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3Bl
cmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Ci10eXBlZGVmIHZvaWQg
REZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VKQ0kpKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElP
TiAoKlZfREZHT3BlcmF0aW9uX0VKSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04g
KCpWX0RGR09wZXJhdGlvbl9FSlBQKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCos
IHZvaWQqKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRVBa
SikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYg
dm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fVykoV2F0Y2hwb2ludFNldCopOwot
dHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRl
Kik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FQykoRXhl
Y1N0YXRlKiwgSlNDZWxsKik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09w
ZXJhdGlvbl9FSlMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QpOwotdHlwZWRl
ZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0Kik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9F
T1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciogREZHX09Q
RVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPWikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQz
Ml90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VQUyko
RXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04g
KCpQX0RGR09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciog
REZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTSnNzKShFeGVjU3RhdGUqLCBzaXplX3Qs
IEpTU3RyaW5nKik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlv
bl9FU3QpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFU
SU9OICgqUF9ERkdPcGVyYXRpb25fRVN0SikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2Rl
ZEpTVmFsdWUpOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25f
RVN0UFMpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHZvaWQqLCBzaXplX3QpOwotdHlwZWRlZiBj
aGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0U1MpKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAo
KlBfREZHT3BlcmF0aW9uX0VTdFopKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpOwot
dHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVpaKShFeGVjU3Rh
dGUqLCBpbnQzMl90LCBpbnQzMl90KTsKLXR5cGVkZWYgU3RyaW5nSW1wbCogREZHX09QRVJBVElP
TiAoKklfREZHT3BlcmF0aW9uX0VKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7Ci10eXBlZGVm
IEpTU3RyaW5nKiBERkdfT1BFUkFUSU9OICgqSnNzX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0YXRl
KiwgaW50MzJfdCk7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvbUNo
YXJDb2RlKEV4ZWNTdGF0ZSosIGludDMyX3QpICBXVEZfSU5URVJOQUw7IAorSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqLCBpbnQzMl90
KSAgV1RGX0lOVEVSTkFMOyAKIAogLy8gVGhlc2Ugcm91dGluZXMgYXJlIHByb3ZpZGUgY2FsbGJh
Y2tzIG91dCB0byBDKysgaW1wbGVtZW50YXRpb25zIG9mIG9wZXJhdGlvbnMgdG9vIGNvbXBsZXgg
dG8gSklULgotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqLCBKU09iamVjdCogY29uc3RydWN0b3IsIGludDMy
X3QgaW5saW5lQ2FwYWNpdHkpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uVG9UaGlzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
VG9UaGlzU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGQo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25WYWx1ZUFkZE5vdE51bWJlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxD
ZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkg
V1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRC
eVZhbEFycmF5SW50KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7
Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50
KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkluT3B0aW1pemUoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOwot
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25JbihFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBTdHJpbmdJbXBsKik7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkdlbmVyaWNJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7Ci1FbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMsIFN0cmluZ0ltcGwqKSBXVEZf
SU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ub1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdBcnJheShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KSBXVEZfSU5URVJO
QUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyKEV4ZWNTdGF0
ZSosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikg
V1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3SW50MTZBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMy
X3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZB
cnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1
ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFy
cmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFM
OwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aE9uZUFyZ3Vt
ZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7
Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoU2l6ZShFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdVaW50MTZBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNv
ZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdVaW50MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdU
Rl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlX
aXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5
V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoT25lQXJndW1l
bnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsK
LWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aFNpemUoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwKEV4ZWNTdGF0ZSosIHZvaWQqKSBX
VEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3Qo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9w
ZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmlj
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBp
bnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsK
LXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91
bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZh
bHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91Ymxl
QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGlu
dDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiwgZG91Ymxl
IHZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFM
OwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292
ZXJMZW5ndGgoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqLCBKU0NlbGwq
LCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2Vs
bCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZf
SU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikg
V1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpT
Q2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZf
SU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxk
TGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmlu
Z0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0pTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRo
aXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBpbnQzMl90IGlubGluZUNhcGFj
aXR5KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blRvVGhpcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJO
QUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpc1N0cmljdChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9J
TlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGRO
b3ROdW1iZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUq
LCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpIFdURl9JTlRFUk5BTDsK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludChF
eGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludChFeGVjU3RhdGUqLCBK
U1N0cmluZyosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXkoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
LCBzaXplX3QsIHNpemVfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdFbXB0eUFycmF5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGlu
dDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50
OEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2
QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJO
QUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoT25lQXJn
dW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5B
TDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhTaXplKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdVaW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVu
Y29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50
MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50
OENsYW1wZWRBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNv
ZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdVaW50MTZBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlX
aXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlX
aXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Citj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Citj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdpdGhTaXplKEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3RmxvYXQ2NEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHks
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lO
VEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmlj
dChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFy
cmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVj
U3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgV1RGX0lOVEVS
TkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJy
YXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBk
b3VibGUgdmFsdWUpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlKEV4ZWNTdGF0ZSosIGRvdWJsZSB2YWx1ZSwgSlNBcnJh
eSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNT
dGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RG
X0lOVEVSTkFMOwogLy8gVGhlc2UgY29tcGFyaXNvbnMgcmV0dXJuIGEgYm9vbGVhbiB3aXRoaW4g
YSBzaXplX3Qgc3VjaCB0aGF0IHRoZSB2YWx1ZSBpcyB6ZXJvIGV4dGVuZGVkIHRvIGZpbGwgdGhl
IHJlZ2lzdGVyLgotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChFeGVj
U3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1zaXplX3Qg
REZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzc0VxKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5B
TDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIp
IFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZUVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJlZ0V4cFRlc3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lO
VEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MikgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxl
c3NFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK3Np
emVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJO
QUw7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uQ29tcGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiBy
aWdodCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Db21wYXJlU3RyaW5nRXEoRXhlY1N0YXRlKiwgSlNDZWxsKiBsZWZ0LCBKU0NlbGwqIHJpZ2h0
KSBXVEZfSU5URVJOQUw7CiAjZWxzZQotc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29t
cGFyZVN0cmluZ0VxKEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RG
X0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0Vx
KEV4ZWNTdGF0ZSosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFMOwog
I2VuZGlmCi1zaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxs
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwot
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKikg
V1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3Ry
dWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbihFeGVjU3RhdGUqKSBXVEZfSU5URVJO
QUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzKEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVh
dGVJbmxpbmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSosIElubGluZUNhbGxGcmFtZSopIFdURl9JTlRF
Uk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25UZWFyT2ZmSW5saW5lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBK
U0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aChFeGVjU3RhdGUqLCBpbnQz
Ml90KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldElubGluZWRBcmd1bWVudEJ5VmFsKEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGluZUNhbGxG
cmFtZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uR2V0QXJndW1lbnRCeVZhbChFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90
KSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rp
b25Ob0NoZWNrKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNDZWxs
KikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0
aW9uRXhwcmVzc2lvbihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1kb3VibGUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QsIGludDMyX3QpIFdURl9J
TlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0KEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgREZHX09QRVJBVElPTiBv
cGVyYXRpb25Jc0Z1bmN0aW9uKEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9J
TlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFu
ZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zm
c2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0
YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFM
OwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZl
UHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqLCBKU09iamVjdCop
IFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1
dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVf
dCBuZXdTaXplKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVu
c3VyZUludDMyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25FbnN1cmVEb3VibGUoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1jaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1jaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJhZ2VFbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSos
IEpTQ2VsbCopOwotY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3Jh
Z2UoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1TdHJpbmdJbXBsKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7Ci1KU1N0cmluZyogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJf
dCk7Ci0KLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QoRXhl
Y1N0YXRlKiwgSlNTdHJpbmcqLCBTdHJ1Y3R1cmUqKTsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBv
cGVyYXRpb25Ub1N0cmluZ09uQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqKTsKLUpTQ2VsbCogREZH
X09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7
Ci1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNTdGF0ZSosIEpT
U3RyaW5nKiwgSlNTdHJpbmcqKTsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25NYWtl
Um9wZTMoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci1jaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KTsKLWNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUlu
ZGV4LCBKU1N0cmluZyopOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxQ2VsbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKikgV1RGX0lO
VEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhF
eGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlSW5saW5lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqKSBXVEZf
SU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFyZ3VtZW50cyhF
eGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVGVhck9mZklubGluZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgoRXhlY1N0YXRlKiwg
aW50MzJfdCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRJbmxpbmVkQXJndW1lbnRCeVZhbChFeGVjU3RhdGUqLCBpbnQzMl90LCBJbmxpbmVD
YWxsRnJhbWUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkdldEFyZ3VtZW50QnlWYWwoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50
MzJfdCkgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1
bmN0aW9uTm9DaGVjayhFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpT
Q2VsbCopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdG
dW5jdGlvbkV4cHJlc3Npb24oRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOworZG91
YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBX
VEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZihFeGVjU3RhdGUqLCBKU0NlbGwqKSBX
VEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Citj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNT
dGF0ZSosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5p
dGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOworY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlT
dG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5B
TDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIoRXhlY1N0YXRlKiwg
SlNDZWxsKik7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsZShFeGVj
U3RhdGUqLCBKU0NlbGwqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29u
dGlndW91cyhFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUmFnZUVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlNDZWxsKik7CitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCBKU0NlbGwq
KTsKK1N0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJvcGUoRXhlY1N0
YXRlKiwgSlNTdHJpbmcqKTsKK0pTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmds
ZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90KTsKKworSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdChFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0
cnVjdHVyZSopOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxs
KEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRv
U3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK0pTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25NYWtlUm9wZTIoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwor
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqLCBKU1N0
cmluZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSwgc2l6ZV90IHRhYmxlSW5kZXgpOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0
Y2hTdHJpbmcoRXhlY1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7CiAKICNp
ZiBFTkFCTEUoRlRMX0pJVCkKIC8vIEZJWE1FOiBNYWtlIGNhbGxzIHdvcmsgd2VsbC4gQ3VycmVu
dGx5IHRoZXkncmUgYSBwdXJlIHJlZ3Jlc3Npb24uCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIxCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkZUTENhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25GVExDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVS
TkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GVExDYWxsKEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRlRMQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKICNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKIAotLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBsb29rdXAgYW4gZXhjZXB0
aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwgd2hpY2ggaXMKLS8vIHRoZSByZXR1
cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91dCB0byBvbmUgb2YgdGhlIGhlbHBl
ciBvcGVyYXRpb25zIGFib3ZlLgotCi0vLyBBY2NvcmRpbmcgdG8gQysrIHJ1bGVzLCBhIHR5cGUg
dXNlZCBmb3IgdGhlIHJldHVybiBzaWduYXR1cmUgb2YgZnVuY3Rpb24gd2l0aCBDIGxpbmthZ2Ug
KGkuZS4KLS8vICdleHRlcm4gIkMiJykgbmVlZHMgdG8gYmUgUE9EOyBoZW5jZSBwdXR0aW5nIGFu
eSBjb25zdHJ1Y3RvcnMgaW50byBpdCBjb3VsZCBjYXVzZSBlaXRoZXIgY29tcGlsZXIKLS8vIHdh
cm5pbmdzLCBvciB3b3JzZSwgYSBjaGFuZ2UgaW4gdGhlIEFCSSB1c2VkIHRvIHJldHVybiB0aGVz
ZSB0eXBlcy4KLXN0cnVjdCBERkdIYW5kbGVyIHsKLSAgICB1bmlvbiBVbmlvbiB7Ci0gICAgICAg
IHN0cnVjdCBTdHJ1Y3QgewotICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjOwotICAgICAgICAg
ICAgdm9pZCogaGFuZGxlcjsKLSAgICAgICAgfSBzOwotICAgICAgICB1aW50NjRfdCBlbmNvZGVk
OwotICAgIH0gdTsKLX07Ci0KLWlubGluZSBERkdIYW5kbGVyIGNyZWF0ZURGR0hhbmRsZXIoRXhl
Y1N0YXRlKiBleGVjLCB2b2lkKiBoYW5kbGVyKQotewotICAgIERGR0hhbmRsZXIgcmVzdWx0Owot
ICAgIHJlc3VsdC51LnMuZXhlYyA9IGV4ZWM7Ci0gICAgcmVzdWx0LnUucy5oYW5kbGVyID0gaGFu
ZGxlcjsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jaWYgQ1BVKFg4Nl82NCkKLXR5cGVkZWYg
REZHSGFuZGxlciBERkdIYW5kbGVyRW5jb2RlZDsKLWlubGluZSBERkdIYW5kbGVyRW5jb2RlZCBk
ZmdIYW5kbGVyRW5jb2RlZChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGhhbmRsZXIpCi17Ci0gICAg
cmV0dXJuIGNyZWF0ZURGR0hhbmRsZXIoZXhlYywgaGFuZGxlcik7Ci19Ci0jZWxzZQotdHlwZWRl
ZiB1aW50NjRfdCBERkdIYW5kbGVyRW5jb2RlZDsKLWlubGluZSBERkdIYW5kbGVyRW5jb2RlZCBk
ZmdIYW5kbGVyRW5jb2RlZChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGhhbmRsZXIpCi17Ci0gICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKERGR0hhbmRsZXI6OlVuaW9uKSA9PSBzaXplb2YodWludDY0
X3QpLCBERkdIYW5kbGVyX1VuaW9uX2lzXzY0Yml0KTsKLSAgICByZXR1cm4gY3JlYXRlREZHSGFu
ZGxlcihleGVjLCBoYW5kbGVyKS51LmVuY29kZWQ7Ci19Ci0jZW5kaWYKLURGR0hhbmRsZXJFbmNv
ZGVkIERGR19PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqKSBXVEZf
SU5URVJOQUw7Ci0KIC8vIFRoZXNlIG9wZXJhdGlvbnMgaW1wbGVtZW50IHRoZSBpbXBsaWNpdGx5
IGNhbGxlZCBUb0ludDMyIGFuZCBUb0Jvb2xlYW4gY29udmVyc2lvbnMgZnJvbSBFUzUuCiAvLyBU
aGlzIGNvbnZlcnNpb24gcmV0dXJucyBhbiBpbnQzMl90IHdpdGhpbiBhIHNpemVfdCBzdWNoIHRo
YXQgdGhlIHZhbHVlIGlzIHplcm8gZXh0ZW5kZWQgdG8gZmlsbCB0aGUgcmVnaXN0ZXIuCi1zaXpl
X3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZl
cnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7CitzaXplX3QgSklUX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9O
IGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBX
VEZfSU5URVJOQUw7CiAKLXZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3Bl
Y3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUo
RXhlY1N0YXRlKiwgdm9pZCosIHZvaWQqKSBXVEZfSU5URVJOQUw7CiAKLXZvaWQgREZHX09QRVJB
VElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKikgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqKSBX
VEZfSU5URVJOQUw7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKLXZvaWQgREZHX09QRVJBVElPTiB0
cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIERGR19PUEVS
QVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KEV4ZWNTdGF0ZSosIGludDMyX3QgYnl0ZWNvZGVJbmRl
eCwgaW50MzJfdCBzdHJlYW1JbmRleCkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9O
IHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09Q
RVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coRXhlY1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUlu
ZGV4LCBpbnQzMl90IHN0cmVhbUluZGV4KSBXVEZfSU5URVJOQUw7CiAjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCiAKIH0gLy8gZXh0ZXJuICJDIgogCi1pbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0
WiBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5
cGUpCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRVN0WiBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0
aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7
CiAgICAgY2FzZSBUeXBlSW50ODoKQEAgLTM0Nyw3ICsxODksNyBAQCBpbmxpbmUgUF9ERkdPcGVy
YXRpb25fRVN0WiBvcGVyYXRpb25OZXdUCiAgICAgcmV0dXJuIDA7CiB9CiAKLWlubGluZSBQX0RG
R09wZXJhdGlvbl9FU3RKIG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRGb3JU
eXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRVN0SiBvcGVy
YXRpb25OZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50Rm9yVHlwZShUeXBlZEFycmF5VHlwZSB0
eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgVHlwZUludDg6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlclNldC5oCShyZXZpc2lvbiAxNTY0
ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMjE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdSZWdpc3RlclNldF9oCi0jZGVmaW5lIERGR1Jl
Z2lzdGVyU2V0X2gKLQotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKERG
R19KSVQpCi0KLSNpbmNsdWRlICJGUFJJbmZvLmgiCi0jaW5jbHVkZSAiR1BSSW5mby5oIgotI2lu
Y2x1ZGUgPHd0Zi9CaXRtYXAuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewot
Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgdG90YWxOdW1iZXJPZlJlZ2lzdGVycyA9Ci0gICAgR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsKLQot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0ID0KLSAgICAo
dG90YWxOdW1iZXJPZlJlZ2lzdGVycyArIDcpID4+IDM7Ci0KLXR5cGVkZWYgdWludDhfdCBSZWdp
c3RlclNldFBPRFtudW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNldF07Ci0KLWNsYXNzIFJlZ2lzdGVy
U2V0IHsKLXB1YmxpYzoKLSAgICBSZWdpc3RlclNldCgpCi0gICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBudW1iZXJPZkJ5dGVzSW5SZWdpc3RlclNldDsgaS0tOykKLSAgICAgICAgICAg
IG1fc2V0W2ldID0gMDsKLSAgICB9Ci0gICAgCi0gICAgUmVnaXN0ZXJTZXQoY29uc3QgUmVnaXN0
ZXJTZXRQT0QmIG90aGVyKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVy
T2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCi0gICAgICAgICAgICBtX3NldFtpXSA9IG90aGVy
W2ldOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBSZWdpc3RlclNldFBPRCYgYXNQT0QoKSBjb25z
dCB7IHJldHVybiBtX3NldDsgfQotICAgIAotICAgIHZvaWQgY29weUluZm8oUmVnaXN0ZXJTZXRQ
T0QmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVy
T2ZCeXRlc0luUmVnaXN0ZXJTZXQ7IGktLTspCi0gICAgICAgICAgICBvdGhlcltpXSA9IG1fc2V0
W2ldOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChHUFJSZWcgcmVnKQotICAgIHsKLSAgICAg
ICAgc2V0Qml0KEdQUkluZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
c2V0R1BSQnlJbmRleCh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRl
eCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgc2V0Qml0KGluZGV4KTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhcihHUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAg
Y2xlYXJCaXQoR1BSSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBn
ZXQoR1BSUmVnIHJlZykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5m
bzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBnZXRHUFJCeUluZGV4KHVu
c2lnbmVkIGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGluZGV4IDwgR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwotICAgICAgICByZXR1cm4gZ2V0Qml0KGluZGV4KTsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gUmV0dXJuIHRoZSBpbmRleCd0aCBmcmVlIEdQUi4KLSAgICBHUFJS
ZWcgZ2V0RnJlZUdQUih1bnNpZ25lZCBpbmRleCA9IDApIGNvbnN0Ci0gICAgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAg
ICAgICAgICAgaWYgKCFnZXRHUFJCeUluZGV4KGkpICYmICFpbmRleC0tKQotICAgICAgICAgICAg
ICAgIHJldHVybiBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBJbnZhbGlkR1BSUmVnOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChGUFJSZWcgcmVn
KQotICAgIHsKLSAgICAgICAgc2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBS
SW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRGUFJCeUluZGV4
KHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGluZGV4IDwgRlBSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMpOwotICAgICAgICBzZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnMgKyBpbmRleCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xlYXIoRlBSUmVnIHJlZykK
LSAgICB7Ci0gICAgICAgIGNsZWFyQml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBS
SW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBnZXQoRlBSUmVnIHJl
ZykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnMgKyBGUFJJbmZvOjp0b0luZGV4KHJlZykpOwotICAgIH0KLSAgICAKLSAgICBib29s
IGdldEZQUkJ5SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQoaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7Ci0gICAgICAgIHJldHVybiBn
ZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpbmRleCk7Ci0gICAgfQotICAgIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgotICAgIHZvaWQgc2V0QnlJbmRleCh1bnNp
Z25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHNldChCYW5rSW5mbzo6dG9SZWdpc3RlcihpbmRl
eCkpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KLSAgICBi
b29sIGdldEJ5SW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0
KEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVk
IG51bWJlck9mU2V0R1BScygpIGNvbnN0Ci0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQg
PSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
czsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFnZXRCaXQoaSkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICByZXN1bHQrKzsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZlNldEZQUnMoKSBj
b25zdAotICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAg
ICAgIGlmICghZ2V0Qml0KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaSkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXN1bHQrKzsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZlNl
dFJlZ2lzdGVycygpIGNvbnN0Ci0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0b3RhbE51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7
Ci0gICAgICAgICAgICBpZiAoIWdldEJpdChpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIHJlc3VsdCsrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICB2b2lkIHNldEJpdCh1bnNpZ25lZCBpKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICAgICAg
bV9zZXRbaSA+PiAzXSB8PSAoMSA8PCAoaSAmIDcpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBj
bGVhckJpdCh1bnNpZ25lZCBpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGkgPCB0b3RhbE51bWJl
ck9mUmVnaXN0ZXJzKTsKLSAgICAgICAgbV9zZXRbaSA+PiAzXSAmPSB+KDEgPDwgKGkgJiA3KSk7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgZ2V0Qml0KHVuc2lnbmVkIGkpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQoaSA8IHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMpOwotICAgICAgICByZXR1
cm4gISEobV9zZXRbaSA+PiAzXSAmICgxIDw8IChpICYgNykpKTsKLSAgICB9Ci0gICAgCi0gICAg
UmVnaXN0ZXJTZXRQT0QgbV9zZXQ7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0K
LSNlbHNlIC8vIEVOQUJMRShERkdfSklUKSAtPiBzbyBpZiBERkcgaXMgZGlzYWJsZWQKLQotbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi0vLyBEZWZpbmUgUmVnaXN0ZXJTZXRQT0Qg
dG8gc29tZXRoaW5nIHRoYXQgaXMgYSBQT0QsIGJ1dCBpcyBvdGhlcndpc2UgdXNlbGVzcywKLS8v
IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlZmVyIHRvIHRoaXMgdHlwZSBpbiBjb2RlIHRoYXQgbWF5
IGJlIGNvbXBpbGVkIHdoZW4KLS8vIHRoZSBERkcgaXMgZGlzYWJsZWQuCi0KLXN0cnVjdCBSZWdp
c3RlclNldFBPRCB7IH07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQotCi0jZW5kaWYgLy8gREZHUmVnaXN0ZXJTZXRfaAotCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE1NjQ4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTQxOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJE
RkdSZXBhdGNoLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgotI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIKLSNpbmNsdWRlICJERkdTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgot
I2luY2x1ZGUgIkRGR1RodW5rcy5oIgotI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5o
IgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJPcGVyYXRpb25zLmgiCi0jaW5j
bHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgotI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIu
aCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYv
U3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewot
Ci1zdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVibG9jaywgQ29kZUxvY2F0
aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBuZXdDYWxsZWVGdW5jdGlvbikKLXsKLSAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZWJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcGF0Y2hC
eUlkU2VsZkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25z
dCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwgYm9vbCBjb21wYWN0KQotewotICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotCi0gICAgLy8gT25seSBvcHRp
bWl6ZSBvbmNlIQotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7Ci0KLSAgICAvLyBQYXRjaCB0aGUgc3RydWN0dXJl
IGNoZWNrICYgdGhlIG9mZnNldCBvZiB0aGUgbG9hZC4KLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50
cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBzdHJ1Y3R1cmUp
OwotICAgIHJlcGF0Y2hCdWZmZXIuc2V0TG9hZEluc3RydWN0aW9uSXNBY3RpdmUoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmNvbnZlcnRpYmxlTG9hZEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb1N0b3JhZ2VMb2FkKSwgaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoY29tcGFjdCkKLSAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZz
ZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSk7Ci0gICAgZWxzZQotICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBv
ZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSk7Ci0jZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgIGlmIChjb21wYWN0KSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRj
aChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRp
dmVUb1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2go
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxh
dGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
MzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSks
IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9m
ZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7Ci0gICAgfQotI2VuZGlmCi19
Ci0KLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICBKU0NlbGwq
IG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQotewot
ICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgc3RydWN0dXJl
LT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9j
aykpOwotI2lmIERGR19FTkFCTEUoSklUX0FTU0VSVCkKLSAgICAgICAgLy8gSWYgd2UgZXhlY3V0
ZSB0aGlzIGNvZGUsIHRoZSBvYmplY3QgbXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0
LiBBc3NlcnQKLSAgICAgICAgLy8gdGhpcyBpbiBkZWJ1ZyBtb2Rlcy4KLSAgICAgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gaml0LmJyYW5jaFB0cigKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0gICAgICAgIGpp
dC5icmVha3BvaW50KCk7Ci0gICAgICAgIG9rLmxpbmsoJmppdCk7Ci0jZW5kaWYKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihvYmplY3QpLCBzY3JhdGNoR1BSKTsKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAot
ICAgICAgICBqaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRy
YW5zaXRpb25DaGVjaygKLSAgICBKU1ZhbHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBNYWNyb0Fzc2VtYmxlciYgaml0
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hH
UFIpCi17Ci0gICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOwotICAgIAotICAgIGFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgcHJvdG90eXBlLmFzQ2VsbCgpLCBwcm90b3R5cGUu
YXNDZWxsKCktPnN0cnVjdHVyZSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsCi0gICAgICAg
IGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcGxhY2VXaXRo
SnVtcChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCi17Ci0gICAgaWYgKE1h
Y3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgp
KSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKAotICAgICAgICAgICAg
UmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVz
cygKLSAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
UHRyQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsKHRhcmdldCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKAotICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KAotICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0
Q2hlY2spLAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKLX0KLQotc3RhdGlj
IHZvaWQgZW1pdFJlc3RvcmVTY3JhdGNoKE1hY3JvQXNzZW1ibGVyJiBzdHViSml0LCBib29sIG5l
ZWRUb1Jlc3RvcmVTY3JhdGNoLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAmIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZmFpbHVyZUNhc2VzKQotewotICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkg
ewotICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKLSAgICAgICAgCi0gICAgICAgIHN1
Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGxpbmsgZmFpbHVy
ZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4gcG9wIHNjcmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFj
ay4KLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAKLSAgICAg
ICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBmYWlsID0gc3R1
YkppdC5qdW1wKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgc3VjY2VzcyA9
IHN0dWJKaXQuanVtcCgpOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlu
a0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NM
YWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbikKLXsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKHN1Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7Ci0gICAgICAgIAotICAgIGlmIChuZWVkVG9S
ZXN0b3JlU2NyYXRjaCkgewotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWwsIHNsb3dDYXNl
QmVnaW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIC8vIGxpbmsgZmFpbHVy
ZSBjYXNlcyBkaXJlY3RseSBiYWNrIHRvIG5vcm1hbCBwYXRoCi0gICAgcGF0Y2hCdWZmZXIubGlu
ayhmYWlsdXJlQ2FzZXMsIHNsb3dDYXNlQmVnaW4pOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rUmVz
dG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNj
cmF0Y2gsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGZhaWx1cmVDYXNlcykKLXsKLSAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIs
IG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotfQotCi1zdGF0aWMg
dm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3Vu
dCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0
aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKLXsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKLQotICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7Ci0gICAgICAgIAotICAgIEdQ
UlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFz
ZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOwotI2Vu
ZGlmCi0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgYm9v
bCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwotICAgIAotICAgIGlmIChzY3JhdGNoR1BS
ID09IEludmFsaWRHUFJSZWcpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzY3JhdGNo
R1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BS
KTsKLSNlbHNlCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2Ny
YXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIsIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLSAgICAg
ICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOwotICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRj
aCA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWls
dXJlQ2FzZXM7Ci0gICAgCi0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpKSk7Ci0gICAgCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0g
c3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFk
KCk7Ci0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICBwcm90b09iamVjdCA9IGFzT2Jq
ZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7Ci0gICAgICAgIGFk
ZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgIHByb3RvT2JqZWN0LCBwcm90
b09iamVjdC0+c3RydWN0dXJlKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mbywgc3R1Ykpp
dCwKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAgICAgIGN1cnJT
dHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7Ci0gICAgfQotICAgIAotICAgIGlmIChpc0lubGluZU9mZnNl
dChvZmZzZXQpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2FkNjQo
cHJvdG9PYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCksIHJlc3VsdEdQUik7Ci0jZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkpLCBy
ZXN1bHRHUFIpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICB9IGVs
c2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIocHJvdG9PYmplY3QtPmJ1dHRlcmZseUFkZHJl
c3MoKSwgcmVzdWx0R1BSKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0Lmxv
YWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5
KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7Ci0j
ZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIHN0dWJKaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJm
bHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7
Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWls
OwotICAgIAotICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygp
KTsKLSAgICAKLSAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xv
d0Nhc2VMYWJlbCk7Ci0gICAgCi0gICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9E
RkdfU1RVQigKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiREZHIHByb3RvdHlwZSBj
aGFpbiBhY2Nlc3Mgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0
b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN1Y2Nlc3NMYWJlbC5leGVjdXRh
YmxlQWRkcmVzcygpKSk7Ci19Ci0KLXN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQotewotICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBj
aGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAotICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVy
IGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4KLQotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0gICAgCi0gICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5k
ZmcudmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgICAgIGJv
b2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyIHN0dWJKaXQ7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJ
bnZhbGlkR1BSUmVnKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIHNjcmF0Y2hH
UFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIp
OwotI2Vsc2UKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0
U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIsIHJlc3VsdFRhZ0dQUik7Ci0jZW5kaWYKLSAg
ICAgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICAgICAKLSAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsgCi0gICAgICAgIHN0dWJKaXQubG9hZDgoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQoc3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spKSk7Ci0gICAg
ICAgIAotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAg
IHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5
U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgZmFpbHVyZUNh
c2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3Rlciwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgICAgIHN0dWJKaXQubW92ZShzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICBzdHVi
Sml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigweGZmZmZmZmZmKSwgcmVzdWx0VGFn
R1BSKTsgLy8gSlNWYWx1ZTo6SW50MzJUYWcKLSNlbmRpZgotCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0gICAgICAgIAotICAgICAgICBlbWl0UmVzdG9yZVNj
cmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3Ms
IGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCp2bSwgJnN0dWJKaXQsIGNvZGVCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBsaW5r
UmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5m
bywgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJJ
bmZvLnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCi0gICAgICAgICAg
ICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiREZHIEdldEJ5SWQgYXJyYXkgbGVuZ3RoIHN0
dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygq
ZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgCi0gICAgICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBsYWNlV2l0
aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICAKLSAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgbGVuZ3Ro
IGFjY2VzcyBmb3IgU3RyaW5nLgotCi0gICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2Vz
cyBmb3IgaW1tZWRpYXRlcy4KLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7Ci0gICAg
aWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
IXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICBpZiAoc2xvdC5z
bG90QmFzZSgpID09IGJhc2VWYWx1ZSkgewotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVW
YWx1ZSgpCi0gICAgICAgICAgICB8fCAhTWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWdu
ZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNh
Y2hlZE9mZnNldCgpKSkpIHsKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVwYXRjaEJ5SWRT
ZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZv
LmluaXRHZXRCeUlkU2VsZigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVj
dHVyZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8v
IEZJWE1FOiBvcHRpbWl6ZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzCi0gICAgaWYgKCFzbG90LmlzQ2Fj
aGVhYmxlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgc2l6ZV90IGNvdW50ID0g
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2VzcyhleGVjLCBiYXNlVmFsdWUsIHNs
b3Quc2xvdEJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpOwotICAgIGlmIChjb3VudCA9PSBJ
bnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cnVj
dHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhl
Yyk7Ci0gICAgCi0gICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5m
bywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2Fs
bFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUp
OwotICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAg
IHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YkluZm8uc3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7Ci0gICAgCi0g
ICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCB0cnVlKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCByZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGJvb2wg
Y2FjaGVkID0gdHJ5Q2FjaGVHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbyk7Ci0gICAgaWYgKCFjYWNoZWQpCi0gICAgICAgIHJlcGF0Y2hDYWxsKGV4
ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdl
dEJ5SWQpOwotfQotCi1zdGF0aWMgYm9vbCBnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QoCi0g
ICAgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLAotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdComIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdCwgaW50JiBsaXN0SW5kZXgsCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwmIHNsb3dD
YXNlKQotewotICAgIHNsb3dDYXNlID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwotICAgIAot
ICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkgewotICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCk7Ci0g
ICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LCAwLCBmYWxzZSk7Ci0gICAgICAgIGxpc3RJbmRleCA9IDA7Ci0gICAgfSBlbHNlIGlmIChz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgewotICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZN
YW5hZ2VkUm91dGluZShzbG93Q2FzZSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2Vs
Zkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxLCB0cnVlKTsKLSAgICAgICAgbGlzdElu
ZGV4ID0gMTsKLSAgICB9IGVsc2UgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dl
dF9ieV9pZF9jaGFpbikgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghIXN0dWJJbmZvLnN0dWJS
b3V0aW5lKTsKLSAgICAgICAgc2xvd0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5z
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5mby5zdHViUm91dGluZSwgc3R1YkluZm8udS5nZXRC
eUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hh
aW4uY2hhaW4uZ2V0KCksIHRydWUpOwotICAgICAgICBzdHViSW5mby5zdHViUm91dGluZS5jbGVh
cigpOwotICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdCwgMSwgZmFsc2UpOwotICAgICAgICBsaXN0SW5kZXggPSAxOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNz
X2dldF9ieV9pZF9zZWxmX2xpc3QpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qg
PSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBsaXN0
SW5kZXggPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZTsKLSAgICAgICAgc2xv
d0Nhc2UgPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3Rb
bGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgIH0KLSAgICAK
LSAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKGxpc3RJbmRleCA8IFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyB2b2lkIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSklUU3R1YlJvdXRpbmUqIHN0dWJSb3V0aW5lKQotewot
ICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9p
ZF9zZWxmX2xpc3QpOwotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2sp
OwotICAgIGlmIChzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5kaWRTZWxmUGF0Y2hpbmcpIHsK
LSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCi0gICAgICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBh
dGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKLSAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBz
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci19Ci0KLXN0YXRpYyBib29sIHRyeUJ1aWxkR2V0
QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQotewotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpCi0gICAgICAgIHx8ICFz
bG90LmlzQ2FjaGVhYmxlKCkKLSAgICAgICAgfHwgIWJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVl
LmFzQ2VsbCgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVy
ZSgpOwotICAgIAotICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAg
ICAgIGlmICghc3R1YkluZm8ucGF0Y2guZGZnLnJlZ2lzdGVyc0ZsdXNoZWQpIHsKLSAgICAgICAg
ICAgIC8vIFdlIGNhbm5vdCBkbyBhcyBtdWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSByZWdpc3Rl
cnMgd2VyZSBub3QgZmx1c2hlZCBwcmlvciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRpY3VsYXIs
Ci0gICAgICAgICAgICAvLyBub24tVmFsdWUgY2FjaGVkIHByb3BlcnRpZXMgcmVxdWlyZSBwbGFu
dGluZyBjYWxscywgd2hpY2ggcmVxdWlyZXMgcmVnaXN0ZXJzIHRvIGhhdmUgYmVlbiBmbHVzaGVk
LiBUaHVzLAotICAgICAgICAgICAgLy8gaWYgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQsIGRv
bid0IGRvIG5vbi1WYWx1ZSBjYWNoaW5nLgotICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVh
YmxlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3Q7Ci0gICAgICAgIGludCBsaXN0SW5kZXg7Ci0gICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsIHNsb3dDYXNlOwotCi0gICAgICAgIGlmICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxp
c3RJbmRleCwgc2xvd0Nhc2UpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAK
LSAgICAgICAgc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemUrKzsKLSAgICAgICAg
Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC5kZmcuYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgR1BSUmVn
IHJlc3VsdFRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZh
bHVlVGFnR1BSKTsKLSNlbmRpZgotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJz
KS5nZXRGcmVlR1BSKCk7Ci0gICAgICAgIAotICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2
bSwgY29kZUJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdy
b25nU3RydWN0ID0gc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0gICAgICAgIAot
ICAgICAgICAvLyBUaGUgc3RyYXRlZ3kgd2UgdXNlIGZvciBzdHVicyBpcyBhcyBmb2xsb3dzOgot
ICAgICAgICAvLyAxKSBDYWxsIERGRyBoZWxwZXIgdGhhdCBjYWxscyB0aGUgZ2V0dGVyLgotICAg
ICAgICAvLyAyKSBDaGVjayBpZiB0aGVyZSB3YXMgYW4gZXhjZXB0aW9uLCBhbmQgaWYgdGhlcmUg
d2FzLCBjYWxsIHlldCBhbm90aGVyCi0gICAgICAgIC8vICAgIGhlbHBlci4KLSAgICAgICAgCi0g
ICAgICAgIGJvb2wgaXNEaXJlY3QgPSBmYWxzZTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgb3BlcmF0aW9uQ2FsbDsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaGFuZGxlckNh
bGw7Ci0gICAgICAgIEZ1bmN0aW9uUHRyIG9wZXJhdGlvbkZ1bmN0aW9uOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOwotICAgICAgICAKLSAgICAgICAgaWYgKHNsb3QuaXND
YWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAg
ICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
YmFzZUdQUiAhPSBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAg
ICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIp
OwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90
LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAg
ICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKLSNl
bmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAg
ICBvcGVyYXRpb25GdW5jdGlvbiA9IG9wZXJhdGlvbkNhbGxHZXR0ZXI7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKAotICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRl
cigpKS5leGVjdXRhYmxlQWRkcmVzcygpKSwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoaWRlbnQuaW1wbCgpKSk7Ci0gICAgICAgICAgICAgICAgb3Bl
cmF0aW9uRnVuY3Rpb24gPSBvcGVyYXRpb25DYWxsQ3VzdG9tR2V0dGVyOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdo
ZW5ldmVyIHRoaXMgY2FsbCBpcyBtYWRlIGluIHRoZSBmdXR1cmUsIHdlIHJlbWVtYmVyIHRoZQot
ICAgICAgICAgICAgLy8gcGxhY2UgdGhhdCB3ZSBtYWRlIGl0IGZyb20uIEl0IGp1c3Qgc28gaGFw
cGVucyB0byBiZSB0aGUgcGxhY2UgdGhhdCB3ZSBhcmUgYXQKLSAgICAgICAgICAgIC8vIHJpZ2h0
IG5vdyEKLSAgICAgICAgICAgIHN0dWJKaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGV4ZWMtPmxvY2F0aW9uQXNSYXdCaXRzKCkpLAotICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgb3BlcmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgICAgICBzdHViSml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQ
Uik7Ci0jZWxzZQotICAgICAgICAgICAgc3R1YkppdC5zZXR1cFJlc3VsdHMocmVzdWx0R1BSLCBy
ZXN1bHRUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5lbWl0
RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgp
OwotICAgICAgICAgICAgaGFuZGxlckNhbGwgPSBzdHViSml0LmNhbGwoKTsKLSAgICAgICAgICAg
IHN0dWJKaXQuanVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNh
Y2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGlmIChi
YXNlR1BSID09IHJlc3VsdFRhZ0dQUikgewotICAgICAgICAgICAgICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgICAgICAg
ICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgICAg
IH0KLSNlbmRpZgotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAg
ICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOwot
I2Vsc2UKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwg
cmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgICAgIGlzRGlyZWN0ID0gdHJ1
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1
YkppdCwgY29kZUJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsod3Jv
bmdTdHJ1Y3QsIHNsb3dDYXNlKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9Eb25lKSk7Ci0gICAgICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uRnVuY3Rpb24pOwot
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9u
SGFuZGxlcik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmUgPQotICAgICAgICAgICAgY3JlYXRlSklUU3R1YlJvdXRpbmUoCi0g
ICAgICAgICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCi0gICAgICAgICAgICAgICAgICAgIHBh
dGNoQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAoIkRGRyBHZXRCeUlkIHBvbHltb3JwaGlj
IGxpc3QgYWNjZXNzIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICAg
ICAgIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAot
ICAgICAgICAgICAgICAgICp2bSwKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLAotICAgICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSB8fCBz
bG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpOwotICAgICAgICAKLSAgICAgICAgcG9seW1vcnBoaWNT
dHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwotICAgICAgICAK
LSAgICAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHVi
Um91dGluZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFIC0gMSk7Ci0gICAgfQotICAgIAotICAgIGlmIChiYXNlVmFsdWUuYXND
ZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygp
IHx8ICFzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICBzaXpl
X3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJh
c2VWYWx1ZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKLSAgICBpZiAoY291bnQg
PT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBT
dHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWlu
KGV4ZWMpOwotICAgIAotICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0OwotICAgIGludCBsaXN0SW5kZXg7Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWwgc2xvd0Nhc2U7Ci0gICAgaWYgKCFnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qodm0s
IGNvZGVCbG9jaywgc3R1YkluZm8sIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgbGlzdEluZGV4
LCBzbG93Q2FzZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBzdHViSW5mby51
LmdldEJ5SWRQcm90b0xpc3QubGlzdFNpemUrKzsKLSAgICAKLSAgICBSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIAotICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0
dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1
cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBzbG93Q2FzZSwgc3R1YlJvdXRpbmUpOwotICAgIAot
ICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUp
OwotICAgIAotICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHViSW5mbywg
c3R1YlJvdXRpbmUuZ2V0KCkpOwotICAgIAotICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7Ci19Ci0KLXZvaWQgYnVpbGRHZXRCeUlETGlzdChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQotewotICAgIGJvb2wgZG9udENoYW5nZUNhbGwgPSB0cnlCdWlsZEdldEJ5SURMaXN0
KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7Ci0gICAgaWYg
KCFkb250Q2hhbmdlQ2FsbCkKLSAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCks
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Ci19Ci0KLXN0
YXRpYyBWX0RGR09wZXJhdGlvbl9FSkNJIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlv
bihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3Qp
Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKLSAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7Ci0gICAgfQotICAgIGlmIChwdXRLaW5k
ID09IERpcmVjdCkKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3Q7Ci0gICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7Ci19Ci0KLXN0YXRpYyBW
X0RGR09wZXJhdGlvbl9FSkNJIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9u
KGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQotewotICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkK
LSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0
OwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdDsKLSAgICB9
Ci0gICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdDsKLSAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdEJ1aWxkTGlzdDsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHVi
KAotICAgIEV4ZWNTdGF0ZSogZXhlYywKLSAgICBKU1ZhbHVlLAotICAgIGNvbnN0IElkZW50aWZp
ZXImLAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwKLSAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sCi0gICAgUHV0S2luZCwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwK
LSAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAg
R1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5i
YXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlVGFnR1BSKTsKLSNl
bmRpZgotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
cGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7Ci0gICAgYm9v
bCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwotI2lmIEVOQUJMRShXUklURV9CQVJSSUVS
X1BST0ZJTElORykKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjI7Ci0gICAgY29uc3QgYm9vbCB3cml0
ZUJhcnJpZXJOZWVkZWQgPSB0cnVlOwotI2Vsc2UKLSAgICBjb25zdCBib29sIHdyaXRlQmFycmll
ck5lZWRlZCA9IGZhbHNlOwotI2VuZGlmCi0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXIgc3R1Ykpp
dDsKLSAgICAKLSAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnICYmICh3cml0ZUJh
cnJpZXJOZWVkZWQgfHwgaXNPdXRPZkxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKSB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklU
OjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAgIHNj
cmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1
ZUdQUiwgdmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
ID0gdHJ1ZTsKLSAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOwotICAgIH0KLQotICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJhZFN0cnVjdHVyZSA9IHN0dWJKaXQuYnJhbmNoUHRyKAot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKLSAgICAKLSNpZiBFTkFC
TEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzY3Jh
dGNoR1BSMiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVl
R1BSLCBzY3JhdGNoR1BSKTsKLSNlbHNlCi0gICAgc2NyYXRjaEdQUjIgPSBTcGVjdWxhdGl2ZUpJ
VDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIsIHNjcmF0
Y2hHUFIpOwotI2VuZGlmCi0gICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIyKTsKLSAgICBTcGVj
dWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0gICAgc3R1YkppdC5w
b3Aoc2NyYXRjaEdQUjIpOwotI2VuZGlmCi0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBp
ZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCi0gICAgICAgIHN0dWJKaXQu
c3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9y
ZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJ
bkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAg
IH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKSB7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNp
emVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMudGFnKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMy
KHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJ
bkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgIH0K
LSNlbmRpZgotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKLSAgICAKLSAgICBpZiAobmVlZFRvUmVzdG9yZVNj
cmF0Y2gpIHsKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgIHN1Y2Nl
c3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIGJhZFN0cnVjdHVyZS5saW5r
KCZzdHViSml0KTsKLSAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgIGZh
aWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdWNjZXNzID0g
c3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIGZhaWx1cmUgPSBiYWRTdHJ1Y3R1cmU7Ci0gICAgfQot
ICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29k
ZUJsb2NrKCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
RG9uZSkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKLSAg
ICAgICAgICAgIAotICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIo
Ci0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkRGRyBQdXRCeUlkIHJlcGxhY2Ugc3R1
YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMt
PmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0Rv
bmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5z
aXRpb25TdHViKAotICAgIEV4ZWNTdGF0ZSogZXhlYywKLSAgICBKU1ZhbHVlLAotICAgIGNvbnN0
IElkZW50aWZpZXImLAotICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwKLSAgICBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgUHV0S2luZCBwdXRLaW5kLAotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlLAotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAotICAgIFN0cnVj
dHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiwKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJl
TGFiZWwsCi0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCi17Ci0gICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0KLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgR1BSUmVnIHZhbHVlR1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOwotICAgIAot
ICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2guZGZn
LnVzZWRSZWdpc3RlcnMpOwotICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwotI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCi0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVUYWdHUFIpOwotI2VuZGlmCi0g
ICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOwotICAgIAotICAgIENDYWxsSGVscGVycyBzdHVi
Sml0KHZtKTsKLSAgICAgICAgICAgIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQ
Uik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsKLSAgICAKLSAgICBib29s
IG5lZWRTZWNvbmRTY3JhdGNoID0gZmFsc2U7Ci0gICAgYm9vbCBuZWVkVGhpcmRTY3JhdGNoID0g
ZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIG5lZWRTZWNv
bmRTY3JhdGNoID0gdHJ1ZTsKLSNlbmRpZgotICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCi0gICAgICAgICYm
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBuZWVkU2Vjb25k
U2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVlOwotICAgIH0K
LQotICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKLSAgICBpZiAobmVlZFNlY29uZFNjcmF0Y2gpIHsK
LSAgICAgICAgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0g
ICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBiYXNlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNj
cmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNj
cmF0Y2hHUFIxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BS
UmVnOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKLSAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkg
ewotICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
LSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IGJhc2VHUFIpOwotICAgICAgICBBU1NFUlQo
c2NyYXRjaEdQUjMgIT0gdmFsdWVHUFIpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0g
c2NyYXRjaEdQUjEpOwotICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjIp
OwotICAgIH0gZWxzZQotICAgICAgICBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7Ci0gICAg
ICAgICAgICAKLSAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmco
c3R1YkppdCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwot
ICAgICAgICAgICAgCi0gICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgCi0gICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvbGRTdHJ1Y3R1cmUpKSk7Ci0gICAgCi0gICAgYWRkU3Ry
dWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICBvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3Rv
dHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVDYXNl
cywKLSAgICAgICAgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgCi0gICAgaWYgKHB1dEtpbmQg
PT0gTm90RGlyZWN0KSB7Ci0gICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0
ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7Ci0gICAgICAgICAgICBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgKCppdCktPnN0b3JlZFBy
b3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsIGZhaWx1cmVD
YXNlcywKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgQVNTRVJUKG5lZWRTZWNv
bmRTY3JhdGNoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gSW52YWxpZEdQUlJlZyk7Ci0g
ICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVy
ZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1aXJlcyBpdAotICAgIFNwZWN1bGF0aXZlSklUOjp3cml0
ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0jZW5kaWYKLSAgICAKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0gICAgYm9vbCBzY3JhdGNoR1BSMUhhc1N0
b3JhZ2UgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBzaXpl
X3QgbmV3U2l6ZSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1Zh
bHVlKTsKLSAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0tPmhl
YXAuc3RvcmFnZUFsbG9jYXRvcigpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigm
Y29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxl
cjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNo
R1BSMSkpOwotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGll
ZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgIHN0dWJKaXQubmVn
UHRyKHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVu
ZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQo
bmV3U2l6ZSA+IG9sZFNpemUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUjEpOwotICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3ViUHRyKE1hY3JvQXNzZW1ibGVy
OjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hH
UFIxKSk7Ci0gICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVk
QWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAgICAgICAgc3R1YkppdC5uZWdQ
dHIoc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5k
KSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAg
ICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIxID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0g
b2xkIHN0b3JhZ2UsIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxlCi0gICAgICAgICAgICBmb3IgKHB0
cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNp
emUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewotICAgICAgICAgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMywgLShvZmZzZXQgKyBz
aXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAg
ICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoR1BSMSwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9p
ZCopKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdHVi
Sml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKLSAgICAgICAgc2NyYXRjaEdQUjFIYXNT
dG9yYWdlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdHViSml0LnN0b3JlUHRyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKLSAgICAgICAgc3R1
YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZs
eShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIH0KLSNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSB7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsg
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAr
IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQot
ICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAg
c3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWls
dXJlOwotICAgICAgICAgICAgCi0gICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygp
KSB7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0
dWJKaXQpOwotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0KLSAgICAgICAgZmFp
bHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNl
ZFJlZ2lzdGVyc0J5UG9wcGluZyhzdHViSml0KTsKLSAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQu
anVtcCgpOwotICAgIH0gZWxzZQotICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Ci0g
ICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBzdWNjZXNzSW5TbG93UGF0aDsKLSAgICAKLSAgICBpZiAoc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSkgewotICAgICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKLSAgICAgICAgCi0gICAgICAg
IGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOwotICAg
ICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JT
aXplKGFsbG9jYXRvci5kZXNpcmVkU2NyYXRjaEJ1ZmZlclNpemUoKSk7Ci0gICAgICAgIGFsbG9j
YXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXIoc3R1YkppdCwgc2NyYXRj
aEJ1ZmZlciwgc2NyYXRjaEdQUjEpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJK
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xv
dC5jYWNoZWRPZmZzZXQoKSksIHZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAgIHN0dWJKaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2xvdC5jYWNo
ZWRPZmZzZXQoKSksIHZhbHVlR1BSLCB2YWx1ZVRhZ0dQUik7Ci0jZW5kaWYKLSAgICAgICAgb3Bl
cmF0aW9uQ2FsbCA9IHN0dWJKaXQuY2FsbCgpOwotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVz
ZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlcihzdHViSml0LCBzY3JhdGNoQnVmZmVyLCBzY3Jh
dGNoR1BSMSk7Ci0gICAgICAgIHN1Y2Nlc3NJblNsb3dQYXRoID0gc3R1YkppdC5qdW1wKCk7Ci0g
ICAgfQotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhl
Yy0+Y29kZUJsb2NrKCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvRG9uZSkpOwotICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkKLSAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwotICAgIGVsc2UK
LSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIGZhaWx1cmVMYWJlbCk7Ci0g
ICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25D
YWxsLCBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dCk7Ci0gICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoc3VjY2Vzc0luU2xvd1BhdGgsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsK
LSAgICB9Ci0gICAgCi0gICAgc3R1YlJvdXRpbmUgPQotICAgICAgICBjcmVhdGVKSVRTdHViUm91
dGluZSgKLSAgICAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAotICAgICAgICAgICAgICAgIHBh
dGNoQnVmZmVyLAotICAgICAgICAgICAgICAgICgiREZHIFB1dEJ5SWQgJXN0cmFuc2l0aW9uIHN0
dWIgKCVwIC0+ICVwKSBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkgPyAicmVhbGxvY2F0aW5nICIgOiAiIiwKLSAgICAgICAgICAgICAgICAg
ICAgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgIHRvQ1N0cmlu
ZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSksCi0gICAgICAgICAgICAq
dm0sCi0gICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksCi0g
ICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLAotICAgICAgICAgICAgc3RydWN0dXJlKTsKLX0KLQotc3Rh
dGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7Ci0KLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7Ci0gICAgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsKLSAgICAKLSAgICBp
ZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChz
dHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAgIGlmIChzbG90LmJhc2UoKSA9
PSBiYXNlVmFsdWUpIHsKLSAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xv
dDo6TmV3UHJvcGVydHkpIHsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9j
LCBpZiB3ZSBkb24ndCBoYXZlCi0gICAgICAgICAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1h
a2UgaXQgaGFwcGVuLgotICAgICAgICAgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
IDwgNgotICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgICAgICAgICAmJiBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhl
IGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKLSAgICAg
ICAgICAgIC8vIGluZGV4aW5nIHN0b3JhZ2UuCi0gICAgICAgICAgICBpZiAob2xkU3RydWN0dXJl
LT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWlu
KGV4ZWMsIGJhc2VDZWxsKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFp
biogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCi0gICAgICAgICAg
ICAgICAgZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCi0g
ICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAot
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwKLSAgICAgICAgICAgICAg
ICBzdHViSW5mby5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
Lmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvU3RydWN0Q2hlY2spLAotICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRl
TGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlw
ZUNoYWluLCBwdXRLaW5kID09IERpcmVjdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9w
cmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsK
LSAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKCp2bSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBib29sIGNhY2hlZCA9IHRyeUNhY2hlUHV0QnlJRChl
eGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwot
ICAgIGlmICghY2FjaGVkKQotICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVu
Y3Rpb24oc2xvdCwgcHV0S2luZCkpOwotfQotCi1zdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRM
aXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotCi0g
ICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBK
U0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCk7Ci0gICAgCi0gICAgaWYgKCFzbG90LmlzQ2Fj
aGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3RydWN0dXJlLT5pc1Vu
Y2FjaGVhYmxlRGljdGlvbmFyeSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBP
cHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSB7
Ci0gICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7Ci0gICAgICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2xvdC50
eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewotICAgICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ug
d2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKLSAgICAgICAgICAgIC8v
IGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCi0gICAgICAgICAgICBpZiAoR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2Ci0gICAgICAgICAgICAgICAgJiYgb2xkU3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KQotICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0
aGUgc3RydWN0dXJlIGhhcwotICAgICAgICAgICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KLSAgICAg
ICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZUNlbGwpID09IEludmFsaWRQcm90b3R5
cGVDaGFpbikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJv
dG90eXBlQ2hhaW4oZXhlYyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlJ3JlIG5v
dyBjb21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBh
Y2NvcmRpbmdseS4KLSAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpm
cm9tKAotICAgICAgICAgICAgICAgIHB1dEtpbmQsIHN0dWJJbmZvLAotICAgICAgICAgICAgICAg
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGVt
aXRQdXRUcmFuc2l0aW9uU3R1YigKLSAgICAgICAgICAgICAgICBleGVjLCBiYXNlVmFsdWUsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCi0gICAgICAgICAgICAgICAgc3Ry
dWN0dXJlLCBvbGRTdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAotICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwKLSAgICAgICAg
ICAgICAgICBzdHViUm91dGluZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxpc3QtPmFk
ZEFjY2VzcygKLSAgICAgICAgICAgICAgICBQdXRCeUlkQWNjZXNzOjp0cmFuc2l0aW9uKAotICAg
ICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAg
ICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwK
LSAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1v
Z3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KLSAgICAgICAgICAgIGxpc3QgPSBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKAotICAgICAgICAgICAgICAgIHB1dEtpbmQsIHN0dWJJ
bmZvLAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGVtaXRQdXRSZXBsYWNlU3R1YigKLSAgICAgICAgICAgICAgICBl
eGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCi0g
ICAgICAgICAgICAgICAgc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50
U2xvd1BhdGhUYXJnZXQoKSksIHN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgbGlzdC0+YWRkQWNjZXNzKAotICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnJlcGxh
Y2UoCi0gICAgICAgICAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBzdHViUm91dGluZSkpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJs
b2NrKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RD
aGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCi0gICAgICAgICAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2Vu
ZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Ci0gICAgICAgIAotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIGJ1
aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQotewotICAgIGJvb2wg
Y2FjaGVkID0gdHJ5QnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFt
ZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpOwotICAgIGlmICghY2FjaGVkKQotICAgICAgICBy
ZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotfQot
Ci1zdGF0aWMgYm9vbCB0cnlSZXBhdGNoSW4oCi0gICAgRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIHdhc0ZvdW5kLAotICAgIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAg
IGlmICghYmFzZS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICh3YXNGb3VuZCkgewotICAgICAg
ICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
LSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJh
c2UtPnN0cnVjdHVyZSgpOwotICAgIAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldElnbm9yZWQ7
Ci0gICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2Vz
cyhleGVjLCBiYXNlLCB3YXNGb3VuZCA/IHNsb3Quc2xvdEJhc2UoKSA6IEpTVmFsdWUoKSwgaWRl
bnQsIG9mZnNldElnbm9yZWQpOwotICAgIGlmIChjb3VudCA9PSBJbnZhbGlkUHJvdG90eXBlQ2hh
aW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKLSAgICBpbnQgbGlzdEluZGV4
OwotICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmhv
dFBhdGhCZWdpbjsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsOwotICAgIAot
ICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc191bnNldCkgewotICAgICAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KCk7Ci0gICAgICAgIHN0dWJJbmZvLmluaXRJbkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LCAwKTsKLSAgICAgICAgc2xvd0Nhc2VMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpOwotICAgICAgICBsaXN0SW5kZXggPSAwOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2luX2xp
c3QpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmluTGlz
dC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmluTGlzdC5s
aXN0U2l6ZTsKLSAgICAgICAgc2xvd0Nhc2VMYWJlbCA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobGlzdEluZGV4ID09IFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgCi0gICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFp
bihleGVjKTsKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIAot
ICAgIHsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLnZhbHVlR1BSKTsKLSAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBSZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lz
dGVycykuZ2V0RnJlZUdQUigpOwotICAgICAgICAKLSAgICAgICAgQ0NhbGxIZWxwZXJzIHN0dWJK
aXQodm0pOwotICAgICAgICAKLSAgICAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaDsKLSAg
ICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgewotICAgICAgICAgICAgc2Ny
YXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3Vs
dEdQUik7Ci0gICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQoc3R1YkppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsKLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogY3Vy
clN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4q
IGl0ID0gY2hhaW4tPmhlYWQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
dW50OyArK2ksICsraXQpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09i
amVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpOwotICAgICAgICAg
ICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIHByb3RvdHlw
ZSwgcHJvdG90eXBlLT5zdHJ1Y3R1cmUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBz
dHViSml0LAotICAgICAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4od2FzRm91bmQpKSksIHJlc3Vs
dEdQUik7Ci0jZWxzZQotICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMih3YXNGb3VuZCksIHJlc3VsdEdQUik7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Ci0gICAgICAgIAotICAgICAgICBl
bWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hH
UFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7Ci0gICAgICAgIAotICAgICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKLQot
ICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3Jh
dGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VM
YWJlbCk7Ci0gICAgICAgIAotICAgICAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9S
X0RGR19TVFVCKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBJ
biAoZm91bmQgPSAlcykgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAg
ICAgICAgd2FzRm91bmQgPyAieWVzIiA6ICJubyIsIHRvQ1N0cmluZygqZXhlYy0+Y29kZUJsb2Nr
KCkpLmRhdGEoKSwKLSAgICAgICAgICAgICAgICBzdWNjZXNzTGFiZWwuZXhlY3V0YWJsZUFkZHJl
c3MoKSkpOwotICAgIH0KLSAgICAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3Rb
bGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91
dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKLSAgICBzdHViSW5mby51LmluTGlzdC5saXN0U2l6ZSsr
OwotICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQo
MCksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAg
Ci0gICAgcmV0dXJuIGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAx
KTsKLX0KLQotdm9pZCByZXBhdGNoSW4oCi0gICAgRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJh
c2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIHdhc0ZvdW5kLAotICAgIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlm
ICh0cnlSZXBhdGNoSW4oZXhlYywgYmFzZSwgaWRlbnQsIHdhc0ZvdW5kLCBzbG90LCBzdHViSW5m
bykpCi0gICAgICAgIHJldHVybjsKLSAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25Jbik7Ci19Ci0KLXN0YXRpYyB2
b2lkIGxpbmtTbG93Rm9yKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFZNKiB2bSwgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsK
LSAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0
dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZp
cnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLX0KLQotdm9pZCBsaW5rRm9y
KEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayog
Y2FsbGVlQ29kZUJsb2NrLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgQVNTRVJUKCFj
YWxsTGlua0luZm8uc3R1Yik7Ci0gICAgCi0gICAgLy8gSWYgeW91J3JlIGJlaW5nIGNhbGwtbGlu
a2VkIGZyb20gYSBERkcgY2FsbGVyIHRoZW4geW91IG9idmlvdXNseSBkaWRuJ3QgZ2V0IGlubGlu
ZWQuCi0gICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKLSAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5t
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgIAotICAgIENvZGVCbG9jayogY2Fs
bGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0q
IHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotICAgIAotICAgIEFTU0VSVCghY2FsbExpbmtJ
bmZvLmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby5jYWxsZWUuc2V0KGV4ZWMtPmNhbGxl
ckZyYW1lKCktPnZtKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7Ci0gICAgY2FsbExpbmtJbmZvLmxhc3RTZWVu
Q2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsZXJDb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxM
aW5rSW5mby5ob3RQYXRoT3RoZXIsIGNvZGVQdHIpOwotICAgIAotICAgIGlmIChjYWxsZWVDb2Rl
QmxvY2spCi0gICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLT5j
YWxsZXJGcmFtZSgpLCAmY2FsbExpbmtJbmZvKTsKLSAgICAKLSAgICBpZiAoa2luZCA9PSBDb2Rl
Rm9yQ2FsbCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVy
YXRvcikuY29kZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQo
a2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVy
LCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQotdm9pZCBsaW5rU2xv
d0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sg
PSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKLSAgICBWTSogdm0gPSBjYWxsZXJD
b2RlQmxvY2stPnZtKCk7Ci0gICAgCi0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNh
bGxlckNvZGVCbG9jayk7Ci0gICAgCi0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0s
IGNhbGxMaW5rSW5mbywga2luZCk7Ci19Ci0KLXZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0
ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29k
ZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQotewotICAgIEFTU0VSVCghY2FsbExpbmtJ
bmZvLnN0dWIpOwotICAgIAotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+
Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2Nr
LT52bSgpOwotICAgIAotICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+
KGNhbGxMaW5rSW5mby5jYWxsZWVHUFIpOwotICAgIAotICAgIENDYWxsSGVscGVycyBzdHViSml0
KHZtLCBjYWxsZXJDb2RlQmxvY2spOwotICAgIAotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzbG93UGF0aC5hcHBlbmQo
Ci0gICAgICAgIHN0dWJKaXQuYnJhbmNoVGVzdDY0KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpOb25aZXJvLCBjYWxsZWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotI2Vsc2UK
LSAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMg
YSBjZWxsLgotI2VuZGlmCi0gICAgCi0gICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICBzdHVi
Sml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUpKSk7Ci0gICAgCi0gICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICBzdHViSml0LmJy
YW5jaFB0cigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4
ZWN1dGFibGUoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhl
Y3V0YWJsZSkpKTsKLSAgICAKLSAgICBzdHViSml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigp
KSwKLSAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBzdHViSml0LnN0b3JlNjQoCi0gICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BS
LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNj
b3BlQ2hhaW4pKSk7Ci0jZWxzZQotICAgIHN0dWJKaXQuc3RvcmVQdHIoCi0gICAgICAgIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lz
dGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgIHN0dWJKaXQuc3RvcmUzMigKLSAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCi0gICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFp
bikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
KTsKLSNlbmRpZgotICAgIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBzdHViSml0Lm5l
YXJDYWxsKCk7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IHN0dWJKaXQuanVtcCgpOwot
ICAgIAotICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOwotICAgIHN0dWJKaXQubW92ZShjYWxs
ZWVHUFIsIEdQUkluZm86Om5vbkFyZ0dQUjApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
c3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
LCBHUFJJbmZvOjpub25BcmdHUFIxKTsKLSNlbmRpZgotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7Ci0gICAgc3R1YkppdC5yZXN0
b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBK
SVRDb21waWxlcjo6SnVtcCBzbG93ID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBjYWxsZXJDb2RlQmxvY2spOwotICAgIAot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxl
QWRkcmVzcygpKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvdywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dl
bmVyYXRvcikuY29kZSgpKSk7Ci0gICAgCi0gICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRp
bmU+IHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCi0g
ICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAg
ICAgICAgICAoIkRGRyBjbG9zdXJlIGNhbGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwg
dGFyZ2V0ICVwICglcykiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqY2FsbGVyQ29kZUJs
b2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIGNvZGVQdHIuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgdG9DU3RyaW5nKHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jaykpLmRh
dGEoKSkpLAotICAgICAgICAqdm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4pKTsKLSAgICAK
LSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKLSAgICAK
LSAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKLSAgICAgICAgUmVwYXRjaEJ1ZmZl
cjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBh
dGhCZWdpbiksCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKSk7Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5m
bywgQ29kZUZvckNhbGwpOwotICAgIAotICAgIGNhbGxMaW5rSW5mby5zdHViID0gc3R1YlJvdXRp
bmUucmVsZWFzZSgpOwotICAgIAotICAgIEFTU0VSVCghY2FsbGVlQ29kZUJsb2NrIHx8IGNhbGxl
ZUNvZGVCbG9jay0+aXNJbmNvbWluZ0NhbGxBbHJlYWR5TGlua2VkKCZjYWxsTGlua0luZm8pKTsK
LX0KLQotdm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKLSAg
ICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5w
YXRjaC5kZmcuZGVsdGFDaGVja0ltbVRvQ2FsbCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpj
YW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRo
UGF0Y2goCi0gICAgICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNo
UHRyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVjdHVyZUxhYmVsKSwKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUiksCi0gICAgICAg
ICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7Ci0gICAgfQotICAgIHJlcGF0Y2hCdWZm
ZXIucmVwYXRjaChzdHJ1Y3R1cmVMYWJlbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2Vk
UG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNo
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKLSNlbHNlCi0gICAg
cmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFi
ZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvVGFnTG9hZE9y
U3RvcmUpLCAwKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNlbmRpZgotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93
Q2FzZSkpOwotfQotCi12b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVm
ZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgVl9ERkdPcGVyYXRpb25f
RUpDSSB1bm9wdGltaXplZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfREZHT3BlcmF0aW9uX0VK
Q0k+KE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgb3B0
aW1pemVkRnVuY3Rpb247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
dHJpY3RCdWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpCi0gICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpCi0g
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9w
dGltaXplOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdCk7Ci0gICAgICAgIG9w
dGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXpl
OwotICAgIH0KLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIg
c3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRy
QXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRvQ2Fs
bCk7Ci0gICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5j
aFB0cldpdGhQYXRjaCgpKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxh
Y2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICBSZXBhdGNo
QnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoT25BZGRyZXNzKHN0cnVj
dHVyZUxhYmVsKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihzdHViSW5m
by5wYXRjaC5kZmcuYmFzZUdQUiksCi0gICAgICAgICAgICAgICAgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2lu
dGVyKSk7Ci0gICAgfQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHJ1Y3R1cmVMYWJlbCwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW51c2VkUG9pbnRlcikpOwotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0xvYWRP
clN0b3JlKSwgMCk7Ci0jZWxzZQotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRj
aChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKLSNlbmRpZgot
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1w
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotfQotCi12b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYg
cmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoMCksIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
LQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2
aXNpb24gMTU2NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIERGR1JlcGF0Y2hfaAotI2RlZmluZSBERkdS
ZXBhdGNoX2gKLQotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKERGR19K
SVQpCi0KLSNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgotI2luY2x1ZGUgIkRGR09wZXJhdGlv
bnMuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi12b2lkIHJlcGF0Y2hH
ZXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBidWlsZEdldEJ5SURMaXN0KEV4
ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0
YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0
cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIFB1dEtpbmQpOwotdm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSosIEpT
VmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIFB1dEtpbmQpOwotdm9pZCByZXBhdGNoSW4oRXhlY1N0YXRlKiwgSlNDZWxs
KiwgY29uc3QgSWRlbnRpZmllciYsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYs
IFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJ
bmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotdm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUq
LCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLXZvaWQgbGlua0Nsb3N1
cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIFN0cnVjdHVyZSos
IEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsKLXZvaWQgcmVzZXRHZXRC
eUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldFB1dEJ5
SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0SW4oUmVw
YXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKLQotI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKLXN0cnVj
dCBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotbmFtZXNwYWNlIERGRyB7Ci0KLWlubGluZSBOT19SRVRV
Uk5fRFVFX1RPX0NSQVNIIHZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotaW5saW5lIE5P
X1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0
cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci1pbmxp
bmUgTk9fUkVUVVJOIHZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1Yklu
Zm8mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLQotfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0jZW5kaWYgLy8gREZHUmVw
YXRjaF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE1NjQ4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMjAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAotI2Rl
ZmluZSBERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3JfaAotCi0jaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkRGR1JlZ2lzdGVyU2V0
LmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewotCi0vLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgbG93LWxldmVsIHJlZ2lzdGVy
IGFsbG9jYXRvciBmb3IgdXNlIGluIHN0dWJzLgotCi1jbGFzcyBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IgewotcHVibGljOgotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcihjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycykKLSAgICAgICAgOiBtX3VzZWRSZWdpc3RlcnModXNlZFJl
Z2lzdGVycykKLSAgICAgICAgLCBtX2RpZFJldXNlUmVnaXN0ZXJzKGZhbHNlKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGxvY2soVCByZWcp
IHsgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHJlZyk7IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBCYW5rSW5mbz4KLSAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIGFsbG9j
YXRlU2NyYXRjaCgpCi0gICAgewotICAgICAgICAvLyBGaXJzdCB0cnkgdG8gYWxsb2NhdGUgYSBy
ZWdpc3RlciB0aGF0IGlzIHRvdGFsbHkgZnJlZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEJhbmtJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgICAgICB0
eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIHJlZyA9IEJhbmtJbmZvOjp0b1JlZ2lzdGVy
KGkpOwotICAgICAgICAgICAgaWYgKCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVnKQotICAgICAg
ICAgICAgICAgICYmICFtX3VzZWRSZWdpc3RlcnMuZ2V0KHJlZykKLSAgICAgICAgICAgICAgICAm
JiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdldChyZWcpKSB7Ci0gICAgICAgICAgICAgICAgbV9zY3Jh
dGNoUmVnaXN0ZXJzLnNldChyZWcpOwotICAgICAgICAgICAgICAgIHJldHVybiByZWc7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFNpbmNlIHRoYXQgZmFp
bGVkLCB0cnkgdG8gYWxsb2NhdGUgYSByZWdpc3RlciB0aGF0IGlzIG5vdCB5ZXQKLSAgICAgICAg
Ly8gbG9ja2VkIG9yIHVzZWQgZm9yIHNjcmF0Y2guCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBCYW5rSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICAgICAg
dHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSByZWcgPSBCYW5rSW5mbzo6dG9SZWdpc3Rl
cihpKTsKLSAgICAgICAgICAgIGlmICghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlZykgJiYgIW1f
c2NyYXRjaFJlZ2lzdGVycy5nZXQocmVnKSkgewotICAgICAgICAgICAgICAgIG1fc2NyYXRjaFJl
Z2lzdGVycy5zZXQocmVnKTsKLSAgICAgICAgICAgICAgICBtX2RpZFJldXNlUmVnaXN0ZXJzID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVnOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICAvLyBXZSBmYWlsZWQuCi0gICAgICAgIENSQVNIKCk7Ci0g
ICAgICAgIC8vIE1ha2Ugc29tZSBzaWxseSBjb21waWxlcnMgaGFwcHkuCi0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlPigtMSk7Ci0gICAg
fQotICAgIAotICAgIEdQUlJlZyBhbGxvY2F0ZVNjcmF0Y2hHUFIoKSB7IHJldHVybiBhbGxvY2F0
ZVNjcmF0Y2g8R1BSSW5mbz4oKTsgfQotICAgIEZQUlJlZyBhbGxvY2F0ZVNjcmF0Y2hGUFIoKSB7
IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8RlBSSW5mbz4oKTsgfQotICAgIAotICAgIGJvb2wgZGlk
UmV1c2VSZWdpc3RlcnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGlkUmV1c2VS
ZWdpc3RlcnM7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnNC
eVB1c2hpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9kaWRS
ZXVzZVJlZ2lzdGVycykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkgJiYg
bV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKLSAgICAgICAgICAgICAgICBqaXQu
c3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQ
UkluZm86OnRvUmVnaXN0ZXIoaSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMu
Z2V0R1BSQnlJbmRleChpKSkKLSAgICAgICAgICAgICAgICBqaXQucHVzaChHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlc3RvcmVSZXVz
ZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCkKLSAgICB7Ci0gICAgICAg
IGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBp
LS07KSB7Ci0gICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgo
aSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAg
aml0LnBvcChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAgfQotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAg
ICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpICYmIG1fdXNlZFJl
Z2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7Ci0gICAgICAgICAgICAgICAgaml0LmxvYWREb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBGUFJJbmZvOjp0b1JlZ2lz
dGVyKGkpKTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgZGVzaXJlZFNj
cmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLm51bWJlck9m
U2V0UmVnaXN0ZXJzKCkgKiBzaXplb2YoSlNWYWx1ZSk7IH0KLSAgICAKLSAgICB2b2lkIHByZXNl
cnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3Jh
dGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJS
ZWcpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAg
ICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpIHsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIoaSks
IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigp
KSArIChjb3VudCsrKSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUklu
Zm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1
ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcgJiYgIW1fbG9ja2Vk
UmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJC
eUluZGV4KGkpKQotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lz
dGVyKGkpOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0g
SW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdl
dEZQUkJ5SW5kZXgoaSkpIHsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZm
ZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
ICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSwgc2NyYXRjaEdQUik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQg
KiBzaXplb2YoSlNWYWx1ZSkgPT0gZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkpOwotICAgICAg
ICAKLSAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRj
aEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgaml0LnN0
b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4o
Y291bnQgKiBzaXplb2YoSlNWYWx1ZSkpKSwgc2NyYXRjaEdQUik7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgcmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxl
ciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9
IEludmFsaWRHUFJSZWcpCi0gICAgewotICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlk
R1BSUmVnKSB7Ci0gICAgICAgICAgICAvLyBGaW5kIGEgc2NyYXRjaCByZWdpc3Rlci4KLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgo
aSkgfHwgbV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0
b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJl
Zyk7Ci0gICAgICAgIAotICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIHNjcmF0
Y2hHUFIpOwotCi0gICAgICAgIC8vIFJlc3RvcmUgZG91YmxlIHJlZ2lzdGVycyBmaXJzdC4KLSAg
ICAgICAgdW5zaWduZWQgY291bnQgPSBtX3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRHUFJzKCk7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBp
LS07KSB7Ci0gICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkp
IHsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIo
KSkgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZERv
dWJsZShzY3JhdGNoR1BSLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY291bnQgPSAwOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAg
ICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKSB7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgICAgICAgICBqaXQubG9hZDY0KHN0YXRpY19jYXN0PEVuY29kZWRKU1Zh
bHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSwgR1BSSW5mbzo6
dG9SZWdpc3RlcihpKSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoc3RhdGlj
X2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNv
dW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSNlbmRpZgotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBSZWdpc3RlclNldCBtX3VzZWRS
ZWdpc3RlcnM7Ci0gICAgUmVnaXN0ZXJTZXQgbV9sb2NrZWRSZWdpc3RlcnM7Ci0gICAgUmVnaXN0
ZXJTZXQgbV9zY3JhdGNoUmVnaXN0ZXJzOwotICAgIGJvb2wgbV9kaWRSZXVzZVJlZ2lzdGVyczsK
LX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQotCi0jZW5kaWYgLy8gREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yX2gKLQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCShyZXZpc2lvbiAxNTY0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRo
R2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Ns
b3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAi
T2JqZWN0UHJvdG90eXBlLmgiCkBAIC0yNjEsNyArMjYyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBwYXls
b2FkU3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2
YWx1ZVBheWxvYWRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKIAogICAg
IEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwotICAgIFZfREZH
T3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkQ2FsbDsKKyAgICBWX0pJVE9wZXJhdGlvbl9FSkNJIG9w
dGltaXplZENhbGw7CiAgICAgaWYgKG1faml0LnN0cmljdE1vZGVGb3IobV9jdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbikpIHsKICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQogICAgICAgICAg
ICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsK
QEAgLTQ0MCw3ICs0NDEsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNv
bXBhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBo
ZWxwZXJGdW5jdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhv
bGVCcmFuY2goTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9u
KQogewogICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOwog
ICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwpA
QCAtNTEyLDEzICs1MTMsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQ
ZWVwaAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKdW1wVHlwZT4KIGNsYXNzIENvbXBhcmVBbmRCb3hC
b29sZWFuU2xvd1BhdGhHZW5lcmF0b3IKLSAgICA6IHB1YmxpYyBDYWxsU2xvd1BhdGhHZW5lcmF0
b3I8SnVtcFR5cGUsIFNfREZHT3BlcmF0aW9uX0VKSiwgR1BSUmVnPiB7CisgICAgOiBwdWJsaWMg
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0pJVE9wZXJhdGlvbl9FSkosIEdQUlJl
Zz4gewogcHVibGljOgogICAgIENvbXBhcmVBbmRCb3hCb29sZWFuU2xvd1BhdGhHZW5lcmF0b3Io
CiAgICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsCi0gICAgICAgIFNf
REZHT3BlcmF0aW9uX0VKSiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcs
IEdQUlJlZyBhcmcxUGF5bG9hZCwKKyAgICAgICAgU19KSVRPcGVyYXRpb25fRUpKIGZ1bmN0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLAogICAg
ICAgICBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQotICAgICAgICA6IENhbGxT
bG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19ERkdPcGVyYXRpb25fRUpKLCBHUFJSZWc+KAor
ICAgICAgICA6IENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19KSVRPcGVyYXRpb25f
RUpKLCBHUFJSZWc+KAogICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgTmVlZFRvU3Bp
bGwsIHJlc3VsdCkKICAgICAgICAgLCBtX2FyZzFUYWcoYXJnMVRhZykKICAgICAgICAgLCBtX2Fy
ZzFQYXlsb2FkKGFyZzFQYXlsb2FkKQpAQCAtNTQ2LDcgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAg
R1BSUmVnIG1fYXJnMlBheWxvYWQ7CiB9OwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24p
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShO
b2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0pJ
VE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7CkBAIC0zNjA2LDcgKzM2MDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoRmluYWxPYmpl
Y3RUeXBlKSkpOwogICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZVBheWxvYWRHUFIsIHRlbXBH
UFIpOwogICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZVRhZ0dQUiwgdGVtcFRhZ0dQUik7Ci0g
ICAgICAgIEpfREZHT3BlcmF0aW9uX0VKIGZ1bmN0aW9uOworICAgICAgICBKX0pJVE9wZXJhdGlv
bl9FSiBmdW5jdGlvbjsKICAgICAgICAgaWYgKG1faml0LmdyYXBoKCkuZXhlY3V0YWJsZUZvcihu
b2RlLT5jb2RlT3JpZ2luKS0+aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICBmdW5jdGlvbiA9
IG9wZXJhdGlvblRvVGhpc1N0cmljdDsKICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAx
NTY0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQXJyYXlQcm90
b3R5cGUuaCIKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkRGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiCisjaW5jbHVk
ZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAj
aW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUu
aCIKQEAgLTI1Myw3ICsyNTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlk
KENvZGVPCiAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwo
KTsKICAgICAKLSAgICBWX0RGR09wZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7CisgICAgVl9K
SVRPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRDYWxsOwogICAgIGlmIChtX2ppdC5zdHJpY3RNb2Rl
Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pKSB7CiAgICAgICAgIGlmIChwdXRLaW5kID09
IERpcmVjdCkKICAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemU7CkBAIC00MjgsNyArNDI5LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVDb21wYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBOb2Rl
KiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBT
X0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCit2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9u
X0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKICAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5v
ZGUtPnRha2VuQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUt
Pm5vdFRha2VuQmxvY2soKTsKQEAgLTQ5OCwxMiArNDk5LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKIAogdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGU+CiBj
bGFzcyBDb21wYXJlQW5kQm94Qm9vbGVhblNsb3dQYXRoR2VuZXJhdG9yCi0gICAgOiBwdWJsaWMg
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0RGR09wZXJhdGlvbl9FSkosIEdQUlJl
Zz4geworICAgIDogcHVibGljIENhbGxTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgU19KSVRP
cGVyYXRpb25fRUpKLCBHUFJSZWc+IHsKIHB1YmxpYzoKICAgICBDb21wYXJlQW5kQm94Qm9vbGVh
blNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBKdW1wVHlwZSBmcm9tLCBTcGVjdWxhdGl2ZUpJ
VCogaml0LAotICAgICAgICBTX0RGR09wZXJhdGlvbl9FSkogZnVuY3Rpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKLSAgICAgICAgOiBDYWxsU2xvd1BhdGhHZW5l
cmF0b3I8SnVtcFR5cGUsIFNfREZHT3BlcmF0aW9uX0VKSiwgR1BSUmVnPigKKyAgICAgICAgU19K
SVRPcGVyYXRpb25fRUpKIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIpCisgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBTX0pJ
VE9wZXJhdGlvbl9FSkosIEdQUlJlZz4oCiAgICAgICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9u
LCBOZWVkVG9TcGlsbCwgcmVzdWx0KQogICAgICAgICAsIG1fYXJnMShhcmcxKQogICAgICAgICAs
IG1fYXJnMihhcmcyKQpAQCAtNTI1LDcgKzUyNiw3IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1f
YXJnMjsKIH07CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhv
bGVDb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUqIG5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBo
ZWxwZXJGdW5jdGlvbikKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
QEAgLTM5MDIsNyArMzkwMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVj
dHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEZp
bmFsT2JqZWN0VHlwZSkpKTsKICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHRlbXBH
UFIpOwotICAgICAgICBKX0RGR09wZXJhdGlvbl9FSiBmdW5jdGlvbjsKKyAgICAgICAgSl9KSVRP
cGVyYXRpb25fRUogZnVuY3Rpb247CiAgICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLmV4ZWN1dGFi
bGVGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmlzU3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgZnVu
Y3Rpb24gPSBvcGVyYXRpb25Ub1RoaXNTdHJpY3Q7CiAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biAxNTY0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk1LDIyICs4OTUsNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjp1c2VDaGlsZHJlbihOb2RlKiBuCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojp3cml0ZUJhcnJpZXIoTWFjcm9Bc3NlbWJsZXImIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcg
c2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQot
ewotICAgIFVOVVNFRF9QQVJBTShqaXQpOwotICAgIFVOVVNFRF9QQVJBTShvd25lcik7Ci0gICAg
VU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOwotICAg
IFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKLSAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDEpOwot
ICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoMik7Ci0gICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNj
cmF0Y2gyKTsKLQotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBKSVRD
b21waWxlcjo6ZW1pdENvdW50KGppdCwgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJG
b3IodXNlS2luZCkpOwotI2VuZGlmCi19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFy
cmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3Jp
dGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNo
MikKIHsKICAgICBVTlVTRURfUEFSQU0ob3duZXJHUFIpOwpAQCAtMTAxNyw3ICsxMDAxLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluKE5vZGUqIG5vZAogI2VuZGlmCiB9CiAKLWJv
b2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNy
b0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkog
aGVscGVyRnVuY3Rpb24pCitib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBh
cmUoTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwg
U19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewogICAgIHVuc2lnbmVkIGJyYW5j
aEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaElu
ZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewpAQCAtMTQ2NSw3ICsxNDQ5LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50MwogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIGNvbXBhcmUgaXMgZnVzZWQgd2l0aCBhIHN1YnNlcXVlbnQgYnJhbmNoLgotYm9vbCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24p
Citib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSogbm9kZSwg
TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRpdGlvbiwgU19KSVRPcGVyYXRpb25fRUpK
IG9wZXJhdGlvbikKIHsKICAgICAvLyBGdXNlZCBjb21wYXJlICYgYnJhbmNoLgogICAgIHVuc2ln
bmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CkBAIC0zODQy
LDcgKzM4MjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiB9
CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2Vx
dWVudCBicmFuY2guCi1ib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsIE1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBv
cGVyYXRpb24pCitib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBvcGVy
YXRpb24pCiB7CiAgICAgaWYgKGNvbXBpbGVQZWVwSG9sZUJyYW5jaChub2RlLCBjb25kaXRpb24s
IGRvdWJsZUNvbmRpdGlvbiwgb3BlcmF0aW9uKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZp
c2lvbiAxNTY0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEwICszNiwxMSBAQAogI2luY2x1ZGUgIkRGR0pJ
VENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR09TUkV4
aXRKdW1wUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIgogI2luY2x1ZGUgIkRGR1ZhbHVlU291cmNl
LmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRv
ci5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTMxMSw4ICszMTIsNiBAQCBwdWJs
aWM6CiAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludEZvck1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
d3JpdGVCYXJyaWVyKE1hY3JvQXNzZW1ibGVyJiwgR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgc2Ny
YXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyVXNlS2luZCk7Ci0KICAg
ICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRn
ZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52
YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CiAgICAgdm9p
ZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJp
ZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2Ny
YXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnKTsKICAgICB2b2lkIHdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtp
bmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcpOwpAQCAtNzM5LDkgKzczOCw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKEVk
Z2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CiAgICAg
Ym9vbCBub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKE5vZGUqLCBFZGdlIG9wZXJhbmQsIGJvb2wg
aW52ZXJ0ID0gZmFsc2UpOwogICAgIAotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7Ci0gICAgdm9pZCBu
b25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7Ci0g
ICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxh
dGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOworICAg
IHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiwgTm9kZSogYnJhbmNoTm9k
ZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VK
SiBoZWxwZXJGdW5jdGlvbik7CisgICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29t
cGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfSklUT3Bl
cmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7CisgICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBh
cmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJh
dGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwogICAgIAogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQ
ZWVwaG9sZVN0cmljdEVxKE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCA9IGZh
bHNlKTsKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcShOb2RlKiwg
Ym9vbCBpbnZlcnQgPSBmYWxzZSk7CkBAIC05MzEsMTY5ICs5MzAsMTY5IEBAIHB1YmxpYzoKICAg
ICAvLyBtYWNoaW5lIHJlZ2lzdGVycywgYW5kIGRlbGVnYXRlIHRoZSBjYWxsaW5nIGNvbnZlbnRp
b24gc3BlY2lmaWMKICAgICAvLyBkZWNpc2lvbiBhcyB0byBob3cgdG8gZmlsbCB0aGUgcmVnc2l0
ZXJzIHRvIHNldHVwQXJndW1lbnRzKiBtZXRob2RzLgogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0Ugb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGNlbGwpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQ
X0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBjZWxsKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGNlbGwpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oUF9ERkdPcGVyYXRpb25fRU8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2Jq
ZWN0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25f
RU8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0KQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09w
ZXJhdGlvbl9FT1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBzaXpl
X3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0
aW9uX0VPUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIHNpemVfdCBz
aXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9i
amVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FT1ogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1t
UHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBvYmplY3QsIGludDMyX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBvYmplY3QsIGludDMyX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8
c2l6ZV90PihzaXplKSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIG9sZCwgc2l6ZV90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgb2xkLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShvbGQsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdP
cGVyYXRpb25fRVMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBzaXplX3Qgc2l6ZSkKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09w
ZXJhdGlvbl9FU0pzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHNpemVfdCBpbmRleCwgR1BS
UmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJh
dGlvbl9FU0pzcyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHNpemVfdCBpbmRleCwgR1BSUmVn
IGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihpbmRleCksIGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0IG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3Qgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
UF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFBfSklUT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihQX0pJVE9wZXJhdGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZElt
bTMyKGFyZzIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0UFMg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdm9pZCogcG9p
bnRlciwgc2l6ZV90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQ
X0pJVE9wZXJhdGlvbl9FU3RQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCB2b2lkKiBwb2ludGVyLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdP
cGVyYXRpb25fRVN0U1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgc2l6ZV90IGluZGV4LCBzaXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VTdFNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBpbmRleCwgc2l6ZV90IHNpemUpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKGluZGV4KSwgVHJ1c3RlZEltbVB0cihzaXplKSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihDX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3Rh
dGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJh
dGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdP
cGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU0NlbGwqIGNlbGwpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGNlbGwpKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZH
T3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU0Nl
bGwqIGNlbGwpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJh
dGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNDZWxsKiBj
ZWxsKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIFRydXN0ZWRJbW1QdHIoY2VsbCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUljZiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUljZiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW1QdHIoaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FU3Qgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VTdCBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RG
R09wZXJhdGlvbl9FSnNzU3Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihDX0pJVE9wZXJhdGlvbl9FSnNzU3Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KENfREZHT3BlcmF0aW9uX0VKc3NKc3Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihD
X0pJVE9wZXJhdGlvbl9FSnNzSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUpzc0pzc0pzcyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFy
ZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9F
SnNzSnNzSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUNDIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
c3NfREZHT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKc3NfSklUT3BlcmF0aW9uX0Va
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
ICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0
aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAg
IH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25f
RUNJY2Ygb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlv
bl9FQ0ljZiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSkpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDQ0ljZiBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlv
bl9FQ0NJY2Ygb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1l
KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09w
ZXJhdGlvbl9FQ1ogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgaW50IGFyZzIpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ1ogb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMSwgaW50IGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbTMyKGFyZzIpKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfREZHT3BlcmF0aW9uX1cgb3BlcmF0aW9uLCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50
U2V0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25f
VyBvcGVyYXRpb24sIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhUcnVzdGVkSW1tUHRyKHdhdGNocG9pbnRTZXQpKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKQEAgLTExMjUsMjQ0ICsxMTI0LDI0
NCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJn
MSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlvbl9aWiBvcGVyYXRpb24sIEZQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX1paIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHMoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihEX0RGR09wZXJhdGlvbl9ERCBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEZQUlJlZyBhcmcx
LCBGUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfSklU
T3BlcmF0aW9uX0REIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEZQUlJl
ZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSwgYXJnMik7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
ICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihJX0RGR09wZXJhdGlv
bl9FSnNzIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihJX0pJVE9wZXJhdGlvbl9FSnNzIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FWiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfREZHT3Bl
cmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzKGFyZzEpOwogICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQuYXBw
ZW5kQ2FsbChvcGVyYXRpb24pOwogICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUkg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSSBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRUEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VBIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQVogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQVogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FSnNzWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9u
X0VKc3NaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
dm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCB2b2lk
KiBwb2ludGVyLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBUcnVzdGVkSW1tUHRyKHNp
emUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGlu
dCBzdGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgaW50IHN0YXJ0Q29uc3RhbnQsIGludCBudW1Db25zdGFudHMpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKHN0YXJ0Q29uc3Rh
bnQpLCBUcnVzdGVkSW1tMzIobnVtQ29uc3RhbnRzKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FUFAg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdm9pZCogcG9pbnRlcikKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQUCBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJ
bW1QdHIocG9pbnRlcikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBKU0NlbGwqIGNlbGwpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTQ2VsbCogY2Vs
bCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyKGNlbGwpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBjb25zdCBTdHJpbmdJbXBsKiB1aWQpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5nSW1wbCogdWlkKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJ
bW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRURBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRURBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50MzJfdCBh
cmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQzMl90IGFyZzEpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIGludDMyX3Qg
YXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQzMl90IGFyZzEs
IEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWklj
Zlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQzMl90IGFyZzEsIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VaSWNmWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIGludDMyX3QgYXJnMSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEdQUlJl
ZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KFRydXN0ZWRJbW0zMihhcmcxKSwgVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpLCBhcmcy
KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRUpTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIHZhbHVlLCBzaXplX3QgaW5kZXgpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihQX0pJVE9wZXJhdGlvbl9FSlMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
dmFsdWUsIHNpemVfdCBpbmRleCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZSh2YWx1ZSwgVHJ1c3RlZEltbVB0cihpbmRleCkpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FU3RKIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRVN0SiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJn
MikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FSiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNf
SklUT3BlcmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzKGFyZzEpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZH
T3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0
aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGltbS5tX3ZhbHVlKSkpKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJnMikKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0ubV92YWx1ZSkp
KSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNWYWx1
ZVJlZ3MgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVl
UmVncyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIGFyZzIuZ3ByKCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FT1pEIG9wZXJhdGlv
biwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBGUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkQgb3BlcmF0aW9uLCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEZQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpQUCBv
cGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKUFAgb3BlcmF0
aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3Rl
ZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9ERkdPcGVyYXRpb25fRUpDSSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oVl9KSVRPcGVyYXRpb25fRUpDSSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MiwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpKSiBvcGVy
YXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkpKIG9wZXJhdGlvbiwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FUFpK
IG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VQWkogb3BlcmF0
aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwog
ICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRp
b25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FT1pK
IG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBh
cmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09w
ZXJhdGlvbl9FQ0pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcg
YXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9u
X0VDSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhv
cGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
RF9ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX0VKIG9w
ZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAg
LTEzODYsNyArMTM4NSw3IEBAIHB1YmxpYzoKICNkZWZpbmUgU0g0XzMyQklUX0RVTU1ZX0FSRwog
I2VuZGlmCiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0
aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIHByZXBhcmVGb3JFeHRlcm5h
bENhbGwoKTsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSk7CkBAIC0xMzk0LDIz
MyArMTM5MywyMzMgQEAgcHVibGljOgogICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAg
ICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25f
RSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRSBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2Fk
LCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIHZvaWQqIHBvaW50ZXIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkLCB2b2lkKiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVy
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVBQ
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJl
ZyBhcmcxLCB2b2lkKiBwb2ludGVyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFn
LCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQ
YXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BS
UmVnIHJlc3VsdFBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHVpZCkp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQSBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VBWiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQVog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRh
Zyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRUpzc1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpzc1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIHZvaWQqIHBvaW50ZXIsIHNpemVf
dCBzaXplKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQs
IHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJbW1Q
dHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVNTIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludCBzdGFydENv
bnN0YW50LCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BS
UmVnIHJlc3VsdFBheWxvYWQsIGludCBzdGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3RhbnRzKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW0zMihzdGFydENvbnN0YW50KSwgVHJ1c3RlZEltbTMyKG51bUNvbnN0YW50cykpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBh
eWxvYWQsIHZvaWQqIHBvaW50ZXIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0pJVE9wZXJhdGlvbl9FSlAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcg
cmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgdm9pZCog
cG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgVHJ1c3RlZEltbVB0
cihwb2ludGVyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSlAgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFy
ZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSlAgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBh
cmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFU
YWcsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogCi0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBKU0NlbGwqIGNl
bGwpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
QyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBKU0Nl
bGwqIGNlbGwpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoVHJ1c3RlZEltbVB0cihjZWxsKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFn
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgR1BSUmVnIGFyZzEsIGNvbnN0IFN0cmluZ0ltcGwqIHVpZCkKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5n
SW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVz
dWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0
UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgU3RyaW5nSW1wbCog
dWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQ
UlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIFN0cmluZ0ltcGwqIHVpZCkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RV
TU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBpbnQzMl90IGFyZzFUYWcsIEdQUlJlZyBhcmcx
UGF5bG9hZCwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BS
UmVnIHJlc3VsdFBheWxvYWQsIGludDMyX3QgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBT
dHJpbmdJbXBsKiB1aWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIFRydXN0ZWRJbW0zMihh
cmcxVGFnKSwgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1
bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZH
T3BlcmF0aW9uX0VEQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBGUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FREEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgRlBSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRf
RFVNTVlfQVJHIGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7
CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRp
b25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQs
IEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpBIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFn
LCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXls
b2FkLCBhcmcxVGFnLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VKQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBU
cnVzdGVkSW1tMzIgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMikKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQSBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBUcnVzdGVkSW1t
MzIgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FS
RyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVz
dWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJl
ZyBhcmcxUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSkKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFn
LCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxKQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWkljZlogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpLCBU
cnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxv
YWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9ERkdPcGVyYXRpb25fRVpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVn
IHJlc3VsdFBheWxvYWQsIGludDMyX3QgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWlogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50MzJfdCBhcmcxLCBHUFJSZWcg
YXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tMzIoYXJnMSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRh
Zyk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09w
ZXJhdGlvbl9FSlMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU1ZhbHVlUmVncyB2YWx1ZSwg
c2l6ZV90IGluZGV4KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRP
cGVyYXRpb25fRUpTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgdmFsdWUs
IHNpemVfdCBpbmRleCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyB2YWx1ZS5wYXlsb2FkR1BSKCksIHZhbHVlLnRh
Z0dQUigpLCBUcnVzdGVkSW1tUHRyKGluZGV4KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcy
UGF5bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0
aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
R1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFy
ZzJQYXlsb2FkLCBhcmcyVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRf
RFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0ogb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2Fk
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fSiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxv
YWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhhcmcxUGF5bG9hZCwgYXJn
MVRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09w
ZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJS
ZWcgYXJnMVBheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJ
VE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBH
UFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihTX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQ
YXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRp
b25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBh
cmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1Z
X0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgU0g0XzMyQklUX0RVTU1ZX0FSRyBhcmcyUGF5bG9h
ZCwgYXJnMlRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcx
UGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BS
UmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRf
RFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBTSDRfMzJCSVRfRFVNTVlfQVJHIGFyZzJQ
YXlsb2FkLCBhcmcyVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VK
SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJS
ZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyIGltbSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2Fk
LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyIGltbSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgU0g0XzMy
QklUX0RVTU1ZX0FSRyBpbW0sIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIgaW1tLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIgaW1tLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVN
TVlfQVJHIGltbSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgU0g0XzMyQklUX0RV
TU1ZX0FSRyBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVz
dWx0VGFnKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9h
ZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VD
SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyUGF5bG9hZCwg
YXJnMlRhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0
aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNKIG9w
ZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJn
MikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMi50YWdHUFIoKSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0LnBheWxv
YWRHUFIoKSwgcmVzdWx0LnRhZ0dQUigpKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNDIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwog
ICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRp
b25fRU9aRCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgRlBSUmVnIGFyZzMp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FT1pE
IG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBGUFJSZWcgYXJnMykKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBF
QUJJXzMyQklUX0RVTU1ZX0FSRyBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJn
MVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKUFAgb3Bl
cmF0aW9uLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwg
dm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwg
VHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpDSSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFn
LCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyLCBTdHJpbmdJbXBsKiB1aWQpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkNJIG9wZXJh
dGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIsIFN0
cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMiwg
VHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQ0pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJn
M1BheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJh
dGlvbl9FQ0pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcg
YXJnMlBheWxvYWQsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMlBheWxv
YWQsIGFyZzJUYWcsIGFyZzNQYXlsb2FkLCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxv
YWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9F
UFpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnM1RhZywg
R1BSUmVnIGFyZzNQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJCSVRfRFVNTVlfQVJHIFNINF8zMkJJVF9E
VU1NWV9BUkcgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkog
b3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJS
ZWcgYXJnM1BheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgU0g0XzMyQklUX0RVTU1Z
X0FSRyBhcmczUGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VPWkog
b3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczVGFn
LCBHUFJSZWcgYXJnM1BheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgU0g0XzMyQklU
X0RVTU1ZX0FSRyBhcmczUGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1N
WV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC0xOTIzLDgg
KzE5MjIsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiZXR0ZXJVc2VTdHJpY3RJbnQ1Mihl
ZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgY29tcGFyZShOb2RlKiwgTWFjcm9B
c3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25k
aXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSik7Ci0gICAgYm9vbCBjb21waWxlUGVlcEhvbGVCcmFu
Y2goTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkopOworICAgIGJvb2wgY29t
cGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSik7CisgICAgYm9vbCBj
b21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9F
SkopOwogICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlSW50MzJCcmFuY2goTm9kZSosIE5vZGUqIGJy
YW5jaE5vZGUsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICB2b2lkIGNv
bXBpbGVQZWVwSG9sZUludDUyQnJhbmNoKE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21w
aWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVCb29s
ZWFuQnJhbmNoKE5vZGUqLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3Bw
CShyZXZpc2lvbiAxNTY0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5r
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDIzOCArOTMsNiBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsICgiREZHIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsiKSk7CiB9CiAKLWlubGluZSB2
b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50
ZXJHUFIpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIENDYWxsSGVscGVyczo6SnVtcCBp
c05vblplcm8gPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHBvaW50
ZXJHUFIpOwotICAgIGppdC5icmVha3BvaW50KCk7Ci0gICAgaXNOb25aZXJvLmxpbmsoJmppdCk7
Ci0gICAgaml0LnB1c2gocG9pbnRlckdQUik7Ci0gICAgaml0LmxvYWQ4KHBvaW50ZXJHUFIsIHBv
aW50ZXJHUFIpOwotICAgIGppdC5wb3AocG9pbnRlckdQUik7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShqaXQpOwotICAgIFVOVVNFRF9QQVJBTShwb2ludGVyR1BSKTsKLSNlbmRpZgotfQotCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKFZNKiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKLSAgICAKLSAgICAvLyBX
ZSB3aWxsIGp1bXAgdG8gaGVyZSBpZiB0aGUgSklUIGNvZGUgdGhpbmtzIGl0J3MgbWFraW5nIGEg
Y2FsbCwgYnV0IHRoZQotICAgIC8vIGxpbmtpbmcgaGVscGVyIChDKysgY29kZSkgZGVjaWRlZCB0
byB0aHJvdyBhbiBleGNlcHRpb24gaW5zdGVhZC4gV2Ugd2lsbAotICAgIC8vIGhhdmUgc2F2ZWQg
dGhlIGNhbGxSZXR1cm5JbmRleCBpbiB0aGUgZmlyc3QgYXJndW1lbnRzIG9mIEpJVFN0YWNrRnJh
bWUuCi0gICAgLy8gTm90ZSB0aGF0IHRoZSByZXR1cm4gYWRkcmVzcyB3aWxsIGJlIG9uIHRoZSBz
dGFjayBhdCB0aGlzIHBvaW50LCBzbyB3ZQotICAgIC8vIG5lZWQgdG8gcmVtb3ZlIGl0IGFuZCBk
cm9wIGl0IG9uIHRoZSBmbG9vciwgc2luY2Ugd2UgZG9uJ3QgY2FyZSBhYm91dCBpdC4KLSAgICAv
LyBGaW5hbGx5IG5vdGUgdGhhdCB0aGUgY2FsbCBmcmFtZSByZWdpc3RlciBwb2ludHMgYXQgdGhl
IGNhbGxlZSBmcmFtZSwgc28KLSAgICAvLyB3ZSBuZWVkIHRvIHBvcCBpdC4KLSAgICBqaXQucHJl
c2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUik7Ci0gICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygK
LSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OkNhbGxlckZy
YW1lKSwKLSAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgaml0LnBlZWs2NChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIs
IEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7Ci0jZWxzZQotICAgIGppdC5wZWVrKEdQUkluZm86
Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKLSNl
bmRpZgotICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86
Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVt
aXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAg
aml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJERkcgdGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBz
bG93IHBhdGggdGh1bmsiKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAotICAgIEND
YWxsSGVscGVycyYgaml0LCBWTSogdm0sIFBfREZHT3BlcmF0aW9uX0Ugc2xvd1BhdGhGdW5jdGlv
bikKLXsKLSAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5v
bkFyZ0dQUjIpOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFy
Z0dQUjIpOwotICAgIGppdC5zdG9yZVB0cigKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMiwK
LSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihSZWdpc3RlcikpICogSlNTdGFjazo6UmV0dXJuUEMpKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGppdC5wb2tlNjQoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BS
LCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOwotI2Vsc2UKLSAgICBqaXQucG9rZShHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7Ci0j
ZW5kaWYKLSAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKLSAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzbG93UGF0aEZ1
bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlv
bihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFy
Z0dQUjApOwotICAgIAotICAgIC8vIFRoaXMgc2xvdyBjYWxsIHdpbGwgcmV0dXJuIHRoZSBhZGRy
ZXNzIG9mIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgIC8vIDEpIEV4Y2VwdGlvbiB0aHJvd2lu
ZyB0aHVuay4KLSAgICAvLyAyKSBIb3N0IGNhbGwgcmV0dXJuIHZhbHVlIHJldHVybmVyIHRoaW5n
eS4KLSAgICAvLyAzKSBUaGUgZnVuY3Rpb24gdG8gY2FsbC4KLSAgICBqaXQubG9hZFB0cigKLSAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihS
ZWdpc3RlcikpICogSlNTdGFjazo6UmV0dXJuUEMpLAotICAgICAgICBHUFJJbmZvOjpub25QcmVz
ZXJ2ZWROb25SZXR1cm5HUFIpOwotICAgIGppdC5zdG9yZVB0cigKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKDApLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0g
ICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQykp
OwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vblByZXNlcnZlZE5v
blJldHVybkdQUik7Ci0gICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQ
UkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0
aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgIGppdC5qdW1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKLX0KLQotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5r
Rm9yVGh1bmtHZW5lcmF0b3IoCi0gICAgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCi17Ci0gICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjayBvciBpbiB0
aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQotICAgIC8vIHNhdmUgdGhlIHJldHVybiBh
ZGRyZXNzIHRvIHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdlIG1ha2UgYSBDKysgZnVuY3Rpb24gY2Fs
bAotICAgIC8vIHRvIHBlcmZvcm0gbGlua2luZyBhbmQgbGF6eSBjb21waWxhdGlvbiBpZiBuZWNl
c3NhcnkuIFdlIGV4cGVjdCB0aGUgY2FsbGVlCi0gICAgLy8gdG8gYmUgaW4gbm9uQXJnR1BSMC9u
b25BcmdHUFIxIChwYXlsb2FkL3RhZyksIHRoZSBjYWxsIGZyYW1lIHRvIGhhdmUgYWxyZWFkeQot
ICAgIC8vIGJlZW4gYWRqdXN0ZWQsIG5vblByZXNlcnZlZE5vblJldHVybkdQUiBob2xkcyB0aGUg
ZXhjZXB0aW9uIGhhbmRsZXIgaW5kZXgsCi0gICAgLy8gYW5kIGFsbCBvdGhlciByZWdpc3RlcnMg
dG8gYmUgYXZhaWxhYmxlIGZvciB1c2UuIFdlIHVzZSBKSVRTdGFja0ZyYW1lOjphcmdzCi0gICAg
Ly8gdG8gc2F2ZSBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWNyb3NzIGNhbGxzLgotICAgIAotICAg
IENDYWxsSGVscGVycyBqaXQodm0pOwotICAgIAotICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtp
bmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25z
dHJ1Y3QpOwotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9C
QUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1
ZmZlciwKLSAgICAgICAgKCJERkcgbGluayAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENv
ZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVjdCIpKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiBsaW5r
Rm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJu
IGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KLS8vIEZv
ciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYg
eW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgotLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlv
dSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1lIGFueXdheS4KLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgQ0NhbGxIZWxw
ZXJzIGppdCh2bSk7Ci0gICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlu
a0Nsb3N1cmVDYWxsKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmpp
dCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgKCJERkcgbGluayBjbG9zdXJlIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwotfQotCi1zdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigKLSAgICBW
TSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAgICAvLyBUaGUgcmV0dXJu
IGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrLCBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2ls
bCBoZW5jZQotICAgIC8vIGp1bXAgdG8gdGhlIGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFk
ZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UKLSAgICAvLyBtYWtlIGEgQysrIGZ1bmN0
aW9uIGNhbGwgdG8gdGhlIGFwcHJvcHJpYXRlIERGRyBvcGVyYXRpb24uCi0KLSAgICBDQ2FsbEhl
bHBlcnMgaml0KHZtKTsKLSAgICAKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNl
OwotCi0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZlIGEgc3RvcnkgZm9yIGVsaW1pbmF0aW5n
IHRoZXNlIGNoZWNrcy4gSW4gbWFueSBjYXNlcywKLSAgICAvLyB0aGUgREZHIGtub3dzIHRoYXQg
dGhlIHZhbHVlIGlzIGRlZmluaXRlbHkgYSBjZWxsLCBvciBkZWZpbml0ZWx5IGEgZnVuY3Rpb24u
Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0gICAgICAg
IGppdC5icmFuY2hUZXN0NjQoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQ
UkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotI2Vsc2UKLSAg
ICBzbG93Q2FzZS5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2gzMigKLSAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86Om5vbkFyZ0dQUjEsCi0gICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotI2VuZGlmCi0g
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBz
bG93Q2FzZS5hcHBlbmQoCi0gICAgICAgIGppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86Om5vbkFyZ0dQUjIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAotICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb246OmluZm8oKSkpKTsK
LSAgICAKLSAgICAvLyBOb3cgd2Uga25vdyB3ZSBoYXZlIGEgSlNGdW5jdGlvbi4KLSAgICAKLSAg
ICBqaXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5v
bkFyZ0dQUjAsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKLSAgICAgICAgR1BS
SW5mbzo6bm9uQXJnR1BSMik7Ci0gICAgc2xvd0Nhc2UuYXBwZW5kKAotICAgICAgICBqaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLAotICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQ
UjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3Ioa2luZCkpLAotICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAKLSAgICAvLyBO
b3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSBDb2RlQmxvY2ssIGFuZCB3ZSdyZSBjb21taXR0ZWQg
dG8gbWFraW5nIGEgZmFzdAotICAgIC8vIGNhbGwuCi0gICAgCi0gICAgaml0LmxvYWRQdHIoCi0g
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksCi0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEp
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaml0LnN0b3JlNjQoCi0gICAgICAgIEdQUkluZm86
Om5vbkFyZ0dQUjEsCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAg
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKLSNlbHNl
Ci0gICAgaml0LnN0b3JlUHRyKAotICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIxLAotICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lz
dGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWluICsKLSAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICBqaXQuc3Rv
cmUzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4gKwotICAgICAgICAgICAgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0jZW5k
aWYKLSAgICAKLSAgICBqaXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRo
QXJpdHlDaGVja0ZvcihraW5kKSksCi0gICAgICAgIEdQUkluZm86OnJlZ1QwKTsKLSAgICAKLSAg
ICAvLyBNYWtlIGEgdGFpbCBjYWxsLiBUaGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gREZHIGNvZGUu
Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDApOwotICAgIGpp
dC5qdW1wKEdQUkluZm86OnJlZ1QwKTsKLQotICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7Ci0gICAg
Ci0gICAgLy8gSGVyZSB3ZSBkb24ndCBrbm93IGFueXRoaW5nLCBzbyByZXZlcnQgdG8gdGhlIGZ1
bGwgc2xvdyBwYXRoLgotICAgIAotICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29k
ZUZvckNhbGwgPyBvcGVyYXRpb25WaXJ0dWFsQ2FsbCA6IG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1
Y3QpOwotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxf
VEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZl
ciwKLSAgICAgICAgKCJERkcgdmlydHVhbCAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENv
ZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVjdCIpKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiB2
aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsKTsKLX0KLQotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0g
ICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7
Ci19Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCShyZXZpc2lvbiAx
NTY0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCwxNiArNDAsNiBAQCBuYW1lc3BhY2UgREZHIHsKIAogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihW
TSopOwotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSop
OwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSop
OwotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0
b3IoVk0qKTsKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1Jl
cG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
dHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2aXNpb24gMTU2NDg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDEyICs0OCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8o
b3NyRXhpdCwgIndlYmtpdF9vc3JfZXhpdCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgYm9vbGVh
biwgaW50MzIsIFZhcmlhZGljKSkKIAogI2RlZmluZSBGT1JfRUFDSF9GVU5DVElPTl9UWVBFKG1h
Y3JvKSBcCi0gICAgbWFjcm8oSV9ERkdPcGVyYXRpb25fRUpzcywgZnVuY3Rpb25UeXBlKGludFB0
ciwgaW50UHRyLCBpbnRQdHIpKSBcCi0gICAgbWFjcm8oSl9ERkdPcGVyYXRpb25fRSwgZnVuY3Rp
b25UeXBlKGludDY0LCBpbnRQdHIpKSBcCi0gICAgbWFjcm8oUF9ERkdPcGVyYXRpb25fRUMsIGZ1
bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKFZfREZHT3Bl
cmF0aW9uX0VPWkQsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludDMy
LCBkb3VibGVUeXBlKSkgXAotICAgIG1hY3JvKFZfREZHT3BlcmF0aW9uX0VPWkosIGZ1bmN0aW9u
VHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludDMyLCBpbnQ2NCkpIFwKLSAgICBtYWNy
byhaX0RGR09wZXJhdGlvbl9ELCBmdW5jdGlvblR5cGUoaW50MzIsIGRvdWJsZVR5cGUpKQorICAg
IG1hY3JvKElfSklUT3BlcmF0aW9uX0VKc3MsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwg
aW50UHRyKSkgXAorICAgIG1hY3JvKEpfSklUT3BlcmF0aW9uX0UsIGZ1bmN0aW9uVHlwZShpbnQ2
NCwgaW50UHRyKSkgXAorICAgIG1hY3JvKFBfSklUT3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5cGUo
aW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FT1pE
LCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgZG91YmxlVHlw
ZSkpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FT1pKLCBmdW5jdGlvblR5cGUodm9pZFR5
cGUsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgaW50NjQpKSBcCisgICAgbWFjcm8oWl9KSVRPcGVy
YXRpb25fRCwgZnVuY3Rpb25UeXBlKGludDMyLCBkb3VibGVUeXBlKSkKIAogY2xhc3MgSW50cmlu
c2ljUmVwb3NpdG9yeSA6IHB1YmxpYyBDb21tb25WYWx1ZXMgewogcHVibGljOgpAQCAtNzksNyAr
NzksNyBAQCBwdWJsaWM6CiAjdW5kZWYgRlVOQ1RJT05fVFlQRV9HRVRURVIKICAgICAKICNkZWZp
bmUgRlVOQ1RJT05fVFlQRV9SRVNPTFZFUih0eXBlTmFtZSwgdHlwZSkgXAotICAgIExUeXBlIG9w
ZXJhdGlvblR5cGUoREZHOjp0eXBlTmFtZSkgICAgICAgICBcCisgICAgTFR5cGUgb3BlcmF0aW9u
VHlwZShKU0M6OnR5cGVOYW1lKSAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICByZXR1cm4gdHlwZU5hbWUoKTsgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1NjQ4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTk0LDcgKzE5OTQsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyB1
bmFjY2VwdGFibHkgc2xvdy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExMzYyMQogICAgICAgICAKLSAgICAgICAgSl9ERkdPcGVyYXRpb25fRSBm
dW5jdGlvbiA9CisgICAgICAgIEpfSklUT3BlcmF0aW9uX0UgZnVuY3Rpb24gPQogICAgICAgICAg
ICAgbV9ub2RlLT5vcCgpID09IENhbGwgPyBvcGVyYXRpb25GVExDYWxsIDogb3BlcmF0aW9uRlRM
Q29uc3RydWN0OwogICAgICAgICAKICAgICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gbV9u
b2RlLT5vcCgpID09IENhbGwgPyAwIDogMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuaAkocmV2aXNpb24gMTU2NDg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAvLyBUYWtl
cyB0aGUgY2FsbCBmcmFtZSBhbmQgdGhlIGluZGV4IG9mIHRoZSBleGl0LCBhbmQgcmV0dXJucyB0
aGUgYWRkcmVzcyB0bwogLy8ganVtcCB0by4KIGV4dGVybiAiQyIgewotdm9pZCogREZHX09QRVJB
VElPTiBjb21waWxlRlRMT1NSRXhpdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBleGl0SUQpIFdURl9J
TlRFUk5BTDsKK3ZvaWQqIEpJVF9PUEVSQVRJT04gY29tcGlsZUZUTE9TUkV4aXQoRXhlY1N0YXRl
KiwgdW5zaWduZWQgZXhpdElEKSBXVEZfSU5URVJOQUw7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuaAkocmV2aXNpb24gMTU2NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEzLDYgKzQxMywyMSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpICogc2l6ZW9mKFJl
Z2lzdGVyKTsKICAgICB9CiAKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQ
UlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtp
bmQpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0ob3duZXIpOworICAgICAgICBVTlVTRURf
UEFSQU0oc2NyYXRjaDEpOworICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOworICAgICAg
ICBVTlVTRURfUEFSQU0odXNlS2luZCk7CisgICAgICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNo
MSk7CisgICAgICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoMik7CisgICAgICAgIEFTU0VSVChz
Y3JhdGNoMSAhPSBzY3JhdGNoMik7CisgICAgICAgIAorI2lmIEVOQUJMRShXUklURV9CQVJSSUVS
X1BST0ZJTElORykKKyAgICAgICAgZW1pdENvdW50KFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRD
b3VudGVyRm9yKHVzZUtpbmQpKTsKKyNlbmRpZgorICAgIH0KKwogICAgIFZlY3RvcjxCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqKTsKICAgICAK
IHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1
NjQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzk3LDIzICs3OTcsMjMgQEAgdm9pZCBKSVQ6OmxpbmtGb3IoRXhlY1N0YXRlKiBleGVj
LCBKU0Z1bgogICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlu
a0luZm86OkNhbGwKICAgICAgICAgICAgICAgIHx8IGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0g
Q2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncyk7CiAgICAgICAgIGlmIChjYWxsTGlua0luZm8tPmNh
bGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbCkgewotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHVi
KGxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJ
U3R1YihvbGRTdHlsZUxpbmtDbG9zdXJlQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNh
bGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2Fs
bEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExp
bmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVh
bENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBB
U1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVh
bENvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhj
YWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIob2xkU3R5bGVW
aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkpOwogfQogCiB2b2lkIEpJVDo6bGlua1Ns
b3dDYWxsKENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbykKIHsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2Nr
KTsKIAotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLCBjYWxsZXJDb2RlQmxvY2stPnZtKCktPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5l
cmF0b3IpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24sIGNhbGxlckNvZGVCbG9jay0+dm0oKS0+Z2V0Q1RJU3R1YihvbGRT
dHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJl
dmlzaW9uIDE1NjQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgSklUOjpjb21waWxl
Q2FsbEV2YWxTbG93Q2FzZShJbnN0cnUKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKICAgICBl
bWl0TG9hZChKU1N0YWNrOjpDYWxsZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5ha2VkQ2Fs
bChtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIGVt
aXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9y
KS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAg
LTMwNiw3ICszMDYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlE
CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAK
LSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0
cnVjdCA/IG1fdm0tPmdldENUSVN0dWIobGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDog
bV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICBtX2NhbGxT
dHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJu
TG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0t
PmdldENUSVN0dWIob2xkU3R5bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkgOiBtX3Zt
LT5nZXRDVElTdHViKG9sZFN0eWxlTGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBz
YW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3Ry
dWN0aW9uKTsKQEAgLTMzNSw3ICszMzUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9z
dXJlQ2FsbChDYWxsCiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0
cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRv
bmUsIGNhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1Yih2
aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93
LCBDb2RlTG9jYXRpb25MYWJlbChtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxH
ZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIAogICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0
aW5lPiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAog
ICAgICAgICBGSU5BTElaRV9DT0RFKApAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUNsb3N1cmVDYWxsKENhbGwKICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRo
SnVtcCgKICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9u
UmVnaXN0ZXIoY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4pLAogICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHVi
KHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHViKG9sZFN0
eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgCiAgICAgY2FsbExpbmtJbmZv
LT5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxNTY0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydQogICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsKIAogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoSlNTdGFjazo6Q2Fs
bGVlLCByZWdUMCk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxD
YWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1
YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29k
ZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CiAgICAgCi0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBv
cF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNv
ZGUoKSA6IG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAg
bV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2Fs
bFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3Qg
PyBtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlTGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgp
IDogbV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwog
CiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTI2Myw3ICsyNjMs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgCiAgICAg
cGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby0+aG90UGF0
aE90aGVyLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29k
ZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29k
ZSgpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbChtX3Zt
LT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAg
IAogICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0
UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RFKApA
QCAtMjgxLDcgKzI4MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNsb3N1cmVDYWxsKENh
bGwKICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKICAgICAgICAgUmVwYXRjaEJ1
ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLT5o
b3RQYXRoQmVnaW4pLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5j
b2RlKCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVy
bkxvY2F0aW9uLCBtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3Ip
LmNvZGUoKSk7CiAgICAgCiAgICAgY2FsbExpbmtJbmZvLT5zdHViID0gc3R1YlJvdXRpbmUucmVs
ZWFzZSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25X
cmFwcGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9uV3JhcHBlcnMuaAkocmV2aXNpb24gMTU2MjM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbldyYXBwZXJzLmg6MTU2MjM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25XcmFwcGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgSklUT3BlcmF0aW9uV3JhcHBlcnNfaAorI2RlZmluZSBKSVRPcGVyYXRpb25X
cmFwcGVyc19oCisKKyNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvSW5s
aW5lQVNNLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisjaWYgQ1BVKE1JUFMpCisjaWYgV1RGX01J
UFNfUElDCisjZGVmaW5lIExPQURfRlVOQ1RJT05fVE9fVDkoZnVuY3Rpb24pIFwKKyAgICAgICAg
Ii5zZXQgbm9yZW9yZGVyIiAiXG4iIFwKKyAgICAgICAgIi5jcGxvYWQgJDI1IiAiXG4iIFwKKyAg
ICAgICAgIi5zZXQgcmVvcmRlciIgIlxuIiBcCisgICAgICAgICJsYSAkdDksICIgTE9DQUxfUkVG
RVJFTkNFKGZ1bmN0aW9uKSAiXG4iCisjZWxzZQorI2RlZmluZSBMT0FEX0ZVTkNUSU9OX1RPX1Q5
KGZ1bmN0aW9uKSAiIiAiXG4iCisjZW5kaWYKKyNlbmRpZgorCisjaWYgQ09NUElMRVIoR0NDKSAm
JiBDUFUoWDg2XzY0KQorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTUyhmdW5jdGlvbiwgcmVnaXN0ZXIpIFwKKyAgICBhc20oIFwKKyAgICAiLmdsb2JsICIgU1lN
Qk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJc
biIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgIm1v
diAoJXJzcCksICUiIFNUUklOR0laRShyZWdpc3RlcikgIlxuIiBcCisgICAgICAgICJqbXAgIiBM
T0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSAiXG4iIFwKKyAgICAp
OworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlv
bikgICAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByc2kp
CisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rp
b24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIHJjeCkK
KyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlv
bikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgcmN4KQor
I2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlv
bikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCByOCkKKwor
I2VsaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoWDg2KQorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgb2Zmc2V0KSBcCisgICAgYXNtKCBcCisg
ICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikg
IlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJ
TkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgIm1vdiAoJWVzcCksICVlYXhcbiIgXAor
ICAgICAgICAibW92ICVlYXgsICIgU1RSSU5HSVpFKG9mZnNldCkgIiglZXNwKVxuIiBcCisgICAg
ICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSAi
XG4iIFwKKyAgICApOworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1
bmN0aW9uLCA4KQorI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0
aW9uLCAxNikKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
SShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlv
biwgMjApCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJ
KGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24s
IDI0KQorCisjZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShBUk1fVEhVTUIyKQorCisjZGVmaW5l
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisgICAg
YXNtICggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAi
Lmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0wo
ZnVuY3Rpb24pICJcbiIgXAorICAgICIudGh1bWIiICJcbiIgXAorICAgICIudGh1bWJfZnVuYyAi
IFRIVU1CX0ZVTkNfUEFSQU0oZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgIm1vdiBhMiwgbHIiICJcbiIgXAorICAgICAgICAi
YiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwK
KyAgICApOworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
Q0koZnVuY3Rpb24pIFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmFs
aWduIDIiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4i
IFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgIi50aHVtYiIgIlxuIiBc
CisgICAgIi50aHVtYl9mdW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCisg
ICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICAibW92IGE0LCBs
ciIgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJl
dHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKy8vIEVuY29kZWRKU1ZhbHVlIGluIEpTVkFM
VUUzMl82NCBpcyBhIDY0LWJpdCBpbnRlZ2VyLiBXaGVuIGJlaW5nIGNvbXBpbGVkIGluIEFSTSBF
QUJJLCBpdCBtdXN0IGJlIGFsaWduZWQgZXZlbi1udW1iZXJlZCByZWdpc3RlciAocjAsIHIyIG9y
IFtzcF0pLgorLy8gQXMgYSByZXN1bHQsIHJldHVybiBhZGRyZXNzIHdpbGwgYmUgYXQgYSA0LWJ5
dGUgZnVydGhlciBsb2NhdGlvbiBpbiB0aGUgZm9sbG93aW5nIGNhc2VzLgorI2lmIENPTVBJTEVS
X1NVUFBPUlRTKEVBQkkpICYmIENQVShBUk0pCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JF
VFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICM0XSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05f
U1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM4XSIKKyNlbHNlCisjZGVm
aW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICMw
XSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxy
LCBbc3AsICM0XSIKKyNlbmRpZgorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4i
IFwKKyAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1
bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgIi50
aHVtYiIgIlxuIiBcCisgICAgIi50aHVtYl9mdW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlv
bikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAg
ICBJTlNUUlVDVElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkkgIlxuIiBcCisgICAgICAgICJi
ICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAor
ICAgICk7CisKKyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
Q0koZnVuY3Rpb24pIFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmFs
aWduIDIiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4i
IFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAgIi50aHVtYiIgIlxuIiBc
CisgICAgIi50aHVtYl9mdW5jICIgVEhVTUJfRlVOQ19QQVJBTShmdW5jdGlvbikgIlxuIiBcCisg
ICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICBJTlNUUlVDVElP
Tl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JF
RkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisj
ZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShBUk1fVFJBRElUSU9OQUwpCisKKyNkZWZpbmUgRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBhc20g
KCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5j
dGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIElOTElO
RV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAi
OiIgIlxuIiBcCisgICAgICAgICJtb3YgYTIsIGxyIiAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NB
TF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsK
KworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0
aW9uKSBcCisgICAgYXNtICggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZ
TUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAi
XG4iIFwKKyAgICBJTkxJTkVfQVJNX0ZVTkNUSU9OKGZ1bmN0aW9uKSBcCisgICAgU1lNQk9MX1NU
UklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgICAgICAibW92IGE0LCBsciIgIlxuIiBcCisg
ICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3Mi
ICJcbiIgXAorICAgICk7CisKKy8vIEVuY29kZWRKU1ZhbHVlIGluIEpTVkFMVUUzMl82NCBpcyBh
IDY0LWJpdCBpbnRlZ2VyLiBXaGVuIGJlaW5nIGNvbXBpbGVkIGluIEFSTSBFQUJJLCBpdCBtdXN0
IGJlIGFsaWduZWQgZXZlbi1udW1iZXJlZCByZWdpc3RlciAocjAsIHIyIG9yIFtzcF0pLgorLy8g
QXMgYSByZXN1bHQsIHJldHVybiBhZGRyZXNzIHdpbGwgYmUgYXQgYSA0LWJ5dGUgZnVydGhlciBs
b2NhdGlvbiBpbiB0aGUgZm9sbG93aW5nIGNhc2VzLgorI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVB
QkkpICYmIENQVShBUk0pCisjZGVmaW5lIElOU1RSVUNUSU9OX1NUT1JFX1JFVFVSTl9BRERSRVNT
X0VKSSAic3RyIGxyLCBbc3AsICM0XSIKKyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJO
X0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM4XSIKKyNlbHNlCisjZGVmaW5lIElOU1RSVUNU
SU9OX1NUT1JFX1JFVFVSTl9BRERSRVNTX0VKSSAic3RyIGxyLCBbc3AsICMwXSIKKyNkZWZpbmUg
SU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM0XSIK
KyNlbmRpZgorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
SkkoZnVuY3Rpb24pIFwKKyAgICBhc20gKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmds
b2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVu
Y3Rpb24pICJcbiIgXAorICAgIElOTElORV9BUk1fRlVOQ1RJT04oZnVuY3Rpb24pIFwKKyAgICBT
WU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgIElOU1RSVUNUSU9OX1NU
T1JFX1JFVFVSTl9BRERSRVNTX0VKSSAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVO
Q0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2RlZmlu
ZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAor
ICAgIGFzbSAoIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RS
SU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisg
ICAgSU5MSU5FX0FSTV9GVU5DVElPTihmdW5jdGlvbikgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICI6IiAiXG4iIFwKKyAgICAgICAgSU5TVFJVQ1RJT05fU1RPUkVfUkVUVVJOX0FERFJF
U1NfRUpDSSAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJX
aXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2VsaWYgQ09NUElMRVIoR0NDKSAm
JiBDUFUoTUlQUykKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1NfRShmdW5jdGlvbikgXAorICAgIGFzbSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1
bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisg
ICAgTE9BRF9GVU5DVElPTl9UT19UOShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKKyAg
ICAgICAgIm1vdmUgJGExLCAkcmEiICJcbiIgXAorICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5D
RShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKKyAgICApOworCisjZGVmaW5l
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyAg
ICBhc20oIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5H
KGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5jdGlvbikgIlxuIiBcCisgICAg
U1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAgIExPQURfRlVOQ1RJT05fVE9f
VDkoZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSBcCisgICAgICAgICJtb3ZlICRhMywgJHJh
IiAiXG4iIFwKKyAgICAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0
dXJuQWRkcmVzcyIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCisgICAgYXNtKCBcCisgICAgIi50ZXh0
IiAiXG4iIFwKKyAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisg
ICAgSElERV9TWU1CT0woZnVuY3Rpb24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rp
b24pICI6IiAiXG4iIFwKKyAgICBMT0FEX0ZVTkNUSU9OX1RPX1Q5KGZ1bmN0aW9uIyNXaXRoUmV0
dXJuQWRkcmVzcykgXAorICAgICAgICAic3cgJHJhLCAyMCgkc3ApIiAiXG4iIFwKKyAgICAgICAg
ImIgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0dXJuQWRkcmVzcyIgIlxuIiBc
CisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUpDSShmdW5jdGlvbikgXAorICAgIGFzbSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1
bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisg
ICAgTE9BRF9GVU5DVElPTl9UT19UOShmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MpIFwKKyAg
ICAgICAgInN3ICRyYSwgMjQoJHNwKSIgIlxuIiBcCisgICAgICAgICJiICIgTE9DQUxfUkVGRVJF
TkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICk7CisKKyNlbGlm
IENPTVBJTEVSKEdDQykgJiYgQ1BVKFNINCkKKworI2RlZmluZSBTSDRfU0NSQVRDSF9SRUdJU1RF
UiAicjExIgorCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
KGZ1bmN0aW9uKSBcCisgICAgYXNtKCBcCisgICAgIi50ZXh0IiAiXG4iIFwKKyAgICAiLmdsb2Js
ICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCisgICAgSElERV9TWU1CT0woZnVuY3Rp
b24pICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICI6IiAiXG4iIFwKKyAgICAg
ICAgInN0cyBwciwgcjUiICJcbiIgXAorICAgICAgICAiYnJhICIgTE9DQUxfUkVGRVJFTkNFKGZ1
bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAorICAgICAgICAibm9wIiAiXG4iIFwK
KyAgICApOworCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19F
Q0koZnVuY3Rpb24pIFwKKyAgICBhc20oIFwKKyAgICAiLnRleHQiICJcbiIgXAorICAgICIuZ2xv
YmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBISURFX1NZTUJPTChmdW5j
dGlvbikgIlxuIiBcCisgICAgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIjoiICJcbiIgXAorICAg
ICAgICAic3RzIHByLCByNyIgIlxuIiBcCisgICAgICAgICJtb3YubCAyZiwgIiBTSDRfU0NSQVRD
SF9SRUdJU1RFUiAiXG4iIFwKKyAgICAgICAgImJyYWYgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAi
XG4iIFwKKyAgICAgICAgIm5vcCIgIlxuIiBcCisgICAgICAgICIxOiAuYmFsaWduIDQiICJcbiIg
XAorICAgICAgICAiMjogLmxvbmcgIiBMT0NBTF9SRUZFUkVOQ0UoZnVuY3Rpb24pICJXaXRoUmV0
dXJuQWRkcmVzcy0xYiIgIlxuIiBcCisgICAgKTsKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIG9mZnNldCwgc2NyYXRjaCkgXAorICAgIGFz
bSggXAorICAgICIudGV4dCIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVu
Y3Rpb24pICJcbiIgXAorICAgIEhJREVfU1lNQk9MKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICBTWU1C
T0xfU1RSSU5HKGZ1bmN0aW9uKSAiOiIgIlxuIiBcCisgICAgICAgICJzdHMgcHIsICIgc2NyYXRj
aCAiXG4iIFwKKyAgICAgICAgIm1vdi5sICIgc2NyYXRjaCAiLCBAKCIgU1RSSU5HSVpFKG9mZnNl
dCkgIiwgcjE1KSIgIlxuIiBcCisgICAgICAgICJtb3YubCAyZiwgIiBzY3JhdGNoICJcbiIgXAor
ICAgICAgICAiYnJhZiAiIHNjcmF0Y2ggIlxuIiBcCisgICAgICAgICJub3AiICJcbiIgXAorICAg
ICAgICAiMTogLmJhbGlnbiA0IiAiXG4iIFwKKyAgICAgICAgIjI6IC5sb25nICIgTE9DQUxfUkVG
RVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MtMWIiICJcbiIgXAorICAgICk7CisK
KyNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlv
bikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMCwgU0g0
X1NDUkFUQ0hfUkVHSVNURVIpCisjZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJF
U1MoZnVuY3Rpb24sIDQsIFNINF9TQ1JBVENIX1JFR0lTVEVSKQorCisjZW5kaWYKKworI2RlZmlu
ZSBQX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCit2
b2lkKiBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUq
LCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAor
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCisKKyNkZWZp
bmUgSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgXAor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5U
RVJOQUw7IFwKK0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9u
KQorCisjZGVmaW5lIEpfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShm
dW5jdGlvbikgXAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJl
dHVybkFkZHJlc3MoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJl
c3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOyBcCitGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKQorCisjZGVmaW5lIEpfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAorRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVO
Q0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAorRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VKSShmdW5jdGlvbikKKworI2RlZmluZSBWX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCit2b2lkIEpJVF9PUEVSQVRJT04gZnVu
Y3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0Nl
bGwqLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBX
VEZfSU5URVJOQUw7IFwKK0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJ
KGZ1bmN0aW9uKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpJVE9wZXJhdGlv
bldyYXBwZXJzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25XcmFwcGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9uV3JhcHBlcnMuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25XcmFwcGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsy
NiwxNCBAQAogI2lmbmRlZiBKSVRPcGVyYXRpb25XcmFwcGVyc19oCiAjZGVmaW5lIEpJVE9wZXJh
dGlvbldyYXBwZXJzX2gKIAorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3
dGYvQ29tcGlsZXIuaD4KICNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CiAKKyNpZiBDT01QSUxF
UihNU1ZDKQorI2luY2x1ZGUgPGludHJpbi5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0Mgewog
CiAjaWYgQ1BVKE1JUFMpCkBAIC01MywxMCArNTgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICJtb3YgKCVyc3ApLCAlIiBTVFJJTkdJWkUocmVnaXN0ZXIpICJcbiIgXAogICAgICAgICAi
am1wICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uIyNXaXRoUmV0dXJuQWRkcmVzcykgIlxuIiBc
CiAgICAgKTsKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0Uo
ZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlv
biwgcnNpKQotI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJ
KGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9u
LCByY3gpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkko
ZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24s
IHJjeCkKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0ko
ZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwg
cjgpCisjZGVmaW5lIF9QX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1
bmN0aW9uKSAgICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24s
IHJzaSkKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0Uo
ZnVuY3Rpb24pICAgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlv
biwgcnNpKQorI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0
aW9uLCByY3gpCisjZGVmaW5lIF9KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FSkkoZnVuY3Rpb24pICBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVu
Y3Rpb24sIHJjeCkKKyNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0VKQ0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhm
dW5jdGlvbiwgcjgpCiAKICNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKFg4NikKIApAQCAtNzAs
MTQgKzc2LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAibW92ICVlYXgsICIgU1RSSU5H
SVpFKG9mZnNldCkgIiglZXNwKVxuIiBcCiAgICAgICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0Uo
ZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKSAiXG4iIFwKICAgICApOwotI2RlZmluZSBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCA4KQotI2RlZmluZSBGVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAxNikKLSNkZWZpbmUgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMjApCi0jZGVmaW5lIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDI0KQorI2RlZmluZSBfUF9GVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCA4KQorI2RlZmluZSBfSl9GVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikgICAgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCA4KQorI2RlZmluZSBfSl9GVU5DVElPTl9X
UkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSAgRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAxNikKKyNkZWZpbmUgX0pfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMjApCisjZGVmaW5lIF9WX0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1MoZnVuY3Rpb24sIDI0KQogCiAjZWxpZiBDT01QSUxFUihH
Q0MpICYmIENQVShBUk1fVEhVTUIyKQogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9QX0ZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAgICIudGV4
dCIgIlxuIiBcCiAgICAgIi5hbGlnbiAyIiAiXG4iIFwKQEAgLTkwLDcgKzk3LDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhS
ZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJf
V0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pfRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBfUF9GVU5DVElP
Tl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikKKworI2RlZmluZSBfSl9G
VU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCiAgICAg
YXNtICggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5hbGlnbiAyIiAiXG4iIFwKQEAgLTEx
Myw3ICsxMjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkVf
UkVUVVJOX0FERFJFU1NfRUpDSSAic3RyIGxyLCBbc3AsICM0XSIKICNlbmRpZgogCi0jZGVmaW5l
IEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkoZnVuY3Rpb24pIFwKKyNk
ZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlv
bikgXAogICAgIGFzbSAoIFwKICAgICAiLnRleHQiICJcbiIgXAogICAgICIuYWxpZ24gMiIgIlxu
IiBcCkBAIC0xMjYsNyArMTM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICJiICIgTE9D
QUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAogICAgICk7
CiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVu
Y3Rpb24pIFwKKyNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VKQ0koZnVuY3Rpb24pIFwKICAgICBhc20gKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAi
LmFsaWduIDIiICJcbiIgXApAQCAtMTQxLDcgKzE1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAj
ZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShBUk1fVFJBRElUSU9OQUwpCiAKLSNkZWZpbmUgRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyNkZWZpbmUg
X1BfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKICAg
ICBhc20gKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklO
RyhmdW5jdGlvbikgIlxuIiBcCkBAIC0xNTIsNyArMTYyLDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNz
IiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FQ0koZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pIFwKKyAgICBfUF9GVU5DVElPTl9XUkFQUEVSX1dJ
VEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlvbikKKworI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAg
ICIudGV4dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJc
biIgXApAQCAtMTczLDcgKzE4Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2RlZmluZSBJTlNUUlVD
VElPTl9TVE9SRV9SRVRVUk5fQUREUkVTU19FSkNJICJzdHIgbHIsIFtzcCwgIzRdIgogI2VuZGlm
CiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5j
dGlvbikgXAorI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Nf
RUpJKGZ1bmN0aW9uKSBcCiAgICAgYXNtICggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoZnVuY3Rpb24pICJcbiIgXApAQCAtMTg0LDcgKzE5Nyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikg
IldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAgICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9WX0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCiAgICAg
YXNtICggXAogICAgICIudGV4dCIgIlxuIiBcCiAgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkco
ZnVuY3Rpb24pICJcbiIgXApAQCAtMTk3LDcgKzIxMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAj
ZWxpZiBDT01QSUxFUihHQ0MpICYmIENQVShNSVBTKQogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9QX0ZVTkNUSU9O
X1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCiAgICAgYXNtKCBcCiAg
ICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikg
IlxuIiBcCkBAIC0yMDgsNyArMjIxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAiYiAi
IExPQ0FMX1JFRkVSRU5DRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAiXG4iIFwKICAg
ICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0ko
ZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0UoZnVuY3Rpb24pIFwKKyAgICBfUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRShmdW5jdGlvbikKKworI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAiXG4i
IFwKICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0yMTks
NyArMjM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNF
KGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MiICJcbiIgXAogICAgICk7CiAKLSNkZWZpbmUg
RlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAorI2Rl
ZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9u
KSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAiXG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9M
X1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0yMzAsNyArMjQ2LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFk
ZHJlc3MiICJcbiIgXAogICAgICk7CiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKKyNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0koZnVuY3Rpb24pIFwKICAgICBhc20oIFwKICAgICAi
LnRleHQiICJcbiIgXAogICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGZ1bmN0aW9uKSAiXG4i
IFwKQEAgLTI0NSw3ICsyNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2RlZmluZSBTSDRfU0NS
QVRDSF9SRUdJU1RFUiAicjExIgogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCisjZGVmaW5lIF9QX0ZVTkNUSU9OX1dSQVBQRVJfV0lU
SF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9uKSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAi
XG4iIFwKICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0y
NTYsNyArMjcyLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAibm9wIiAiXG4iIFwKICAg
ICApOwogCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0ko
ZnVuY3Rpb24pIFwKKyNkZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERS
RVNTX0UoZnVuY3Rpb24pIFwKKyAgICBfUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1NfRShmdW5jdGlvbikKKworI2RlZmluZSBfSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVU
VVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKSBcCiAgICAgYXNtKCBcCiAgICAgIi50ZXh0IiAiXG4i
IFwKICAgICAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhmdW5jdGlvbikgIlxuIiBcCkBAIC0yODUs
MzAgKzMwNCw0NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgIjI6IC5sb25nICIgTE9DQUxf
UkVGRVJFTkNFKGZ1bmN0aW9uKSAiV2l0aFJldHVybkFkZHJlc3MtMWIiICJcbiIgXAogICAgICk7
CiAKLSNkZWZpbmUgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5j
dGlvbikgIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlvbiwgMCwg
U0g0X1NDUkFUQ0hfUkVHSVNURVIpCi0jZGVmaW5lIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRV
Uk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FE
RFJFU1MoZnVuY3Rpb24sIDQsIFNINF9TQ1JBVENIX1JFR0lTVEVSKQorI2RlZmluZSBfSl9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSAgRlVOQ1RJT05f
V1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1bmN0aW9uLCAwLCBTSDRfU0NSQVRDSF9SRUdJ
U1RFUikKKyNkZWZpbmUgX1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VK
Q0koZnVuY3Rpb24pIEZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTUyhmdW5jdGlv
biwgNCwgU0g0X1NDUkFUQ0hfUkVHSVNURVIpCisKKyNlbGlmIENPTVBJTEVSKE1TVkMpICYmIENQ
VShYODYpCisKKyNkZWZpbmUgX1BfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0UoZnVuY3Rpb24pIFwKKyAgICB2b2lkKiBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYykgeyByZXR1cm4gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMsIFJldHVy
bkFkZHJlc3NQdHIoKih2b2lkKiopX0FkZHJlc3NPZlJldHVybkFkZHJlc3MoKSkpOyB9CisKKyNk
ZWZpbmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24p
IFwKKyAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYykgeyByZXR1cm4gZnVuY3Rpb24jI1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMsIFJldHVybkFk
ZHJlc3NQdHIoKih2b2lkKiopX0FkZHJlc3NPZlJldHVybkFkZHJlc3MoKSkpOyB9CisKKyNkZWZp
bmUgX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShmdW5jdGlvbikg
XAorICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGNlbGwsIFN0cmluZ0ltcGwqIHN0cmluZykgeyByZXR1cm4gZnVuY3Rpb24j
I1dpdGhSZXR1cm5BZGRyZXNzKGV4ZWMsIGNlbGwsIHN0cmluZywgUmV0dXJuQWRkcmVzc1B0cigq
KHZvaWQqKilfQWRkcmVzc09mUmV0dXJuQWRkcmVzcygpKSk7IH0KKworI2RlZmluZSBfSl9GVU5D
VElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpJKGZ1bmN0aW9uKSBcCisgICAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIHZhbHVlLCBTdHJpbmdJbXBsKiBzdHJpbmcpIHsgcmV0dXJuIGZ1bmN0aW9uIyNX
aXRoUmV0dXJuQWRkcmVzcyhleGVjLCB2YWx1ZSwgc3RyaW5nLCBSZXR1cm5BZGRyZXNzUHRyKCoo
dm9pZCoqKV9BZGRyZXNzT2ZSZXR1cm5BZGRyZXNzKCkpKTsgfQorCisjZGVmaW5lIF9WX0ZVTkNU
SU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1bmN0aW9uKSBcCisgICAgdm9p
ZCBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
dmFsdWUsIEpTQ2VsbCogY2VsbCwgU3RyaW5nSW1wbCogc3RyaW5nKSB7IHJldHVybiBmdW5jdGlv
biMjV2l0aFJldHVybkFkZHJlc3MoZXhlYywgdmFsdWUsIGNlbGwsIHN0cmluZywgUmV0dXJuQWRk
cmVzc1B0cigqKHZvaWQqKilfQWRkcmVzc09mUmV0dXJuQWRkcmVzcygpKSk7IH0KIAogI2VuZGlm
CiAKICNkZWZpbmUgUF9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5j
dGlvbikgXAogdm9pZCogSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5U
RVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1bmN0aW9u
KQorX1BfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rpb24pCiAK
ICNkZWZpbmUgSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRShmdW5jdGlv
bikgXAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFk
ZHJlc3MoRXhlY1N0YXRlKiwgUmV0dXJuQWRkcmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBX
VEZfSU5URVJOQUw7IFwKLUZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FKGZ1
bmN0aW9uKQorX0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0UoZnVuY3Rp
b24pCiAKICNkZWZpbmUgSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJ
KGZ1bmN0aW9uKSBcCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGZ1bmN0aW9uIyNXaXRo
UmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKiwgUmV0dXJuQWRk
cmVzc1B0cikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7IFwKLUZVTkNUSU9OX1dS
QVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FQ0koZnVuY3Rpb24pCitfSl9GVU5DVElPTl9XUkFQ
UEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJKGZ1bmN0aW9uKQogCiAjZGVmaW5lIEpfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShmdW5jdGlvbikgXAogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbiMjV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqLCBSZXR1cm5BZGRyZXNzUHRyKSBSRUZFUkVO
Q0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsgXAotRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VKSShmdW5jdGlvbikKK19KX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5f
QUREUkVTU19FSkkoZnVuY3Rpb24pCiAKICNkZWZpbmUgVl9GVU5DVElPTl9XUkFQUEVSX1dJVEhf
UkVUVVJOX0FERFJFU1NfRUpDSShmdW5jdGlvbikgXAogdm9pZCBKSVRfT1BFUkFUSU9OIGZ1bmN0
aW9uIyNXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxs
KiwgU3RyaW5nSW1wbCosIFJldHVybkFkZHJlc3NQdHIpIFJFRkVSRU5DRURfRlJPTV9BU00gV1RG
X0lOVEVSTkFMOyBcCi1GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShm
dW5jdGlvbikKK19WX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKGZ1
bmN0aW9uKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTYyMzYpCShmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHA6MTU2MjM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgorCisj
aW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisj
aW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbldy
YXBwZXJzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlcGF0Y2guaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2V4dGVybiAiQyIgeworCitFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CisgICAgUHJvcGVydHlTbG90
IHNsb3QoYmFzZVZhbHVlKTsKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkpOwor
fQorCitKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9u
R2V0QnlJZEJ1aWxkTGlzdCk7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldEJ5SWRCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlk
KTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+
Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0g
c3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKKyAgICBQcm9wZXJ0eVNsb3Qg
c2xvdChiYXNlVmFsdWUpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVj
LCBpZGVudCwgc2xvdCk7CisKKyAgICBpZiAoYWNjZXNzVHlwZSA9PSBzdGF0aWNfY2FzdDxBY2Nl
c3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAgICAgICAgYnVpbGRHZXRCeUlETGlzdChl
eGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbyk7CisKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVS
Tl9BRERSRVNTX0VKSShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgSWRl
bnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8g
PSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNj
ZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNl
KTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vz
c1R5cGUgPT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpIHsK
KyAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgICAgICByZXBhdGNoR2V0QnlJRChl
eGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbyk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJO
X0FERFJFU1NfRUNJKG9wZXJhdGlvbkluT3B0aW1pemUpOworRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIGtleSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIGlmICghYmFzZS0+aXNPYmpl
Y3QoKSkgeworICAgICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlSW52YWxpZFBh
cmFtZXRlckVycm9yKGV4ZWMsICJpbiIsIGJhc2UpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJl
c3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+
KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAgSWRlbnRpZmllciBpZGVudCh2bSwga2V5KTsK
KyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlKTsKKyAgICBib29sIHJlc3VsdCA9IGFzT2JqZWN0
KGJhc2UpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOworICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gc3R1YkluZm8uYWNjZXNzVHlwZSk7CisgICAgCisg
ICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgIHJlcGF0Y2hJbihleGVjLCBiYXNlLCBpZGVu
dCwgcmVzdWx0LCBzbG90LCBzdHViSW5mbyk7CisgICAgZWxzZQorICAgICAgICBzdHViSW5mby5z
ZWVuID0gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihy
ZXN1bHQpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbihF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCoga2V5KQoreworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworCisgICAgaWYgKCFiYXNlLT5pc09iamVjdCgpKSB7CisgICAgICAgIHZtLT50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVJbnZhbGlkUGFyYW1ldGVyRXJyb3IoZXhlYywgImluIiwg
YmFzZSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIH0KKworICAgIElkZW50aWZpZXIgaWRlbnQodm0sIGtleSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oYXNPYmplY3QoYmFzZSktPmhhc1Byb3BlcnR5KGV4ZWMsIGlk
ZW50KSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVy
aWNJbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUga2V5KQor
eworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
Q29tbW9uU2xvd1BhdGhzOjpvcEluKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBiYXNlKSkp
OworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21H
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jIGZ1bmN0aW9uLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGZ1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KGJhc2UpLCBpZGVudCkpOworfQorCitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogZ2V0dGVyU2V0dGVyKQoreworICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsR2V0dGVyKGV4ZWMsIGJhc2Us
IGdldHRlclNldHRlcikpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAg
SWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVl
LCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgYmFzZS0+bWV0aG9k
VGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgc2xvdCk7Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0Nl
bGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJ
ZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNl
LCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgYmFzZS0+bWV0aG9k
VGFibGUoKS0+cHV0KGJhc2UsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgc2xvdCk7Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBK
U0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAg
ICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRy
dWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoYmFz
ZS0+aXNPYmplY3QoKSk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT52bSgp
LCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworfQorCit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJ
bXBsKiB1aWQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgSWRlbnRpZmllciBpZGVudCh2
bSwgdWlkKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2Nr
KCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAg
ICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRI
X1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKTsKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemVXaXRoUmV0dXJu
QWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQp
OworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5n
ZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBz
dGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1ZhbHVlIGJh
c2VWYWx1ZShiYXNlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlLCBleGVjLT5jb2Rl
QmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgCisgICAgYmFzZVZhbHVlLnB1dChleGVj
LCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRp
Y19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGV4
ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworICAgIGVs
c2UKKyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBF
Ul9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplKTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlk
ZW50KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsK
KworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxz
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIGJhc2VW
YWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNz
VHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChzdHViSW5mby5zZWVuKQorICAgICAgICByZXBh
dGNoUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCBzdHViSW5mbywgTm90RGly
ZWN0KTsKKyAgICBlbHNlCisgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOworfQorCitWX0ZV
TkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RPcHRpbWl6ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdFN0cmljdE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCogdWlk
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
CisgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7
CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1
YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSwgZXhlYy0+Y29k
ZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIEFTU0VSVChiYXNlLT5pc09i
amVjdCgpKTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50
LCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8
QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBpZiAoc3R1YkluZm8uc2VlbikKKyAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFz
ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOworICAgIGVsc2UKKyAgICAgICAgc3R1
YkluZm8uc2VlbiA9IHRydWU7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9B
RERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemVX
aXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlmaWVyIGlkZW50
KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVC
bG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250
ZXh0KCkpOworICAgIAorICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVj
dChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAg
CisgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8u
YWNjZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uc2Vl
bikKKyAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZXhlYywgYmFzZSwgaWRlbnQsIHNsb3QsIHN0dWJJ
bmZvLCBEaXJlY3QpOworICAgIGVsc2UKKyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7Cit9
CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9u
UHV0QnlJZFN0cmljdEJ1aWxkTGlzdCk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIAor
ICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwor
ICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJ
bmZvLmFjY2Vzc1R5cGUpOworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJhc2UpOworICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsK
KyAgICAKKyAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAg
CisgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8u
YWNjZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBidWlsZFB1dEJ5SWRMaXN0
KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworfQor
CitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1
aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICAKKyAgICBJZGVudGlmaWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNz
KTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihz
dHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKKyAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOworICAgIAorICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsK
KyAgICAKKyAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHVi
SW5mby5hY2Nlc3NUeXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGJ1aWxkUHV0QnlJ
ZExpc3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7
Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdCk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0
cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgIAorICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVpZCk7CisgICAgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJl
dHVybkFkZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFj
Y2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworICAgIAorICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dCh0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgCisgICAg
QVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBpZiAoYWNjZXNzVHlw
ZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIGJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZSwgaWRlbnQs
IHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExp
c3QpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RC
dWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiB1aWQsIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBJZGVudGlm
aWVyIGlkZW50KHZtLCB1aWQpOworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4
ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NU
eXBlKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1
dEJ5SWRDb250ZXh0KCkpOworICAgIAorICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAg
ICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCB2YWx1ZSwgc2xv
dCk7CisgICAgCisgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8uYWNjZXNzVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBidWlsZFB1
dEJ5SWRMaXN0KGV4ZWMsIGJhc2UsIGlkZW50LCBzbG90LCBzdHViSW5mbywgRGlyZWN0KTsKK30K
Kwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNo
UHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworCisgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IGJh
c2UtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBBU1NFUlQoIXZtLmhl
YXAuc3RvcmFnZUFsbG9jYXRvcigpLmZhc3RQYXRoU2hvdWxkU3VjY2VlZChzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICBiYXNlLT5zZXRTdHJ1
Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOworICAg
IGJhc2UtPnB1dERpcmVjdCh2bSwgb2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKK30K
Kworc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNW
YWx1ZSBjYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworCisgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoZXhlYy0+c2NvcGUoKSk7CisgICAg
ZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOworCisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNh
bGwpIHsKKyAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gZ2V0Q2FsbERhdGEoY2FsbGVlLCBjYWxsRGF0YSk7CisgICAgCisgICAgICAgIEFTU0VS
VChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKTsKKyAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBlID09
IENhbGxUeXBlSG9zdCkgeworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlY0NhbGxlZSk7CisgICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNP
YmplY3QoY2FsbGVlKSk7CisgICAgICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOworICAg
ICAgICAgICAgaWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdm0t
PmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOworICAgICAgICB9CisgICAgCisg
ICAgICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOworICAgICAgICBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNh
bGxlZSkpOworICAgICAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB9
CisKKyAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAKKyAgICBDb25z
dHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CisgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBl
ID0gZ2V0Q29uc3RydWN0RGF0YShjYWxsZWUsIGNvbnN0cnVjdERhdGEpOworICAgIAorICAgIEFT
U0VSVChjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGVKUyk7CisgICAgCisgICAgaWYgKGNv
bnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhvc3QpIHsKKyAgICAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7CisgICAgICAgIGV4ZWNDYWxsZWUtPnNl
dENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKKyAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0Nh
bGxlZSkpOworICAgICAgICBpZiAodm0tPmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJu
IHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvciku
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSk7CisgICAgZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBj
YWxsZWUpKTsKKyAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KKworaW5s
aW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCit7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVy
RnJhbWUoKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUg
PSBleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CisgICAgaWYgKCFjYWxsZWVB
c0Z1bmN0aW9uQ2VsbCkKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGhh
bmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKKworICAgIEpT
RnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNl
bGwpOworICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKSk7
CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsK
KworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOworICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gMDsKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAg
ICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJl
c3NGb3JDYWxsKCk7CisgICAgZWxzZSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSk7CisgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJl
cGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpOworICAg
ICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOworICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICB9
CisgICAgICAgIGNvZGVCbG9jayA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtp
bmQpOworICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQorICAg
ICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdp
dGhBcml0eUNoZWNrRm9yKGtpbmQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlUHRy
ID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNz
Rm9yQ2FsbCgpOworICAgIH0KKyAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMt
PmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7Cisg
ICAgaWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2UoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnNl
dFNlZW4oKTsKKyAgICBlbHNlCisgICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJ
bmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwga2luZCk7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cit9CisKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVl
KQoreworICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKK30KKwor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSkKK3sKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3Ry
dWN0KTsKK30KKworaW5saW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlY1N0YXRl
KiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTQ2VsbComIGNhbGxl
ZUFzRnVuY3Rpb25DZWxsKQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNh
bGxlckZyYW1lKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUg
PSBleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVlKCk7CisgICAgY2FsbGVlQXNGdW5jdGlvbkNlbGwg
PSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghY2FsbGVl
QXNGdW5jdGlvbkNlbGwpKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
aGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSwga2luZCkpOworICAgIAor
ICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCk7CisgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoZnVuY3Rpb24tPnNjb3BlVW5j
aGVja2VkKCkpOworICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4
ZWN1dGFibGUoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Io
a2luZCkpKSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxl
ID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisgICAgICAg
IEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlv
bihleGVjQ2FsbGVlLCBmdW5jdGlvbi0+c2NvcGUoKSwga2luZCk7CisgICAgICAgIGlmIChlcnJv
cikgeworICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjQ2FsbGVlLCBl
cnJvcik7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlD
aGVja0ZvcihraW5kKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKK30KKworaW5saW5lIGNoYXIqIHZp
cnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCit7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQ7CisgICAgcmV0
dXJuIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwga2luZCwgY2FsbGVlQXNGdW5j
dGlvbkNlbGxJZ25vcmVkKTsKK30KKworc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9z
dXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNl
bGwsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQoreworICAgIGlmICghY2FsbGVlQXNGdW5j
dGlvbkNlbGwpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBKU0Z1bmN0aW9uKiBj
YWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBK
U0Z1bmN0aW9uKiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVlLmdldCgpOworICAgIAor
ICAgIGlmICghb2xkQ2FsbGVlCisgICAgICAgIHx8IG9sZENhbGxlZS0+c3RydWN0dXJlKCkgIT0g
Y2FsbGVlLT5zdHJ1Y3R1cmUoKQorICAgICAgICB8fCBvbGRDYWxsZWUtPmV4ZWN1dGFibGUoKSAh
PSBjYWxsZWUtPmV4ZWN1dGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IEFTU0VSVChjYWxsZWUtPmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKS0+Z2Vu
ZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoKTsKKyAgICAKKyAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jazsKKyAgICBpZiAoY2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1
bmN0aW9uKCkpCisgICAgICAgIGNvZGVCbG9jayA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIGNv
ZGVCbG9jayA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWxsZWUtPmV4ZWN1dGFibGUo
KSktPmNvZGVCbG9ja0ZvckNhbGwoKTsKKyAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisg
ICAgbGlua0Nsb3N1cmVDYWxsKAorICAgICAgICBleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNv
ZGVCbG9jaywKKyAgICAgICAgY2FsbGVlLT5zdHJ1Y3R1cmUoKSwgY2FsbGVlLT5leGVjdXRhYmxl
KCksIGNvZGVQdHIpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7
CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKKyAgICBjaGFyKiByZXN1bHQgPSB2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCk7CisgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjQ2FsbGVl
LT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUt
PnJldHVyblBDKCkpOworCisgICAgaWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4
ZWNDYWxsZWUsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBjYWxsTGlua0luZm8pKQorICAgICAgICBs
aW5rU2xvd0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsKTsKKyAgICAK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZp
cnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sgICAgCisgICAgcmV0dXJuIHZpcnR1
YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwpOworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAg
IHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOworfQorCitK
SVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhl
Y1N0YXRlKiBleGVjLCB1aW50MzJfdCBjYWxsSW5kZXgpCit7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAg
ICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgQVNTRVJU
KGV4Y2VwdGlvblZhbHVlKTsKKyAgICAKKyAgICB1bnNpZ25lZCB2UENJbmRleCA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5ieXRlY29kZU9mZnNldEZvckNhbGxBdEluZGV4KGNhbGxJbmRleCk7CisgICAg
RXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0
aW9uVmFsdWUsIHZQQ0luZGV4KTsKKyAgICBBU1NFUlQoaGFuZGxlci5jYXRjaFJvdXRpbmUpOwor
ICAgIHJldHVybiBkZmdIYW5kbGVyRW5jb2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxlci5j
YXRjaFJvdXRpbmUpOworfQorCitKSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXJJblN0dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8pCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKKyAg
ICAKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBzdHViSW5mby0+Y29kZU9yaWdpbjsKKyAg
ICB3aGlsZSAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIGNvZGVPcmlnaW4g
PSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgIAorICAgIEV4Y2VwdGlv
bkhhbmRsZXIgaGFuZGxlciA9IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVl
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgIEFTU0VSVChoYW5kbGVyLmNhdGNoUm91
dGluZSk7CisgICAgcmV0dXJuIGRmZ0hhbmRsZXJFbmNvZGVkKGhhbmRsZXIuY2FsbEZyYW1lLCBo
YW5kbGVyLmNhdGNoUm91dGluZSk7Cit9CisKK30gLy8gZXh0ZXJuICJDIgorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODcsNyArNTg3LDcgQEAgY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29ucwogICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4
ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCi1KSVRIYW5kbGVyRW5jb2RlZCBKSVRf
T1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKiBleGVjLCB1aW50MzJf
dCBjYWxsSW5kZXgpCitKSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwpAQCAtNTk1LDMw
ICs1OTUsMTEwIEBAIEpJVEhhbmRsZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04gbG9va3VwRXgKICAg
ICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgQVNTRVJU
KGV4Y2VwdGlvblZhbHVlKTsKICAgICAKLSAgICB1bnNpZ25lZCB2UENJbmRleCA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5ieXRlY29kZU9mZnNldEZvckNhbGxBdEluZGV4KGNhbGxJbmRleCk7Ci0gICAg
RXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0
aW9uVmFsdWUsIHZQQ0luZGV4KTsKKyAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBnZW5l
cmljVW53aW5kKHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSk7CiAgICAgQVNTRVJUKGhhbmRsZXIu
Y2F0Y2hSb3V0aW5lKTsKICAgICByZXR1cm4gZGZnSGFuZGxlckVuY29kZWQoaGFuZGxlci5jYWxs
RnJhbWUsIGhhbmRsZXIuY2F0Y2hSb3V0aW5lKTsKIH0KIAotSklUSGFuZGxlckVuY29kZWQgSklU
X09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworfSAvLyBleHRl
cm4gIkMiCiAKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7
Ci0gICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKLSAgICAKLSAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4gPSBzdHViSW5mby0+Y29kZU9yaWdpbjsKLSAgICB3aGlsZSAoY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpCi0gICAgICAgIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyOwotICAgIAotICAgIEV4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciA9IGdlbmVy
aWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVlLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgpOwotICAgIEFTU0VSVChoYW5kbGVyLmNhdGNoUm91dGluZSk7Ci0gICAgcmV0dXJuIGRmZ0hh
bmRsZXJFbmNvZGVkKGhhbmRsZXIuY2FsbEZyYW1lLCBoYW5kbGVyLmNhdGNoUm91dGluZSk7Cisv
LyBOb3RlOiBnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSgpIG5lZWRzIHRvIGJl
IHBsYWNlZCBiZWZvcmUgdGhlCisvLyBkZWZpbml0aW9uIG9mIGdldEhvc3RDYWxsUmV0dXJuVmFs
dWUoKSBiZWxvdyBiZWNhdXNlIHRoZSBXaW5kb3dzIGJ1aWxkCisvLyByZXF1aXJlcyBpdC4KK2V4
dGVybiAiQyIgRW5jb2RlZEpTVmFsdWUgSE9TVF9DQUxMX1JFVFVSTl9WQUxVRV9PUFRJT04gZ2V0
SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IGlmICghZXhlYykKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS5ob3N0Q2FsbFJldHVyblZhbHVl
KTsKIH0KIAotfSAvLyBleHRlcm4gIkMiCisjaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoWDg2XzY0
KQorYXNtICgKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUp
ICJcbiIKK0hJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK1NZTUJPTF9T
VFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKKyAgICAibW92IDQwKCVyMTMp
LCAlcjEzXG4iCisgICAgIm1vdiAlcjEzLCAlcmRpXG4iCisgICAgImptcCAiIExPQ0FMX1JFRkVS
RU5DRShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgorKTsKKworI2Vs
aWYgQ09NUElMRVIoR0NDKSAmJiBDUFUoWDg2KQorYXNtICgKKyIudGV4dCIgIlxuIiBcCisiLmds
b2JsICIgU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCitISURFX1NZ
TUJPTChnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCitTWU1CT0xfU1RSSU5HKGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpICI6IiAiXG4iCisgICAgIm1vdiA0MCglZWRpKSwgJWVkaVxuIgorICAg
ICJtb3YgJWVkaSwgNCglZXNwKVxuIgorICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9z
dENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICJcbiIKKyk7CisKKyNlbGlmIENPTVBJTEVS
KEdDQykgJiYgQ1BVKEFSTV9USFVNQjIpCithc20gKAorIi50ZXh0IiAiXG4iCisiLmFsaWduIDIi
ICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJc
biIKK0hJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKKyIudGh1bWIiICJc
biIKKyIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZ2V0SG9zdENhbGxSZXR1cm5WYWx1
ZSkgIlxuIgorU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiOiIgIlxuIgor
ICAgICJsZHIgcjUsIFtyNSwgIzQwXSIgIlxuIgorICAgICJtb3YgcjAsIHI1IiAiXG4iCisgICAg
ImIgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUp
ICJcbiIKKyk7CisKKyNlbGlmIENPTVBJTEVSKEdDQykgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkK
K2FzbSAoCisiLnRleHQiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxs
UmV0dXJuVmFsdWUpICJcbiIKK0hJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJc
biIKK0lOTElORV9BUk1fRlVOQ1RJT04oZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkKK1NZTUJPTF9T
VFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKKyAgICAibGRyIHI1LCBbcjUs
ICM0MF0iICJcbiIKKyAgICAibW92IHIwLCByNSIgIlxuIgorICAgICJiICIgTE9DQUxfUkVGRVJF
TkNFKGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiXG4iCispOworCisjZWxp
ZiBDT01QSUxFUihHQ0MpICYmIENQVShNSVBTKQorYXNtICgKKyIudGV4dCIgIlxuIgorIi5nbG9i
bCAiIFNZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgorSElERV9TWU1C
T0woZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgorU1lNQk9MX1NUUklORyhnZXRIb3N0Q2Fs
bFJldHVyblZhbHVlKSAiOiIgIlxuIgorICAgIExPQURfRlVOQ1RJT05fVE9fVDkoZ2V0SG9zdENh
bGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpCisgICAgImx3ICRzMCwgNDAoJHMwKSIgIlxuIgor
ICAgICJtb3ZlICRhMCwgJHMwIiAiXG4iCisgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9z
dENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICJcbiIKKyk7CisKKyNlbGlmIENPTVBJTEVS
KEdDQykgJiYgQ1BVKFNINCkKK2FzbSAoCisiLnRleHQiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xf
U1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKK0hJREVfU1lNQk9MKGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpICJcbiIKK1NZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1
ZSkgIjoiICJcbiIKKyAgICAiYWRkICM0MCwgcjE0IiAiXG4iCisgICAgIm1vdi5sIEByMTQsIHIx
NCIgIlxuIgorICAgICJtb3YgcjE0LCByNCIgIlxuIgorICAgICJtb3YubCAyZiwgIiBTSDRfU0NS
QVRDSF9SRUdJU1RFUiAiXG4iCisgICAgImJyYWYgIiBTSDRfU0NSQVRDSF9SRUdJU1RFUiAiXG4i
CisgICAgIm5vcCIgIlxuIgorICAgICIxOiAuYmFsaWduIDQiICJcbiIKKyAgICAiMjogLmxvbmcg
IiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICIt
MWJcbiIKKyk7CisKKyNlbGlmIENPTVBJTEVSKE1TVkMpICYmIENQVShYODYpCitleHRlcm4gIkMi
IHsKKyAgICBfX2RlY2xzcGVjKG5ha2VkKSBFbmNvZGVkSlNWYWx1ZSBIT1NUX0NBTExfUkVUVVJO
X1ZBTFVFX09QVElPTiBnZXRIb3N0Q2FsbFJldHVyblZhbHVlKCkKKyAgICB7CisgICAgICAgIF9f
YXNtIHsKKyAgICAgICAgICAgIG1vdiBlZGksIFtlZGkgKyA0MF07CisgICAgICAgICAgICBtb3Yg
W2VzcCArIDRdLCBlZGk7CisgICAgICAgICAgICBqbXAgZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdp
dGhFeGVjU3RhdGUKKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJ
KHJldmlzaW9uIDE1NjIzNikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmg6MTU2MjM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKSVRPcGVyYXRpb25zX2gKKyNk
ZWZpbmUgSklUT3BlcmF0aW9uc19oCisKKyNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRl
ICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyLmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJ
bmZvLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2lm
IENBTExJTkdfQ09OVkVOVElPTl9JU19TVERDQUxMCisjZGVmaW5lIEpJVF9PUEVSQVRJT04gQ0RF
Q0wKKyNlbHNlCisjZGVmaW5lIEpJVF9PUEVSQVRJT04KKyNlbmRpZgorCisvLyBUaGVzZSB0eXBl
ZGVmcyBwcm92aWRlIHR5cGVjaGVja2luZyB3aGVuIGdlbmVyYXRpbmcgY2FsbHMgb3V0IHRvIGhl
bHBlciByb3V0aW5lczsKKy8vIHRoaXMgaGVscHMgcHJldmVudCBjYWxsaW5nIGEgaGVscGVyIHJv
dXRpbmUgd2l0aCB0aGUgd3JvbmcgYXJndW1lbnRzIQorLyoKKyAgICBLZXk6CisgICAgVjogdm9p
ZAorICAgIEo6IEpTVmFsdWUKKyAgICBQOiBwb2ludGVyICh2b2lkKikKKyAgICBDOiBKU0NlbGwq
CisgICAgQTogSlNBcnJheSoKKyAgICBTOiBzaXplX3QKKyAgICBaOiBpbnQzMl90CisgICAgRDog
ZG91YmxlCisgICAgSTogU3RyaW5nSW1wbCoKKyovCit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKK3R5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VBKShFeGVjU3RhdGUq
LCBKU0FycmF5Kik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJ
VE9wZXJhdGlvbl9FQVopKEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90KTsKK3R5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDKShFeGVjU3Rh
dGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpf
SklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Cit0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ0kpKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5j
b2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9K
SVRPcGVyYXRpb25fRURBKShFeGVjU3RhdGUqLCBkb3VibGUsIEpTQXJyYXkqKTsKK3R5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VJKShFeGVjU3Rh
dGUqLCBTdHJpbmdJbXBsKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
KCpKX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpBKShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNBcnJheSopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpJKShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgU3RyaW5nSW1wbCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OICgqSl9KSVRPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9K
SVRPcGVyYXRpb25fRUpzc1opKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgaW50MzJfdCk7Cit0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSlApKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCB2b2lkKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FUCkoRXhlY1N0YXRlKiwgdm9pZCopOwor
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVBQ
KShFeGVjU3RhdGUqLCB2b2lkKiwgdm9pZCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90
KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9u
X0VTUykoRXhlY1N0YXRlKiwgc2l6ZV90LCBzaXplX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3Qp
OwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25f
RVpJY2ZaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBJbmxpbmVDYWxsRnJhbWUqLCBpbnQzMl90KTsK
K3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0Va
WikoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCk7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09Q
RVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwordHlwZWRlZiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7
Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VDKShFeGVj
U3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRP
cGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUljZikoRXhlY1N0YXRlKiwgSW5s
aW5lQ2FsbEZyYW1lKik7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3Bl
cmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEpTQ2VsbCog
SklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NTdCkoRXhlY1N0YXRlKiwgSlNTdHJp
bmcqLCBTdHJ1Y3R1cmUqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRP
cGVyYXRpb25fRUpzc0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwordHlw
ZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSnNzSnNzSnNzKShF
eGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKK3R5cGVkZWYgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09i
amVjdCosIGludDMyX3QpOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9w
ZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwordHlwZWRlZiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Cit0
eXBlZGVmIGRvdWJsZSBKSVRfT1BFUkFUSU9OICgqRF9KSVRPcGVyYXRpb25fREQpKGRvdWJsZSwg
ZG91YmxlKTsKK3R5cGVkZWYgZG91YmxlIEpJVF9PUEVSQVRJT04gKCpEX0pJVE9wZXJhdGlvbl9a
WikoaW50MzJfdCwgaW50MzJfdCk7Cit0eXBlZGVmIGRvdWJsZSBKSVRfT1BFUkFUSU9OICgqRF9K
SVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgaW50
MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRCkoZG91YmxlKTsKK3R5cGVkZWYg
c2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIEpTQ2VsbCopOwordHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3Bl
cmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHNpemVfdCBK
SVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNf
SklUT3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFU
SU9OICgqVl9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Cit0eXBlZGVmIHZvaWQgSklUX09Q
RVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VPWkQpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50
MzJfdCwgZG91YmxlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRp
b25fRU9aSikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7
Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDKShFeGVjU3Rh
dGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRp
b25fRUNJY2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSopOwordHlwZWRl
ZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ0NJY2YpKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSopOwordHlwZWRlZiB2b2lkIEpJVF9P
UEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ0pKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04g
KCpWX0pJVE9wZXJhdGlvbl9FQ1opKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOwordHlw
ZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIEpTQ2VsbCopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9w
ZXJhdGlvbl9FSkNJKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgU3RyaW5n
SW1wbCopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSkpK
KShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUpQUCko
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHZvaWQqLCB2b2lkKik7Cit0eXBlZGVmIHZvaWQg
SklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VQWkopKEV4ZWNTdGF0ZSosIHZvaWQqLCBp
bnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX1cpKFdhdGNocG9pbnRTZXQqKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJB
VElPTiAoKlBfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwordHlwZWRlZiBjaGFyKiBKSVRf
T1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordHlw
ZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRUpTKShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAo
KlBfSklUT3BlcmF0aW9uX0VPKShFeGVjU3RhdGUqLCBKU09iamVjdCopOwordHlwZWRlZiBjaGFy
KiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRU9TKShFeGVjU3RhdGUqLCBKU09iamVj
dCosIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlv
bl9FT1opKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCk7Cit0eXBlZGVmIGNoYXIqIEpJ
VF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXpl
X3QpOwordHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVMpKEV4
ZWNTdGF0ZSosIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9w
ZXJhdGlvbl9FU0pzcykoRXhlY1N0YXRlKiwgc2l6ZV90LCBKU1N0cmluZyopOwordHlwZWRlZiBj
aGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRVN0KShFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqKTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VT
dEopKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgY2hh
ciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VTdFBTKShFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBf
SklUT3BlcmF0aW9uX0VTdFNTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVf
dCk7Cit0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FU3RaKShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KTsKK3R5cGVkZWYgY2hhciogSklUX09QRVJB
VElPTiAoKlBfSklUT3BlcmF0aW9uX0VaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCk7
Cit0eXBlZGVmIFN0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gKCpJX0pJVE9wZXJhdGlvbl9FSnNz
KShFeGVjU3RhdGUqLCBKU1N0cmluZyopOwordHlwZWRlZiBKU1N0cmluZyogSklUX09QRVJBVElP
TiAoKkpzc19KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOworCitleHRlcm4g
IkMiIHsKKworLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBsb29rdXAgYW4gZXhjZXB0aW9uIGhh
bmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwgd2hpY2ggaXMKKy8vIHRoZSByZXR1cm4gbG9j
YXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91dCB0byBvbmUgb2YgdGhlIGhlbHBlciBvcGVy
YXRpb25zIGFib3ZlLgorCisvLyBBY2NvcmRpbmcgdG8gQysrIHJ1bGVzLCBhIHR5cGUgdXNlZCBm
b3IgdGhlIHJldHVybiBzaWduYXR1cmUgb2YgZnVuY3Rpb24gd2l0aCBDIGxpbmthZ2UgKGkuZS4K
Ky8vICdleHRlcm4gIkMiJykgbmVlZHMgdG8gYmUgUE9EOyBoZW5jZSBwdXR0aW5nIGFueSBjb25z
dHJ1Y3RvcnMgaW50byBpdCBjb3VsZCBjYXVzZSBlaXRoZXIgY29tcGlsZXIKKy8vIHdhcm5pbmdz
LCBvciB3b3JzZSwgYSBjaGFuZ2UgaW4gdGhlIEFCSSB1c2VkIHRvIHJldHVybiB0aGVzZSB0eXBl
cy4KK3N0cnVjdCBKSVRIYW5kbGVyIHsKKyAgICB1bmlvbiBVbmlvbiB7CisgICAgICAgIHN0cnVj
dCBTdHJ1Y3QgeworICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjOworICAgICAgICAgICAgdm9p
ZCogaGFuZGxlcjsKKyAgICAgICAgfSBzOworICAgICAgICB1aW50NjRfdCBlbmNvZGVkOworICAg
IH0gdTsKK307CisKK2lubGluZSBKSVRIYW5kbGVyIGNyZWF0ZUpJVEhhbmRsZXIoRXhlY1N0YXRl
KiBleGVjLCB2b2lkKiBoYW5kbGVyKQoreworICAgIEpJVEhhbmRsZXIgcmVzdWx0OworICAgIHJl
c3VsdC51LnMuZXhlYyA9IGV4ZWM7CisgICAgcmVzdWx0LnUucy5oYW5kbGVyID0gaGFuZGxlcjsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgSklUSGFu
ZGxlciBKSVRIYW5kbGVyRW5jb2RlZDsKK2lubGluZSBKSVRIYW5kbGVyRW5jb2RlZCBkZmdIYW5k
bGVyRW5jb2RlZChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGhhbmRsZXIpCit7CisgICAgcmV0dXJu
IGNyZWF0ZUpJVEhhbmRsZXIoZXhlYywgaGFuZGxlcik7Cit9CisjZWxzZQordHlwZWRlZiB1aW50
NjRfdCBKSVRIYW5kbGVyRW5jb2RlZDsKK2lubGluZSBKSVRIYW5kbGVyRW5jb2RlZCBkZmdIYW5k
bGVyRW5jb2RlZChFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGhhbmRsZXIpCit7CisgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKEpJVEhhbmRsZXI6OlVuaW9uKSA9PSBzaXplb2YodWludDY0X3QpLCBK
SVRIYW5kbGVyX1VuaW9uX2lzXzY0Yml0KTsKKyAgICByZXR1cm4gY3JlYXRlSklUSGFuZGxlcihl
eGVjLCBoYW5kbGVyKS51LmVuY29kZWQ7Cit9CisjZW5kaWYKK0pJVEhhbmRsZXJFbmNvZGVkIEpJ
VF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqLCB1aW50MzJfdCkg
V1RGX0lOVEVSTkFMOworSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNl
cHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKikgV1RGX0lO
VEVSTkFMOworCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5PcHRpbWl6ZShFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBTdHJpbmdJbXBsKik7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwqKTsKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2VuZXJpY0luKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29k
ZWRKU1ZhbHVlKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEN1
c3RvbUdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
YywgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ2FsbEdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZf
SU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5n
SW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxs
KiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCop
IFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwq
IGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3Ry
aW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCop
IFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlND
ZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIFN0cmluZ0ltcGwqKSBXVEZfSU5U
RVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2Vs
bCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBKU09iamVj
dCosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVS
TkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4
ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlu
a0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Citj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RG
X0lOVEVSTkFMOworCit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSklUT3Bl
cmF0aW9uc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDggKzE3MCw3IEBAIGlubGluZSBKSVRIYW5k
bGVyRW5jb2RlZCBkZmdIYW5kbGVyRW5jb2QKICAgICByZXR1cm4gY3JlYXRlSklUSGFuZGxlcihl
eGVjLCBoYW5kbGVyKS51LmVuY29kZWQ7CiB9CiAjZW5kaWYKLUpJVEhhbmRsZXJFbmNvZGVkIEpJ
VF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqLCB1aW50MzJfdCkg
V1RGX0lOVEVSTkFMOwotSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNl
cHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKikgV1RGX0lO
VEVSTkFMOworSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25I
YW5kbGVyKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIAogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJp
bmdJbXBsKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJ
bXBsKikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJTZXQuaAkocmV2aXNpb24gMTU2MjM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0Lmg6MTU2MjM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVnaXN0ZXJTZXRfaAor
I2RlZmluZSBSZWdpc3RlclNldF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lm
IEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5o
IgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCB0b3RhbE51bWJlck9mUmVnaXN0ZXJzID0KKyAgICBHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOworCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0luUmVnaXN0ZXJTZXQgPQorICAgICh0b3RhbE51bWJl
ck9mUmVnaXN0ZXJzICsgNykgPj4gMzsKKwordHlwZWRlZiB1aW50OF90IFJlZ2lzdGVyU2V0UE9E
W251bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0XTsKKworY2xhc3MgUmVnaXN0ZXJTZXQgeworcHVi
bGljOgorICAgIFJlZ2lzdGVyU2V0KCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG51bWJlck9mQnl0ZXNJblJlZ2lzdGVyU2V0OyBpLS07KQorICAgICAgICAgICAgbV9zZXRbaV0g
PSAwOworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlclNldChjb25zdCBSZWdpc3RlclNldFBPRCYg
b3RoZXIpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkJ5dGVzSW5S
ZWdpc3RlclNldDsgaS0tOykKKyAgICAgICAgICAgIG1fc2V0W2ldID0gb3RoZXJbaV07CisgICAg
fQorICAgIAorICAgIGNvbnN0IFJlZ2lzdGVyU2V0UE9EJiBhc1BPRCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2V0OyB9CisgICAgCisgICAgdm9pZCBjb3B5SW5mbyhSZWdpc3RlclNldFBPRCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZkJ5dGVzSW5S
ZWdpc3RlclNldDsgaS0tOykKKyAgICAgICAgICAgIG90aGVyW2ldID0gbV9zZXRbaV07CisgICAg
fQorICAgIAorICAgIHZvaWQgc2V0KEdQUlJlZyByZWcpCisgICAgeworICAgICAgICBzZXRCaXQo
R1BSSW5mbzo6dG9JbmRleChyZWcpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRHUFJCeUlu
ZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAgICBzZXRCaXQoaW5kZXgpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNsZWFyKEdQUlJlZyByZWcpCisgICAgeworICAgICAgICBjbGVhckJpdChH
UFJJbmZvOjp0b0luZGV4KHJlZykpOworICAgIH0KKyAgICAKKyAgICBib29sIGdldChHUFJSZWcg
cmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEJpdChHUFJJbmZvOjp0b0luZGV4
KHJlZykpOworICAgIH0KKyAgICAKKyAgICBib29sIGdldEdQUkJ5SW5kZXgodW5zaWduZWQgaW5k
ZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVycyk7CisgICAgICAgIHJldHVybiBnZXRCaXQoaW5kZXgpOworICAgIH0KKyAgICAK
KyAgICAvLyBSZXR1cm4gdGhlIGluZGV4J3RoIGZyZWUgR1BSLgorICAgIEdQUlJlZyBnZXRGcmVl
R1BSKHVuc2lnbmVkIGluZGV4ID0gMCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBp
ZiAoIWdldEdQUkJ5SW5kZXgoaSkgJiYgIWluZGV4LS0pCisgICAgICAgICAgICAgICAgcmV0dXJu
IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEludmFs
aWRHUFJSZWc7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KEZQUlJlZyByZWcpCisgICAgewor
ICAgICAgICBzZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjp0b0lu
ZGV4KHJlZykpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEZQUkJ5SW5kZXgodW5zaWduZWQg
aW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycyk7CisgICAgICAgIHNldEJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGlu
ZGV4KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcihGUFJSZWcgcmVnKQorICAgIHsKKyAg
ICAgICAgY2xlYXJCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjp0b0lu
ZGV4KHJlZykpOworICAgIH0KKyAgICAKKyAgICBib29sIGdldChGUFJSZWcgcmVnKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEJpdChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyAr
IEZQUkluZm86OnRvSW5kZXgocmVnKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgZ2V0RlBSQnlJ
bmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8
IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIGdldEJpdChHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGluZGV4KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQmFua0luZm8+CisgICAgdm9pZCBzZXRCeUluZGV4KHVuc2lnbmVkIGluZGV4
KQorICAgIHsKKyAgICAgICAgc2V0KEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgorICAgIGJvb2wgZ2V0QnlJ
bmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQoQmFua0luZm86
OnRvUmVnaXN0ZXIoaW5kZXgpKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZT
ZXRHUFJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7
CisgICAgICAgICAgICBpZiAoIWdldEJpdChpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mU2V0RlBScygpIGNvbnN0CisgICAg
eworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFn
ZXRCaXQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mU2V0UmVnaXN0ZXJz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAg
ICAgIGlmICghZ2V0Qml0KGkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIHZvaWQgc2V0Qml0KHVuc2lnbmVkIGkpCisgICAgeworICAgICAg
ICBBU1NFUlQoaSA8IHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAgICBtX3NldFtpID4+
IDNdIHw9ICgxIDw8IChpICYgNykpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyQml0KHVu
c2lnbmVkIGkpCisgICAgeworICAgICAgICBBU1NFUlQoaSA8IHRvdGFsTnVtYmVyT2ZSZWdpc3Rl
cnMpOworICAgICAgICBtX3NldFtpID4+IDNdICY9IH4oMSA8PCAoaSAmIDcpKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBnZXRCaXQodW5zaWduZWQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChpIDwgdG90YWxOdW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgIHJldHVybiAhIShtX3Nl
dFtpID4+IDNdICYgKDEgPDwgKGkgJiA3KSkpOworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlclNl
dFBPRCBtX3NldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZWxzZSAvLyBFTkFCTEUo
SklUKSAtPiBzbyBpZiBKSVQgaXMgZGlzYWJsZWQKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIERl
ZmluZSBSZWdpc3RlclNldFBPRCB0byBzb21ldGhpbmcgdGhhdCBpcyBhIFBPRCwgYnV0IGlzIG90
aGVyd2lzZSB1c2VsZXNzLAorLy8gdG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVmZXIgdG8gdGhpcyB0
eXBlIGluIGNvZGUgdGhhdCBtYXkgYmUgY29tcGlsZWQgd2hlbgorLy8gdGhlIERGRyBpcyBkaXNh
YmxlZC4KKworc3RydWN0IFJlZ2lzdGVyU2V0UE9EIHsgfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gUmVnaXN0ZXJTZXRfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE1NjIzNikJ
KGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcDoxNTYyMzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTQxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVwYXRjaC5o
IgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1
ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIKKyNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUu
aCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2lu
Y2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKKyNpbmNsdWRlICJSZXBhdGNoQnVmZmVy
LmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU3Ry
dWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCisj
aW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitz
dGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVibG9jaywgQ29kZUxvY2F0aW9u
Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBuZXdDYWxsZWVGdW5jdGlvbikKK3sKKyAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZWJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIHJlcGF0Y2hCeUlk
U2VsZkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBG
dW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwgYm9vbCBjb21wYWN0KQoreworICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOworCisgICAgLy8gT25seSBvcHRpbWl6
ZSBvbmNlIQorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7CisKKyAgICAvLyBQYXRjaCB0aGUgc3RydWN0dXJlIGNo
ZWNrICYgdGhlIG9mZnNldCBvZiB0aGUgbG9hZC4KKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2go
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRy
X3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBzdHJ1Y3R1cmUpOwor
ICAgIHJlcGF0Y2hCdWZmZXIuc2V0TG9hZEluc3RydWN0aW9uSXNBY3RpdmUoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmNvbnZlcnRpYmxlTG9hZEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1N0b3JhZ2VMb2FkKSwgaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoY29tcGFjdCkKKyAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZzZXRS
ZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSk7CisgICAgZWxzZQorICAgICAgICByZXBh
dGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMy
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBvZmZz
ZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSk7CisjZWxpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgIGlmIChjb21wYWN0KSB7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgb2Zmc2V0UmVsYXRpdmVU
b1BhdGNoZWRTdG9yYWdlKG9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBvZmZzZXRSZWxhdGl2
ZVRvUGF0Y2hlZFN0b3JhZ2Uob2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIG9m
ZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIG9mZnNl
dFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShvZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgfQorI2VuZGlmCit9CisK
K3N0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKKyAgICBKU0NlbGwqIG9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEdQUlJlZyBzY3JhdGNoR1BSKQoreworICAg
IGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRyYW5z
aXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgc3RydWN0dXJlLT5h
ZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykp
OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLy8gSWYgd2UgZXhlY3V0ZSB0aGlzIGNv
ZGUsIHRoZSBvYmplY3QgbXVzdCBoYXZlIHRoZSBzdHJ1Y3R1cmUgd2UgZXhwZWN0LiBBc3NlcnQK
KyAgICAgICAgLy8gdGhpcyBpbiBkZWJ1ZyBtb2Rlcy4KKyAgICAgICAgaml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2JqZWN0KSwgc2NyYXRjaEdQUik7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gaml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CisgICAgICAgIGppdC5icmVha3Bv
aW50KCk7CisgICAgICAgIG9rLmxpbmsoJmppdCk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihv
YmplY3QpLCBzY3JhdGNoR1BSKTsKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKAorICAgICAgICBq
aXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25D
aGVjaygKKyAgICBKU1ZhbHVlIHByb3RvdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgR1BSUmVnIHNjcmF0Y2hHUFIpCit7Cisg
ICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFT
U0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOworICAgIAorICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRp
b25DaGVjaygKKyAgICAgICAgcHJvdG90eXBlLmFzQ2VsbCgpLCBwcm90b3R5cGUuYXNDZWxsKCkt
PnN0cnVjdHVyZSgpLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBqaXQsCisgICAgICAgIGZhaWx1cmVD
YXNlcywgc2NyYXRjaEdQUik7Cit9CisKK3N0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChSZXBh
dGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCit7CisgICAgaWYgKE1hY3JvQXNzZW1i
bGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7CisgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKAorICAgICAgICAgICAgUmVwYXRjaEJ1
ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaE9uQWRkcmVzcygKKyAgICAg
ICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZz
ZXQoCisgICAgICAgICAgICAgICAgICAgIC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2hlY2tJbW1Ub0NhbGwpKSwKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdl
dCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKAorICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAor
ICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAor
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKK30KKworc3RhdGljIHZvaWQgZW1p
dFJlc3RvcmVTY3JhdGNoKE1hY3JvQXNzZW1ibGVyJiBzdHViSml0LCBib29sIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIHN1Y2Nl
c3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZmFpbHVyZUNhc2VzKQoreworICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgeworICAgICAg
ICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgCisgICAgICAgIHN1Y2Nlc3MgPSBz
dHViSml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBo
ZXJlLCBzbyB3ZSBjYW4gcG9wIHNjcmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFjay4KKyAgICAg
ICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOworICAgICAgICAKKyAgICAgICAgc3R1Ykpp
dC5wb3Aoc2NyYXRjaEdQUik7CisgICAgICAgIAorICAgICAgICBmYWlsID0gc3R1YkppdC5qdW1w
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc3VjY2VzcyA9IHN0dWJKaXQu
anVtcCgpOworfQorCitzdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYg
cGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBmYWlsdXJlQ2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29k
ZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbikKK3sKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN1
Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7CisgICAgICAgIAorICAgIGlmIChuZWVkVG9SZXN0b3JlU2Ny
YXRjaCkgeworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWwsIHNsb3dDYXNlQmVnaW4pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBk
aXJlY3RseSBiYWNrIHRvIG5vcm1hbCBwYXRoCisgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJl
Q2FzZXMsIHNsb3dDYXNlQmVnaW4pOworfQorCitzdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0
Y2goTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vzcywg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1
cmVDYXNlcykKK3sKKyAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxU
b0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworfQorCitzdGF0aWMgdm9pZCBnZW5l
cmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwg
c3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KworICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7CisgICAgICAgIAorICAgIEdQUlJlZyBiYXNl
R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7Cisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZn
LnZhbHVlR1BSKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7CisgICAgYm9vbCBuZWVkVG9S
ZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworICAgIAorICAgIGlmIChzY3JhdGNoR1BSID09IEludmFs
aWRHUFJSZWcpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzY3JhdGNoR1BSID0gQXNz
ZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7CisjZWxz
ZQorICAgICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BS
KGJhc2VHUFIsIHJlc3VsdEdQUiwgcmVzdWx0VGFnR1BSKTsKKyNlbmRpZgorICAgICAgICBzdHVi
Sml0LnB1c2goc2NyYXRjaEdQUik7CisgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNl
czsKKyAgICAKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSkpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1
cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsKKyAg
ICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjb3VudDsgKytpLCArK2l0KSB7CisgICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3QoY3Vy
clN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKKyAgICAgICAgYWRkU3RydWN0
dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgICAgICAgICAgcHJvdG9PYmplY3QsIHByb3RvT2JqZWN0
LT5zdHJ1Y3R1cmUoKSwgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBzdHViSml0LAorICAg
ICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgY3VyclN0cnVjdHVy
ZSA9IGl0LT5nZXQoKTsKKyAgICB9CisgICAgCisgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNl
dCkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdHViSml0LmxvYWQ2NChwcm90b09i
amVjdC0+bG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KSwgcmVzdWx0R1BSKTsKKyNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihwcm90b09iamVjdC0+bG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7Cisg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+YnV0dGVyZmx5QWRkcmVzcygpLCBy
ZXN1bHRHUFIpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHN0dWJKaXQubG9hZDY0KE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0
KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZz
ZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyNlbmRp
ZgorICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7CisgICAg
CisgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBz
Y3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOworICAgIAorICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAg
IAorICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0
Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxh
YmVsKTsKKyAgICAKKyAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX0RGR19TVFVC
KAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJERkcgcHJvdG90eXBlIGNoYWluIGFj
Y2VzcyBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgIHRvQ1N0cmlu
ZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKK30KKworc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7Cisg
ICAgLy8gRklYTUU6IFdyaXRlIGEgdGVzdCB0aGF0IHByb3ZlcyB3ZSBuZWVkIHRvIGNoZWNrIGZv
ciByZWN1cnNpb24gaGVyZSBqdXN0CisgICAgLy8gbGlrZSB0aGUgaW50ZXJwcmV0ZXIgZG9lcywg
dGhlbiBhZGQgYSBjaGVjayBmb3IgcmVjdXJzaW9uLgorCisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAK
KyAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1
ZUdQUik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8u
cGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKKyAgICAgICAgYm9vbCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXIgc3R1YkppdDsKKyAgICAgICAgCisgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRH
UFJSZWcpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEFz
c2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOworI2Vs
c2UKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0
Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRUYWdHUFIpOworI2VuZGlmCisgICAgICAg
ICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7CisgICAgICAgICAgICBuZWVkVG9SZXN0b3Jl
U2NyYXRjaCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CisgICAgICAgCisgICAgICAgIHN0dWJKaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7IAorICAgICAgICBzdHViSml0LmxvYWQ4KE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0
dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSkpOworICAgICAgICAK
KyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHVi
Sml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3Jh
Z2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQoc3R1YkppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgIHN0dWJKaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAg
ICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3R1YkppdC5t
b3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDB4ZmZmZmZmZmYpLCByZXN1bHRUYWdH
UFIpOyAvLyBKU1ZhbHVlOjpJbnQzMlRhZworI2VuZGlmCisKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKKyAgICAgICAgCisgICAgICAgIGVtaXRSZXN0b3JlU2Ny
YXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2Vzcywg
ZmFpbCwgZmFpbHVyZUNhc2VzKTsKKyAgICAgICAgCisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnZtLCAmc3R1YkppdCwgY29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGxpbmtS
ZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN0dWJJbmZv
LCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOworICAgICAgICAKKyAgICAgICAgc3R1Yklu
Zm8uc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKKyAgICAgICAgICAg
IHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJERkcgR2V0QnlJZCBhcnJheSBsZW5ndGggc3R1
YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpl
eGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAKKyAgICAgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgICAgIHJlcGxhY2VXaXRo
SnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBzaG91bGQgc3VwcG9ydCBsZW5ndGgg
YWNjZXNzIGZvciBTdHJpbmcuCisKKyAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNz
IGZvciBpbW1lZGlhdGVzLgorICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICBp
ZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
c3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgorICAgIGlmIChzbG90LnNs
b3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7CisgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVZh
bHVlKCkKKyAgICAgICAgICAgIHx8ICFNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25l
ZEFkZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpKSkgeworICAgICAgICAgICAgcmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXBhdGNoQnlJZFNl
bGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNl
dCgpLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0LCB0cnVlKTsKKyAgICAgICAgc3R1YkluZm8u
aW5pdEdldEJ5SWRTZWxmKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0
dXJlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChzdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8g
RklYTUU6IG9wdGltaXplIGdldHRlcnMgYW5kIHNldHRlcnMKKyAgICBpZiAoIXNsb3QuaXNDYWNo
ZWFibGVWYWx1ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICBzaXplX3QgY291bnQgPSBu
b3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2VWYWx1ZSwgc2xv
dC5zbG90QmFzZSgpLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCk7CisgICAgaWYgKGNvdW50ID09IElu
dmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RydWN0
dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVj
KTsKKyAgICAKKyAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZv
LCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLCBzdHViSW5mby5zdHViUm91dGluZSk7
CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAg
cmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKKyAgICAKKyAg
ICBzdHViSW5mby5pbml0R2V0QnlJZENoYWluKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHRydWUpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgYm9vbCBj
YWNoZWQgPSB0cnlDYWNoZUdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QsIHN0dWJJbmZvKTsKKyAgICBpZiAoIWNhY2hlZCkKKyAgICAgICAgcmVwYXRjaENhbGwoZXhl
Yy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0
QnlJZCk7Cit9CisKK3N0YXRpYyBib29sIGdldFBvbHltb3JwaGljU3RydWN0dXJlTGlzdCgKKyAg
ICBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sCisgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiYgcG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0LCBpbnQmIGxpc3RJbmRleCwKKyAgICBDb2RlTG9jYXRpb25MYWJlbCYgc2xvd0Nh
c2UpCit7CisgICAgc2xvd0Nhc2UgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgCisg
ICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KSB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFzdHViSW5mby5zdHViUm91dGluZSk7CisgICAgICAgIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKTsKKyAg
ICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QsIDAsIGZhbHNlKTsKKyAgICAgICAgbGlzdEluZGV4ID0gMDsKKyAgICB9IGVsc2UgaWYgKHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFzdHViSW5mby5zdHViUm91dGluZSk7CisgICAgICAgIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1h
bmFnZWRSb3V0aW5lKHNsb3dDYXNlKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLmdldCgpLCB0cnVlKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxm
TGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEsIHRydWUpOworICAgICAgICBsaXN0SW5k
ZXggPSAxOworICAgIH0gZWxzZSBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX2NoYWluKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhc3R1YkluZm8uc3R1YlJv
dXRpbmUpOworICAgICAgICBzbG93Q2FzZSA9IENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0
dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLnN0dWJSb3V0aW5lLCBzdHViSW5mby51LmdldEJ5
SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby51LmdldEJ5SWRDaGFp
bi5jaGFpbi5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNsZWFy
KCk7CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0LCAxLCBmYWxzZSk7CisgICAgICAgIGxpc3RJbmRleCA9IDE7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3Nf
Z2V0X2J5X2lkX3NlbGZfbGlzdCk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9
IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7CisgICAgICAgIGxpc3RJ
bmRleCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplOworICAgICAgICBzbG93
Q2FzZSA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFts
aXN0SW5kZXggLSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgfQorICAgIAor
ICAgIGlmIChsaXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQobGlzdEluZGV4IDwgUE9M
WU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj
IHZvaWQgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1YihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKSVRTdHViUm91dGluZSogc3R1YlJvdXRpbmUpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGZfbGlzdCk7CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7
CisgICAgaWYgKHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LmRpZFNlbGZQYXRjaGluZykgewor
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKKyAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAorICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0
dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKK30KKworc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRC
eUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCit7CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkKKyAgICAgICAgfHwgIXNs
b3QuaXNDYWNoZWFibGUoKQorICAgICAgICB8fCAhYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUu
YXNDZWxsKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJl
KCk7CisgICAgCisgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKKyAgICAg
ICAgaWYgKCFzdHViSW5mby5wYXRjaC5kZmcucmVnaXN0ZXJzRmx1c2hlZCkgeworICAgICAgICAg
ICAgLy8gV2UgY2Fubm90IGRvIGFzIG11Y2ggaW5saW5lIGNhY2hpbmcgaWYgdGhlIHJlZ2lzdGVy
cyB3ZXJlIG5vdCBmbHVzaGVkIHByaW9yIHRvIHRoaXMgR2V0QnlJZC4gSW4gcGFydGljdWxhciwK
KyAgICAgICAgICAgIC8vIG5vbi1WYWx1ZSBjYWNoZWQgcHJvcGVydGllcyByZXF1aXJlIHBsYW50
aW5nIGNhbGxzLCB3aGljaCByZXF1aXJlcyByZWdpc3RlcnMgdG8gaGF2ZSBiZWVuIGZsdXNoZWQu
IFRodXMsCisgICAgICAgICAgICAvLyBpZiByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCwgZG9u
J3QgZG8gbm9uLVZhbHVlIGNhY2hpbmcuCisgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFi
bGVWYWx1ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IAorICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdDsKKyAgICAgICAgaW50IGxpc3RJbmRleDsKKyAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgc2xvd0Nhc2U7CisKKyAgICAgICAgaWYgKCFnZXRQb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3Qodm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgbGlz
dEluZGV4LCBzbG93Q2FzZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSsrOworICAgICAgICAK
KyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBh
dGNoLmRmZy5iYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBHUFJSZWcg
cmVzdWx0VGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFs
dWVUYWdHUFIpOworI2VuZGlmCisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMp
LmdldEZyZWVHUFIoKTsKKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVycyBzdHViSml0KHZt
LCBjb2RlQmxvY2spOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd3Jv
bmdTdHJ1Y3QgPSBzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFRoZSBzdHJhdGVneSB3ZSB1c2UgZm9yIHN0dWJzIGlzIGFzIGZvbGxvd3M6Cisg
ICAgICAgIC8vIDEpIENhbGwgREZHIGhlbHBlciB0aGF0IGNhbGxzIHRoZSBnZXR0ZXIuCisgICAg
ICAgIC8vIDIpIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBleGNlcHRpb24sIGFuZCBpZiB0aGVyZSB3
YXMsIGNhbGwgeWV0IGFub3RoZXIKKyAgICAgICAgLy8gICAgaGVscGVyLgorICAgICAgICAKKyAg
ICAgICAgYm9vbCBpc0RpcmVjdCA9IGZhbHNlOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBvcGVyYXRpb25DYWxsOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBoYW5kbGVyQ2Fs
bDsKKyAgICAgICAgRnVuY3Rpb25QdHIgb3BlcmF0aW9uRnVuY3Rpb247CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7CisgICAgICAgIAorICAgICAgICBpZiAoc2xvdC5pc0Nh
Y2hlYWJsZUdldHRlcigpIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAg
ICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkgeworICAgICAgICAgICAgICAgIEFTU0VS
VChzY3JhdGNoR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgICAgIEFTU0VSVChi
YXNlR1BSICE9IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNl
dChzbG90LmNhY2hlZE9mZnNldCgpKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAg
ICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7
CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNl
dCgpKSksIHNjcmF0Y2hHUFIpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CisjZWxzZQorICAgICAgICAgICAgICAgICAg
ICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZz
ZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOworI2Vu
ZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAg
IG9wZXJhdGlvbkZ1bmN0aW9uID0gb3BlcmF0aW9uQ2FsbEdldHRlcjsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoCisgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEZ1bmN0aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVy
KCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpLAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihpZGVudC5pbXBsKCkpKTsKKyAgICAgICAgICAgICAgICBvcGVy
YXRpb25GdW5jdGlvbiA9IG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hl
bmV2ZXIgdGhpcyBjYWxsIGlzIG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCisg
ICAgICAgICAgICAvLyBwbGFjZSB0aGF0IHdlIG1hZGUgaXQgZnJvbS4gSXQganVzdCBzbyBoYXBw
ZW5zIHRvIGJlIHRoZSBwbGFjZSB0aGF0IHdlIGFyZSBhdAorICAgICAgICAgICAgLy8gcmlnaHQg
bm93IQorICAgICAgICAgICAgc3R1YkppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZXhlYy0+bG9jYXRpb25Bc1Jhd0JpdHMoKSksCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBvcGVyYXRpb25DYWxsID0gc3R1YkppdC5jYWxsKCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgICAgIHN0dWJKaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BS
KTsKKyNlbHNlCisgICAgICAgICAgICBzdHViSml0LnNldHVwUmVzdWx0cyhyZXN1bHRHUFIsIHJl
c3VsdFRhZ0dQUik7CisjZW5kaWYKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0LmVtaXRF
eGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZSgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmc3R1Yklu
Zm8pKTsKKyAgICAgICAgICAgIGhhbmRsZXJDYWxsID0gc3R1YkppdC5jYWxsKCk7CisgICAgICAg
ICAgICBzdHViSml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgp
KSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBp
ZiAoYmFzZUdQUiA9PSByZXN1bHRUYWdHUFIpIHsKKyAgICAgICAgICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVU
b0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAg
ICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
ICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3R1
YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRH
UFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BS
KTsKKyNlbHNlCisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNl
dCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNh
Y2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgICAgICBpc0RpcmVjdCA9
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
JnN0dWJKaXQsIGNvZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KHdyb25nU3RydWN0LCBzbG93Q2FzZSk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vz
cywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOworICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAg
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIG9wZXJhdGlvbkZ1bmN0aW9u
KTsKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXJJblN0dWIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0KKyAgICAgICAgICAgIGNyZWF0ZUpJVFN0dWJS
b3V0aW5lKAorICAgICAgICAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAorICAgICAgICAgICAg
ICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgKCJERkcgR2V0QnlJZCBw
b2x5bW9ycGhpYyBsaXN0IGFjY2VzcyBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAg
ICAgICAgICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKSwKKyAgICAgICAgICAgICAgICAqdm0sCisgICAgICAgICAgICAgICAgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlR2V0
dGVyKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKTsKKyAgICAgICAgCisgICAgICAgIHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsK
KyAgICAgICAgCisgICAgICAgIHBhdGNoSnVtcFRvR2V0QnlJZFN0dWIoY29kZUJsb2NrLCBzdHVi
SW5mbywgc3R1YlJvdXRpbmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOworICAgIH0KKyAgICAKKyAgICBpZiAoYmFz
ZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0
eUNhY2hpbmcoKSB8fCAhc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7
CisgICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3JDaGFpbkFjY2Vz
cyhleGVjLCBiYXNlVmFsdWUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQsIG9mZnNldCk7CisgICAg
aWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90
b3R5cGVDaGFpbihleGVjKTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKKyAgICBpbnQgbGlzdEluZGV4OworICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlOworICAgIGlmICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qs
IGxpc3RJbmRleCwgc2xvd0Nhc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
c3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7CisgICAgCisgICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKKyAgICAKKyAgICBnZW5lcmF0ZVByb3RvQ2hh
aW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNl
dCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc2xvd0Nhc2UsIHN0dWJSb3V0aW5l
KTsKKyAgICAKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5z
ZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0
dXJlLCB0cnVlKTsKKyAgICAKKyAgICBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKGNvZGVCbG9jaywg
c3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKKyAgICAKKyAgICByZXR1cm4gbGlzdEluZGV4
IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOworfQorCit2b2lkIGJ1aWxkR2V0
QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBib29sIGRvbnRDaGFuZ2VDYWxsID0gdHJ5QnVpbGRH
ZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8p
OworICAgIGlmICghZG9udENoYW5nZUNhbGwpCisgICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNv
ZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQp
OworfQorCitzdGF0aWMgVl9KSVRPcGVyYXRpb25fRUpDSSBhcHByb3ByaWF0ZUdlbmVyaWNQdXRC
eUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQp
Cit7CisgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgaWYgKHB1dEtpbmQg
PT0gRGlyZWN0KQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3Q7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAgIH0KKyAgICBp
ZiAocHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0OworICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OworfQor
CitzdGF0aWMgVl9KSVRPcGVyYXRpb25fRUpDSSBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5
SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkK
K3sKKyAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgeworICAgICAgICBpZiAocHV0S2luZCA9
PSBEaXJlY3QpCisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dEJ1aWxkTGlzdDsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExp
c3Q7CisgICAgfQorICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3Q7CisgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Q7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRQdXRS
ZXBsYWNlU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsCisgICAgSlNWYWx1ZSwKKyAgICBjb25z
dCBJZGVudGlmaWVyJiwKKyAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsCisgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIFB1dEtpbmQsCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsCisgICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAorICAgIFJlZlB0
cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5w
YXRjaC5kZmcuYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBHUFJSZWcgdmFs
dWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZVRh
Z0dQUik7CisjZW5kaWYKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+
KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQUik7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBS
ZWdpc3RlclNldChzdHViSW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycykuZ2V0RnJlZUdQUigp
OworICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKKyNpZiBFTkFCTEUoV1JJ
VEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgR1BSUmVnIHNjcmF0Y2hHUFIyOworICAgIGNvbnN0
IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gdHJ1ZTsKKyNlbHNlCisgICAgY29uc3QgYm9vbCB3
cml0ZUJhcnJpZXJOZWVkZWQgPSBmYWxzZTsKKyNlbmRpZgorICAgIAorICAgIE1hY3JvQXNzZW1i
bGVyIHN0dWJKaXQ7CisgICAgCisgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZyAm
JiAod3JpdGVCYXJyaWVyTmVlZGVkIHx8IGlzT3V0T2ZMaW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3Nl
bWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIpOworI2Vsc2UK
KyAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihi
YXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgICAgIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoID0gdHJ1ZTsKKyAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOwor
ICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJhZFN0cnVjdHVyZSA9IHN0dWJKaXQu
YnJhbmNoUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAg
ICAKKyNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICBzY3JhdGNoR1BSMiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihi
YXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisjZWxzZQorICAgIHNjcmF0Y2hHUFIyID0g
QXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1
ZVRhZ0dQUiwgc2NyYXRjaEdQUik7CisjZW5kaWYKKyAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQ
UjIpOworICAgIEFzc2VtYmx5SGVscGVyczo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIs
IHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7
CisgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUjIpOworI2VuZGlmCisgICAgCisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCisg
ICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5Jbmxp
bmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAg
ZWxzZSB7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSkpOworICAgIH0KKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CisgICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIo
dmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRl
cmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAg
c3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSkpOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1
Y2Nlc3M7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKKyAgICAKKyAgICBpZiAo
bmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKKyAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7
CisgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGJh
ZFN0cnVjdHVyZS5saW5rKCZzdHViSml0KTsKKyAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQ
Uik7CisgICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgIGZhaWx1cmUgPSBiYWRTdHJ1
Y3R1cmU7CisgICAgfQorICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1
YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFp
bHVyZUxhYmVsKTsKKyAgICAgICAgICAgIAorICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09E
RV9GT1JfREZHX1NUVUIoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkRGRyBQdXRC
eUlkIHJlcGxhY2Ugc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICB0
b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKK30KKworc3RhdGljIHZv
aWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAorICAgIEV4ZWNTdGF0ZSogZXhlYywKKyAgICBKU1Zh
bHVlLAorICAgIGNvbnN0IElkZW50aWZpZXImLAorICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYg
c2xvdCwKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgUHV0S2luZCBwdXRL
aW5kLAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlLAorICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiwKKyAgICBDb2RlTG9jYXRp
b25MYWJlbCBmYWlsdXJlTGFiZWwsCisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJv
dXRpbmUpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOworI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAgR1BS
UmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFs
dWVHUFIpOworICAgIAorICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1
YkluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpOworICAgIGFsbG9jYXRvci5sb2NrKGJhc2VH
UFIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVUYWdH
UFIpOworI2VuZGlmCisgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOworICAgIAorICAgIEND
YWxsSGVscGVycyBzdHViSml0KHZtKTsKKyAgICAgICAgICAgIAorICAgIEdQUlJlZyBzY3JhdGNo
R1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBBU1NFUlQoc2NyYXRj
aEdQUjEgIT0gYmFzZUdQUik7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsK
KyAgICAKKyAgICBib29sIG5lZWRTZWNvbmRTY3JhdGNoID0gZmFsc2U7CisgICAgYm9vbCBuZWVk
VGhpcmRTY3JhdGNoID0gZmFsc2U7CisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5H
KQorICAgIG5lZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsKKyNlbmRpZgorICAgIGlmIChzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpCisgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAg
ICAgICBuZWVkU2Vjb25kU2NyYXRjaCA9IHRydWU7CisgICAgICAgIG5lZWRUaGlyZFNjcmF0Y2gg
PSB0cnVlOworICAgIH0KKworICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKKyAgICBpZiAobmVlZFNl
Y29uZFNjcmF0Y2gpIHsKKyAgICAgICAgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoR1BSKCk7CisgICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBiYXNlR1BSKTsKKyAg
ICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsKKyAgICAgICAgQVNTRVJUKHNj
cmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NyYXRjaEdQ
UjIgPSBJbnZhbGlkR1BSUmVnOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKKyAgICBpZiAobmVl
ZFRoaXJkU2NyYXRjaCkgeworICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIzICE9IGJhc2VHUFIpOwor
ICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMgIT0gdmFsdWVHUFIpOworICAgICAgICBBU1NFUlQo
c2NyYXRjaEdQUjMgIT0gc2NyYXRjaEdQUjEpOworICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUjMg
IT0gc2NyYXRjaEdQUjIpOworICAgIH0gZWxzZQorICAgICAgICBzY3JhdGNoR1BSMyA9IEludmFs
aWRHUFJSZWc7CisgICAgICAgICAgICAKKyAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdp
c3RlcnNCeVB1c2hpbmcoc3R1YkppdCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZmFpbHVyZUNhc2VzOworICAgICAgICAgICAgCisgICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHJh
bnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisgICAgCisgICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihvbGRTdHJ1Y3R1cmUpKSk7Cisg
ICAgCisgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgICAgICBvbGRTdHJ1Y3R1
cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJK
aXQsIGZhaWx1cmVDYXNlcywKKyAgICAgICAgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgCisg
ICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7CisgICAgICAgIGZvciAoV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7Cisg
ICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAg
KCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0
dWJKaXQsIGZhaWx1cmVDYXNlcywKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAg
QVNTRVJUKG5lZWRTZWNvbmRTY3JhdGNoKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gSW52
YWxpZEdQUlJlZyk7CisgICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIg
YXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1aXJlcyBpdAorICAgIEFzc2Vt
Ymx5SGVscGVyczo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIxLCBz
Y3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworI2VuZGlmCisgICAg
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIAorICAgIGJvb2wg
c2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gZmFsc2U7CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
IHsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxs
b2NhdG9yID0gJnZtLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBz
dHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3Jh
dGNoR1BSMSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihu
ZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKKyAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2Ny
YXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CisgICAgICAg
ICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBzdHViSml0LmFk
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1f
Y3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBzdHViSml0LmFk
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0
Y2hHUFIxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0g
b2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAg
ICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgIHN0
dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0
Y2hHUFIxKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0
cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5l
d1NpemUpLCBzY3JhdGNoR1BSMSkpOworICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAgICAgICAg
ICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9j
dXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRk
UHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRj
aEdQUjEpOworICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMSA9IG5ldyBzdG9yYWdl
LCBzY3JhdGNoR1BSMyA9IG9sZCBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQorICAg
ICAgICAgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihvbGRTaXplKTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKKyAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UjMsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBzY3JhdGNo
R1BSMik7CisgICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFs
dWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CisgICAgICAg
IHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9IHRydWU7CisgICAgfQorCisgICAgc3R1YkppdC5zdG9y
ZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQo
KSkpCisgICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0
SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7
CisgICAgZWxzZSB7CisgICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQorICAgICAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1Ykpp
dC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwg
b2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkp
KTsKKyAgICB9CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGlmIChpc0lubGluZU9mZnNl
dChzbG90LmNhY2hlZE9mZnNldCgpKSkgeworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFn
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXNjcmF0Y2hH
UFIxSGFzU3RvcmFnZSkKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSMSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVU
YWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRl
cmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgIH0KKyNlbmRp
ZgorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7CisgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZmFpbHVyZTsKKyAgICAgICAgICAgIAorICAgIGlmIChhbGxvY2F0b3IuZGlk
UmV1c2VSZWdpc3RlcnMoKSkgeworICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lz
dGVyc0J5UG9wcGluZyhzdHViSml0KTsKKyAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgp
OworCisgICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKKyAgICAgICAgYWxsb2Nh
dG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoc3R1YkppdCk7CisgICAgICAgIGZh
aWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc3VjY2VzcyA9IHN0
dWJKaXQuanVtcCgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNh
bGw7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vzc0luU2xvd1BhdGg7CisgICAgCisg
ICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7Cisg
ICAgICAgIAorICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGlu
ZyhzdHViSml0KTsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5z
Y3JhdGNoQnVmZmVyRm9yU2l6ZShhbGxvY2F0b3IuZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkp
OworICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVy
KHN0dWJKaXQsIHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hHUFIxKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLCB2YWx1ZUdQUik7CisjZWxzZQorICAg
ICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKHNsb3QuY2FjaGVkT2Zmc2V0KCkpLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOworI2Vu
ZGlmCisgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBzdHViSml0LmNhbGwoKTsKKyAgICAgICAgYWxs
b2NhdG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZmZXIoc3R1YkppdCwgc2Ny
YXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjEpOworICAgICAgICBzdWNjZXNzSW5TbG93UGF0aCA9IHN0
dWJKaXQuanVtcCgpOworICAgIH0KKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN1
Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKKyAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNl
UmVnaXN0ZXJzKCkpCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxh
YmVsKTsKKyAgICBlbHNlCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBm
YWlsdXJlTGFiZWwpOworICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0g
b2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgIHBhdGNoQnVmZmVy
Lmxpbmsob3BlcmF0aW9uQ2FsbCwgb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQ
dXQpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3NJblNsb3dQYXRoLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9Eb25lKSk7CisgICAgfQorICAgIAorICAgIHN0dWJSb3V0aW5lID0KKyAgICAgICAg
Y3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKKyAg
ICAgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAoIkRGRyBQdXRCeUlk
ICVzdHJhbnNpdGlvbiBzdHViICglcCAtPiAlcCkgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAor
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID8gInJlYWxsb2NhdGluZyAiIDogIiIsCisg
ICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLAorICAgICAgICAgICAg
ICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAg
c3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
LAorICAgICAgICAgICAgKnZtLAorICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVy
RXhlY3V0YWJsZSgpLAorICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICE9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKKyAgICAgICAgICAgIHN0cnVj
dHVyZSk7Cit9CisKK3N0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0
S2luZCkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwor
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworCisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVl
LmFzQ2VsbCgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVy
ZSgpOworICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lE
KCk7CisgICAgCisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICBp
ZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSB7CisgICAgICAgIGlmIChzbG90LnR5cGUoKSA9
PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CisgICAgICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3
ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQorICAgICAgICAgICAgLy8gZW5vdWdo
IHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KKyAgICAgICAgICAgIGlmIChHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycyA8IDYKKyAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCisgICAg
ICAgICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2tp
cCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1
Y3R1cmUgaGFzCisgICAgICAgICAgICAvLyBpbmRleGluZyBzdG9yYWdlLgorICAgICAgICAgICAg
aWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub3JtYWxp
emVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlQ2VsbCkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWlu
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVD
aGFpbihleGVjKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZW1pdFB1dFRyYW5zaXRpb25T
dHViKAorICAgICAgICAgICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJ
bmZvLCBwdXRLaW5kLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLCBw
cm90b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSks
CisgICAgICAgICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAgICAg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKKyAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwor
ICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5k
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNp
dGlvbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3Ry
dWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3QpOworICAgICAgICAgICAg
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJlcGF0Y2hC
eUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCksIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEtpbmQpLCBmYWxzZSk7CisgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZSgqdm0s
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCByZXBhdGNoUHV0
QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgYm9vbCBjYWNoZWQgPSB0
cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJ
bmZvLCBwdXRLaW5kKTsKKyAgICBpZiAoIWNhY2hlZCkKKyAgICAgICAgcmVwYXRjaENhbGwoZXhl
Yy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVH
ZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKK30KKworc3RhdGljIGJvb2wg
dHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xv
dCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKworICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpOworICAgIAorICAg
IGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAgaWYgKHNsb3QuYmFzZSgp
ID09IGJhc2VWYWx1ZSkgeworICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0Owor
ICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworICAgICAgICAKKyAg
ICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsK
KyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2tpcCBvcHRp
bWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZl
CisgICAgICAgICAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgorICAg
ICAgICAgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgorICAgICAgICAgICAg
ICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVl
ZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKKyAgICAgICAgICAgIC8vIGluZGV4aW5n
IHN0b3JhZ2UuCisgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGlu
Z0hlYWRlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKSA9
PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4g
PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0aW5nIHRoZSBzdHViLiBNb2dyaWZ5
IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCisgICAgICAgICAgICBsaXN0ID0gUG9seW1vcnBo
aWNQdXRCeUlkTGlzdDo6ZnJvbSgKKyAgICAgICAgICAgICAgICBwdXRLaW5kLCBzdHViSW5mbywK
KyAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCisgICAgICAgICAgICAgICAgZXhl
YywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLAorICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAg
ICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJn
ZXQoKSksCisgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCisgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6
dHJhbnNpdGlvbigKKyAgICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLAorICAgICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwg
cHJvdG90eXBlQ2hhaW4sCisgICAgICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0
aW5nIHRoZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCisgICAgICAg
ICAgICBsaXN0ID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbSgKKyAgICAgICAgICAgICAg
ICBwdXRLaW5kLCBzdHViSW5mbywKKyAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93
Q2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBlbWl0UHV0UmVwbGFjZVN0dWIoCisg
ICAgICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJ
bmZvLCBwdXRLaW5kLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFi
ZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLCBzdHViUm91dGluZSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGxpc3QtPmFkZEFjY2VzcygKKyAgICAgICAgICAgICAgICBQdXRC
eUlkQWNjZXNzOjpyZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgc3R1YlJv
dXRpbmUpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRl
bHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQorICAg
ICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBi
YXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2lu
ZCkKK3sKKyAgICBib29sIGNhY2hlZCA9IHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZh
bHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKKyAgICBpZiAoIWNh
Y2hlZCkKKyAgICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3Qs
IHB1dEtpbmQpKTsKK30KKworc3RhdGljIGJvb2wgdHJ5UmVwYXRjaEluKAorICAgIEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCB3YXNG
b3VuZCwKKyAgICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKK3sKKyAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2Vz
QXJlQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAod2Fz
Rm91bmQpIHsKKyAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXRJZ25vcmVkOworICAgIHNpemVfdCBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNo
YWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZSwgd2FzRm91bmQgPyBzbG90LnNsb3RCYXNlKCkg
OiBKU1ZhbHVlKCksIGlkZW50LCBvZmZzZXRJZ25vcmVkKTsKKyAgICBpZiAoY291bnQgPT0gSW52
YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7Cisg
ICAgaW50IGxpc3RJbmRleDsKKyAgICAKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFi
ZWwgPSBzdHViSW5mby5ob3RQYXRoQmVnaW47CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nh
c2VMYWJlbDsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfdW5z
ZXQpIHsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCgpOworICAgICAgICBzdHViSW5mby5pbml0SW5MaXN0KHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdCwgMCk7CisgICAgICAgIHNsb3dDYXNlTGFiZWwgPSBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgIHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICAgICAgbGlzdEluZGV4ID0gMDsK
KyAgICB9IGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc19pbl9saXN0KTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0g
c3R1YkluZm8udS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKKyAgICAgICAgbGlzdEluZGV4ID0gc3R1
YkluZm8udS5pbkxpc3QubGlzdFNpemU7CisgICAgICAgIHNsb3dDYXNlTGFiZWwgPSBDb2RlTG9j
YXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0u
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGxpc3RJ
bmRleCA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVy
ZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZTsKKyAgICAKKyAgICB7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1ZUdQ
Uik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8ucGF0
Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKKyAgICAgICAgCisgICAgICAgIEND
YWxsSGVscGVycyBzdHViSml0KHZtKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgbmVlZFRvUmVz
dG9yZVNjcmF0Y2g7CisgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsK
KyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAgICAg
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOworICAgICAgICAKKyAgICAg
ICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgeworICAgICAgICAgICAgSlNPYmplY3Qq
IHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChl
eGVjKSk7CisgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgICAg
ICAgICAgICAgcHJvdG90eXBlLCBwcm90b3R5cGUtPnN0cnVjdHVyZSgpLCBleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCisgICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3R1YkppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3
YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgIHN0dWJKaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdhc0ZvdW5kKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgor
ICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKKyAg
ICAgICAgCisgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3Jl
U2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKKyAgICAg
ICAgCisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+
Y29kZUJsb2NrKCkpOworCisgICAgICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwg
bmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vz
c0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKKyAgICAgICAgCisgICAgICAgIHN0dWJSb3V0aW5lID0g
RklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAg
ICAgICAgICAgICgiREZHIEluIChmb3VuZCA9ICVzKSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50
ICVwIiwKKyAgICAgICAgICAgICAgICB3YXNGb3VuZCA/ICJ5ZXMiIDogIm5vIiwgdG9DU3RyaW5n
KCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAorICAgICAgICAgICAgICAgIHN1Y2Nlc3NMYWJl
bC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgfQorICAgIAorICAgIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOworICAgIHN0dWJJbmZvLnUu
aW5MaXN0Lmxpc3RTaXplKys7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KGNvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uaG90UGF0aEJl
Z2luLmp1bXBBdE9mZnNldCgwKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKKyAgICAKKyAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJ
U1RfQ0FDSEVfU0laRSAtIDEpOworfQorCit2b2lkIHJlcGF0Y2hJbigKKyAgICBFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgd2FzRm91
bmQsCisgICAgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCit7CisgICAgaWYgKHRyeVJlcGF0Y2hJbihleGVjLCBiYXNlLCBpZGVudCwgd2FzRm91
bmQsIHNsb3QsIHN0dWJJbmZvKSkKKyAgICAgICAgcmV0dXJuOworICAgIHJlcGF0Y2hDYWxsKGV4
ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbklu
KTsKK30KKworc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1
ZmZlciwgVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQoreworICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CisgICAgICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZt
LT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
dm0tPmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwor
fQorCit2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
K3sKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKTsKKyAgICAKKyAgICAvLyBJZiB5b3Un
cmUgYmVpbmcgY2FsbC1saW5rZWQgZnJvbSBhIERGRyBjYWxsZXIgdGhlbiB5b3Ugb2J2aW91c2x5
IGRpZG4ndCBnZXQgaW5saW5lZC4KKyAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAgICBj
YWxsZWVDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgCisg
ICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2Rl
QmxvY2soKTsKKyAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CisgICAgCisgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CisgICAgCisgICAg
QVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CisgICAgY2FsbExpbmtJbmZvLmNhbGxl
ZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdp
biwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKKyAgICBjYWxs
TGlua0luZm8ubGFzdFNlZW5DYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPnZtKCksIGNh
bGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CisgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlciwgY29kZVB0cik7CisgICAgCisg
ICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5j
b21pbmdDYWxsKGV4ZWMtPmNhbGxlckZyYW1lKCksICZjYWxsTGlua0luZm8pOworICAgIAorICAg
IGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9z
dXJlQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgIGxpbmtTbG93
Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIENvZGVGb3JDb25zdHJ1Y3QpOwor
fQorCit2b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBDb2RlQmxvY2sq
IGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAg
IFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKKyAgICAKKyAgICBsaW5rU2xvd0Zvcihy
ZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBraW5kKTsKK30KKwordm9pZCBsaW5rQ2xv
c3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29k
ZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjdXRhYmxl
QmFzZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCit7CisgICAg
QVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7CisgICAgCisgICAgQ29kZUJsb2NrKiBjYWxsZXJD
b2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0g
PSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CisgICAgCisgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oY2FsbExpbmtJbmZvLmNhbGxlZUdQUik7CisgICAgCisgICAgQ0Nh
bGxIZWxwZXJzIHN0dWJKaXQodm0sIGNhbGxlckNvZGVCbG9jayk7CisgICAgCisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgc3R1YkppdC5icmFuY2hUZXN0NjQoCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZUdQUiwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKSk7CisjZWxzZQorICAgIC8vIFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRo
YXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCisjZW5kaWYKKyAgICAKKyAgICBzbG93UGF0aC5hcHBl
bmQoCisgICAgICAgIHN0dWJKaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpOb3RFcXVhbCwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsKKyAgICAKKyAgICBzbG93UGF0aC5hcHBlbmQoCisg
ICAgICAgIHN0dWJKaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVu
Y3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlKSkpOworICAgIAorICAgIHN0dWJKaXQubG9hZFB0cigK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zm
c2V0T2ZTY29wZUNoYWluKCkpLAorICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHN0dWJKaXQuc3RvcmU2NCgKKyAgICAgICAgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0
ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbikpKTsKKyNlbHNlCisgICAgc3R1YkppdC5zdG9yZVB0
cigKKyAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCisgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbikgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgc3R1
YkppdC5zdG9yZTMyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikgKiBK
U1N0YWNrOjpTY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSkpOworI2VuZGlmCisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzOjpD
YWxsIGNhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7CisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1w
IGRvbmUgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAKKyAgICBzbG93UGF0aC5saW5rKCZzdHViSml0
KTsKKyAgICBzdHViSml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7CisjZW5kaWYK
KyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86Om5vbkFy
Z0dQUjIpOworICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BS
SW5mbzo6bm9uQXJnR1BSMik7CisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHVi
Sml0Lmp1bXAoKTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJK
aXQsIGNhbGxlckNvZGVCbG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBG
dW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBwYXRjaEJ1ZmZl
ci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dCgwKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+
Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAKKyAg
ICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihu
ZXcgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCisg
ICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiREZHIGNsb3N1cmUgY2FsbCBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXQgJXAgKCVzKSIsCisgICAgICAgICAg
ICAgICAgdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDApLmV4ZWN1dGFibGVBZGRyZXNzKCksCisg
ICAgICAgICAgICAgICAgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCB0b0NTdHJpbmcocG9p
bnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSkuZGF0YSgpKSksCisgICAgICAgICp2bSwgY2FsbGVy
Q29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBleGVjdXRhYmxlLCBjYWxs
TGlua0luZm8uY29kZU9yaWdpbikpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjYWxsZXJDb2RlQmxvY2spOworICAgIAorICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdp
dGhKdW1wKAorICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNo
T25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKSwKKyAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICBsaW5rU2xvd0Zvcihy
ZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7CisgICAgCisgICAg
Y2FsbExpbmtJbmZvLnN0dWIgPSBzdHViUm91dGluZS5yZWxlYXNlKCk7CisgICAgCisgICAgQVNT
RVJUKCFjYWxsZWVDb2RlQmxvY2sgfHwgY2FsbGVlQ29kZUJsb2NrLT5pc0luY29taW5nQ2FsbEFs
cmVhZHlMaW5rZWQoJmNhbGxMaW5rSW5mbykpOworfQorCit2b2lkIHJlc2V0R2V0QnlJRChSZXBh
dGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBz
dHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJB
dE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxs
KTsKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNo
UHRyV2l0aFBhdGNoKCkpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXZlcnRKdW1wUmVwbGFj
ZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgIFJlcGF0Y2hC
dWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0
dXJlTGFiZWwpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZv
LnBhdGNoLmRmZy5iYXNlR1BSKSwKKyAgICAgICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50
ZXIpKTsKKyAgICB9CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0cnVjdHVyZUxhYmVsLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVzZWRQb2ludGVyKSk7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9M
b2FkT3JTdG9yZSksIDApOworI2Vsc2UKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIDApOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSks
IDApOworI2VuZGlmCisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cit9CisKK3ZvaWQgcmVzZXRQdXRC
eUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKK3sKKyAgICBWX0pJVE9wZXJhdGlvbl9FSkNJIHVub3B0aW1pemVkRnVuY3Rpb24gPSBi
aXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25fRUpDST4oTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxs
VGFyZ2V0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgVl9KSVRPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAgICBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdCkKKyAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8
IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlz
dCkKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
T3B0aW1pemU7CisgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdCkKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgZWxzZSB7CisgICAgICAg
IEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0QnVpbGRMaXN0KTsKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgfQorICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOwor
ICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6
OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkpIHsKKyAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldp
dGhQYXRjaCgKKyAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFu
Y2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3Moc3RydWN0dXJlTGFiZWwpLAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKSwKKyAgICAg
ICAgICAgICAgICBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVudXNlZFBvaW50ZXIpKTsKKyAgICB9CisgICAgcmVwYXRjaEJ1
ZmZlci5yZXBhdGNoKHN0cnVjdHVyZUxhYmVsLCByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnVz
ZWRQb2ludGVyKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKKyNlbHNlCisgICAgcmVw
YXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwz
MkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwg
MCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1BheWxv
YWRMb2FkT3JTdG9yZSksIDApOworI2VuZGlmCisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cit9CisK
K3ZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uaG90
UGF0aEJlZ2luLmp1bXBBdE9mZnNldCgwKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTMsOCArNTEzLDcgQEAgc3RhdGlj
IGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogI2VuZGlmCiAgICAgICAgICAgICBz
dWNjZXNzID0gc3R1YkppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRl
ZEV4Y2VwdGlvbkNoZWNrKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSk7CisgICAgICAgICAgICBzdHViSml0LnNldHVwQXJn
dW1lbnRzRXhlY1N0YXRlKCk7CiAgICAgICAgICAgICBoYW5kbGVyQ2FsbCA9IHN0dWJKaXQuY2Fs
bCgpOwogICAgICAgICAgICAgc3R1YkppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7
CiAgICAgICAgIH0gZWxzZSB7CkBAIC01NDksNyArNTQ4LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVp
bGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3Ms
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICAgICAgaWYgKCFpc0RpcmVjdCkgewogICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBvcGVyYXRpb25GdW5jdGlvbik7
Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRp
b25IYW5kbGVySW5TdHViKTsKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlckNh
bGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5oCShyZXZpc2lvbiAxNTYyMzYpCShmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5oOjE1NjIzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZXBhdGNoX2gKKyNk
ZWZpbmUgUmVwYXRjaF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShKSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRp
b25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0
ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1
Y3R1cmVTdHViSW5mbyYpOwordm9pZCBidWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwordm9pZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7Cit2b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtp
bmQpOwordm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1
dEtpbmQpOwordm9pZCByZXBhdGNoSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgY29uc3QgSWRlbnRp
ZmllciYsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJ
bmZvJik7Cit2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2Nr
KiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOwordm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8m
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKK3ZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0
ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIFN0cnVjdHVyZSosIEV4ZWN1dGFibGVCYXNl
KiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsKK3ZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZm
ZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZl
ciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIFN0
cnVjdHVyZVN0dWJJbmZvJik7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZWxzZSAvLyBFTkFC
TEUoSklUKQorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIFJlcGF0Y2hCdWZmZXI7CitzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CisKK2lu
bGluZSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZm
ZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQoraW5saW5lIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRj
aEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CitpbmxpbmUgTk9fUkVUVVJOIHZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3Ry
dWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorI2VuZGlmIC8vIFJlcGF0
Y2hfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oCShyZXZpc2lvbiAxNTYyMzYpCShmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg6MTU2MjM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcl9oCisjZGVmaW5l
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1
ZGUgIlJlZ2lzdGVyU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNzIHBy
b3ZpZGVzIGEgbG93LWxldmVsIHJlZ2lzdGVyIGFsbG9jYXRvciBmb3IgdXNlIGluIHN0dWJzLgor
CitjbGFzcyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgeworcHVibGljOgorICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvcihjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKKyAgICAg
ICAgOiBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKKyAgICAgICAgLCBtX2RpZFJldXNl
UmVnaXN0ZXJzKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICB2b2lkIGxvY2soVCByZWcpIHsgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHJlZyk7
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KKyAgICB0eXBlbmFtZSBC
YW5rSW5mbzo6UmVnaXN0ZXJUeXBlIGFsbG9jYXRlU2NyYXRjaCgpCisgICAgeworICAgICAgICAv
LyBGaXJzdCB0cnkgdG8gYWxsb2NhdGUgYSByZWdpc3RlciB0aGF0IGlzIHRvdGFsbHkgZnJlZS4K
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhbmtJbmZvOjpudW1iZXJPZlJlZ2lz
dGVyczsgKytpKSB7CisgICAgICAgICAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBl
IHJlZyA9IEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICAgICAgaWYgKCFtX2xvY2tl
ZFJlZ2lzdGVycy5nZXQocmVnKQorICAgICAgICAgICAgICAgICYmICFtX3VzZWRSZWdpc3RlcnMu
Z2V0KHJlZykKKyAgICAgICAgICAgICAgICAmJiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdldChyZWcp
KSB7CisgICAgICAgICAgICAgICAgbV9zY3JhdGNoUmVnaXN0ZXJzLnNldChyZWcpOworICAgICAg
ICAgICAgICAgIHJldHVybiByZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIFNpbmNlIHRoYXQgZmFpbGVkLCB0cnkgdG8gYWxsb2NhdGUgYSByZWdpc3Rl
ciB0aGF0IGlzIG5vdCB5ZXQKKyAgICAgICAgLy8gbG9ja2VkIG9yIHVzZWQgZm9yIHNjcmF0Y2gu
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYW5rSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnM7ICsraSkgeworICAgICAgICAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlw
ZSByZWcgPSBCYW5rSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgICAgIGlmICghbV9sb2Nr
ZWRSZWdpc3RlcnMuZ2V0KHJlZykgJiYgIW1fc2NyYXRjaFJlZ2lzdGVycy5nZXQocmVnKSkgewor
ICAgICAgICAgICAgICAgIG1fc2NyYXRjaFJlZ2lzdGVycy5zZXQocmVnKTsKKyAgICAgICAgICAg
ICAgICBtX2RpZFJldXNlUmVnaXN0ZXJzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBXZSBm
YWlsZWQuCisgICAgICAgIENSQVNIKCk7CisgICAgICAgIC8vIE1ha2Ugc29tZSBzaWxseSBjb21w
aWxlcnMgaGFwcHkuCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBCYW5rSW5m
bzo6UmVnaXN0ZXJUeXBlPigtMSk7CisgICAgfQorICAgIAorICAgIEdQUlJlZyBhbGxvY2F0ZVNj
cmF0Y2hHUFIoKSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8R1BSSW5mbz4oKTsgfQorICAgIEZQ
UlJlZyBhbGxvY2F0ZVNjcmF0Y2hGUFIoKSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8RlBSSW5m
bz4oKTsgfQorICAgIAorICAgIGJvb2wgZGlkUmV1c2VSZWdpc3RlcnMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fZGlkUmV1c2VSZWdpc3RlcnM7CisgICAgfQorICAgIAorICAgIHZv
aWQgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCkK
KyAgICB7CisgICAgICAgIGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9zY3JhdGNoUmVn
aXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgo
aSkpIHsKKyAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAg
ICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0R1BSQnlJ
bmRleChpKSAmJiBtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKKyAgICAgICAgICAg
ICAgICBqaXQucHVzaChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB2b2lkIHJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFjcm9Bc3Nl
bWJsZXImIGppdCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaWRSZXVzZVJlZ2lzdGVycykKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV9zY3Jh
dGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYgbV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5
SW5kZXgoaSkpCisgICAgICAgICAgICAgICAgaml0LnBvcChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkp
KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fc2NyYXRjaFJlZ2lzdGVycy5n
ZXRGUFJCeUluZGV4KGkpICYmIG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7Cisg
ICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAgICAgICAgICBqaXQu
YWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoOCksIE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgZGVzaXJlZFNjcmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1
cm4gbV91c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgKiBzaXplb2YoSlNWYWx1
ZSk7IH0KKyAgICAKKyAgICB2b2lkIHByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZl
cihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJS
ZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWcpCisgICAgeworICAgICAgICB1bnNpZ25lZCBj
b3VudCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5
SW5kZXgoaSkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGppdC5zdG9y
ZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4o
c2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSk7CisjZWxzZQorICAgICAg
ICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0
PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsr
KSk7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzY3JhdGNoR1BSID09
IEludmFsaWRHUFJSZWcgJiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgJiYg
IW1fc2NyYXRjaFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQorICAgICAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICB9CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAg
ICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKKyAgICAgICAgICAg
ICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxF
bmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6
dG9SZWdpc3RlcihpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgKiBzaXplb2YoSlNWYWx1ZSkgPT0gZGVzaXJlZFNj
cmF0Y2hCdWZmZXJTaXplKCkpOworICAgICAgICAKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4oY291bnQgKiBzaXplb2YoSlNWYWx1ZSkpKSwgc2Ny
YXRjaEdQUik7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9t
U2NyYXRjaEJ1ZmZlcihNYWNyb0Fzc2VtYmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNo
QnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWcpCisgICAgeworICAgICAg
ICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICAvLyBGaW5k
IGEgc2NyYXRjaCByZWdpc3Rlci4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9j
a2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkgfHwgbV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQ
UkJ5SW5kZXgoaSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIAorICAgICAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5n
dGhQdHIoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hHUFIpOworCisgICAgICAgIC8vIFJlc3RvcmUg
ZG91YmxlIHJlZ2lzdGVycyBmaXJzdC4KKyAgICAgICAgdW5zaWduZWQgY291bnQgPSBtX3VzZWRS
ZWdpc3RlcnMubnVtYmVyT2ZTZXRHUFJzKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV91c2Vk
UmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+
KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShzY3JhdGNoR1BSLCBGUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Y291bnQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJC
eUluZGV4KGkpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBqaXQubG9h
ZDY0KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZl
cigpKSArIChjb3VudCsrKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisjZWxzZQorICAgICAg
ICAgICAgICAgIGppdC5sb2FkMzIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNo
QnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkp
KTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CisgICAgUmVnaXN0ZXJTZXQgbV9s
b2NrZWRSZWdpc3RlcnM7CisgICAgUmVnaXN0ZXJTZXQgbV9zY3JhdGNoUmVnaXN0ZXJzOworICAg
IGJvb2wgbV9kaWRSZXVzZVJlZ2lzdGVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAJKHJldmlzaW9uIDE1NjQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVk
ZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiU3BlY2lhbGl6ZWRUaHVua0pJVC5oIgpAQCAtMzgsNyArMzks
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEpTSW50ZXJmYWNlSklUOjpDYWxsIGdl
bmVyYXRlU2xvd0Nhc2VGb3IoVk0qIHZtLCBKU0ludGVyZmFjZUpJVCYgaml0KQorc3RhdGljIEpT
SW50ZXJmYWNlSklUOjpDYWxsIG9sZFN0eWxlR2VuZXJhdGVTbG93Q2FzZUZvcihWTSogdm0sIEpT
SW50ZXJmYWNlSklUJiBqaXQpCiB7CiAgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwogICAgIGpp
dC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWluLCBKU0lu
dGVyZmFjZUpJVDo6cmVnVDIsIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CkBAIC01OSw3ICs2MCw3
IEBAIHN0YXRpYyBKU0ludGVyZmFjZUpJVDo6Q2FsbCBnZW5lcmF0ZVNsb3cKICAgICByZXR1cm4g
Y2FsbE5vdEpTRnVuY3Rpb247CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlu
a0ZvckdlbmVyYXRvcihWTSogdm0sIEZ1bmN0aW9uUHRyIGxhenlMaW5rLCBGdW5jdGlvblB0ciBu
b3RKU0Z1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lKQorc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBvbGRTdHlsZUxpbmtGb3JHZW5lcmF0b3IoVk0qIHZtLCBGdW5jdGlvblB0ciBsYXp5TGlu
aywgRnVuY3Rpb25QdHIgbm90SlNGdW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSkKIHsKICAgICBK
U0ludGVyZmFjZUpJVCBqaXQodm0pOwogICAgIApAQCAtODgsNyArODksNyBAQCBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JHZW5lCiAgICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QwKTsKICAgICAKICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwotICAgIEpTSW50ZXJm
YWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gZ2VuZXJhdGVTbG93Q2FzZUZvcih2bSwg
aml0KTsKKyAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IG9sZFN0
eWxlR2VuZXJhdGVTbG93Q2FzZUZvcih2bSwgaml0KTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGNhbGxMYXp5TGluaywgbGF6eUxpbmspOwpAQCAtOTcsMjIgKzk4LDIyIEBAIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvckdlbmUKICAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgKCJsaW5rICVzIHRyYW1wb2xpbmUiLCBuYW1lKSk7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbEdlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgb2xkU3R5bGVMaW5rQ2FsbEdlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJu
IGxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0NhbGwpLCBG
dW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNhbGwiKTsKKyAgICByZXR1
cm4gb2xkU3R5bGVMaW5rRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxp
bmtDYWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjYWxsIik7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2
bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3Io
Vk0qIHZtKQogewotICAgIHJldHVybiBsaW5rRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihj
dGlfdm1fbGF6eUxpbmtDb25zdHJ1Y3QpLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X05v
dEpTQ29uc3RydWN0KSwgImNvbnN0cnVjdCIpOworICAgIHJldHVybiBvbGRTdHlsZUxpbmtGb3JH
ZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0NvbnN0cnVjdCksIEZ1bmN0
aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QpLCAiY29uc3RydWN0Iik7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoVk0qIHZt
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9sZFN0eWxlTGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9y
KFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlua0ZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIo
Y3RpX3ZtX2xhenlMaW5rQ2xvc3VyZUNhbGwpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RK
U0Z1bmN0aW9uKSwgImNsb3N1cmUgY2FsbCIpOworICAgIHJldHVybiBvbGRTdHlsZUxpbmtGb3JH
ZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0Nsb3N1cmVDYWxsKSwgRnVu
Y3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjbG9zdXJlIGNhbGwiKTsKIH0K
IAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yR2VuZXJhdG9yKFZNKiB2
bSwgRnVuY3Rpb25QdHIgY29tcGlsZSwgRnVuY3Rpb25QdHIgbm90SlNGdW5jdGlvbiwgY29uc3Qg
Y2hhciogbmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBvbGRTdHlsZVZpcnR1YWxGb3JHZW5lcmF0b3IoVk0qIHZtLCBGdW5jdGlv
blB0ciBjb21waWxlLCBGdW5jdGlvblB0ciBub3RKU0Z1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1l
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0
KHZtKTsKICAgICAKQEAgLTE0OCw3ICsxNDksNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHZpcnR1YWxGb3JHCiAgICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKICAg
ICAKICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwotICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGNh
bGxOb3RKU0Z1bmN0aW9uID0gZ2VuZXJhdGVTbG93Q2FzZUZvcih2bSwgaml0KTsKKyAgICBKU0lu
dGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IG9sZFN0eWxlR2VuZXJhdGVTbG93
Q2FzZUZvcih2bSwgaml0KTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
JmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxDb21waWxl
LCBjb21waWxlKTsKQEAgLTE1NywxNCArMTU4LDI0NiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHZpcnR1YWxGb3JHCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
ICgidmlydHVhbCAlcyB0cmFtcG9saW5lIiwgbmFtZSkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgdmlydHVhbENhbGxHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiB2aXJ0
dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9qaXRDb21waWxlKSwg
RnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjYWxsIiwgQ29kZUZvckNh
bGwpOworICAgIHJldHVybiBvbGRTdHlsZVZpcnR1YWxGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9u
UHRyKGN0aV9vcF9jYWxsX2ppdENvbXBpbGUpLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RK
U0Z1bmN0aW9uKSwgImNhbGwiLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB2aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBvbGRTdHlsZVZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJl
dHVybiB2aXJ0dWFsRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0
X2ppdENvbXBpbGUpLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0
KSwgImNvbnN0cnVjdCIsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiBvbGRTdHlsZVZp
cnR1YWxGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29t
cGlsZSksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QpLCAiY29u
c3RydWN0IiwgQ29kZUZvckNvbnN0cnVjdCk7Cit9CisKK2lubGluZSB2b2lkIGVtaXRQb2ludGVy
VmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIpCit7CisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIENDYWxsSGVscGVyczo6SnVtcCBpc05vblplcm8gPSBqaXQu
YnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHBvaW50ZXJHUFIpOworICAgIGpp
dC5icmVha3BvaW50KCk7CisgICAgaXNOb25aZXJvLmxpbmsoJmppdCk7CisgICAgaml0LnB1c2go
cG9pbnRlckdQUik7CisgICAgaml0LmxvYWQ4KHBvaW50ZXJHUFIsIHBvaW50ZXJHUFIpOworICAg
IGppdC5wb3AocG9pbnRlckdQUik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShqaXQpOworICAg
IFVOVVNFRF9QQVJBTShwb2ludGVyR1BSKTsKKyNlbmRpZgorfQorCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKiB2bSkKK3sK
KyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICAKKyAgICAvLyBXZSB3aWxsIGp1bXAgdG8g
aGVyZSBpZiB0aGUgSklUIGNvZGUgdGhpbmtzIGl0J3MgbWFraW5nIGEgY2FsbCwgYnV0IHRoZQor
ICAgIC8vIGxpbmtpbmcgaGVscGVyIChDKysgY29kZSkgZGVjaWRlZCB0byB0aHJvdyBhbiBleGNl
cHRpb24gaW5zdGVhZC4gV2Ugd2lsbAorICAgIC8vIGhhdmUgc2F2ZWQgdGhlIGNhbGxSZXR1cm5J
bmRleCBpbiB0aGUgZmlyc3QgYXJndW1lbnRzIG9mIEpJVFN0YWNrRnJhbWUuCisgICAgLy8gTm90
ZSB0aGF0IHRoZSByZXR1cm4gYWRkcmVzcyB3aWxsIGJlIG9uIHRoZSBzdGFjayBhdCB0aGlzIHBv
aW50LCBzbyB3ZQorICAgIC8vIG5lZWQgdG8gcmVtb3ZlIGl0IGFuZCBkcm9wIGl0IG9uIHRoZSBm
bG9vciwgc2luY2Ugd2UgZG9uJ3QgY2FyZSBhYm91dCBpdC4KKyAgICAvLyBGaW5hbGx5IG5vdGUg
dGhhdCB0aGUgY2FsbCBmcmFtZSByZWdpc3RlciBwb2ludHMgYXQgdGhlIGNhbGxlZSBmcmFtZSwg
c28KKyAgICAvLyB3ZSBuZWVkIHRvIHBvcCBpdC4KKyAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRy
ZXNzQWZ0ZXJDYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0
LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OkNhbGxlckZyYW1lKSwKKyAgICAgICAg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0
LnBlZWs2NChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVf
QVJHU19JTkRFWCk7CisjZWxzZQorICAgIGppdC5wZWVrKEdQUkluZm86Om5vblByZXNlcnZlZE5v
blJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKKyNlbmRpZgorICAgIGppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9j
YXN0PHZvaWQqPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjAp
OworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwor
ICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRh
dGlvbihqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgaml0Lmp1bXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgKCJUaHJvdyBleGNlcHRpb24gZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsK
K30KKworc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCisgICAgQ0NhbGxIZWxwZXJzJiBqaXQsIFZN
KiB2bSwgUF9KSVRPcGVyYXRpb25fRSBzbG93UGF0aEZ1bmN0aW9uKQoreworICAgIGppdC5wcmVz
ZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgZW1p
dFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgaml0LnN0
b3JlUHRyKAorICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyLAorICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0
YWNrOjpSZXR1cm5QQykpOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0LnBv
a2U2NChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJH
U19JTkRFWCk7CisjZWxzZQorICAgIGppdC5wb2tlKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJl
dHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKKyNlbmRpZgorICAgIGppdC5zZXR1
cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgCisgICAg
Ly8gVGhpcyBzbG93IGNhbGwgd2lsbCByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygb25lIG9mIHRoZSBm
b2xsb3dpbmc6CisgICAgLy8gMSkgRXhjZXB0aW9uIHRocm93aW5nIHRodW5rLgorICAgIC8vIDIp
IEhvc3QgY2FsbCByZXR1cm4gdmFsdWUgcmV0dXJuZXIgdGhpbmd5LgorICAgIC8vIDMpIFRoZSBm
dW5jdGlvbiB0byBjYWxsLgorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNr
OjpSZXR1cm5QQyksCisgICAgICAgIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7
CisgICAgaml0LnN0b3JlUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
MCksCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBDKSk7CisgICAgZW1pdFBvaW50ZXJW
YWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBq
aXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
fQorCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JUaHVua0dlbmVyYXRvcigK
KyAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICAvLyBUaGUg
cmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBX
ZSB3aWxsIGhlbmNlCisgICAgLy8gc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwg
ZnJhbWUgd2hpbGUgd2UgbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsCisgICAgLy8gdG8gcGVyZm9y
bSBsaW5raW5nIGFuZCBsYXp5IGNvbXBpbGF0aW9uIGlmIG5lY2Vzc2FyeS4gV2UgZXhwZWN0IHRo
ZSBjYWxsZWUKKyAgICAvLyB0byBiZSBpbiBub25BcmdHUFIwL25vbkFyZ0dQUjEgKHBheWxvYWQv
dGFnKSwgdGhlIGNhbGwgZnJhbWUgdG8gaGF2ZSBhbHJlYWR5CisgICAgLy8gYmVlbiBhZGp1c3Rl
ZCwgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSIGhvbGRzIHRoZSBleGNlcHRpb24gaGFuZGxlciBp
bmRleCwKKyAgICAvLyBhbmQgYWxsIG90aGVyIHJlZ2lzdGVycyB0byBiZSBhdmFpbGFibGUgZm9y
IHVzZS4gV2UgdXNlIEpJVFN0YWNrRnJhbWU6OmFyZ3MKKyAgICAvLyB0byBzYXZlIGltcG9ydGFu
dCBpbmZvcm1hdGlvbiBhY3Jvc3MgY2FsbHMuCisgICAgCisgICAgQ0NhbGxIZWxwZXJzIGppdCh2
bSk7CisgICAgCisgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/
IG9wZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7CisgICAgCisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkxp
bmsgJXMgc2xvdyBwYXRoIHRodW5rIiwga2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJj
b25zdHJ1Y3QiKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKK3sKKyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBD
b2RlRm9yQ2FsbCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Io
dm0sIENvZGVGb3JDb25zdHJ1Y3QpOworfQorCisvLyBGb3IgY2xvc3VyZSBvcHRpbWl6YXRpb25z
LCB3ZSBvbmx5IGluY2x1ZGUgY2FsbHMsIHNpbmNlIGlmIHlvdSdyZSB1c2luZyBjbG9zdXJlcyBm
b3IKKy8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gdGhlbiB5b3UncmUgZ29pbmcgdG8gbG9zZSBiaWcg
dGltZSBhbnl3YXkuCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQodm0pOworICAgIAorICAg
IHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbCk7CisgICAgCisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7Cisg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiTGluayBjbG9zdXJlIGNhbGwg
c2xvdyBwYXRoIHRodW5rIikpOworfQorCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZp
cnR1YWxGb3JUaHVua0dlbmVyYXRvcigKKyAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKK3sKKyAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrLCBv
ciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQorICAgIC8vIGp1bXAgdG8gdGhl
IGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hp
bGUgd2UKKyAgICAvLyBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGFwcHJvcHJpYXRl
IEpJVCBvcGVyYXRpb24uCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICAKKyAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOworCisgICAgLy8gRklYTUU6IHdlIHNob3Vs
ZCBoYXZlIGEgc3RvcnkgZm9yIGVsaW1pbmF0aW5nIHRoZXNlIGNoZWNrcy4gSW4gbWFueSBjYXNl
cywKKyAgICAvLyB0aGUgREZHIGtub3dzIHRoYXQgdGhlIHZhbHVlIGlzIGRlZmluaXRlbHkgYSBj
ZWxsLCBvciBkZWZpbml0ZWx5IGEgZnVuY3Rpb24uCisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBzbG93Q2FzZS5hcHBlbmQoCisgICAgICAgIGppdC5icmFuY2hUZXN0NjQoCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3RlcikpOworI2Vsc2UKKyAgICBzbG93Q2FzZS5hcHBlbmQoCisgICAgICAg
IGppdC5icmFuY2gzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUklu
Zm86Om5vbkFyZ0dQUjEsCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSkpOworI2VuZGlmCisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoCisgICAgICAgIGpp
dC5icmFuY2hQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIFN0cnVjdHVy
ZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKEpTRnVuY3Rpb246OmluZm8oKSkpKTsKKyAgICAKKyAgICAvLyBOb3cgd2Uga25vdyB3
ZSBoYXZlIGEgSlNGdW5jdGlvbi4KKyAgICAKKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTRnVuY3Rpb246Om9mZnNl
dE9mRXhlY3V0YWJsZSgpKSwKKyAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgc2xv
d0Nhc2UuYXBwZW5kKAorICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okxlc3NUaGFuLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAg
ICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRP
Zk51bVBhcmFtZXRlcnNGb3Ioa2luZCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMCkpKTsKKyAgICAKKyAgICAvLyBOb3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSBD
b2RlQmxvY2ssIGFuZCB3ZSdyZSBjb21taXR0ZWQgdG8gbWFraW5nIGEgZmFzdAorICAgIC8vIGNh
bGwuCisgICAgCisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSks
CisgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
aml0LnN0b3JlNjQoCisgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEsCisgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAq
IEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKKyNlbHNlCisgICAgaml0LnN0b3JlUHRyKAorICAgICAg
ICBHUFJJbmZvOjpub25BcmdHUFIxLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisg
ICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWlu
ICsKKyAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpKTsKKyAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6
OlNjb3BlQ2hhaW4gKworICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisjZW5kaWYKKyAgICAKKyAgICBqaXQubG9hZFB0cigK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1
dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKSksCisgICAg
ICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICAvLyBNYWtlIGEgdGFpbCBjYWxsLiBUaGlz
IHdpbGwgcmV0dXJuIGJhY2sgdG8gSklUIGNvZGUuCisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9u
KGppdCwgR1BSSW5mbzo6cmVnVDApOworICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QwKTsKKwor
ICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisgICAgCisgICAgLy8gSGVyZSB3ZSBkb24ndCBrbm93
IGFueXRoaW5nLCBzbyByZXZlcnQgdG8gdGhlIGZ1bGwgc2xvdyBwYXRoLgorICAgIAorICAgIHNs
b3dQYXRoRm9yKGppdCwgdm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25WaXJ0dWFs
Q2FsbCA6IG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QpOworICAgIAorICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJWaXJ0dWFsICVzIHNs
b3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIgOiAiY29uc3RydWN0
IikpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRv
cihWTSogdm0pCit7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29k
ZUZvckNhbGwpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRo
dW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICByZXR1cm4gdmlydHVhbEZvclRodW5rR2VuZXJh
dG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0
cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IoVk0qIHZtKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAxNTY0ODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSwxMSArMzEsMjIgQEAKICNpZiBFTkFCTEUoSklUKQogbmFtZXNwYWNlIEpTQyB7CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB2aXJ0dWFsQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZp
cnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRT
dHlsZUxpbmtDYWxsR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5
bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xk
U3R5bGVMaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgb2xkU3R5bGVWaXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CisKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0qKTsK
KworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsKKwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7
CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZN
Kik7CisKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHJpbmdMZW5ndGhUcmFtcG9saW5lR2VuZXJh
dG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSop
OwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSopOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>