<?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>124181</bug_id>
          
          <creation_ts>2013-11-11 20:12:32 -0800</creation_ts>
          <short_desc>FTL should have an explicit notion of bytecode liveness</short_desc>
          <delta_ts>2013-11-17 17:45:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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>
          <dependson>118546</dependson>
    
    <dependson>124225</dependson>
          <blocked>124138</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>eflews.bot</cc>
    
    <cc>ggaren</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>rego+ews</cc>
    
    <cc>sam</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>949526</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-11 20:12:32 -0800</bug_when>
    <thetext>I think this is the right way to go, but I&apos;m still thinking it over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949854</commentid>
    <comment_count>1</comment_count>
      <attachid>216717</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-12 13:37:58 -0800</bug_when>
    <thetext>Created attachment 216717
it begins

ugh this will be painful</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950379</commentid>
    <comment_count>2</comment_count>
      <attachid>216862</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-13 14:27:26 -0800</bug_when>
    <thetext>Created attachment 216862
slowly getting there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950797</commentid>
    <comment_count>3</comment_count>
      <attachid>216966</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-14 12:17:25 -0800</bug_when>
    <thetext>Created attachment 216966
I wrote the code

For the most part, anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950812</commentid>
    <comment_count>4</comment_count>
      <attachid>216971</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-14 13:21:38 -0800</bug_when>
    <thetext>Created attachment 216971
compiles with FTL disabled</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950823</commentid>
    <comment_count>5</comment_count>
      <attachid>216974</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-14 13:35:49 -0800</bug_when>
    <thetext>Created attachment 216974
it builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950864</commentid>
    <comment_count>6</comment_count>
      <attachid>216986</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-14 15:06:54 -0800</bug_when>
    <thetext>Created attachment 216986
starting to pass some tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950902</commentid>
    <comment_count>7</comment_count>
      <attachid>216998</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-14 16:37:50 -0800</bug_when>
    <thetext>Created attachment 216998
making some progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951169</commentid>
    <comment_count>8</comment_count>
      <attachid>217073</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-15 13:10:23 -0800</bug_when>
    <thetext>Created attachment 217073
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951170</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-15 13:12:33 -0800</bug_when>
    <thetext>Attachment 217073 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/bytecode/BytecodeBasicBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysisInlines.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeOrigin.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/FullBytecodeLiveness.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAvailability.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAvailability.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBasicBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDisassembler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushFormat.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushFormat.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushedAt.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushedAt.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGMovHintCountingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGMovHintCountingPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGResurrectionForValidationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGResurrectionForValidationPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValueSource.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGVariableAccessData.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGVariableAccessDataDump.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSRExit.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOutput.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLValueSource.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLValueSource.h&apos;, u&apos;Source/JavaScriptCore/runtime/DumpContext.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DumpContext.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/JavaScriptCore/runtime/SymbolTable.h&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/run-jsc-stress-tests&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGAvailability.h:64:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGGraph.h:787:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.h:788:  The parameter name &quot;inlineCallFrame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.h:789:  The parameter name &quot;codeOrigin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h:59:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h:60:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h:61:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 7 in 44 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>951184</commentid>
    <comment_count>10</comment_count>
      <attachid>217073</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-15 13:42:18 -0800</bug_when>
    <thetext>Comment on attachment 217073
the patch

Attachment 217073 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/24328008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951205</commentid>
    <comment_count>11</comment_count>
      <attachid>217073</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-15 14:20:47 -0800</bug_when>
    <thetext>Comment on attachment 217073
the patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:676
&gt; +                if (reg.offset() &gt;= JSStack::CallFrameHeaderSize)
&gt; +                    return true;

Maybe we should ASSERT this instead, since it should be impossible to take this branch.

&gt; Source/JavaScriptCore/dfg/DFGMovHintCountingPhase.h:45
&gt; +// Computes VariableAccessData::m_movHintCount. Variables that are assigned only once can get
&gt; +// treated specially. For example, OSR exit in the FTL can allow the format used for such
&gt; +// nodes BasicBlock::ssa-&gt;availabiltiyAtHead/Tail. This is a forward flow type inference
&gt; +// over MovHints. At the time when MovHints are introduced, we were certain that at any
&gt; +// point in the program where a bytecode variable had been live, all of the MovHints that
&gt; +// flowed into that point for that variable had the same FlushFormat. This analysis will tell
&gt; +// you what that format would have been.

Comment seems whacky.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:3960
&gt; +        else if (direction == ForwardSpeculation) {

else?

&gt; Source/JavaScriptCore/ftl/FTLOSRExit.cpp:76
&gt; -    
&gt; +

Revert!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951212</commentid>
    <comment_count>12</comment_count>
      <attachid>217073</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-15 14:28:15 -0800</bug_when>
    <thetext>Comment on attachment 217073
the patch

Attachment 217073 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/24508008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951265</commentid>
    <comment_count>13</comment_count>
      <attachid>217073</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-15 16:30:30 -0800</bug_when>
    <thetext>Comment on attachment 217073
the patch

This is a performance regression.  It&apos;s because of the bytecode shadow locals.  After talking with mhahnenberg and atrick, I think I&apos;m going to use a different approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951308</commentid>
    <comment_count>14</comment_count>
      <attachid>217111</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-15 17:58:37 -0800</bug_when>
    <thetext>Created attachment 217111
work in progress - new approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951317</commentid>
    <comment_count>15</comment_count>
      <attachid>217113</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-15 21:38:21 -0800</bug_when>
    <thetext>Created attachment 217113
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951318</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-15 21:39:39 -0800</bug_when>
    <thetext>Attachment 217113 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/bytecode/BytecodeBasicBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysisInlines.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeOrigin.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/FullBytecodeLiveness.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAvailability.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAvailability.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBasicBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDisassembler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushFormat.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushFormat.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushedAt.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushedAt.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGResurrectionForValidationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGResurrectionForValidationPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValueSource.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGVariableAccessData.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLExitValue.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSRExit.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOutput.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLValueSource.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLValueSource.h&apos;, u&apos;Source/JavaScriptCore/llvm/LLVMAPIFunctions.h&apos;, u&apos;Source/JavaScriptCore/runtime/DumpContext.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DumpContext.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/JavaScriptCore/runtime/SymbolTable.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGAvailability.h:84:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGPlan.cpp:269:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/dfg/DFGGraph.h:787:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.h:788:  The parameter name &quot;inlineCallFrame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.h:789:  The parameter name &quot;codeOrigin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h:59:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h:60:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h:61:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 8 in 38 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>951319</commentid>
    <comment_count>17</comment_count>
      <attachid>217114</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-15 21:40:37 -0800</bug_when>
    <thetext>Created attachment 217114
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951320</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-15 21:42:23 -0800</bug_when>
    <thetext>Attachment 217114 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/bytecode/BytecodeBasicBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysisInlines.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeOrigin.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/FullBytecodeLiveness.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAvailability.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAvailability.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBasicBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDisassembler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushFormat.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushFormat.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushedAt.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushedAt.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGResurrectionForValidationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGResurrectionForValidationPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValueSource.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGVariableAccessData.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLExitValue.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSRExit.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOutput.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLValueSource.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLValueSource.h&apos;, u&apos;Source/JavaScriptCore/llvm/LLVMAPIFunctions.h&apos;, u&apos;Source/JavaScriptCore/runtime/DumpContext.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DumpContext.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/JavaScriptCore/runtime/SymbolTable.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGAvailability.h:84:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGPlan.cpp:269:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/dfg/DFGGraph.h:787:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.h:788:  The parameter name &quot;inlineCallFrame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.h:789:  The parameter name &quot;codeOrigin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h:59:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h:60:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h:61:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 8 in 38 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>951322</commentid>
    <comment_count>19</comment_count>
      <attachid>217114</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-15 21:46:39 -0800</bug_when>
    <thetext>Comment on attachment 217114
the patch

Attachment 217114 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/21948319</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951324</commentid>
    <comment_count>20</comment_count>
      <attachid>217114</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-15 21:49:57 -0800</bug_when>
    <thetext>Comment on attachment 217114
the patch

Attachment 217114 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/21948321</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951329</commentid>
    <comment_count>21</comment_count>
      <attachid>217114</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-11-15 22:29:07 -0800</bug_when>
    <thetext>Comment on attachment 217114
the patch

Attachment 217114 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/23678257</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951330</commentid>
    <comment_count>22</comment_count>
      <attachid>217116</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-15 22:33:06 -0800</bug_when>
    <thetext>Created attachment 217116
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951331</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-15 22:34:23 -0800</bug_when>
    <thetext>Attachment 217116 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/bytecode/BytecodeBasicBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysisInlines.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeOrigin.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/FullBytecodeLiveness.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAvailability.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAvailability.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBasicBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDisassembler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushFormat.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushFormat.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushedAt.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFlushedAt.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGResurrectionForValidationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGResurrectionForValidationPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValueSource.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGVariableAccessData.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLExitValue.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLInlineCacheSize.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOutput.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLValueSource.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLValueSource.h&apos;, u&apos;Source/JavaScriptCore/llvm/LLVMAPIFunctions.h&apos;, u&apos;Source/JavaScriptCore/runtime/DumpContext.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DumpContext.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/JavaScriptCore/runtime/SymbolTable.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGAvailability.h:84:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGGraph.h:786:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.h:787:  The parameter name &quot;inlineCallFrame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.h:788:  The parameter name &quot;codeOrigin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h:59:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h:60:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.h:61:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 7 in 38 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>951341</commentid>
    <comment_count>24</comment_count>
      <attachid>217120</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-16 00:48:16 -0800</bug_when>
    <thetext>Created attachment 217120
the patch

fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951342</commentid>
    <comment_count>25</comment_count>
      <attachid>217121</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-16 00:51:55 -0800</bug_when>
    <thetext>Created attachment 217121
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951343</commentid>
    <comment_count>26</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-16 00:58:25 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 217073 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=217073&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:676
&gt; &gt; +                if (reg.offset() &gt;= JSStack::CallFrameHeaderSize)
&gt; &gt; +                    return true;
&gt; 
&gt; Maybe we should ASSERT this instead, since it should be impossible to take this branch.

Yup.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGMovHintCountingPhase.h:45
&gt; &gt; +// Computes VariableAccessData::m_movHintCount. Variables that are assigned only once can get
&gt; &gt; +// treated specially. For example, OSR exit in the FTL can allow the format used for such
&gt; &gt; +// nodes BasicBlock::ssa-&gt;availabiltiyAtHead/Tail. This is a forward flow type inference
&gt; &gt; +// over MovHints. At the time when MovHints are introduced, we were certain that at any
&gt; &gt; +// point in the program where a bytecode variable had been live, all of the MovHints that
&gt; &gt; +// flowed into that point for that variable had the same FlushFormat. This analysis will tell
&gt; &gt; +// you what that format would have been.
&gt; 
&gt; Comment seems whacky.

I killed this phase. ;-)

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:3960
&gt; &gt; +        else if (direction == ForwardSpeculation) {
&gt; 
&gt; else?

Yeah.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLOSRExit.cpp:76
&gt; &gt; -    
&gt; &gt; +
&gt; 
&gt; Revert!

Yup!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951438</commentid>
    <comment_count>27</comment_count>
      <attachid>217121</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-17 14:22:24 -0800</bug_when>
    <thetext>Comment on attachment 217121
the patch

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

&gt; Source/JavaScriptCore/bytecode/FullBytecodeLiveness.h:35
&gt; +typedef HashMap&lt;unsigned, FastBitVector, WTF::IntHash&lt;unsigned&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;unsigned&gt; &gt; BytecodeToBitmapMap;

No need for the space between the trailing &gt;&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951473</commentid>
    <comment_count>28</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-17 17:45:31 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/159394</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216717</attachid>
            <date>2013-11-12 13:37:58 -0800</date>
            <delta_ts>2013-11-13 14:27:26 -0800</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>29069</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVC
YXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwogCi10eXBlZGVmIEhhc2hN
YXA8dW5zaWduZWQsIEZhc3RCaXRWZWN0b3IsIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+ID4gQnl0ZWNvZGVUb0JpdG1h
cE1hcDsKLQogY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrIDogcHVibGljIFJlZkNvdW50ZWQ8Qnl0
ZWNvZGVCYXNpY0Jsb2NrPiB7CiBwdWJsaWM6CiAgICAgZW51bSBTcGVjaWFsQmxvY2tUeXBlIHsg
RW50cnlCbG9jaywgRXhpdEJsb2NrIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkocmV2
aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIK
IAorI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKIApAQCAtMzgs
NDQgKzM5LDIzIEBAIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVMaXZlbmUKICAg
ICBjb21wdXRlKCk7CiB9CiAKLXN0YXRpYyBpbnQgbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhD
b2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBpZiAoIWNvZGVCbG9jay0+c3ltYm9sVGFibGUo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+c3ltYm9sVGFibGUo
KS0+Y2FwdHVyZUNvdW50KCk7Ci19Ci0KLXN0YXRpYyBpbnQgY2FwdHVyZVN0YXJ0KENvZGVCbG9j
ayogY29kZUJsb2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0
dXJlU3RhcnQoKTsKLX0KLQotc3RhdGljIGludCBjYXB0dXJlRW5kKENvZGVCbG9jayogY29kZUJs
b2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7
Ci19Ci0KIHN0YXRpYyBib29sIGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKENvZGVCbG9jayog
Y29kZUJsb2NrLCBpbnQgb3BlcmFuZCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
ZyhvcGVyYW5kKTsKICAgICByZXR1cm4gIWNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgob3BlcmFuZCkgLy8gRG9uJ3QgY2FyZSBhYm91dCBjb25zdGFudHMuCiAgICAgICAgICYmIHZp
cnR1YWxSZWcuaXNMb2NhbCgpIC8vIERvbid0IGNhcmUgYWJvdXQgYXJndW1lbnRzLgotICAgICAg
ICAmJiAoIW51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMoY29kZUJsb2NrKSAvLyBJZiB3ZSBoYXZl
IG5vIGNhcHR1cmVkIHZhcmlhYmxlcywgd2UncmUgZ29vZCB0byBnby4KLSAgICAgICAgICAgIHx8
ICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY2FwdHVyZVN0YXJ0KGNvZGVCbG9jaykgfHwgKHZpcnR1
YWxSZWcub2Zmc2V0KCkgPD0gY2FwdHVyZUVuZChjb2RlQmxvY2spKSkpOworICAgICAgICAmJiAo
IWNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkgLy8gSWYgd2UgaGF2ZSBubyBjYXB0dXJlZCB2YXJp
YWJsZXMsIHdlJ3JlIGdvb2QgdG8gZ28uCisgICAgICAgICAgICB8fCAodmlydHVhbFJlZy5vZmZz
ZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkgfHwgKHZpcnR1YWxSZWcub2Zmc2V0KCkg
PD0gY29kZUJsb2NrLT5jYXB0dXJlRW5kKCkpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldEZvck9w
ZXJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZhc3RCaXRWZWN0b3ImIGJpdHMsIGludCBvcGVy
YW5kKQogewogICAgIEFTU0VSVChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ss
IG9wZXJhbmQpKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKLSAg
ICBpZiAodmlydHVhbFJlZy5vZmZzZXQoKSA+IGNhcHR1cmVTdGFydChjb2RlQmxvY2spKQorICAg
IGlmICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSkKICAg
ICAgICAgYml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkpOwogICAgIGVsc2UKLSAgICAgICAg
Yml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkgLSBudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVz
KGNvZGVCbG9jaykpOworICAgICAgICBiaXRzLnNldCh2aXJ0dWFsUmVnLnRvTG9jYWwoKSAtIGNv
ZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkpOwogfQogCiBzdGF0aWMgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCwgRmFzdEJpdFZlY3RvciYgdXNlcykKQEAgLTUzMyw2ICs1MTMsMjYgQEAgc3RhdGljIEJ5
dGVjb2RlQmFzaWNCbG9jayogZmluZEJhc2ljQmxvYwogICAgIHJldHVybiBiYXNpY0Jsb2NrWzFd
LmdldCgpOwogfQogCitzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9jayog
Y29kZUJsb2NrLCBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4+JiBiYXNpY0Jsb2Nr
cywgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHVzZXMsIEZhc3RCaXRW
ZWN0b3ImIGRlZnMsIEZhc3RCaXRWZWN0b3ImIG91dCkKK3sKKyAgICB1c2VzLmNsZWFyQWxsKCk7
CisgICAgZGVmcy5jbGVhckFsbCgpOworICAgIAorICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVP
ZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgdXNlcyk7CisgICAgY29tcHV0ZURlZnNG
b3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCBkZWZzKTsKKyAgICAK
KyAgICBvdXQuZXhjbHVkZShkZWZzKTsKKyAgICBvdXQubWVyZ2UodXNlcyk7CisgICAgCisgICAg
Ly8gSWYgd2UgaGF2ZSBhbiBleGNlcHRpb24gaGFuZGxlciwgd2Ugd2FudCB0aGUgbGl2ZS1pbiB2
YXJpYWJsZXMgb2YgdGhlIAorICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGVyIGJsb2NrIHRvIGJlIGlu
Y2x1ZGVkIGluIHRoZSBsaXZlLWluIG9mIHRoaXMgcGFydGljdWxhciBieXRlY29kZS4KKyAgICBp
ZiAoKGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCkpKSB7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogaGFuZGxlckJsb2NrID0g
ZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGJhc2ljQmxvY2tzLCBoYW5kbGVyLT50YXJn
ZXQpOworICAgICAgICBBU1NFUlQoaGFuZGxlckJsb2NrKTsKKyAgICAgICAgb3V0Lm1lcmdlKGhh
bmRsZXJCbG9jay0+aW4oKSk7CisgICAgfQorfQorCiBzdGF0aWMgdm9pZCBjb21wdXRlTG9jYWxM
aXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUJh
c2ljQmxvY2sqIGJsb2NrLCBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiYgYmFz
aWNCbG9ja3MsIHVuc2lnbmVkIHRhcmdldE9mZnNldCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KQog
ewogICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwpAQCAtNTUwLDIzICs1NTAsOCBA
QCBzdGF0aWMgdm9pZCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjCiAgICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0cygpW2ldOwogICAgICAg
ICBpZiAodGFyZ2V0T2Zmc2V0ID4gYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICB1c2VzLmNsZWFyQWxsKCk7Ci0gICAgICAgIGRlZnMuY2xlYXJBbGwoKTsKLQot
ICAgICAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVP
ZmZzZXQsIHVzZXMpOwotICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVC
bG9jaywgYnl0ZWNvZGVPZmZzZXQsIGRlZnMpOwotCi0gICAgICAgIG91dC5leGNsdWRlKGRlZnMp
OwotICAgICAgICBvdXQubWVyZ2UodXNlcyk7Ci0KLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBl
eGNlcHRpb24gaGFuZGxlciwgd2Ugd2FudCB0aGUgbGl2ZS1pbiB2YXJpYWJsZXMgb2YgdGhlIAot
ICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9jayB0byBiZSBpbmNsdWRlZCBpbiB0aGUg
bGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgYnl0ZWNvZGUuCi0gICAgICAgIGlmICgoaGFuZGxl
ciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkp
IHsKLSAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogaGFuZGxlckJsb2NrID0gZmluZEJh
c2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGJhc2ljQmxvY2tzLCBoYW5kbGVyLT50YXJnZXQpOwot
ICAgICAgICAgICAgQVNTRVJUKGhhbmRsZXJCbG9jayk7Ci0gICAgICAgICAgICBvdXQubWVyZ2Uo
aGFuZGxlckJsb2NrLT5pbigpKTsKLSAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RlcE92
ZXJJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGJhc2ljQmxvY2tzLCBieXRlY29kZU9mZnNldCwgdXNl
cywgZGVmcywgb3V0KTsKICAgICB9CiAKICAgICByZXN1bHQuc2V0KG91dCk7CkBAIC01ODMsNyAr
NTY4LDcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OnJ1bkxpdmVuZQogewogICAg
IFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IG1fY29kZUJsb2NrLT51bmxp
bmtlZENvZGVCbG9jaygpOwogICAgIHVuc2lnbmVkIG51bWJlck9mVmFyaWFibGVzID0gdW5saW5r
ZWRDb2RlQmxvY2stPm1fbnVtVmFycyArIAotICAgICAgICB1bmxpbmtlZENvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnMgLSBudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVzKG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgdW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIC0gbV9j
b2RlQmxvY2stPmNhcHR1cmVDb3VudCgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fYmFzaWNCbG9ja3Muc2l6ZSgpOyBpKyspIHsKICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fYmFzaWNCbG9ja3NbaV0uZ2V0KCk7CkBAIC02MjIsMzYgKzYwNywzMCBAQCB2
b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lCiAKIGJvb2wgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9mZnNldChpbnQgb3BlcmFu
ZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7Ci0gICAgaW50IG51bUNhcHR1cmVkVmFycyA9
IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9jb2RlQmxvY2spOwotICAgIGlmIChWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCkuaXNBcmd1bWVudCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBpZiAob3BlcmFuZCA8PSBjYXB0dXJlU3RhcnQobV9jb2RlQmxvY2spICYmIG9wZXJhbmQgPiBj
YXB0dXJlRW5kKG1fY29kZUJsb2NrKSkKKyAgICBpZiAob3BlcmFuZElzQWx3YXlzTGl2ZShtX2Nv
ZGVCbG9jaywgb3BlcmFuZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIEZhc3RCaXRWZWN0
b3IgcmVzdWx0OwogICAgIGdldExpdmVuZXNzSW5mb0Zvck5vbkNhcHR1cmVkVmFyc0F0Qnl0ZWNv
ZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5nZXQo
b3BlcmFuZCAtIG51bUNhcHR1cmVkVmFycyk7CisgICAgcmV0dXJuIG9wZXJhbmRUaGF0SXNOb3RB
bHdheXNMaXZlSXNMaXZlKG1fY29kZUJsb2NrLCByZXN1bHQsIG9wZXJhbmQpOwogfQogCi1GYXN0
Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0Zhc3RCaXRWZWN0b3IgZ2V0TGl2
ZW5lc3NJbmZvKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQp
CiB7Ci0gICAgRmFzdEJpdFZlY3RvciB0ZW1wOwogICAgIEZhc3RCaXRWZWN0b3IgcmVzdWx0Owog
Ci0gICAgZ2V0TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldChi
eXRlY29kZU9mZnNldCwgdGVtcCk7Ci0KLSAgICB1bnNpZ25lZCBudW1DYXB0dXJlZFZhcnMgPSBu
dW1iZXJPZkNhcHR1cmVkVmFyaWFibGVzKG1fY29kZUJsb2NrKTsKKyAgICB1bnNpZ25lZCBudW1D
YXB0dXJlZFZhcnMgPSBtX2NvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCk7CiAgICAgaWYgKG51bUNh
cHR1cmVkVmFycykgewotICAgICAgICBpbnQgZmlyc3RDYXB0dXJlZExvY2FsID0gVmlydHVhbFJl
Z2lzdGVyKGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykpLnRvTG9jYWwoKTsKLSAgICAgICAgcmVz
dWx0LnJlc2l6ZSh0ZW1wLm51bUJpdHMoKSArIG51bUNhcHR1cmVkVmFycyk7CisgICAgICAgIGlu
dCBmaXJzdENhcHR1cmVkTG9jYWwgPSBWaXJ0dWFsUmVnaXN0ZXIobV9jb2RlQmxvY2stPmNhcHR1
cmVTdGFydCgpKS50b0xvY2FsKCk7CisgICAgICAgIHJlc3VsdC5yZXNpemUob3V0Lm51bUJpdHMo
KSArIG51bUNhcHR1cmVkVmFycyk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1DYXB0dXJlZFZhcnM7ICsraSkKICAgICAgICAgICAgIHJlc3VsdC5zZXQoZmlyc3RDYXB0dXJl
ZExvY2FsICsgaSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdC5yZXNpemUodGVtcC5udW1C
aXRzKCkpOworICAgICAgICByZXN1bHQucmVzaXplKG91dC5udW1CaXRzKCkpOwogCi0gICAgaW50
IHRlbXBMZW5ndGggPSB0ZW1wLm51bUJpdHMoKTsKLSAgICBBU1NFUlQodGVtcExlbmd0aCA+PSAw
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlbXBMZW5ndGg7IGkrKykgewotICAgICAgICBp
ZiAoIXRlbXAuZ2V0KGkpKQorICAgIGludCBvdXRMZW5ndGggPSBvdXQubnVtQml0cygpOworICAg
IEFTU0VSVChvdXRMZW5ndGggPj0gMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdXRMZW5n
dGg7IGkrKykgeworICAgICAgICBpZiAoIW91dC5nZXQoaSkpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBpZiAoIW51bUNhcHR1cmVkVmFycykgewpAQCAtNjU5LDcgKzYzOCw3IEBA
IEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjoKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGkpLm9mZnNldCgpID4gY2FwdHVyZVN0YXJ0KG1fY29kZUJsb2NrKSkKKyAgICAgICAgaWYgKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLm9mZnNldCgpID4gbV9jb2RlQmxvY2stPmNhcHR1cmVT
dGFydCgpKQogICAgICAgICAgICAgcmVzdWx0LnNldChpKTsKICAgICAgICAgZWxzZSAKICAgICAg
ICAgICAgIHJlc3VsdC5zZXQobnVtQ2FwdHVyZWRWYXJzICsgaSk7CkBAIC02NjcsNiArNjQ2LDEz
IEBAIEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjoKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCitGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0
TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sK
KyAgICBGYXN0Qml0VmVjdG9yIG91dDsKKyAgICBnZXRMaXZlbmVzc0luZm9Gb3JOb25DYXB0dXJl
ZFZhcnNBdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgIHJldHVybiBn
ZXRMaXZlbmVzc0luZm8obV9jb2RlQmxvY2ssIG91dCk7Cit9CisKIHZvaWQgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cygpCiB7CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJl
dGVyID0gbV9jb2RlQmxvY2stPnZtKCktPmludGVycHJldGVyOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCwx
MSBAQCBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgewog
cHVibGljOgogICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2RlQmxvY2sqKTsKLQorICAg
IAogICAgIGJvb2wgb3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9wZXJhbmQsIHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5m
b0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIAorICAgIHZv
aWQgY29tcHV0ZUZ1bGxMaXZlbmVzcyhGdWxsQnl0ZWNvZGVMaXZlbmVzcyYpOwogCiBwcml2YXRl
OgogICAgIHZvaWQgY29tcHV0ZSgpOwpAQCAtNTMsNiArNTUsMTIgQEAgcHJpdmF0ZToKICAgICBW
ZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiBtX2Jhc2ljQmxvY2tzOwogfTsKIAor
aW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50
IG9wZXJhbmQpOworaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJh
bmQpOworaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29u
c3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CisKK0Zhc3RCaXRWZWN0b3IgZ2V0
TGl2ZW5lc3NJbmZvKENvZGVCbG9jayosIGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCk7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzX2gK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lc19oCisjZGVmaW5lIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXNfaAorCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxp
bmUgYm9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBpbnQgb3Bl
cmFuZCkKK3sKKyAgICBpZiAoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlzQXJndW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaW50IG51bUNhcHR1cmVkVmFycyA9IG51bWJlck9m
Q2FwdHVyZWRWYXJpYWJsZXMobV9jb2RlQmxvY2spOworICAgIHJldHVybiBvcGVyYW5kIDw9IG1f
Y29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSAmJiBvcGVyYW5kID4gbV9jb2RlQmxvY2stPmNhcHR1
cmVFbmQoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xp
dmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9w
ZXJhbmQpCit7CisgICAgcmV0dXJuIG91dC5nZXQob3BlcmFuZCAtIGNvZGVCbG9jay0+Y2FwdHVy
ZUNvdW50KCkpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYW5kSXNMaXZlKENvZGVCbG9jayogY29k
ZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoreworICAgIHJl
dHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKGNvZGVCbG9jaywgb3BlcmFuZCkgfHwgb3BlcmFuZFRo
YXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29kZUJsb2NrLCBvdXQsIG9wZXJhbmQpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lu
bGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1NCw2ICszNTQsMjcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fbmVlZHNBY3RpdmF0aW9uOwogICAgIH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBjYXB0dXJlQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFzeW1i
b2xUYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBzeW1ib2xU
YWJsZSgpLT5jYXB0dXJlQ291bnQoKTsKKyAgICB9CisgICAgCisgICAgaW50IGNhcHR1cmVTdGFy
dCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIXN5bWJvbFRhYmxlKCkpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgp
OworICAgIH0KKyAgICAKKyAgICBpbnQgY2FwdHVyZUVuZCgpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoIXN5bWJvbFRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIHN5bWJvTFRhYmxlKCktPmNhcHR1cmVFbmQoKTsKKyAgICB9CiAKICAgICBib29sIGlzQ2Fw
dHVyZWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIElubGluZUNhbGxGcmFtZSogPSAwKSBjb25z
dDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNv
ZGVMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnVsbEJ5dGVjb2RlTGl2ZW5lc3Nf
aAorI2RlZmluZSBGdWxsQnl0ZWNvZGVMaXZlbmVzc19oCisKKyNpbmNsdWRlIDx3dGYvRmFzdEJp
dFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzOworCit0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIEZhc3RCaXRWZWN0b3IsIFdURjo6
SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5z
aWduZWQ+ID4gQnl0ZWNvZGVUb0JpdG1hcE1hcDsKKworY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MgeworcHVibGljOgorICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzKCkgOiBtX2NvZGVCbG9jaygw
KSB7IH0KKyAgICAKKyAgICAvLyBXZSBzYXkgIm91dCIgdG8gcmVmZXIgdG8gdGhlIGJpdHZlY3Rv
ciB0aGF0IGNvbnRhaW5zIHJhdyByZXN1bHRzIGZvciBhIGJ5dGVjb2RlCisgICAgLy8gaW5zdHJ1
Y3Rpb24uCisgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgZ2V0T3V0KHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBCeXRlY29kZVRvQml0bWFwTWFwOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChieXRlY29kZUluZGV4KTsKKyAgICAgICAgQVNTRVJU
KGl0ZXIgIT0gbV9tYXAuZW5kKCkpOworICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmFuZElzTGl2ZShpbnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNM
aXZlKG1fY29kZUJsb2NrLCBvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlz
TGl2ZShtX2NvZGVCbG9jaywgZ2V0T3V0KGJ5dGVjb2RlSW5kZXgpLCBvcGVyYW5kKTsKKyAgICB9
CisgICAgCisgICAgRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzcyh1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldExpdmVuZXNzSW5mbyhtX2NvZGVC
bG9jaywgZ2V0T3V0KGJ5dGVjb2RlSW5kZXgpKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CisgICAgCisgICAgQ29kZUJs
b2NrKiBtX2NvZGVCbG9jazsKKyAgICBCeXRlY29kZVRvQml0bWFwTWFwIG1fbWFwOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBGdWxsQnl0ZWNvZGVMaXZlbmVzc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMTQwLDggKzE0MCw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVm
Q291bnRlZDxCYXNpY0Jsb2MKICAgICBzdHJ1Y3QgU1NBRGF0YSB7CiAgICAgICAgIE9wZXJhbmRz
PEZsdXNoZWRBdD4gZmx1c2hBdEhlYWQ7CiAgICAgICAgIE9wZXJhbmRzPEZsdXNoZWRBdD4gZmx1
c2hBdFRhaWw7Ci0gICAgICAgIE9wZXJhbmRzPE5vZGUqPiBhdmFpbGFiaWxpdHlBdEhlYWQ7Ci0g
ICAgICAgIE9wZXJhbmRzPE5vZGUqPiBhdmFpbGFiaWxpdHlBdFRhaWw7CisgICAgICAgIE9wZXJh
bmRzPEZsdXNoRm9ybWF0PiBhdmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPEZs
dXNoRm9ybWF0PiBhdmFpbGFiaWxpdHlBdFRhaWw7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxp
dmVBdEhlYWQ7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdFRhaWw7CiAgICAgICAgIEhh
c2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCShyZXZpc2lvbiAxNTkxNDEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNiArNTYsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgRmx1CiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAgICAgICAgb3V0LnByaW50KCJG
bHVzaGVkSlNWYWx1ZSIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25mbGljdGluZ0Zs
dXNoOgorICAgICAgICBvdXQucHJpbnQoIkNvbmZsaWN0aW5nRmx1c2giKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkocmV2aXNpb24gMTU5
MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw3ICs0NSw4IEBAIGVudW0gRmx1c2hGb3JtYXQgewogICAgIEZsdXNo
ZWREb3VibGUsCiAgICAgRmx1c2hlZENlbGwsCiAgICAgRmx1c2hlZEJvb2xlYW4sCi0gICAgRmx1
c2hlZEpTVmFsdWUKKyAgICBGbHVzaGVkSlNWYWx1ZSwKKyAgICBDb25mbGljdGluZ0ZsdXNoCiB9
OwogCiBpbmxpbmUgTm9kZUZsYWdzIHJlc3VsdEZvcihGbHVzaEZvcm1hdCBmb3JtYXQpCkBAIC01
NCw2ICs1NSw3IEBAIGlubGluZSBOb2RlRmxhZ3MgcmVzdWx0Rm9yKEZsdXNoRm9ybWF0IGYKICAg
ICBjYXNlIERlYWRGbHVzaDoKICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgIGNhc2UgRmx1
c2hlZENlbGw6CisgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgogICAgICAgICByZXR1cm4gTm9k
ZVJlc3VsdEpTOwogICAgIGNhc2UgRmx1c2hlZEludDMyOgogICAgICAgICByZXR1cm4gTm9kZVJl
c3VsdEludDMyOwpAQCAtNzMsNiArNzUsNyBAQCBpbmxpbmUgVXNlS2luZCB1c2VLaW5kRm9yKEZs
dXNoRm9ybWF0IGZvCiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIERlYWRGbHVzaDoK
ICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKICAg
ICAgICAgcmV0dXJuIFVudHlwZWRVc2U7CiAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKICAgICAgICAg
cmV0dXJuIENlbGxVc2U7CkBAIC05Myw2ICs5Niw3IEBAIGlubGluZSBEYXRhRm9ybWF0IGRhdGFG
b3JtYXRGb3IoRmx1c2hGb3IKIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgRGVh
ZEZsdXNoOgorICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKICAgICAgICAgcmV0dXJuIERhdGFG
b3JtYXREZWFkOwogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CiAgICAgICAgIHJldHVybiBEYXRh
Rm9ybWF0SlM7CkBAIC0xMTEsNiArMTE1LDE3IEBAIGlubGluZSBEYXRhRm9ybWF0IGRhdGFGb3Jt
YXRGb3IoRmx1c2hGb3IKICAgICByZXR1cm4gRGF0YUZvcm1hdERlYWQ7CiB9CiAKK2lubGluZSBG
bHVzaEZvcm1hdCBtZXJnZShGbHVzaEZvcm1hdCBhLCBGbHVzaEZvcm1hdCBiKQoreworICAgIGlm
IChhID09IERlYWRGbHVzaCkKKyAgICAgICAgcmV0dXJuIGI7CisgICAgaWYgKGIgPT0gRGVhZEZs
dXNoKQorICAgICAgICByZXR1cm4gYTsKKyAgICBpZiAoYSAhPSBiKQorICAgICAgICByZXR1cm4g
Q29udHJhZGljdGluZ0ZsdXNoOworICAgIHJldHVybiBhOworfQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3NyAr
NDcsNzMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09
IFNTQSk7CiAgICAgICAgIAotICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7
Ci0gICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7
Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5z
aXplKCk7ICsraSkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBkZXB0aEZpcnN0
W2ldOwotICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmZpbGwoMCk7
Ci0gICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwuZmlsbCgwKTsKKyAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBi
bG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFk
LmZpbGwoRGVhZEZsdXNoKTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0
VGFpbC5maWxsKERlYWRGbHVzaCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IGRlcHRoRmlyc3RbaV07Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIFdlIGVkaXQgYXZhaWxhYmlsaXR5QXRUYWlsIGluLXBsYWNlLCBidXQgZmlyc3Qg
aW5pdGlhbGl6ZSBpdCB0bwotICAgICAgICAgICAgLy8gYXZhaWxhYmlsaXR5QXRIZWFkLgotICAg
ICAgICAgICAgT3BlcmFuZHM8Tm9kZSo+JiBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFp
bGFiaWxpdHlBdFRhaWw7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5h
dmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2dyYXBoLmJs
b2NrKDApOworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gcm9vdC0+c3NhLT5hdmFp
bGFiaWxpdHlBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspCisgICAgICAg
ICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5hcmd1bWVudChhcmd1bWVudCkgPSBG
bHVzaGVkSlNWYWx1ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IHJvb3QtPnNzYS0+
YXZhaWxhYmlsaXR5QXRIZWFkLm51bWJlck9mTG9jYWxzKCk7IGxvY2FsLS07KQorICAgICAgICAg
ICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubG9jYWwobG9jYWwpID0gQ29uZmxpY3Rp
bmdGbHVzaDsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGVm
ZmljaWVudCBieSBwcm9jZXNzaW5nIGJsb2NrcyBpbiByZXZlcnNlIHBvc3RvcmRlci4KKyAgICAg
ICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IGF2YWlsYWJpbGl0eTsKKyAgICAgICAgYm9vbCBjaGFu
Z2VkOworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAg
ICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsK
LSAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
PSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2Fz
ZSBab21iaWVIaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5k
KG5vZGUtPmxvY2FsKCkpID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIEdl
dEFyZ3VtZW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID0gbm9kZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYg
KCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5
QXRIZWFkOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
bm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsK
KyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5k
Q2hlY2s6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJndW1lbnQ6IHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBvdXIgRENFIGhh
cyBwcm92ZWQgdGhhdCBub2JvZHkgd2lsbCB1c2UgdGhpcworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdmFsdWUsIGV2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHku
b3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IENvbnRyYWRpY3RpbmdGbHVzaDsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eSA9PSBibG9jay0+c3NhLT5h
dmFpbGFiaWxpdHlBdFRhaWwpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFp
bCA9IGF2YWlsYWJpbGl0eTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4
ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsKKyAgICAgICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNj
ZXNzb3JJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGF2YWls
YWJpbGl0eS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nv
ci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0gPSBtZXJnZSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ldLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVtpXSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGotLTsp
IHsKLSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vz
c29yKGopOwotICAgICAgICAgICAgICAgIE9wZXJhbmRzPE5vZGUqPiYgc3VjY2Vzc29yQXZhaWxh
YmlsaXR5ID0gc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKLSAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGsgPSBhdmFpbGFiaWxpdHkuc2l6ZSgpOyBrLS07KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIE5vZGUqIG15Tm9kZSA9IGF2YWlsYWJpbGl0eVtrXTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFteU5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghc3VjY2Vz
c29yLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMobXlOb2RlKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IG92ZXJ3cml0ZSBhdmFpbGFiaWxpdHkgd2l0aCBhIGJv
Z3VzIG5vZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gYXQgbWVyZ2UgcG9pbnRzLiBUaGlzIGlz
IGZpbmUsIHNpbmNlIG1lcmdlIHBvaW50cyBoYXZlCi0gICAgICAgICAgICAgICAgICAgIC8vIE1v
dkhpbnQoUGhpKSdzIHRvIHdvcmsgYXJvdW5kIHRoaXMuIFRoZSBvdXRjb21lIG9mIHRoaXMgaXMK
LSAgICAgICAgICAgICAgICAgICAgLy8geW91IG1pZ2h0IGhhdmUgYSBwcm9ncmFtIGluIHdoaWNo
IGEgbm9kZSBoYXBwZW5zIHRvIHJlbWFpbgotICAgICAgICAgICAgICAgICAgICAvLyBsaXZlIGlu
dG8gc29tZSBibG9jayBCLCBhbmQgc2VwYXJhdGVseSAoZHVlIHRvIGNvcHkKLSAgICAgICAgICAg
ICAgICAgICAgLy8gcHJvcGFnYXRpb24pIGp1c3Qgb25lIG9mIHRoZSBwcmVkZWNlc3NvcnMgb2Yg
QiBpc3N1ZWQgYQotICAgICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50IHB1dHRpbmcgdGhhdCBu
b2RlIGludG8gc29tZSBsb2NhbC4gVGhlbiBpbiBCIHdlIG1pZ2h0Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIHRoaW5rIHRoYXQgdGhhdCBub2RlIGlzIGEgdmFsaWQgdmFsdWUgZm9yIHRoYXQgbG9j
YWwuIE9mCi0gICAgICAgICAgICAgICAgICAgIC8vIGNvdXJzZSBpZiB0aGF0IGxvY2FsIHdhcyBh
Y3R1YWxseSBsaXZlIGluIEIsIEIgd291bGQgaGF2ZSBhCi0gICAgICAgICAgICAgICAgICAgIC8v
IFBoaSBmb3IgaXQuIFNvIGVzc2VudGlhbGx5IHdlJ2xsIGhhdmUgT1NSIGV4aXQgZHJvcHBpbmcg
dGhpcwotICAgICAgICAgICAgICAgICAgICAvLyBub2RlJ3MgdmFsdWUgaW50byB0aGUgbG9jYWwg
d2hlbiB3ZSBvdGhlcndpc2UgKGluIHRoZSBERkcpCi0gICAgICAgICAgICAgICAgICAgIC8vIHdv
dWxkIGhhdmUgZHJvcHBlZCB1bmRlZmluZWQgaW50byB0aGUgbG9jYWwuIFRoaXMgc2VlbXMKLSAg
ICAgICAgICAgICAgICAgICAgLy8gaGFybWxlc3MuCi0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBzdWNjZXNzb3JBdmFpbGFiaWxpdHlba10gPSBteU5vZGU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIH0gd2hpbGUg
KGNoYW5nZWQpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw5ICszNiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
IGNsYXNzIEdyYXBoOwogCi0vLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRp
eUF0SGVhZC9UYWlsLiBUaGlzIHJlbGllcyBvbiBsaXZlbmVzcwotLy8gYW5hbHlzaXMgcGhhc2Ug
aGF2aW5nIGJlZW4gcnVuIGFuZCB0aGUgZ3JhcGggbm90IGhhdmluZyBiZWVuIHRyYW5zZm9ybWVk
Ci0vLyBhZnRlciB0aGF0LgorLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5hdmFpbGFiaWx0
aXlBdEhlYWQvVGFpbC4gVGhpcyBpcyBhIGZvcndhcmQgZmxvdyB0eXBlIGluZmVyZW5jZQorLy8g
b3ZlciBNb3ZIaW50cy4gQXQgdGhlIHRpbWUgd2hlbiBNb3ZIaW50cyBhcmUgaW50cm9kdWNlZCwg
d2Ugd2VyZSBjZXJ0YWluIHRoYXQgYXQgYW55CisvLyBwb2ludCBpbiB0aGUgcHJvZ3JhbSB3aGVy
ZSBhIGJ5dGVjb2RlIHZhcmlhYmxlIGhhZCBiZWVuIGxpdmUsIGFsbCBvZiB0aGUgTW92SGludHMg
dGhhdAorLy8gZmxvd2VkIGludG8gdGhhdCBwb2ludCBmb3IgdGhhdCB2YXJpYWJsZSBoYWQgdGhl
IHNhbWUgRmx1c2hGb3JtYXQuIFRoaXMgYW5hbHlzaXMgd2lsbCB0ZWxsCisvLyB5b3Ugd2hhdCB0
aGF0IGZvcm1hdCB3b3VsZCBoYXZlIGJlZW4uCiAKIGJvb2wgcGVyZm9ybU9TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzKEdyYXBoJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbHVlU291cmNlLmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsdWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgICAgIGNhc2Ug
RGVhZEZsdXNoOgorICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAgICAgICAgICBy
ZXR1cm4gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKICAgICAgICAgY2FzZSBGbHVzaGVkSlNW
YWx1ZToKICAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywgd2hl
cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjEsNiArNjYxLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRGVhZEZsdXNo
OgorICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMzg1MSw3ICszODUy
LDggQEAgcHJpdmF0ZToKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YWx1ZVNvdXJjZXMu
c2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBtX2hpZ2hCbG9j
ay0+c3NhLT5mbHVzaEF0SGVhZFtpXTsKICAgICAgICAgICAgIHN3aXRjaCAoZmx1c2guZm9ybWF0
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgRGVhZEZsdXNoOiB7CisgICAgICAgICAgICBjYXNlIERl
YWRGbHVzaDoKKyAgICAgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDogewogICAgICAgICAg
ICAgICAgIC8vIE11c3QgY29uc2lkZXIgYXZhaWxhYmxlIG5vZGVzIGluc3RlYWQuCiAgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZFtpXTsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDY5LDEzICs0NjksMTMgQEAgcHVibGljOgogICAgIGJvb2wgdXNlc05vblN0cmljdEV2YWwo
KSB7IHJldHVybiBtX3VzZXNOb25TdHJpY3RFdmFsOyB9CiAgICAgdm9pZCBzZXRVc2VzTm9uU3Ry
aWN0RXZhbChib29sIHVzZXNOb25TdHJpY3RFdmFsKSB7IG1fdXNlc05vblN0cmljdEV2YWwgPSB1
c2VzTm9uU3RyaWN0RXZhbDsgfQogCi0gICAgaW50IGNhcHR1cmVTdGFydCgpIHsgcmV0dXJuIG1f
Y2FwdHVyZVN0YXJ0OyB9CisgICAgaW50IGNhcHR1cmVTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FwdHVyZVN0YXJ0OyB9CiAgICAgdm9pZCBzZXRDYXB0dXJlU3RhcnQoaW50IGNhcHR1cmVTdGFy
dCkgeyBtX2NhcHR1cmVTdGFydCA9IGNhcHR1cmVTdGFydDsgfQogCi0gICAgaW50IGNhcHR1cmVF
bmQoKSB7IHJldHVybiBtX2NhcHR1cmVFbmQ7IH0KKyAgICBpbnQgY2FwdHVyZUVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2FwdHVyZUVuZDsgfQogICAgIHZvaWQgc2V0Q2FwdHVyZUVuZChpbnQgY2Fw
dHVyZUVuZCkgeyBtX2NhcHR1cmVFbmQgPSBjYXB0dXJlRW5kOyB9CiAKLSAgICBpbnQgY2FwdHVy
ZUNvdW50KCkgeyByZXR1cm4gLShtX2NhcHR1cmVFbmQgLSBtX2NhcHR1cmVTdGFydCk7IH0KKyAg
ICBpbnQgY2FwdHVyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gLShtX2NhcHR1cmVFbmQgLSBtX2Nh
cHR1cmVTdGFydCk7IH0KIAogICAgIGludCBwYXJhbWV0ZXJDb3VudCgpIHsgcmV0dXJuIG1fcGFy
YW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQogICAgIGludCBwYXJhbWV0ZXJDb3VudElu
Y2x1ZGluZ1RoaXMoKSB7IHJldHVybiBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216862</attachid>
            <date>2013-11-13 14:27:26 -0800</date>
            <delta_ts>2013-11-14 12:17:25 -0800</delta_ts>
            <desc>slowly getting there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58650</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVC
YXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwogCi10eXBlZGVmIEhhc2hN
YXA8dW5zaWduZWQsIEZhc3RCaXRWZWN0b3IsIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+ID4gQnl0ZWNvZGVUb0JpdG1h
cE1hcDsKLQogY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrIDogcHVibGljIFJlZkNvdW50ZWQ8Qnl0
ZWNvZGVCYXNpY0Jsb2NrPiB7CiBwdWJsaWM6CiAgICAgZW51bSBTcGVjaWFsQmxvY2tUeXBlIHsg
RW50cnlCbG9jaywgRXhpdEJsb2NrIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkocmV2
aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIK
IAorI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKIApAQCAtMzgs
NDQgKzM5LDIzIEBAIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVMaXZlbmUKICAg
ICBjb21wdXRlKCk7CiB9CiAKLXN0YXRpYyBpbnQgbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhD
b2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBpZiAoIWNvZGVCbG9jay0+c3ltYm9sVGFibGUo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+c3ltYm9sVGFibGUo
KS0+Y2FwdHVyZUNvdW50KCk7Ci19Ci0KLXN0YXRpYyBpbnQgY2FwdHVyZVN0YXJ0KENvZGVCbG9j
ayogY29kZUJsb2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0
dXJlU3RhcnQoKTsKLX0KLQotc3RhdGljIGludCBjYXB0dXJlRW5kKENvZGVCbG9jayogY29kZUJs
b2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7
Ci19Ci0KIHN0YXRpYyBib29sIGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKENvZGVCbG9jayog
Y29kZUJsb2NrLCBpbnQgb3BlcmFuZCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
ZyhvcGVyYW5kKTsKICAgICByZXR1cm4gIWNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgob3BlcmFuZCkgLy8gRG9uJ3QgY2FyZSBhYm91dCBjb25zdGFudHMuCiAgICAgICAgICYmIHZp
cnR1YWxSZWcuaXNMb2NhbCgpIC8vIERvbid0IGNhcmUgYWJvdXQgYXJndW1lbnRzLgotICAgICAg
ICAmJiAoIW51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMoY29kZUJsb2NrKSAvLyBJZiB3ZSBoYXZl
IG5vIGNhcHR1cmVkIHZhcmlhYmxlcywgd2UncmUgZ29vZCB0byBnby4KLSAgICAgICAgICAgIHx8
ICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY2FwdHVyZVN0YXJ0KGNvZGVCbG9jaykgfHwgKHZpcnR1
YWxSZWcub2Zmc2V0KCkgPD0gY2FwdHVyZUVuZChjb2RlQmxvY2spKSkpOworICAgICAgICAmJiAo
IWNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkgLy8gSWYgd2UgaGF2ZSBubyBjYXB0dXJlZCB2YXJp
YWJsZXMsIHdlJ3JlIGdvb2QgdG8gZ28uCisgICAgICAgICAgICB8fCAodmlydHVhbFJlZy5vZmZz
ZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkgfHwgKHZpcnR1YWxSZWcub2Zmc2V0KCkg
PD0gY29kZUJsb2NrLT5jYXB0dXJlRW5kKCkpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldEZvck9w
ZXJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZhc3RCaXRWZWN0b3ImIGJpdHMsIGludCBvcGVy
YW5kKQogewogICAgIEFTU0VSVChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ss
IG9wZXJhbmQpKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKLSAg
ICBpZiAodmlydHVhbFJlZy5vZmZzZXQoKSA+IGNhcHR1cmVTdGFydChjb2RlQmxvY2spKQorICAg
IGlmICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSkKICAg
ICAgICAgYml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkpOwogICAgIGVsc2UKLSAgICAgICAg
Yml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkgLSBudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVz
KGNvZGVCbG9jaykpOworICAgICAgICBiaXRzLnNldCh2aXJ0dWFsUmVnLnRvTG9jYWwoKSAtIGNv
ZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkpOwogfQogCiBzdGF0aWMgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCwgRmFzdEJpdFZlY3RvciYgdXNlcykKQEAgLTUzMyw2ICs1MTMsMjYgQEAgc3RhdGljIEJ5
dGVjb2RlQmFzaWNCbG9jayogZmluZEJhc2ljQmxvYwogICAgIHJldHVybiBiYXNpY0Jsb2NrWzFd
LmdldCgpOwogfQogCitzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9jayog
Y29kZUJsb2NrLCBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4+JiBiYXNpY0Jsb2Nr
cywgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHVzZXMsIEZhc3RCaXRW
ZWN0b3ImIGRlZnMsIEZhc3RCaXRWZWN0b3ImIG91dCkKK3sKKyAgICB1c2VzLmNsZWFyQWxsKCk7
CisgICAgZGVmcy5jbGVhckFsbCgpOworICAgIAorICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVP
ZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgdXNlcyk7CisgICAgY29tcHV0ZURlZnNG
b3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCBkZWZzKTsKKyAgICAK
KyAgICBvdXQuZXhjbHVkZShkZWZzKTsKKyAgICBvdXQubWVyZ2UodXNlcyk7CisgICAgCisgICAg
Ly8gSWYgd2UgaGF2ZSBhbiBleGNlcHRpb24gaGFuZGxlciwgd2Ugd2FudCB0aGUgbGl2ZS1pbiB2
YXJpYWJsZXMgb2YgdGhlIAorICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGVyIGJsb2NrIHRvIGJlIGlu
Y2x1ZGVkIGluIHRoZSBsaXZlLWluIG9mIHRoaXMgcGFydGljdWxhciBieXRlY29kZS4KKyAgICBp
ZiAoKGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCkpKSB7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogaGFuZGxlckJsb2NrID0g
ZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGJhc2ljQmxvY2tzLCBoYW5kbGVyLT50YXJn
ZXQpOworICAgICAgICBBU1NFUlQoaGFuZGxlckJsb2NrKTsKKyAgICAgICAgb3V0Lm1lcmdlKGhh
bmRsZXJCbG9jay0+aW4oKSk7CisgICAgfQorfQorCiBzdGF0aWMgdm9pZCBjb21wdXRlTG9jYWxM
aXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUJh
c2ljQmxvY2sqIGJsb2NrLCBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiYgYmFz
aWNCbG9ja3MsIHVuc2lnbmVkIHRhcmdldE9mZnNldCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KQog
ewogICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwpAQCAtNTUwLDIzICs1NTAsOCBA
QCBzdGF0aWMgdm9pZCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjCiAgICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0cygpW2ldOwogICAgICAg
ICBpZiAodGFyZ2V0T2Zmc2V0ID4gYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICB1c2VzLmNsZWFyQWxsKCk7Ci0gICAgICAgIGRlZnMuY2xlYXJBbGwoKTsKLQot
ICAgICAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVP
ZmZzZXQsIHVzZXMpOwotICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVC
bG9jaywgYnl0ZWNvZGVPZmZzZXQsIGRlZnMpOwotCi0gICAgICAgIG91dC5leGNsdWRlKGRlZnMp
OwotICAgICAgICBvdXQubWVyZ2UodXNlcyk7Ci0KLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBl
eGNlcHRpb24gaGFuZGxlciwgd2Ugd2FudCB0aGUgbGl2ZS1pbiB2YXJpYWJsZXMgb2YgdGhlIAot
ICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9jayB0byBiZSBpbmNsdWRlZCBpbiB0aGUg
bGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgYnl0ZWNvZGUuCi0gICAgICAgIGlmICgoaGFuZGxl
ciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkp
IHsKLSAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogaGFuZGxlckJsb2NrID0gZmluZEJh
c2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGJhc2ljQmxvY2tzLCBoYW5kbGVyLT50YXJnZXQpOwot
ICAgICAgICAgICAgQVNTRVJUKGhhbmRsZXJCbG9jayk7Ci0gICAgICAgICAgICBvdXQubWVyZ2Uo
aGFuZGxlckJsb2NrLT5pbigpKTsKLSAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RlcE92
ZXJJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGJhc2ljQmxvY2tzLCBieXRlY29kZU9mZnNldCwgdXNl
cywgZGVmcywgb3V0KTsKICAgICB9CiAKICAgICByZXN1bHQuc2V0KG91dCk7CkBAIC01ODMsNyAr
NTY4LDcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OnJ1bkxpdmVuZQogewogICAg
IFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IG1fY29kZUJsb2NrLT51bmxp
bmtlZENvZGVCbG9jaygpOwogICAgIHVuc2lnbmVkIG51bWJlck9mVmFyaWFibGVzID0gdW5saW5r
ZWRDb2RlQmxvY2stPm1fbnVtVmFycyArIAotICAgICAgICB1bmxpbmtlZENvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnMgLSBudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVzKG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgdW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIC0gbV9j
b2RlQmxvY2stPmNhcHR1cmVDb3VudCgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fYmFzaWNCbG9ja3Muc2l6ZSgpOyBpKyspIHsKICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fYmFzaWNCbG9ja3NbaV0uZ2V0KCk7CkBAIC02MjIsMzYgKzYwNywzMCBAQCB2
b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lCiAKIGJvb2wgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9mZnNldChpbnQgb3BlcmFu
ZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7Ci0gICAgaW50IG51bUNhcHR1cmVkVmFycyA9
IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9jb2RlQmxvY2spOwotICAgIGlmIChWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCkuaXNBcmd1bWVudCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBpZiAob3BlcmFuZCA8PSBjYXB0dXJlU3RhcnQobV9jb2RlQmxvY2spICYmIG9wZXJhbmQgPiBj
YXB0dXJlRW5kKG1fY29kZUJsb2NrKSkKKyAgICBpZiAob3BlcmFuZElzQWx3YXlzTGl2ZShtX2Nv
ZGVCbG9jaywgb3BlcmFuZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIEZhc3RCaXRWZWN0
b3IgcmVzdWx0OwogICAgIGdldExpdmVuZXNzSW5mb0Zvck5vbkNhcHR1cmVkVmFyc0F0Qnl0ZWNv
ZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5nZXQo
b3BlcmFuZCAtIG51bUNhcHR1cmVkVmFycyk7CisgICAgcmV0dXJuIG9wZXJhbmRUaGF0SXNOb3RB
bHdheXNMaXZlSXNMaXZlKG1fY29kZUJsb2NrLCByZXN1bHQsIG9wZXJhbmQpOwogfQogCi1GYXN0
Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0Zhc3RCaXRWZWN0b3IgZ2V0TGl2
ZW5lc3NJbmZvKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQp
CiB7Ci0gICAgRmFzdEJpdFZlY3RvciB0ZW1wOwogICAgIEZhc3RCaXRWZWN0b3IgcmVzdWx0Owog
Ci0gICAgZ2V0TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldChi
eXRlY29kZU9mZnNldCwgdGVtcCk7Ci0KLSAgICB1bnNpZ25lZCBudW1DYXB0dXJlZFZhcnMgPSBu
dW1iZXJPZkNhcHR1cmVkVmFyaWFibGVzKG1fY29kZUJsb2NrKTsKKyAgICB1bnNpZ25lZCBudW1D
YXB0dXJlZFZhcnMgPSBtX2NvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCk7CiAgICAgaWYgKG51bUNh
cHR1cmVkVmFycykgewotICAgICAgICBpbnQgZmlyc3RDYXB0dXJlZExvY2FsID0gVmlydHVhbFJl
Z2lzdGVyKGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykpLnRvTG9jYWwoKTsKLSAgICAgICAgcmVz
dWx0LnJlc2l6ZSh0ZW1wLm51bUJpdHMoKSArIG51bUNhcHR1cmVkVmFycyk7CisgICAgICAgIGlu
dCBmaXJzdENhcHR1cmVkTG9jYWwgPSBWaXJ0dWFsUmVnaXN0ZXIobV9jb2RlQmxvY2stPmNhcHR1
cmVTdGFydCgpKS50b0xvY2FsKCk7CisgICAgICAgIHJlc3VsdC5yZXNpemUob3V0Lm51bUJpdHMo
KSArIG51bUNhcHR1cmVkVmFycyk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1DYXB0dXJlZFZhcnM7ICsraSkKICAgICAgICAgICAgIHJlc3VsdC5zZXQoZmlyc3RDYXB0dXJl
ZExvY2FsICsgaSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdC5yZXNpemUodGVtcC5udW1C
aXRzKCkpOworICAgICAgICByZXN1bHQucmVzaXplKG91dC5udW1CaXRzKCkpOwogCi0gICAgaW50
IHRlbXBMZW5ndGggPSB0ZW1wLm51bUJpdHMoKTsKLSAgICBBU1NFUlQodGVtcExlbmd0aCA+PSAw
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlbXBMZW5ndGg7IGkrKykgewotICAgICAgICBp
ZiAoIXRlbXAuZ2V0KGkpKQorICAgIGludCBvdXRMZW5ndGggPSBvdXQubnVtQml0cygpOworICAg
IEFTU0VSVChvdXRMZW5ndGggPj0gMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdXRMZW5n
dGg7IGkrKykgeworICAgICAgICBpZiAoIW91dC5nZXQoaSkpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBpZiAoIW51bUNhcHR1cmVkVmFycykgewpAQCAtNjU5LDcgKzYzOCw3IEBA
IEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjoKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGkpLm9mZnNldCgpID4gY2FwdHVyZVN0YXJ0KG1fY29kZUJsb2NrKSkKKyAgICAgICAgaWYgKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLm9mZnNldCgpID4gbV9jb2RlQmxvY2stPmNhcHR1cmVT
dGFydCgpKQogICAgICAgICAgICAgcmVzdWx0LnNldChpKTsKICAgICAgICAgZWxzZSAKICAgICAg
ICAgICAgIHJlc3VsdC5zZXQobnVtQ2FwdHVyZWRWYXJzICsgaSk7CkBAIC02NjcsNiArNjQ2LDM5
IEBAIEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjoKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCitGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0
TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sK
KyAgICBGYXN0Qml0VmVjdG9yIG91dDsKKyAgICBnZXRMaXZlbmVzc0luZm9Gb3JOb25DYXB0dXJl
ZFZhcnNBdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgIHJldHVybiBn
ZXRMaXZlbmVzc0luZm8obV9jb2RlQmxvY2ssIG91dCk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBy
ZXN1bHQpCit7CisgICAgRmFzdEJpdFZlY3RvciBvdXQ7CisgICAgRmFzdEJpdFZlY3RvciB1c2Vz
OworICAgIEZhc3RCaXRWZWN0b3IgZGVmczsKKyAgICAKKyAgICByZXN1bHQubV9jb2RlQmxvY2sg
PSBtX2NvZGVCbG9jazsKKyAgICByZXN1bHQubV9tYXAuY2xlYXIoKTsKKyAgICAKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2Jhc2ljQmxvY2tzLnNpemUoKTsgaS0tOykgeworICAgICAgICBCeXRl
Y29kZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9iYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKKyAgICAgICAg
aWYgKGJsb2NrLT5pc0VudHJ5QmxvY2soKSB8fCBibG9jay0+aXNFeGl0QmxvY2soKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgb3V0ID0gYmxvY2stPm91dCgpOwor
ICAgICAgICB1c2VzLnJlc2l6ZShvdXQubnVtQml0cygpKTsKKyAgICAgICAgZGVmcy5yZXNpemUo
b3V0Lm51bUJpdHMoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9j
ay0+Ynl0ZWNvZGVPZmZzZXRzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5ieXRlY29kZU9mZnNldHMoKVtpXTsKKyAgICAgICAg
ICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24obV9jb2RlQmxvY2ssIG1fYmFzaWNCbG9ja3MsIGJ5dGVj
b2RlT2Zmc2V0LCB1c2VzLCBkZWZzLCBvdXQpOworICAgICAgICAgICAgcmVzdWx0Lm1fbWFwLmFk
ZChieXRlY29kZU9mZnNldCwgb3V0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKCkKIHsKICAgICBJbnRlcnByZXRlciog
aW50ZXJwcmV0ZXIgPSBtX2NvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5oCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDkgKzM4LDExIEBAIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcyB7CiBwdWJsaWM6CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzKENvZGVCbG9jayop
OwotCisgICAgCiAgICAgYm9vbCBvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9mZnNldChpbnQgb3Bl
cmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAg
CisgICAgdm9pZCBjb21wdXRlRnVsbExpdmVuZXNzKEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1
bHQpOwogCiBwcml2YXRlOgogICAgIHZvaWQgY29tcHV0ZSgpOwpAQCAtNTMsNiArNTUsMTIgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiBtX2Jhc2lj
QmxvY2tzOwogfTsKIAoraW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShDb2RlQmxvY2sq
IGNvZGVCbG9jaywgaW50IG9wZXJhbmQpOworaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFs
d2F5c0xpdmVJc0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZhc3RCaXRWZWN0b3Im
IG91dCwgaW50IG9wZXJhbmQpOworaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShDb2RlQmxvY2sq
IGNvZGVCbG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CisKK0Zh
c3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvKENvZGVCbG9jayosIGNvbnN0IEZhc3RCaXRWZWN0
b3ImIG91dCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lc19oCisjZGVm
aW5lIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXNfaAorCisjaW5jbHVkZSAiQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitpbmxpbmUgYm9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKENvZGVCbG9jayogY29k
ZUJsb2NrLCBpbnQgb3BlcmFuZCkKK3sKKyAgICBpZiAoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQp
LmlzQXJndW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaW50IG51bUNhcHR1cmVk
VmFycyA9IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9jb2RlQmxvY2spOworICAgIHJldHVy
biBvcGVyYW5kIDw9IG1fY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSAmJiBvcGVyYW5kID4gbV9j
b2RlQmxvY2stPmNhcHR1cmVFbmQoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05v
dEFsd2F5c0xpdmVJc0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZhc3RCaXRWZWN0
b3ImIG91dCwgaW50IG9wZXJhbmQpCit7CisgICAgcmV0dXJuIG91dC5nZXQob3BlcmFuZCAtIGNv
ZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYW5kSXNMaXZl
KENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVy
YW5kKQoreworICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKGNvZGVCbG9jaywgb3BlcmFu
ZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29kZUJsb2NrLCBvdXQsIG9w
ZXJhbmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1NCw2ICszNTQs
MjcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbmVlZHNBY3RpdmF0aW9uOwog
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBjYXB0dXJlQ291bnQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291bnQoKTsKKyAgICB9CisgICAgCisgICAg
aW50IGNhcHR1cmVTdGFydCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIXN5bWJvbFRhYmxl
KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlKCkt
PmNhcHR1cmVTdGFydCgpOworICAgIH0KKyAgICAKKyAgICBpbnQgY2FwdHVyZUVuZCgpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoIXN5bWJvbFRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIHN5bWJvTFRhYmxlKCktPmNhcHR1cmVFbmQoKTsKKyAgICB9CiAK
ICAgICBib29sIGlzQ2FwdHVyZWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIElubGluZUNhbGxG
cmFtZSogPSAwKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnVsbEJ5
dGVjb2RlTGl2ZW5lc3NfaAorI2RlZmluZSBGdWxsQnl0ZWNvZGVMaXZlbmVzc19oCisKKyNpbmNs
dWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworCit0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIEZhc3RC
aXRWZWN0b3IsIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dW5zaWduZWQ+ID4gQnl0ZWNvZGVUb0JpdG1hcE1hcDsKKworY2xhc3MgRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MgeworcHVibGljOgorICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzKCkg
OiBtX2NvZGVCbG9jaygwKSB7IH0KKyAgICAKKyAgICAvLyBXZSBzYXkgIm91dCIgdG8gcmVmZXIg
dG8gdGhlIGJpdHZlY3RvciB0aGF0IGNvbnRhaW5zIHJhdyByZXN1bHRzIGZvciBhIGJ5dGVjb2Rl
CisgICAgLy8gaW5zdHJ1Y3Rpb24uCisgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgZ2V0T3V0KHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBCeXRlY29kZVRvQml0
bWFwTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChieXRlY29kZUluZGV4KTsK
KyAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9tYXAuZW5kKCkpOworICAgICAgICByZXR1cm4gaXRl
ci0+dmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmFuZElzTGl2ZShpbnQgb3BlcmFu
ZCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBv
cGVyYW5kSXNBbHdheXNMaXZlKG1fY29kZUJsb2NrLCBvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElz
Tm90QWx3YXlzTGl2ZUlzTGl2ZShtX2NvZGVCbG9jaywgZ2V0T3V0KGJ5dGVjb2RlSW5kZXgpLCBv
cGVyYW5kKTsKKyAgICB9CisgICAgCisgICAgRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzcyh1bnNp
Z25lZCBieXRlY29kZUluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldExpdmVu
ZXNzSW5mbyhtX2NvZGVCbG9jaywgZ2V0T3V0KGJ5dGVjb2RlSW5kZXgpKTsKKyAgICB9CisgICAg
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7Cisg
ICAgCisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBCeXRlY29kZVRvQml0bWFwTWFw
IG1fbWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBGdWxsQnl0ZWNv
ZGVMaXZlbmVzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxh
YmlsaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2
YWlsYWJpbGl0eS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F2YWlsYWJpbGl0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEF2YWlsYWJpbGl0eTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKK30KKwordm9p
ZCBBdmFpbGFiaWxpdHk6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRl
eHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fZmx1c2hlZEF0LCAiLyIpOwor
ICAgIAorICAgIEdyYXBoKiBncmFwaCA9IGNvbnRleHQgPyBjb250ZXh0LT5ncmFwaCA6IDA7Cisg
ICAgCisgICAgaWYgKGlzVW5kZWNpZGVkKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJVbmRlY2lk
ZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoaXNVbmF2YWlsYWJs
ZSgpKSB7CisgICAgICAgIG91dC5wcmludCgiVW5hdmFpbGFibGUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBpZiAoZ3JhcGgpIHsKKyAgICAgICAgb3V0LnByaW50KFZhcmlh
YmxlQWNjZXNzRGF0YUR1bXAoKmdyYXBoLCBtX3ZhcmlhYmxlKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgb3V0LnByaW50KFJhd1BvaW50ZXIobV92YXJpYWJsZSkpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHku
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0F2YWlsYWJpbGl0eV9oCisjZGVm
aW5lIERGR0F2YWlsYWJpbGl0eV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR0ZsdXNoZWRBdC5oIgorI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEF2YWlsYWJpbGl0eSB7Citw
dWJsaWM6CisgICAgQXZhaWxhYmlsaXR5KCkKKyAgICAgICAgOiBtX3ZhcmlhYmxlKDApCisgICAg
ICAgICwgbV9mbHVzaGVkQXQoRGVhZEZsdXNoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhw
bGljaXQgQXZhaWxhYmlsaXR5KFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUpCisgICAgICAg
IDogbV92YXJpYWJsZSh2YXJpYWJsZSkKKyAgICAgICAgLCBtX2ZsdXNoZWRBdChDb25mbGljdGlu
Z0ZsdXNoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEF2YWlsYWJpbGl0eSB1bmF2
YWlsYWJsZSgpCisgICAgeworICAgICAgICBBdmFpbGFiaWxpdHkgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV92YXJpYWJsZSA9IGJpdHdpc2VfY2FzdDxWYXJpYWJsZUFjY2Vzc0RhdGEqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4oMSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBBdmFpbGFiaWxpdHkgd2l0aEZsdXNoKEZsdXNoZWRBdCBmbHVzaCkKKyAgICB7Cisg
ICAgICAgIEF2YWlsYWJpbGl0eSByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgcmVzdWx0Lm1fZmx1
c2hlZEF0ID0gZmx1c2g7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IGJvb2wgdmFyaWFibGVJc1VuZGVjaWRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFibGUgPT0g
MDsgfQorICAgIGJvb2wgdmFyaWFibGVJc1VuYXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4gKnRo
aXMgPT0gdW5hdmFpbGFibGUoKTsgfQorICAgIAorICAgIGJvb2wgaGFzVmFyaWFibGUoKSBjb25z
dCB7IHJldHVybiAhdmFyaWFibGVJc1VuZGVjaWRlZCgpICYmICF2YXJpYWJsZUlzVW5hdmFpbGFi
bGUoKTsgfQorICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCF2YXJpYWJsZUlzVW5kZWNpZGVkKCkpOworICAgICAgICBB
U1NFUlQoIXZhcmlhYmxlSXNVbmF2YWlsYWJsZSgpKTsKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFi
bGU7CisgICAgfQorICAgIAorICAgIEZsdXNoZWRBdCBmbHVzaGVkQXQoKSBjb25zdCB7IHJldHVy
biBtX2ZsdXNoZWRBdDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0
eSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YXJpYWJsZSA9PSBvdGhl
ci5tX3ZhcmlhYmxlCisgICAgICAgICAgICAmJiBtX2ZsdXNoRm9ybWF0ID09IG90aGVyLm1fZmx1
c2hGb3JtYXQ7CisgICAgfQorICAgIAorICAgIEF2YWlsYWJpbGl0eSBtZXJnZShjb25zdCBBdmFp
bGFiaWxpdHkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgQXZhaWxhYmlsaXR5IHJlc3Vs
dDsKKyAgICAgICAgCisgICAgICAgIGlmICh2YXJpYWJsZUlzVW5kZWNpZGVkKCkpCisgICAgICAg
ICAgICByZXN1bHQgPSBvdGhlcjsKKyAgICAgICAgZWxzZSBpZiAob3RoZXIudmFyaWFibGVJc1Vu
ZGVjaWRlZCgpKQorICAgICAgICAgICAgcmVzdWx0ID0gKnRoaXM7CisgICAgICAgIGVsc2UgaWYg
KHZhcmlhYmxlKCkgPT0gb3RoZXIudmFyaWFibGUoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9ICp0
aGlzOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSB1bmF2YWlsYWJsZSgpOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdC53aXRoRmx1c2goZmx1c2hlZEF0KCkubWVy
Z2Uob3RoZXIuZnVzaGVkQXQoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1w
Q29udGV4dCopIGNvbnN0OworCitwcml2YXRlOgorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbV92
YXJpYWJsZTsKKyAgICBGbHVzaGVkQXQgbV9mbHVzaGVkQXQ7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERG
R0F2YWlsYWJpbGl0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9jay5oCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDggKzE0MCw4IEBAIHN0cnVj
dCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICBzdHJ1Y3QgU1NBRGF0YSB7
CiAgICAgICAgIE9wZXJhbmRzPEZsdXNoZWRBdD4gZmx1c2hBdEhlYWQ7CiAgICAgICAgIE9wZXJh
bmRzPEZsdXNoZWRBdD4gZmx1c2hBdFRhaWw7Ci0gICAgICAgIE9wZXJhbmRzPE5vZGUqPiBhdmFp
bGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgIE9wZXJhbmRzPE5vZGUqPiBhdmFpbGFiaWxpdHlBdFRh
aWw7CisgICAgICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5QXRIZWFkOwor
ICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0VGFpbDsKICAgICAg
ICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKICAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2
ZUF0VGFpbDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRI
ZWFkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVy
LmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
aXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIERpc2Fzc2VtYmxlcjo6RGlzYXNzZW1ibGVyKEdyYXBo
JiBncmFwaCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgpCiB7CisgICAgbV9kdW1wQ29udGV4dC5ncmFw
aCA9ICZtX2dyYXBoOwogICAgIG1fbGFiZWxGb3JCbG9ja0luZGV4LnJlc2l6ZShncmFwaC5udW1C
bG9ja3MoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hG
b3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1
c2hGb3JtYXQuY3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsOSBAQCB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRmx1CiAgICAgY2FzZSBGbHVzaGVk
SlNWYWx1ZToKICAgICAgICAgb3V0LnByaW50KCJGbHVzaGVkSlNWYWx1ZSIpOwogICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgorICAgICAgICBvdXQucHJpbnQoIkNv
bmZsaWN0aW5nRmx1c2giKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGbHVzaEZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRmx1c2hGb3JtYXQuaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw4IEBA
IGVudW0gRmx1c2hGb3JtYXQgewogICAgIEZsdXNoZWREb3VibGUsCiAgICAgRmx1c2hlZENlbGws
CiAgICAgRmx1c2hlZEJvb2xlYW4sCi0gICAgRmx1c2hlZEpTVmFsdWUKKyAgICBGbHVzaGVkSlNW
YWx1ZSwKKyAgICBDb25mbGljdGluZ0ZsdXNoCiB9OwogCiBpbmxpbmUgTm9kZUZsYWdzIHJlc3Vs
dEZvcihGbHVzaEZvcm1hdCBmb3JtYXQpCkBAIC01NCw2ICs1NSw3IEBAIGlubGluZSBOb2RlRmxh
Z3MgcmVzdWx0Rm9yKEZsdXNoRm9ybWF0IGYKICAgICBjYXNlIERlYWRGbHVzaDoKICAgICBjYXNl
IEZsdXNoZWRKU1ZhbHVlOgogICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgY2FzZSBDb25mbGlj
dGluZ0ZsdXNoOgogICAgICAgICByZXR1cm4gTm9kZVJlc3VsdEpTOwogICAgIGNhc2UgRmx1c2hl
ZEludDMyOgogICAgICAgICByZXR1cm4gTm9kZVJlc3VsdEludDMyOwpAQCAtNzMsNiArNzUsNyBA
QCBpbmxpbmUgVXNlS2luZCB1c2VLaW5kRm9yKEZsdXNoRm9ybWF0IGZvCiAgICAgc3dpdGNoIChm
b3JtYXQpIHsKICAgICBjYXNlIERlYWRGbHVzaDoKICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgor
ICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKICAgICAgICAgcmV0dXJuIFVudHlwZWRVc2U7CiAg
ICAgY2FzZSBGbHVzaGVkQ2VsbDoKICAgICAgICAgcmV0dXJuIENlbGxVc2U7CkBAIC05Myw2ICs5
Niw3IEBAIGlubGluZSBEYXRhRm9ybWF0IGRhdGFGb3JtYXRGb3IoRmx1c2hGb3IKIHsKICAgICBz
d2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgRGVhZEZsdXNoOgorICAgIGNhc2UgQ29uZmxpY3Rp
bmdGbHVzaDoKICAgICAgICAgcmV0dXJuIERhdGFGb3JtYXREZWFkOwogICAgIGNhc2UgRmx1c2hl
ZEpTVmFsdWU6CiAgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SlM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuY3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lk
IEZsdXNoZWRBdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIGlmIChtX2Zv
cm1hdCA9PSBEZWFkRmx1c2gpCisgICAgaWYgKG1fZm9ybWF0ID09IERlYWRGbHVzaCB8fCBtX2Zv
cm1hdCA9PSBDb25mbGljdGluZ0ZsdXNoKQogICAgICAgICBvdXQucHJpbnQobV9mb3JtYXQpOwog
ICAgIGVsc2UKICAgICAgICAgb3V0LnByaW50KCJyIiwgbV92aXJ0dWFsUmVnaXN0ZXIsICI6Iiwg
bV9mb3JtYXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5o
CShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNo
ZWRBdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMiBAQCBwdWJsaWM6CiAgICAgewog
ICAgIH0KICAgICAKKyAgICBleHBsaWNpdCBGbHVzaGVkQXQoRmx1c2hGb3JtYXQgZm9ybWF0KQor
ICAgICAgICA6IG1fZm9ybWF0KGZvcm1hdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChmb3JtYXQg
PT0gRGVhZEZsdXNoIHx8IGZvcm1hdCA9PSBDb25mbGljdGluZ0ZsdXNoKTsKKyAgICB9CisgICAg
CiAgICAgRmx1c2hlZEF0KEZsdXNoRm9ybWF0IGZvcm1hdCwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlcikKICAgICAgICAgOiBtX2Zvcm1hdChmb3JtYXQpCiAgICAgICAgICwgbV92aXJ0
dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKQpAQCAtNjUsNiArNzEsMTcgQEAgcHVibGljOgog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbHVzaGVkQXQmIG90aGVyKSBjb25zdCB7
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQogICAgIAorICAgIEZsdXNoZWRBdCBtZXJnZShj
b25zdCBGbHVzaGVkQXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcykK
KyAgICAgICAgICAgIHJldHVybiBvdGhlcjsKKyAgICAgICAgaWYgKCFvdGhlcikKKyAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgaWYgKCp0aGlzID09IG90aGVyKQorICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgICAgICByZXR1cm4gRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1
c2gpOworICAgIH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAg
ICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0Owog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9u
IDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTMsNiArMzkzLDcgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVy
KFByaW50U3RyZWFtJgogdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29u
dGV4dCogY29udGV4dCkKIHsKICAgICBEdW1wQ29udGV4dCBteUNvbnRleHQ7CisgICAgbXlDb250
ZXh0LmdyYXBoID0gdGhpczsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIGNvbnRleHQgPSAm
bXlDb250ZXh0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MTYsNiArNDE2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGV4ZWN1dGFibGVGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KICAg
ICAKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCisg
ICAgICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrOworICAgICAgICByZXR1cm4gYmFzZWxp
bmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICB9Cisg
ICAgCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb25zdCBDb2RlT3JpZ2lu
JiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9y
T3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgbV9wcm9maWxlZEJsb2NrKTsK
QEAgLTc3Niw2ICs3ODMsNDEgQEAgcHVibGljOgogICAgIERlc2lyZWRXYXRjaHBvaW50cyYgd2F0
Y2hwb2ludHMoKSB7IHJldHVybiBtX3BsYW4ud2F0Y2hwb2ludHM7IH0KICAgICBEZXNpcmVkU3Ry
dWN0dXJlQ2hhaW5zJiBjaGFpbnMoKSB7IHJldHVybiBtX3BsYW4uY2hhaW5zOyB9CiAgICAgCisg
ICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2Nr
KQorICAgIHsKKyAgICAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBGdWxsQnl0ZWNvZGVMaXZlbmVz
cz46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwor
ICAgICAgICBpZiAoaXRlciAhPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZW5kKCkpCisgICAgICAgICAg
ICByZXR1cm4gKml0ZXItPnZhbHVlOworICAgICAgICAKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PEZ1bGxCeXRlY29kZUxpdmVuZXNzPiBsaXZlbmVzcyA9IHN0ZDo6bWFrZV91bmlxdWU8RnVsbEJ5
dGVjb2RlTGl2ZW5lc3M+KCk7CisgICAgICAgIGNvZGVCbG9jay0+bGl2ZW5lc3NBbmFseXNpcygp
LmNvbXB1dGVGdWxsTGl2ZW5lc3MoKmxpdmVuZXNzKTsKKyAgICAgICAgRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MmIHJlc3VsdCA9ICpsaXZlbmVzczsKKyAgICAgICAgbV9ieXRlY29kZUxpdmVuZXNzLmFk
ZChjb2RlQmxvY2ssIHN0ZDo6bW92ZShsaXZlbmVzcykpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgeworICAgICAgICByZXR1cm4gbGl2
ZW5lc3NGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKSk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAg
ICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3JpZ2luLnN0YWNrT2Zmc2V0KCkgKyBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxp
dmVuZXNzRm9yKGlubGluZUNhbGxGcmFtZSkub3BlcmFuZElzTGl2ZSgKKyAgICAgICAgICAgICAg
ICAgICAgb3BlcmFuZC5vZmZzZXQoKSAtIGNvZGVPcmlnaW4uc3RhY2tPZmZzZXQoKSwgY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKICAgICBWTSYgbV92bTsKICAgICBQbGFuJiBtX3BsYW47
CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKQEAgLTc5Nyw2ICs4MzksNyBAQCBwdWJsaWM6
CiAgICAgU2VnbWVudGVkVmVjdG9yPFN3aXRjaERhdGEsIDQ+IG1fc3dpdGNoRGF0YTsKICAgICBW
ZWN0b3I8SW5saW5lVmFyaWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBP
d25QdHI8SW5saW5lQ2FsbEZyYW1lU2V0PiBtX2lubGluZUNhbGxGcmFtZXM7CisgICAgSGFzaE1h
cDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5
dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKICAgICBIYXNoU2V0PEV4
ZWN1dGFibGVCYXNlKj4gbV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZDsKICAgICBC
aXRWZWN0b3IgbV9sYXp5VmFyczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TW92SGludENvdW50aW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR01vdkhpbnRDb3VudGluZ1BoYXNlX2gKKyNkZWZpbmUgREZH
TW92SGludENvdW50aW5nUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDb21wdXRlcyBWYXJp
YWJsZUFjY2Vzc0RhdGE6Om1fbW92SGludENvdW50LiBWYXJpYWJsZXMgdGhhdCBhcmUgYXNzaWdu
ZWQgb25seSBvbmNlIGNhbiBnZXQKKy8vIHRyZWF0ZWQgc3BlY2lhbGx5LiBGb3IgZXhhbXBsZSwg
T1NSIGV4aXQgaW4gdGhlIEZUTCBjYW4gYWxsb3cgdGhlIGZvcm1hdCB1c2VkIGZvciBzdWNoCisv
LyBub2RlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRpeUF0SGVhZC9UYWlsLiBUaGlzIGlz
IGEgZm9yd2FyZCBmbG93IHR5cGUgaW5mZXJlbmNlCisvLyBvdmVyIE1vdkhpbnRzLiBBdCB0aGUg
dGltZSB3aGVuIE1vdkhpbnRzIGFyZSBpbnRyb2R1Y2VkLCB3ZSB3ZXJlIGNlcnRhaW4gdGhhdCBh
dCBhbnkKKy8vIHBvaW50IGluIHRoZSBwcm9ncmFtIHdoZXJlIGEgYnl0ZWNvZGUgdmFyaWFibGUg
aGFkIGJlZW4gbGl2ZSwgYWxsIG9mIHRoZSBNb3ZIaW50cyB0aGF0CisvLyBmbG93ZWQgaW50byB0
aGF0IHBvaW50IGZvciB0aGF0IHZhcmlhYmxlIGhhZCB0aGUgc2FtZSBGbHVzaEZvcm1hdC4gVGhp
cyBhbmFseXNpcyB3aWxsIHRlbGwKKy8vIHlvdSB3aGF0IHRoYXQgZm9ybWF0IHdvdWxkIGhhdmUg
YmVlbi4KKworYm9vbCBwZXJmb3JtTW92SGludENvdW50aW5nKEdyYXBoJik7CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHTW92SGludENvdW50aW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5jcHAJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDc3
ICs0Nyw4MyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0g
PT0gU1NBKTsKICAgICAgICAgCi0gICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJz
dDsKLSAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0aEZpcnN0
KTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5
QXRIZWFkLmZpbGwoQXZhaWxhYmlsaXR5KCkpOworICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZh
aWxhYmlsaXR5QXRUYWlsLmZpbGwoQXZhaWxhYmlsaXR5KCkpOworICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBkZXB0aEZpcnN0W2ldOwotICAg
ICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmZpbGwoMCk7Ci0gICAgICAg
ICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwuZmlsbCgwKTsKKyAgICAgICAgQmFz
aWNCbG9jayogcm9vdCA9IG1fZ3JhcGguYmxvY2soMCk7CisgICAgICAgIGZvciAodW5zaWduZWQg
YXJndW1lbnQgPSByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5udW1iZXJPZkFyZ3VtZW50
KCk7IGFyZ3VtZW50LS07KSB7CisgICAgICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0
SGVhZC5hcmd1bWVudChhcmd1bWVudCkgPQorICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eTo6
dW5hdmFpbGFibGUoKS53aXRoRmx1c2goCisgICAgICAgICAgICAgICAgICAgIEZsdXNoZWRBdChG
bHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKSk7CiAg
ICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IHJvb3QtPnNzYS0+YXZhaWxh
YmlsaXR5QXRIZWFkLm51bWJlck9mTG9jYWxzKCk7IGxvY2FsLS07KQorICAgICAgICAgICAgcm9v
dC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubG9jYWwobG9jYWwpID0gQXZhaWxhYmlsaXR5Ojp1
bmF2YWlsYWJsZSgpOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gZGVwdGhGaXJzdFtpXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UgZWRpdCBh
dmFpbGFiaWxpdHlBdFRhaWwgaW4tcGxhY2UsIGJ1dCBmaXJzdCBpbml0aWFsaXplIGl0IHRvCi0g
ICAgICAgICAgICAvLyBhdmFpbGFiaWxpdHlBdEhlYWQuCi0gICAgICAgICAgICBPcGVyYW5kczxO
b2RlKj4mIGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbDsKLSAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsK
KyAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgZWZmaWNpZW50IGJ5IHByb2Nlc3Np
bmcgYmxvY2tzIGluIHJldmVyc2UgcG9zdG9yZGVyLgorICAgICAgICBPcGVyYW5kczxGbHVzaEZv
cm1hdD4gYXZhaWxhYmlsaXR5OworICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyAr
K25vZGVJbmRleCkgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9k
ZUluZGV4KTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAg
ICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKLSAg
ICAgICAgICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICAgICAgICAgICAg
ICBhdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAg
ICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSAw
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJndW1lbnQ6IHsKLSAgICAg
ICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2Rl
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eSA9IGJsb2Nr
LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXpl
KCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFNldExv
Y2FsOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3VtZW50OiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2
YWlsYWJpbGl0eSh2YXJpYWJsZSkud2l0aEZsdXNoKHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgR2V0QXJndW1lbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9IEF2YWlsYWJpbGl0eSh2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxp
dHk6OnVuYXZhaWxhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMo
KTsgai0tOykgewotICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2Nr
LT5zdWNjZXNzb3Ioaik7Ci0gICAgICAgICAgICAgICAgT3BlcmFuZHM8Tm9kZSo+JiBzdWNjZXNz
b3JBdmFpbGFiaWxpdHkgPSBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOwotICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IGF2YWlsYWJpbGl0eS5zaXplKCk7IGstLTsp
IHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogbXlOb2RlID0gYXZhaWxhYmlsaXR5W2tdOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIW15Tm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFzdWNjZXNzb3ItPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhteU5vZGUpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBtYXkgb3ZlcndyaXRlIGF2YWlsYWJpbGl0eSB3
aXRoIGEgYm9ndXMgbm9kZQotICAgICAgICAgICAgICAgICAgICAvLyBhdCBtZXJnZSBwb2ludHMu
IFRoaXMgaXMgZmluZSwgc2luY2UgbWVyZ2UgcG9pbnRzIGhhdmUKLSAgICAgICAgICAgICAgICAg
ICAgLy8gTW92SGludChQaGkpJ3MgdG8gd29yayBhcm91bmQgdGhpcy4gVGhlIG91dGNvbWUgb2Yg
dGhpcyBpcwotICAgICAgICAgICAgICAgICAgICAvLyB5b3UgbWlnaHQgaGF2ZSBhIHByb2dyYW0g
aW4gd2hpY2ggYSBub2RlIGhhcHBlbnMgdG8gcmVtYWluCi0gICAgICAgICAgICAgICAgICAgIC8v
IGxpdmUgaW50byBzb21lIGJsb2NrIEIsIGFuZCBzZXBhcmF0ZWx5IChkdWUgdG8gY29weQotICAg
ICAgICAgICAgICAgICAgICAvLyBwcm9wYWdhdGlvbikganVzdCBvbmUgb2YgdGhlIHByZWRlY2Vz
c29ycyBvZiBCIGlzc3VlZCBhCi0gICAgICAgICAgICAgICAgICAgIC8vIE1vdkhpbnQgcHV0dGlu
ZyB0aGF0IG5vZGUgaW50byBzb21lIGxvY2FsLiBUaGVuIGluIEIgd2UgbWlnaHQKLSAgICAgICAg
ICAgICAgICAgICAgLy8gdGhpbmsgdGhhdCB0aGF0IG5vZGUgaXMgYSB2YWxpZCB2YWx1ZSBmb3Ig
dGhhdCBsb2NhbC4gT2YKLSAgICAgICAgICAgICAgICAgICAgLy8gY291cnNlIGlmIHRoYXQgbG9j
YWwgd2FzIGFjdHVhbGx5IGxpdmUgaW4gQiwgQiB3b3VsZCBoYXZlIGEKLSAgICAgICAgICAgICAg
ICAgICAgLy8gUGhpIGZvciBpdC4gU28gZXNzZW50aWFsbHkgd2UnbGwgaGF2ZSBPU1IgZXhpdCBk
cm9wcGluZyB0aGlzCi0gICAgICAgICAgICAgICAgICAgIC8vIG5vZGUncyB2YWx1ZSBpbnRvIHRo
ZSBsb2NhbCB3aGVuIHdlIG90aGVyd2lzZSAoaW4gdGhlIERGRykKLSAgICAgICAgICAgICAgICAg
ICAgLy8gd291bGQgaGF2ZSBkcm9wcGVkIHVuZGVmaW5lZCBpbnRvIHRoZSBsb2NhbC4gVGhpcyBz
ZWVtcwotICAgICAgICAgICAgICAgICAgICAvLyBoYXJtbGVzcy4KLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NvckF2YWlsYWJpbGl0eVtrXSA9IG15Tm9k
ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5ID09
IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZh
aWxhYmlsaXR5QXRUYWlsID0gYXZhaWxhYmlsaXR5OworICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
c3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0t
OykgeworICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+
c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gYXZhaWxhYmlsaXR5LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXSA9IGF2YWlsYWJpbGl0
eVtpXS5tZXJnZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+
YXZhaWxhYmlsaXR5QXRIZWFkW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChjaGFu
Z2VkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsOSArMzYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFz
cyBHcmFwaDsKIAotLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5hdmFpbGFiaWx0aXlBdEhl
YWQvVGFpbC4gVGhpcyByZWxpZXMgb24gbGl2ZW5lc3MKLS8vIGFuYWx5c2lzIHBoYXNlIGhhdmlu
ZyBiZWVuIHJ1biBhbmQgdGhlIGdyYXBoIG5vdCBoYXZpbmcgYmVlbiB0cmFuc2Zvcm1lZAotLy8g
YWZ0ZXIgdGhhdC4KKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+YXZhaWxhYmlsdGl5QXRI
ZWFkL1RhaWwuIFRoaXMgaXMgYSBmb3J3YXJkIGZsb3cgdHlwZSBpbmZlcmVuY2UKKy8vIG92ZXIg
TW92SGludHMuIEF0IHRoZSB0aW1lIHdoZW4gTW92SGludHMgYXJlIGludHJvZHVjZWQsIHdlIHdl
cmUgY2VydGFpbiB0aGF0IGF0IGFueQorLy8gcG9pbnQgaW4gdGhlIHByb2dyYW0gd2hlcmUgYSBi
eXRlY29kZSB2YXJpYWJsZSBoYWQgYmVlbiBsaXZlLCBhbGwgb2YgdGhlIE1vdkhpbnRzIHRoYXQK
Ky8vIGZsb3dlZCBpbnRvIHRoYXQgcG9pbnQgZm9yIHRoYXQgdmFyaWFibGUgaGFkIHRoZSBzYW1l
IEZsdXNoRm9ybWF0LiBUaGlzIGFuYWx5c2lzIHdpbGwgdGVsbAorLy8geW91IHdoYXQgdGhhdCBm
b3JtYXQgd291bGQgaGF2ZSBiZWVuLgogCiBib29sIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFs
eXNpcyhHcmFwaCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVl
U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1
ZVNvdXJjZS5oCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhbHVlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICAgICBjYXNlIERlYWRG
bHVzaDoKKyAgICAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgogICAgICAgICAgICAgcmV0dXJu
IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6
CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ssIHdoZXJlKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsOCBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9pc1Byb2ZpdGFibGVUb1VuYm94KGZhbHNlKQogICAgICAgICAs
IG1faXNMb2FkZWRGcm9tKGZhbHNlKQogICAgICAgICAsIG1fZG91YmxlRm9ybWF0U3RhdGUoRW1w
dHlEb3VibGVGb3JtYXRTdGF0ZSkKKyAgICAgICAgLCBtX21vdkhpbnRDb3VudCgwKQorICAgICAg
ICAsIG1fc2luZ2xlTW92SGludCgwKQogICAgIHsKICAgICAgICAgY2xlYXJWb3RlcygpOwogICAg
IH0KQEAgLTcyLDYgKzc0LDggQEAgcHVibGljOgogICAgICAgICAsIG1fY2hlY2tBcnJheUhvaXN0
aW5nRmFpbGVkKGZhbHNlKQogICAgICAgICAsIG1faXNQcm9maXRhYmxlVG9VbmJveChmYWxzZSkK
ICAgICAgICAgLCBtX2RvdWJsZUZvcm1hdFN0YXRlKEVtcHR5RG91YmxlRm9ybWF0U3RhdGUpCisg
ICAgICAgICwgbV9tb3ZIaW50Q291bnQoMCkKKyAgICAgICAgLCBtX3NpbmdsZU1vdkhpbnQoMCkK
ICAgICB7CiAgICAgICAgIGNsZWFyVm90ZXMoKTsKICAgICB9CkBAIC0zNTIsNiArMzU2LDE2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEZsdXNoZWRBdChmbHVzaEZvcm1hdCgpLCBtYWNoaW5l
TG9jYWwoKSk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaXNTaW5nbHlBc3NpZ25lZCgpIGNvbnN0
IHsgcmV0dXJuIG1fbW92SGludENvdW50ID09IDE7IH0KKyAgICB2b2lkIGNvdW50TW92SGludChO
b2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX21vdkhpbnRDb3VudCsrKQorICAgICAg
ICAgICAgbV9zaW5nbGVNb3ZIaW50ID0gbm9kZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9zaW5nbGVNb3ZIaW50ID0gMDsKKyAgICB9CisgICAgTm9kZSogc2luZ2xlTW92SGludCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2luZ2xlTW92SGludDsgfQorICAgIAogcHJpdmF0ZToKICAgICAvLyBU
aGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNpZW50LCBzaW5jZSBhbnl0aGluZyB3ZSdyZSB1
bmlmaWVkIHdpdGgKICAgICAvLyB3aWxsIGhhdmUgdGhlIHNhbWUgb3BlcmFuZCBhbmQgc2hvdWxk
IGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0CkBAIC0zNzQsNiArMzg4LDkgQEAgcHJpdmF0
ZToKIAogICAgIGZsb2F0IG1fdm90ZXNbMl07IC8vIFVzZWQgcHJpbWFyaWx5IGZvciBkb3VibGUg
dm90aW5nIGJ1dCBtYXkgYmUgcmV1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4KICAgICBEb3VibGVG
b3JtYXRTdGF0ZSBtX2RvdWJsZUZvcm1hdFN0YXRlOworICAgIAorICAgIHVuc2lnbmVkIG1fbW92
SGludENvdW50OworICAgIE5vZGUqIG1fc2luZ2xlTW92SGludDsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY3LDIx
ICs1NjcsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2Fk
NjQoYWRkcmVzc0ZvcihvcGVyYW5kKSk7CiAKICAgICAgICAgc3dpdGNoICh1c2VLaW5kRm9yKHZh
cmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkgewotICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAg
ICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG1fbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7Ci0g
ICAgICAgICAgICBzZXRJbnQzMih1bmJveEludDMyKGpzVmFsdWUpKTsKKyAgICAgICAgICAgIExW
YWx1ZSBpbnRWYWx1ZSA9IHVuYm94SW50MzIoanNWYWx1ZSk7CisgICAgICAgICAgICBzZXRJbnQz
MihpbnRWYWx1ZSk7CisgICAgICAgICAgICBtX291dC5zZXQoaW50VmFsdWUsIG1faW50MzJMb2Nh
bHMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgfQorICAgICAgICBjYXNlIENlbGxVc2U6IHsKICAg
ICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVl
KSwgbV9ub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOwogICAgICAgICAgICAgc2V0SlNWYWx1ZShq
c1ZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0LnNldChqc1ZhbHVlLCBtX2ludDY0TG9jYWxzLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEJvb2xlYW5Vc2U6CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBCb29sZWFuVXNlOiB7CiAg
ICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1
ZSksIG1fbm9kZSwgaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKLSAgICAgICAgICAgIHNldEJvb2xl
YW4odW5ib3hCb29sZWFuKGpzVmFsdWUpKTsKKyAgICAgICAgICAgIExWYWx1ZSBib29sZWFuVmFs
dWUgPSB1bmJveEJvb2xlYW4oanNWYWx1ZSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGJvb2xl
YW5WYWx1ZSk7CisgICAgICAgICAgICBtX291dC5zZXQoYm9vbGVhblZhbHVlLCBtX2Jvb2xlYW5M
b2NhbHMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgfQorICAgICAgICBjYXNlIFVudHlwZWRV
c2U6IHsKICAgICAgICAgICAgIHNldEpTVmFsdWUoanNWYWx1ZSk7CisgICAgICAgICAgICBtX291
dC5zZXQoanNWYWx1ZSwgbV9pbnQ2NExvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNjEyLDQzICs2MjIsMzggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVTZXRM
b2NhbCgpCiAgICAgewotICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOworICAgICAgICBv
YnNlcnZlTW92SGludCgpOwogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIHN3aXRjaCAo
dmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpIHsKICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZTog
ewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUt
Pm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCB2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6IHsK
ICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxl
LT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2ssIHZhcmlhYmxl
LT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOiB7
CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBheWxvYWRGb3IodmFyaWFibGUtPm1h
Y2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrLCB2YXJpYWJsZS0+bWFj
aGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjogewogICAg
ICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5tYWNoaW5l
TG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQ1MkluSlNTdGFjaywgdmFyaWFibGUtPm1hY2hpbmVM
b2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDogewogICAgICAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAg
IG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgp
KSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkp
OwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOiB7CkBAIC02NTYsMzIgKzY2
MSwzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKICAgICAgICAgICAg
ICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
biksCiAgICAgICAgICAgICAgICAgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkp
KTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAgICBjYXNlIENvbmZsaWN0
aW5nRmx1c2g6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBlbWl0TW92SGludCgpOworICAgICAgICAKKyAgICAgICAgLy8gRG8gdGhpcyBsYXN0
IHNvIHRoYXQgd2UgZG9uJ3QgbGVhdmUgbV92YWx1ZVNvdXJjZXMgY2xhaW1pbmcgdGhhdCB3ZSBo
YXZlIHRvCisgICAgICAgIC8vIGxvYWQgdGhpcyB2YXJpYWJsZSdzIHZhbHVlIGZyb20gdGhlIHNo
YWRvdyBsb2NhbHMuIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uLgorICAgICAgICBtX3ZhbHVlU291
cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAgICAgICBWYWx1ZVNvdXJj
ZTo6Zmx1c2hlZEF0KHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgY29tcGlsZU1vdkhpbnQoKQogICAgIHsKLSAgICAgICAgb2JzZXJ2ZU1vdkhpbnQobV9ub2Rl
KTsKKyAgICAgICAgZW1pdE1vdkhpbnQoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
Wm9tYmllSGludCgpCiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGEgPSBt
X25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVy
YW5kKGRhdGEtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKKyAgICAgICAg
bV92YWx1ZVNvdXJjZXMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKCk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU1vdkhpbnRBbmRDaGVjaygpCiAgICAgewotICAg
ICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOwotICAgICAgICBzcGVjdWxhdGUobV9ub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIG9ic2VydmVNb3ZIaW50KCk7CisgICAgICAgIGVtaXRNb3ZIaW50
KCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVBoYW50b20oKQpAQCAtMzg0OSwxNyAr
Mzg1OSw0OCBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJs
b2NrKCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVTb3VyY2VzLnNp
emUoKTsgaS0tOykgewotICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gbV9oaWdoQmxvY2st
PnNzYS0+Zmx1c2hBdEhlYWRbaV07CisgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmls
dGl5ID0gbV9oaWdoQmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ldOworICAgICAgICAg
ICAgRmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNoZWRBdCgpOwogICAgICAgICAg
ICAgc3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgewotICAgICAgICAgICAgY2FzZSBEZWFkRmx1c2g6
IHsKLSAgICAgICAgICAgICAgICAvLyBNdXN0IGNvbnNpZGVyIGF2YWlsYWJsZSBub2RlcyBpbnN0
ZWFkLgotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hCbG9jay0+c3NhLT5hdmFp
bGFiaWxpdHlBdEhlYWRbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlKSB7CisgICAgICAg
ICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDog
eworICAgICAgICAgICAgICAgIC8vIE11c3QgY29uc2lkZXIgYXZhaWxhYmxlIHZhcmlhYmxlcyBp
bnN0ZWFkLgorICAgICAgICAgICAgICAgIGlmICghYXZhaWxhYmlsaXR5Lmhhc1ZhcmlhYmxlKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShT
b3VyY2VJc0RlYWQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0g
PSBWYWx1ZVNvdXJjZShub2RlKTsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gYXZhaWxhYmlsaXR5LnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgaWYg
KE5vZGUqIG5vZGUgPSB2YXJpYWJsZS0+c2luZ2xlTW92SGludCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgT1NSIGV4aXQgc2hvdWxkIGp1c3QgdHJ5IHRv
IGxhemlseSBmaWd1cmUgb3V0IGhvdworICAgICAgICAgICAgICAgICAgICAvLyB0byByZWFkIGFu
ZCBkZWNvZGUgd2hhdGV2ZXIgbm9kZSB0aGlzIHZhcmlhYmxlIG9yaWdpbmF0ZWQgZnJvbS4KKyAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZXMobm9kZSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxl
IGlzIG11bHRpcGx5LWFzc2lnbmVkIGFuZCB3ZSB3aWxsIGVuc3VyZSB0aGF0CisgICAgICAgICAg
ICAgICAgLy8gaW4gZWFjaCBwbGFjZSB3aGVyZSB3ZSBhc3NpZ24gaXQsIHdlIHdpbGwgdXNlIHRo
ZSBzYW1lIHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUt
PmZsdXNoRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgor
ICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgICAgICAgICAgICAgIG1f
dmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkxvY2FsKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKERvdWJsZUlu
TG9jYWwpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBW
YWx1ZVNvdXJjZShJbnQzMkluTG9jYWwpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoKKyAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQ1MkluTG9jYWwpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEJvb2xlYW5J
bkxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtNDEwNywx
NCArNDE0OCw2NyBAQCBwcml2YXRlOgogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBvYnNlcnZlTW92SGludChOb2RlKiBub2RlKQorICAgIC8v
IE5vdGlmaWVzIG91ciBsb2NhbCB2YWx1ZSBzb3VyY2VzIHRoYXQgdGhlIGdpdmVuIHZhcmlhYmxl
IGlzIGF2YWlsYWJsZSB2aWEgdGhlIGdpdmVuCisgICAgLy8gbm9kZS4KKyAgICB2b2lkIG9ic2Vy
dmVNb3ZIaW50KCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChub2RlLT5jb250YWluc01vdkhpbnQo
KSk7Ci0gICAgICAgIEFTU0VSVChub2RlLT5vcCgpICE9IFpvbWJpZUhpbnQpOworICAgICAgICBB
U1NFUlQobV9ub2RlLT5jb250YWluc01vdkhpbnQoKSk7CisgICAgICAgIEFTU0VSVChtX25vZGUt
Pm9wKCkgIT0gWm9tYmllSGludCk7CiAgICAgICAgIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA9IG5vZGUtPmxvY2FsKCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
ID0gbV9ub2RlLT5sb2NhbCgpOwogICAgICAgICAKLSAgICAgICAgbV92YWx1ZVNvdXJjZXMub3Bl
cmFuZChvcGVyYW5kKSA9IFZhbHVlU291cmNlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAg
ICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQob3BlcmFuZCkgPSBWYWx1ZVNvdXJjZShtX25vZGUt
PmNoaWxkMSgpLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIC8vIEZvciBzaW5nbHktYXNzaWdu
ZWQgdmFyaWFibGVzLCB0aGlzIGp1c3Qgb2JzZXJ2ZXMgdGhhdCB0aGUgdmFyaWFibGUgaXMgYXZh
aWxhYmxlIHZpYQorICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBub2RlLiBGb3IgbXVsdGlwbHktYXNz
aWduZWQgdmFyaWFibGVzLCB0aGlzIHN0b3JlcyB0aGUgdmFyaWFibGVzIHZhbHVlCisgICAgLy8g
aW50byBvdXIgYnl0ZWNvZGUgc2hhZG93IGxvY2FscyBhbmQgbm90ZXMgdGhpcyBpbiBtX3ZhbHVl
U291cmNlcy4KKyAgICB2b2lkIGVtaXRNb3ZIaW50KCkKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X25vZGUtPmNvbnRhaW5zTW92SGludCgpKTsKKyAgICAgICAgQVNTRVJUKG1fbm9kZS0+b3AoKSAh
PSBab21iaWVIaW50KTsKKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0
YSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIGlmIChkYXRhLT5pc1Np
bmdseUFzc2lnbmVkKCkpIHsKKyAgICAgICAgICAgIG9ic2VydmVNb3ZIaW50KCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoZGF0YS0+
Zmx1c2hGb3JtYXQoKSkgeworICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6CisgICAgICAgICAg
ICBtX291dC5zZXQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2RvdWJsZUxvY2Fscy5v
cGVyYW5kKGRhdGEtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJh
bmQoZGF0YS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkxvY2FsKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAg
ICAgICAgICAgbV9vdXQuc2V0KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2ludDMyTG9j
YWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMu
b3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDMySW5Mb2NhbCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoK
KyAgICAgICAgICAgIG1fb3V0LnNldChsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKSwgbV9pbnQ2
NExvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQ1MkluTG9jYWwpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkQ2Vs
bDoKKyAgICAgICAgICAgIG1fb3V0LnNldChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2lu
dDY0TG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbV92YWx1ZVNv
dXJjZXMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRC
b29sZWFuOgorICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEo
KSksIG1fYm9vbGVhbkxvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpKTsKKyAgICAgICAgICAg
IG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShCb29s
ZWFuSW5Mb2NhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDEoKSksIG1faW50NjRMb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSk7Cisg
ICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpID0gVmFsdWVT
b3VyY2UoVmFsdWVJbkxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBz
ZXRJbnQzMihOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCkBAIC00Mjc0LDYgKzQzNjgsMTIgQEAg
cHJpdmF0ZToKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2RvdWJsZVZh
bHVlczsKICAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7CiAgICAgCisgICAgLy8gQnl0ZWNvZGUg
c2hhZG93IGxvY2Fscy4KKyAgICBPcGVyYW5kczxMVmFsdWU+IG1fYm9vbGVhbkxvY2FsczsKKyAg
ICBPcGVyYW5kczxMVmFsdWU+IG1faW50MzJMb2NhbHM7CisgICAgT3BlcmFuZHM8TFZhbHVlPiBt
X2ludDY0TG9jYWxzOworICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9kb3VibGVMb2NhbHM7CisgICAg
CiAgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3BoaXM7CiAgICAgCiAgICAgT3BlcmFuZHM8
VmFsdWVTb3VyY2U+IG1fdmFsdWVTb3VyY2VzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiwyMSBAQCB2b2lkIFZhbHVlU291cmNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAg
ICAgY2FzZSBTb3VyY2VOb3RTZXQ6CiAgICAgICAgIG91dC5wcmludCgiU291cmNlTm90U2V0Iik7
CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlSW5Mb2NhbDoKKyAgICAgICAgb3V0LnBy
aW50KCJWYWx1ZUluTG9jYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50MzJJbkxv
Y2FsOgorICAgICAgICBvdXQucHJpbnQoIkludDMySW5Mb2NhbCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbnQ1MkluTG9jYWw6CisgICAgICAgIG91dC5wcmludCgiSW50NTJJbkxvY2Fs
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJvb2xlYW5JbkxvY2FsOgorICAgICAgICBv
dXQucHJpbnQoIkJvb2xlYW5JbkxvY2FsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERv
dWJsZUluTG9jYWw6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlSW5Mb2NhbCIpOworICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBWYWx1ZUluSlNTdGFjazoKICAgICAgICAgb3V0LnByaW50KCJW
YWx1ZUluSlNTdGFjazoiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHJldmlzaW9u
IDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgewogCiBlbnVtIFZhbHVlU291cmNlS2luZCB7CiAgICAgU291cmNlTm90U2V0LAorICAg
IFZhbHVlSW5Mb2NhbCwKKyAgICBJbnQzMkluTG9jYWwsCisgICAgSW50NTJJbkxvY2FsLAorICAg
IEJvb2xlYW5JbkxvY2FsLAorICAgIERvdWJsZUluTG9jYWwsCiAgICAgVmFsdWVJbkpTU3RhY2ss
CiAgICAgSW50MzJJbkpTU3RhY2ssCiAgICAgSW50NTJJbkpTU3RhY2ssCkBAIC01Niw3ICs2MSw3
IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQga2lu
ZCkKICAgICAgICAgOiBtX2tpbmQoa2luZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQg
PT0gU291cmNlSXNEZWFkKTsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBTb3VyY2VJc0RlYWQg
fHwgbV9raW5kID09IFZhbHVlSW5Mb2NhbCB8fCBtX2tpbmQgPT0gSW50MzJJbkxvY2FsIHx8IG1f
a2luZCA9PSBJbnQ1MkluTG9jYWwgfHwgbV9raW5kID09IEJvb2xlYW5JbkxvY2FsIHx8IG1fa2lu
ZCA9PSBEb3VibGVJbkxvY2FsKTsKICAgICB9CiAgICAgCiAgICAgZXhwbGljaXQgVmFsdWVTb3Vy
Y2UoREZHOjpOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RHVtcENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0R1bXBDb250ZXh0LmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRHVtcENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsy
OCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotRHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KCkg
eyB9CitEdW1wQ29udGV4dDo6RHVtcENvbnRleHQoKQorICAgIDogbV9ncmFwaCgwKQoreworfQor
CiBEdW1wQ29udGV4dDo6fkR1bXBDb250ZXh0KCkgeyB9CiAKIGJvb2wgRHVtcENvbnRleHQ6Omlz
RW1wdHkoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRHVtcENv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EdW1w
Q29udGV4dC5oCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EdW1wQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCituYW1lc3BhY2UgREZHIHsgY2xhc3MgR3JhcGg7IH0KKwogc3RydWN0
IER1bXBDb250ZXh0IHsKICAgICBEdW1wQ29udGV4dCgpOwogICAgIH5EdW1wQ29udGV4dCgpOwpA
QCAtNDEsNiArNDMsNyBAQCBzdHJ1Y3QgRHVtcENvbnRleHQgewogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCA9ICIiKSBjb25zdDsKICAgICAKICAgICBTdHJp
bmdIYXNoRHVtcENvbnRleHQ8U3RydWN0dXJlPiBzdHJ1Y3R1cmVzOworICAgIERGRzo6R3JhcGgq
IGdyYXBoOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ2OSwxMyArNDY5LDEzIEBAIHB1YmxpYzoKICAgICBib29sIHVzZXNOb25TdHJpY3RFdmFsKCkg
eyByZXR1cm4gbV91c2VzTm9uU3RyaWN0RXZhbDsgfQogICAgIHZvaWQgc2V0VXNlc05vblN0cmlj
dEV2YWwoYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCkgeyBtX3VzZXNOb25TdHJpY3RFdmFsID0gdXNl
c05vblN0cmljdEV2YWw7IH0KIAotICAgIGludCBjYXB0dXJlU3RhcnQoKSB7IHJldHVybiBtX2Nh
cHR1cmVTdGFydDsgfQorICAgIGludCBjYXB0dXJlU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2Nh
cHR1cmVTdGFydDsgfQogICAgIHZvaWQgc2V0Q2FwdHVyZVN0YXJ0KGludCBjYXB0dXJlU3RhcnQp
IHsgbV9jYXB0dXJlU3RhcnQgPSBjYXB0dXJlU3RhcnQ7IH0KIAotICAgIGludCBjYXB0dXJlRW5k
KCkgeyByZXR1cm4gbV9jYXB0dXJlRW5kOyB9CisgICAgaW50IGNhcHR1cmVFbmQoKSBjb25zdCB7
IHJldHVybiBtX2NhcHR1cmVFbmQ7IH0KICAgICB2b2lkIHNldENhcHR1cmVFbmQoaW50IGNhcHR1
cmVFbmQpIHsgbV9jYXB0dXJlRW5kID0gY2FwdHVyZUVuZDsgfQogCi0gICAgaW50IGNhcHR1cmVD
b3VudCgpIHsgcmV0dXJuIC0obV9jYXB0dXJlRW5kIC0gbV9jYXB0dXJlU3RhcnQpOyB9CisgICAg
aW50IGNhcHR1cmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIC0obV9jYXB0dXJlRW5kIC0gbV9jYXB0
dXJlU3RhcnQpOyB9CiAKICAgICBpbnQgcGFyYW1ldGVyQ291bnQoKSB7IHJldHVybiBtX3BhcmFt
ZXRlckNvdW50SW5jbHVkaW5nVGhpcyAtIDE7IH0KICAgICBpbnQgcGFyYW1ldGVyQ291bnRJbmNs
dWRpbmdUaGlzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216966</attachid>
            <date>2013-11-14 12:17:25 -0800</date>
            <delta_ts>2013-11-14 13:21:38 -0800</delta_ts>
            <desc>I wrote the code</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>78483</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTkxNDEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjYwLDYgKzI2MCwxMiBAQAogCQkwRjYzOTQ3ODE1RENF
MzRCMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdD
IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYzOTQ4NDE1RTQ4MTE4MDA2QTU5N0MgLyogREZH
QXJyYXlNb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3BwICovOyB9Owog
CQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5
N0MgLyogREZHQXJyYXlNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXNJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY2NjZFQzExODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVC
RjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjY2NkVDNjE4MzU2NzJCMDBE
MDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUMyMTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFi
aWxpdHkuY3BwICovOyB9OworCQkwRjY2NkVDNzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxh
YmlsaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2NjZFQzgxODM1NjcyQjAw
RDAxN0YxIC8qIERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUM0MTgzNTY3MkIwMEQwMTdGMSAvKiBE
RkdNb3ZIaW50Q291bnRpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGNjY2RUM5MTgzNTY3MkIwMEQw
MTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQzUxODM1NjcyQjAwRDAxN0YxIC8qIERGR01v
dkhpbnRDb3VudGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZF
MTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkMxNERGM0YxNjAwQjdC
MkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3MDI1QTkxNzE0QjBGQTAw
MzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBNzE3MTRCMEY4MDAzODJDMEUgLyog
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCAqLzsgfTsKQEAgLTE1NDcsNiArMTU1MywxMiBA
QAogCQkwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzOTQ4MTE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJy
YXlNb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FycmF5
TW9kZS5jcHA7IHBhdGggPSBkZmcvREZHQXJyYXlNb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY2Mzk0ODIxNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheU1vZGUuaDsgcGF0aCA9IGRm
Zy9ERkdBcnJheU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQkUx
ODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2NkVCRjE4MzU2NkY5MDBE
MDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2NjZFQzIxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBdmFpbGFiaWxpdHkuY3BwOyBw
YXRoID0gZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjY2RUMzMTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQXZhaWxhYmlsaXR5Lmg7IHBhdGggPSBkZmcv
REZHQXZhaWxhYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjY2RUM0
MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5jcHA7
IHBhdGggPSBkZmcvREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjY2NkVDNTE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50
aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTW92SGludENv
dW50aW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZH
QWRqYWNlbmN5TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGph
Y2VuY3lMaXN0Lmg7IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZH
RWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcwMjVBNzE3MTRCMEY4MDAz
ODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHBhdGggPSBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTM3MzksNiArMzc1MSw4IEBACiAJCQkJMEY2Mzk0ODIxNUU0ODExNDAwNkE1OTdDIC8q
IERGR0FycmF5TW9kZS5oICovLAogCQkJCUE3RDlBMjhGMTdBMEJDNzQwMEVFMjYxOCAvKiBERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmNwcCAqLywKIAkJCQlBN0Q5QTI5MDE3QTBCQzc0MDBFRTI2MTgg
LyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oICovLAorCQkJCTBGNjY2RUMyMTgzNTY3MkIwMEQw
MTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwICovLAorCQkJCTBGNjY2RUMzMTgzNTY3MkIwMEQw
MTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuaCAqLywKIAkJCQkwRjcxNENBMTE2RUE5MkVEMDBGM0VC
RUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEY3MTRDQTIx
NkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCAqLywKIAkJ
CQlBN0Q4OUNFMzE3QTBCOENDMDA3NzNBRDggLyogREZHQmFzaWNCbG9jay5jcHAgKi8sCkBAIC0z
ODQ5LDYgKzM4NjMsOCBAQAogCQkJCTBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5p
ZmllZElELmggKi8sCiAJCQkJMEYyQkRDNEMxNTIyODE4MzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVk
Tm9kZS5jcHAgKi8sCiAJCQkJMEYyQkRDM0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVk
Tm9kZS5oICovLAorCQkJCTBGNjY2RUM0MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291
bnRpbmdQaGFzZS5jcHAgKi8sCisJCQkJMEY2NjZFQzUxODM1NjcyQjAwRDAxN0YxIC8qIERGR01v
dkhpbnRDb3VudGluZ1BoYXNlLmggKi8sCiAJCQkJQTczNzgxMEExNzk5RUEyRTAwODE3NTMzIC8q
IERGR05hdHVyYWxMb29wcy5jcHAgKi8sCiAJCQkJQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8q
IERGR05hdHVyYWxMb29wcy5oICovLAogCQkJCTBGQjRCNTFFMTZCNjI3NzIwMDNGNjk2QiAvKiBE
RkdOb2RlLmNwcCAqLywKQEAgLTQwMzEsMTUgKzQwNDcsMTYgQEAKIAkJOTY5QTA3OEYwRUQxRDNB
RTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKLQkJCQlDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Js
b2NrLmNwcCAqLywKLQkJCQlDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNp
Y0Jsb2NrLmggKi8sCi0JCQkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcy5jcHAgKi8sCi0JCQkJQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oICovLAogCQkJCTBGODMzNUI0MTYzOUMxRTMwMDE0NDNC
NSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLywKIAkJCQkwRjgzMzVCNTE2MzlDMUUz
MDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovLAogCQkJCTBGNjM5NDUxMTVE
MDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3BwICovLAogCQkJCTBGNjM5NDUyMTVEMDcw
NTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCAqLywKKwkJCQlDMkZDQUUwQzE3QTlDMjRFMDAz
NEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAqLywKKwkJCQlDMkZDQUUwRDE3QTlDMjRF
MDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEYyMUMyN0UxNEJFQUE4
MDAwQURDNjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCAqLywKKwkJCQlDMkZDQUUwRTE3QTlD
MjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLywKKwkJCQlDMkZD
QUUwRjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8sCisJ
CQkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lu
bGluZXMuaCAqLywKIAkJCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmgg
Ki8sCiAJCQkJMEYwQjgzQUUxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgKi8s
CiAJCQkJMEYwQjgzQUYxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oICovLApAQCAt
NDA2OCw2ICs0MDg1LDcgQEAKIAkJCQkwRkIxMDU4MjE2NzU0ODBDMDBGOEFCNkUgLyogRXhpdEtp
bmQuY3BwICovLAogCQkJCTBGQjEwNTgzMTY3NTQ4MEMwMEY4QUI2RSAvKiBFeGl0S2luZC5oICov
LAogCQkJCTBGMEI4M0FBMTRCQ0Y1QjkwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZvLmgg
Ki8sCisJCQkJMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNz
LmggKi8sCiAJCQkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3Bw
ICovLAogCQkJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmggKi8s
CiAJCQkJMEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmggKi8sCkBAIC00
NDU1LDYgKzQ0NzMsNyBAQAogCQkJCTJBNkY0NjI2MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3Bl
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEY5NzQ0NzEzOEM4NTNFMDBEQTFDNjcgLyog
SGVhcFJvb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAy
QUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjY2RUMxMTgz
NTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY0NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDBGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTQ1NjQsNiArNDU4Myw3IEBACiAJCQkJN0MxODRFMUYxN0JF
RTIyRTAwN0NCNjNBIC8qIEpTUHJvbWlzZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0MzQkEyOTUxN0MwMzk1NjAwNzJEREM5IC8qIEpTUHJvbWlzZVJlc29sdmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY2NjZFQzkxODM1NjcyQjAwRDAxN0YxIC8qIERGR01vdkhpbnRD
b3VudGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzNCQTI5NzE3QzAzOTU2MDA3MkRE
QzkgLyogSlNQcm9taXNlUmVzb2x2ZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0MzQkEyOTkxN0MwMzk1NjAwNzJEREM5IC8qIEpTUHJvbWlzZVJlc29sdmVyUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2MTM2RTFBMDA5RjE3RDAgLyogSlNQcm94eS5o
IGluIEhlYWRlcnMgKi8sCkBAIC00Njk2LDYgKzQ3MTYsNyBAQAogCQkJCTk1Q0Q0NTc3MEUxQzRG
REQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QjkxNjZBRDM2MDAwMEY1
QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjEzOTEyQTE2
NzcxQzM2MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCkBAIC00ODA1LDYgKzQ4MjYsNyBAQAogCQkJCUE3QThBRjNGMTdBREI1
RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0MDE3
QURCNUYzMDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNUYwOENGMTQ2Qzc2MzMwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjY2NkVDNzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmls
aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0I2MDE4MjE2MzlGRDJBMDAzNzJCQTMgLyogVW5s
aW5rZWRDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkU4OTJDMTZEMDI4QUQwMDlF
NEZEMiAvKiBVbnVzZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2
RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTUyNjgsNiAr
NTI5MCw3IEBACiAJCQkJMTQ3RjM5QzAxMDdFQzM3NjAwNDI3QTQ4IC8qIEFycmF5UHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTQwMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3Nl
bWJseUhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4MTZFMUIxNTRDQzU2QzAwQjgw
NTRDIC8qIEJsb2NrQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjY2RUM4MTgz
NTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI4MDg2MzEwN0VDMTFBMDAxM0U3QjIgLyogQm9vbGVhbkNvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODY0MTA3RUMxMUEwMDEzRTdCMiAvKiBCb29sZWFu
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODY1MTA3RUMxMUEwMDEzRTdCMiAv
KiBCb29sZWFuUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTY5MCw2ICs1NzEzLDcg
QEAKIAkJCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRkVEOTRGMkUxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjMwMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRv
Z01hYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY2NkVDNjE4MzU2NzJCMDBEMDE3RjEgLyog
REZHQXZhaWxhYmlsaXR5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI1MTU4NTNDRTAw
MDRBNEU3RCAvKiBXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQ0Y3Mzc3MTcx
Q0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RTg0RjlFMTRF
RTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5o
CShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKIAotdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVk
LCBGYXN0Qml0VmVjdG9yLCBXVEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPiA+IEJ5dGVjb2RlVG9CaXRtYXBNYXA7Ci0KIGNs
YXNzIEJ5dGVjb2RlQmFzaWNCbG9jayA6IHB1YmxpYyBSZWZDb3VudGVkPEJ5dGVjb2RlQmFzaWNC
bG9jaz4gewogcHVibGljOgogICAgIGVudW0gU3BlY2lhbEJsb2NrVHlwZSB7IEVudHJ5QmxvY2ss
IEV4aXRCbG9jayB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAJKHJldmlzaW9uIDE1OTE0
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCiAKKyNpbmNsdWRl
ICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAKQEAgLTM4LDQ0ICszOSwyMyBA
QCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lCiAgICAgY29tcHV0ZSgp
OwogfQogCi1zdGF0aWMgaW50IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCi17Ci0gICAgaWYgKCFjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPmNhcHR1cmVD
b3VudCgpOwotfQotCi1zdGF0aWMgaW50IGNhcHR1cmVTdGFydChDb2RlQmxvY2sqIGNvZGVCbG9j
aykKLXsKLSAgICBpZiAoIWNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCk7
Ci19Ci0KLXN0YXRpYyBpbnQgY2FwdHVyZUVuZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAg
ICBpZiAoIWNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOwotfQotCiBzdGF0
aWMgYm9vbCBpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywg
aW50IG9wZXJhbmQpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWcob3BlcmFuZCk7
CiAgICAgcmV0dXJuICFjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KG9wZXJhbmQp
IC8vIERvbid0IGNhcmUgYWJvdXQgY29uc3RhbnRzLgogICAgICAgICAmJiB2aXJ0dWFsUmVnLmlz
TG9jYWwoKSAvLyBEb24ndCBjYXJlIGFib3V0IGFyZ3VtZW50cy4KLSAgICAgICAgJiYgKCFudW1i
ZXJPZkNhcHR1cmVkVmFyaWFibGVzKGNvZGVCbG9jaykgLy8gSWYgd2UgaGF2ZSBubyBjYXB0dXJl
ZCB2YXJpYWJsZXMsIHdlJ3JlIGdvb2QgdG8gZ28uCi0gICAgICAgICAgICB8fCAodmlydHVhbFJl
Zy5vZmZzZXQoKSA+IGNhcHR1cmVTdGFydChjb2RlQmxvY2spIHx8ICh2aXJ0dWFsUmVnLm9mZnNl
dCgpIDw9IGNhcHR1cmVFbmQoY29kZUJsb2NrKSkpKTsKKyAgICAgICAgJiYgKCFjb2RlQmxvY2st
PmNhcHR1cmVDb3VudCgpIC8vIElmIHdlIGhhdmUgbm8gY2FwdHVyZWQgdmFyaWFibGVzLCB3ZSdy
ZSBnb29kIHRvIGdvLgorICAgICAgICAgICAgfHwgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPiBjb2Rl
QmxvY2stPmNhcHR1cmVTdGFydCgpIHx8ICh2aXJ0dWFsUmVnLm9mZnNldCgpIDw9IGNvZGVCbG9j
ay0+Y2FwdHVyZUVuZCgpKSkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRGb3JPcGVyYW5kKENvZGVC
bG9jayogY29kZUJsb2NrLCBGYXN0Qml0VmVjdG9yJiBiaXRzLCBpbnQgb3BlcmFuZCkKIHsKICAg
ICBBU1NFUlQoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBvcGVyYW5kKSk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWcob3BlcmFuZCk7Ci0gICAgaWYgKHZpcnR1
YWxSZWcub2Zmc2V0KCkgPiBjYXB0dXJlU3RhcnQoY29kZUJsb2NrKSkKKyAgICBpZiAodmlydHVh
bFJlZy5vZmZzZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkpCiAgICAgICAgIGJpdHMu
c2V0KHZpcnR1YWxSZWcudG9Mb2NhbCgpKTsKICAgICBlbHNlCi0gICAgICAgIGJpdHMuc2V0KHZp
cnR1YWxSZWcudG9Mb2NhbCgpIC0gbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhjb2RlQmxvY2sp
KTsKKyAgICAgICAgYml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkgLSBjb2RlQmxvY2stPmNh
cHR1cmVDb3VudCgpKTsKIH0KIAogc3RhdGljIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9m
ZnNldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RC
aXRWZWN0b3ImIHVzZXMpCkBAIC01MzMsNiArNTEzLDI2IEBAIHN0YXRpYyBCeXRlY29kZUJhc2lj
QmxvY2sqIGZpbmRCYXNpY0Jsb2MKICAgICByZXR1cm4gYmFzaWNCbG9ja1sxXS5nZXQoKTsKIH0K
IAorc3RhdGljIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaywg
VmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+PiYgYmFzaWNCbG9ja3MsIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiB1c2VzLCBGYXN0Qml0VmVjdG9yJiBkZWZz
LCBGYXN0Qml0VmVjdG9yJiBvdXQpCit7CisgICAgdXNlcy5jbGVhckFsbCgpOworICAgIGRlZnMu
Y2xlYXJBbGwoKTsKKyAgICAKKyAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVC
bG9jaywgYnl0ZWNvZGVPZmZzZXQsIHVzZXMpOworICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVP
ZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgZGVmcyk7CisgICAgCisgICAgb3V0LmV4
Y2x1ZGUoZGVmcyk7CisgICAgb3V0Lm1lcmdlKHVzZXMpOworICAgIAorICAgIC8vIElmIHdlIGhh
dmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIHdlIHdhbnQgdGhlIGxpdmUtaW4gdmFyaWFibGVzIG9m
IHRoZSAKKyAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9jayB0byBiZSBpbmNsdWRlZCBpbiB0
aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgYnl0ZWNvZGUuCisgICAgaWYgKChoYW5kbGVy
ID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSkg
eworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGhhbmRsZXJCbG9jayA9IGZpbmRCYXNpY0Js
b2NrV2l0aExlYWRlck9mZnNldChiYXNpY0Jsb2NrcywgaGFuZGxlci0+dGFyZ2V0KTsKKyAgICAg
ICAgQVNTRVJUKGhhbmRsZXJCbG9jayk7CisgICAgICAgIG91dC5tZXJnZShoYW5kbGVyQmxvY2st
PmluKCkpOworICAgIH0KK30KKwogc3RhdGljIHZvaWQgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JC
eXRlY29kZU9mZnNldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBi
bG9jaywgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+ID4mIGJhc2ljQmxvY2tzLCB1
bnNpZ25lZCB0YXJnZXRPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCkKIHsKICAgICBBU1NF
UlQoIWJsb2NrLT5pc0V4aXRCbG9jaygpKTsKQEAgLTU1MCwyMyArNTUwLDggQEAgc3RhdGljIHZv
aWQgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlYwogICAgICAgICB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCA9IGJsb2NrLT5ieXRlY29kZU9mZnNldHMoKVtpXTsKICAgICAgICAgaWYgKHRhcmdl
dE9mZnNldCA+IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
dXNlcy5jbGVhckFsbCgpOwotICAgICAgICBkZWZzLmNsZWFyQWxsKCk7Ci0KLSAgICAgICAgY29t
cHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCB1c2Vz
KTsKLSAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVj
b2RlT2Zmc2V0LCBkZWZzKTsKLQotICAgICAgICBvdXQuZXhjbHVkZShkZWZzKTsKLSAgICAgICAg
b3V0Lm1lcmdlKHVzZXMpOwotCi0gICAgICAgIC8vIElmIHdlIGhhdmUgYW4gZXhjZXB0aW9uIGhh
bmRsZXIsIHdlIHdhbnQgdGhlIGxpdmUtaW4gdmFyaWFibGVzIG9mIHRoZSAKLSAgICAgICAgLy8g
ZXhjZXB0aW9uIGhhbmRsZXIgYmxvY2sgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGxpdmUtaW4gb2Yg
dGhpcyBwYXJ0aWN1bGFyIGJ5dGVjb2RlLgotICAgICAgICBpZiAoKGhhbmRsZXIgPSBjb2RlQmxv
Y2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkpKSB7Ci0gICAgICAg
ICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGhhbmRsZXJCbG9jayA9IGZpbmRCYXNpY0Jsb2NrV2l0
aExlYWRlck9mZnNldChiYXNpY0Jsb2NrcywgaGFuZGxlci0+dGFyZ2V0KTsKLSAgICAgICAgICAg
IEFTU0VSVChoYW5kbGVyQmxvY2spOwotICAgICAgICAgICAgb3V0Lm1lcmdlKGhhbmRsZXJCbG9j
ay0+aW4oKSk7Ci0gICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rp
b24oY29kZUJsb2NrLCBiYXNpY0Jsb2NrcywgYnl0ZWNvZGVPZmZzZXQsIHVzZXMsIGRlZnMsIG91
dCk7CiAgICAgfQogCiAgICAgcmVzdWx0LnNldChvdXQpOwpAQCAtNTgzLDcgKzU2OCw3IEBAIHZv
aWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpydW5MaXZlbmUKIHsKICAgICBVbmxpbmtlZENv
ZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxv
Y2soKTsKICAgICB1bnNpZ25lZCBudW1iZXJPZlZhcmlhYmxlcyA9IHVubGlua2VkQ29kZUJsb2Nr
LT5tX251bVZhcnMgKyAKLSAgICAgICAgdW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVn
aXN0ZXJzIC0gbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhtX2NvZGVCbG9jayk7CisgICAgICAg
IHVubGlua2VkQ29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAtIG1fY29kZUJsb2NrLT5j
YXB0dXJlQ291bnQoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jhc2ljQmxv
Y2tzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBt
X2Jhc2ljQmxvY2tzW2ldLmdldCgpOwpAQCAtNjIyLDM2ICs2MDcsMzAgQEAgdm9pZCBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZQogCiBib29sIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6b3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9wZXJhbmQsIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0KQogewotICAgIGludCBudW1DYXB0dXJlZFZhcnMgPSBudW1iZXJPZkNh
cHR1cmVkVmFyaWFibGVzKG1fY29kZUJsb2NrKTsKLSAgICBpZiAoVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpLmlzQXJndW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKG9wZXJh
bmQgPD0gY2FwdHVyZVN0YXJ0KG1fY29kZUJsb2NrKSAmJiBvcGVyYW5kID4gY2FwdHVyZUVuZCht
X2NvZGVCbG9jaykpCisgICAgaWYgKG9wZXJhbmRJc0Fsd2F5c0xpdmUobV9jb2RlQmxvY2ssIG9w
ZXJhbmQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBGYXN0Qml0VmVjdG9yIHJlc3VsdDsK
ICAgICBnZXRMaXZlbmVzc0luZm9Gb3JOb25DYXB0dXJlZFZhcnNBdEJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0LCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQuZ2V0KG9wZXJhbmQgLSBu
dW1DYXB0dXJlZFZhcnMpOworICAgIHJldHVybiBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlz
TGl2ZShtX2NvZGVCbG9jaywgcmVzdWx0LCBvcGVyYW5kKTsKIH0KIAotRmFzdEJpdFZlY3RvciBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCitGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mbyhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0KQogewotICAgIEZh
c3RCaXRWZWN0b3IgdGVtcDsKICAgICBGYXN0Qml0VmVjdG9yIHJlc3VsdDsKIAotICAgIGdldExp
dmVuZXNzSW5mb0Zvck5vbkNhcHR1cmVkVmFyc0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQsIHRlbXApOwotCi0gICAgdW5zaWduZWQgbnVtQ2FwdHVyZWRWYXJzID0gbnVtYmVyT2ZDYXB0
dXJlZFZhcmlhYmxlcyhtX2NvZGVCbG9jayk7CisgICAgdW5zaWduZWQgbnVtQ2FwdHVyZWRWYXJz
ID0gbV9jb2RlQmxvY2stPmNhcHR1cmVDb3VudCgpOwogICAgIGlmIChudW1DYXB0dXJlZFZhcnMp
IHsKLSAgICAgICAgaW50IGZpcnN0Q2FwdHVyZWRMb2NhbCA9IFZpcnR1YWxSZWdpc3RlcihjYXB0
dXJlU3RhcnQobV9jb2RlQmxvY2spKS50b0xvY2FsKCk7Ci0gICAgICAgIHJlc3VsdC5yZXNpemUo
dGVtcC5udW1CaXRzKCkgKyBudW1DYXB0dXJlZFZhcnMpOworICAgICAgICBpbnQgZmlyc3RDYXB0
dXJlZExvY2FsID0gVmlydHVhbFJlZ2lzdGVyKG1fY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSku
dG9Mb2NhbCgpOworICAgICAgICByZXN1bHQucmVzaXplKG91dC5udW1CaXRzKCkgKyBudW1DYXB0
dXJlZFZhcnMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQ2FwdHVyZWRW
YXJzOyArK2kpCiAgICAgICAgICAgICByZXN1bHQuc2V0KGZpcnN0Q2FwdHVyZWRMb2NhbCArIGkp
OwogICAgIH0gZWxzZQotICAgICAgICByZXN1bHQucmVzaXplKHRlbXAubnVtQml0cygpKTsKKyAg
ICAgICAgcmVzdWx0LnJlc2l6ZShvdXQubnVtQml0cygpKTsKIAotICAgIGludCB0ZW1wTGVuZ3Ro
ID0gdGVtcC5udW1CaXRzKCk7Ci0gICAgQVNTRVJUKHRlbXBMZW5ndGggPj0gMCk7Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB0ZW1wTGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKCF0ZW1wLmdl
dChpKSkKKyAgICBpbnQgb3V0TGVuZ3RoID0gb3V0Lm51bUJpdHMoKTsKKyAgICBBU1NFUlQob3V0
TGVuZ3RoID49IDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0TGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgaWYgKCFvdXQuZ2V0KGkpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgaWYgKCFudW1DYXB0dXJlZFZhcnMpIHsKQEAgLTY1OSw3ICs2MzgsNyBAQCBGYXN0Qml0VmVj
dG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKS5vZmZzZXQo
KSA+IGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykpCisgICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChpKS5vZmZzZXQoKSA+IG1fY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSkKICAg
ICAgICAgICAgIHJlc3VsdC5zZXQoaSk7CiAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICByZXN1
bHQuc2V0KG51bUNhcHR1cmVkVmFycyArIGkpOwpAQCAtNjY3LDYgKzY0NiwzOSBAQCBGYXN0Qml0
VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAorRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5m
b0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgRmFzdEJp
dFZlY3RvciBvdXQ7CisgICAgZ2V0TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVyZWRWYXJzQXRCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCwgb3V0KTsKKyAgICByZXR1cm4gZ2V0TGl2ZW5lc3NJ
bmZvKG1fY29kZUJsb2NrLCBvdXQpOworfQorCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
czo6Y29tcHV0ZUZ1bGxMaXZlbmVzcyhGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgcmVzdWx0KQorewor
ICAgIEZhc3RCaXRWZWN0b3Igb3V0OworICAgIEZhc3RCaXRWZWN0b3IgdXNlczsKKyAgICBGYXN0
Qml0VmVjdG9yIGRlZnM7CisgICAgCisgICAgcmVzdWx0Lm1fY29kZUJsb2NrID0gbV9jb2RlQmxv
Y2s7CisgICAgcmVzdWx0Lm1fbWFwLmNsZWFyKCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9iYXNpY0Jsb2Nrcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Js
b2NrKiBibG9jayA9IG1fYmFzaWNCbG9ja3NbaV0uZ2V0KCk7CisgICAgICAgIGlmIChibG9jay0+
aXNFbnRyeUJsb2NrKCkgfHwgYmxvY2stPmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgCisgICAgICAgIG91dCA9IGJsb2NrLT5vdXQoKTsKKyAgICAgICAgdXNl
cy5yZXNpemUob3V0Lm51bUJpdHMoKSk7CisgICAgICAgIGRlZnMucmVzaXplKG91dC5udW1CaXRz
KCkpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPmJ5dGVjb2Rl
T2Zmc2V0cygpLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQgPSBibG9jay0+Ynl0ZWNvZGVPZmZzZXRzKClbaV07CisgICAgICAgICAgICBzdGVwT3Zl
ckluc3RydWN0aW9uKG1fY29kZUJsb2NrLCBtX2Jhc2ljQmxvY2tzLCBieXRlY29kZU9mZnNldCwg
dXNlcywgZGVmcywgb3V0KTsKKyAgICAgICAgICAgIHJlc3VsdC5tX21hcC5hZGQoYnl0ZWNvZGVP
ZmZzZXQsIG91dCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzOjpkdW1wUmVzdWx0cygpCiB7CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVy
ID0gbV9jb2RlQmxvY2stPnZtKCktPmludGVycHJldGVyOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMu
aAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCwxMSBA
QCBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgewogcHVi
bGljOgogICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2RlQmxvY2sqKTsKLQorICAgIAog
ICAgIGJvb2wgb3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9wZXJhbmQsIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIAorICAgIHZvaWQg
Y29tcHV0ZUZ1bGxMaXZlbmVzcyhGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgcmVzdWx0KTsKIAogcHJp
dmF0ZToKICAgICB2b2lkIGNvbXB1dGUoKTsKQEAgLTUzLDYgKzU1LDEyIEBAIHByaXZhdGU6CiAg
ICAgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+ID4gbV9iYXNpY0Jsb2NrczsKIH07
CiAKK2lubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IGludCBvcGVyYW5kKTsKK2lubGluZSBib29sIG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNM
aXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBv
cGVyYW5kKTsKK2lubGluZSBib29sIG9wZXJhbmRJc0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpOworCitGYXN0Qml0VmVjdG9y
IGdldExpdmVuZXNzSW5mbyhDb2RlQmxvY2sqLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQpOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
c19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXNfaAorI2RlZmluZSBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzX2gKKworI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
aW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50
IG9wZXJhbmQpCit7CisgICAgaWYgKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0FyZ3VtZW50
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGludCBudW1DYXB0dXJlZFZhcnMgPSBudW1i
ZXJPZkNhcHR1cmVkVmFyaWFibGVzKG1fY29kZUJsb2NrKTsKKyAgICByZXR1cm4gb3BlcmFuZCA8
PSBtX2NvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkgJiYgb3BlcmFuZCA+IG1fY29kZUJsb2NrLT5j
YXB0dXJlRW5kKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZl
SXNMaXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGlu
dCBvcGVyYW5kKQoreworICAgIHJldHVybiBvdXQuZ2V0KG9wZXJhbmQgLSBjb2RlQmxvY2stPmNh
cHR1cmVDb3VudCgpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShDb2RlQmxvY2sq
IGNvZGVCbG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK3sKKyAg
ICByZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShjb2RlQmxvY2ssIG9wZXJhbmQpIHx8IG9wZXJh
bmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvZGVCbG9jaywgb3V0LCBvcGVyYW5kKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXNJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNiArMzU0LDI3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX25lZWRzQWN0aXZhdGlvbjsKICAgICB9CisgICAg
CisgICAgdW5zaWduZWQgY2FwdHVyZUNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
c3ltYm9sVGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gc3lt
Ym9sVGFibGUoKS0+Y2FwdHVyZUNvdW50KCk7CisgICAgfQorICAgIAorICAgIGludCBjYXB0dXJl
U3RhcnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3Rh
cnQoKTsKKyAgICB9CisgICAgCisgICAgaW50IGNhcHR1cmVFbmQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBzeW1ib0xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7CisgICAgfQogCiAgICAgYm9vbCBp
c0NhcHR1cmVkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBJbmxpbmVDYWxsRnJhbWUqID0gMCkg
Y29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZ1bGxCeXRlY29kZUxpdmVu
ZXNzX2gKKyNkZWZpbmUgRnVsbEJ5dGVjb2RlTGl2ZW5lc3NfaAorCisjaW5jbHVkZSA8d3RmL0Zh
c3RCaXRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpczsKKwordHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBGYXN0Qml0VmVjdG9yLCBX
VEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVuc2lnbmVkPiA+IEJ5dGVjb2RlVG9CaXRtYXBNYXA7CisKK2NsYXNzIEZ1bGxCeXRlY29kZUxp
dmVuZXNzIHsKK3B1YmxpYzoKKyAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcygpIDogbV9jb2RlQmxv
Y2soMCkgeyB9CisgICAgCisgICAgLy8gV2Ugc2F5ICJvdXQiIHRvIHJlZmVyIHRvIHRoZSBiaXR2
ZWN0b3IgdGhhdCBjb250YWlucyByYXcgcmVzdWx0cyBmb3IgYSBieXRlY29kZQorICAgIC8vIGlu
c3RydWN0aW9uLgorICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGdldE91dCh1bnNpZ25lZCBieXRl
Y29kZUluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQnl0ZWNvZGVUb0JpdG1hcE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFT
U0VSVChpdGVyICE9IG1fbWFwLmVuZCgpKTsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhbmRJc0xpdmUoaW50IG9wZXJhbmQsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb3BlcmFuZElzQWx3
YXlzTGl2ZShtX2NvZGVCbG9jaywgb3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xp
dmVJc0xpdmUobV9jb2RlQmxvY2ssIGdldE91dChieXRlY29kZUluZGV4KSwgb3BlcmFuZCk7Cisg
ICAgfQorICAgIAorICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3ModW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRMaXZlbmVzc0luZm8obV9j
b2RlQmxvY2ssIGdldE91dChieXRlY29kZUluZGV4KSk7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworICAgIAorICAgIENv
ZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgQnl0ZWNvZGVUb0JpdG1hcE1hcCBtX21hcDsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRnVsbEJ5dGVjb2RlTGl2ZW5lc3Nf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHku
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFi
aWxpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR0F2YWlsYWJpbGl0eS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKwordm9pZCBBdmFpbGFiaWxpdHk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgMCk7Cit9CisKK3ZvaWQgQXZhaWxhYmls
aXR5OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0
KSBjb25zdAoreworICAgIG91dC5wcmludChtX2ZsdXNoZWRBdCwgIi8iKTsKKyAgICAKKyAgICBH
cmFwaCogZ3JhcGggPSBjb250ZXh0ID8gY29udGV4dC0+Z3JhcGggOiAwOworICAgIAorICAgIGlm
IChpc1VuZGVjaWRlZCgpKSB7CisgICAgICAgIG91dC5wcmludCgiVW5kZWNpZGVkIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGlzVW5hdmFpbGFibGUoKSkgeworICAg
ICAgICBvdXQucHJpbnQoIlVuYXZhaWxhYmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgaWYgKGdyYXBoKSB7CisgICAgICAgIG91dC5wcmludChWYXJpYWJsZUFjY2Vzc0Rh
dGFEdW1wKCpncmFwaCwgbV92YXJpYWJsZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIG91dC5wcmludChSYXdQb2ludGVyKG1fdmFyaWFibGUpKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBdmFpbGFiaWxpdHlfaAorI2RlZmluZSBERkdBdmFp
bGFiaWxpdHlfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdGbHVzaGVk
QXQuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBdmFpbGFiaWxpdHkgeworcHVibGljOgorICAg
IEF2YWlsYWJpbGl0eSgpCisgICAgICAgIDogbV92YXJpYWJsZSgwKQorICAgICAgICAsIG1fZmx1
c2hlZEF0KERlYWRGbHVzaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEF2YWls
YWJpbGl0eShWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKQorICAgICAgICA6IG1fdmFyaWFi
bGUodmFyaWFibGUpCisgICAgICAgICwgbV9mbHVzaGVkQXQoQ29uZmxpY3RpbmdGbHVzaCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBBdmFpbGFiaWxpdHkgdW5hdmFpbGFibGUoKQor
ICAgIHsKKyAgICAgICAgQXZhaWxhYmlsaXR5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFy
aWFibGUgPSBiaXR3aXNlX2Nhc3Q8VmFyaWFibGVBY2Nlc3NEYXRhKj4oc3RhdGljX2Nhc3Q8aW50
cHRyX3Q+KDEpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgQXZh
aWxhYmlsaXR5IHdpdGhGbHVzaChGbHVzaGVkQXQgZmx1c2gpCisgICAgeworICAgICAgICBBdmFp
bGFiaWxpdHkgcmVzdWx0ID0gKnRoaXM7CisgICAgICAgIHJlc3VsdC5tX2ZsdXNoZWRBdCA9IGZs
dXNoOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIHZhcmlh
YmxlSXNVbmRlY2lkZWQoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlID09IDA7IH0KKyAgICBi
b29sIHZhcmlhYmxlSXNVbmF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzID09IHVuYXZh
aWxhYmxlKCk7IH0KKyAgICAKKyAgICBib29sIGhhc1ZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4g
IXZhcmlhYmxlSXNVbmRlY2lkZWQoKSAmJiAhdmFyaWFibGVJc1VuYXZhaWxhYmxlKCk7IH0KKyAg
ICAKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghdmFyaWFibGVJc1VuZGVjaWRlZCgpKTsKKyAgICAgICAgQVNTRVJUKCF2YXJp
YWJsZUlzVW5hdmFpbGFibGUoKSk7CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlOworICAgIH0K
KyAgICAKKyAgICBGbHVzaGVkQXQgZmx1c2hlZEF0KCkgY29uc3QgeyByZXR1cm4gbV9mbHVzaGVk
QXQ7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdmFpbGFiaWxpdHkmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFibGUgPT0gb3RoZXIubV92YXJpYWJs
ZQorICAgICAgICAgICAgJiYgbV9mbHVzaEZvcm1hdCA9PSBvdGhlci5tX2ZsdXNoRm9ybWF0Owor
ICAgIH0KKyAgICAKKyAgICBBdmFpbGFiaWxpdHkgbWVyZ2UoY29uc3QgQXZhaWxhYmlsaXR5JiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIEF2YWlsYWJpbGl0eSByZXN1bHQ7CisgICAgICAg
IAorICAgICAgICBpZiAodmFyaWFibGVJc1VuZGVjaWRlZCgpKQorICAgICAgICAgICAgcmVzdWx0
ID0gb3RoZXI7CisgICAgICAgIGVsc2UgaWYgKG90aGVyLnZhcmlhYmxlSXNVbmRlY2lkZWQoKSkK
KyAgICAgICAgICAgIHJlc3VsdCA9ICp0aGlzOworICAgICAgICBlbHNlIGlmICh2YXJpYWJsZSgp
ID09IG90aGVyLnZhcmlhYmxlKCkpCisgICAgICAgICAgICByZXN1bHQgPSAqdGhpczsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gdW5hdmFpbGFibGUoKTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiByZXN1bHQud2l0aEZsdXNoKGZsdXNoZWRBdCgpLm1lcmdlKG90aGVyLmZ1
c2hlZEF0KCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG1fdmFyaWFibGU7Cisg
ICAgRmx1c2hlZEF0IG1fZmx1c2hlZEF0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBdmFpbGFiaWxp
dHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
cmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw4ICsxNDAsOCBAQCBzdHJ1Y3QgQmFzaWNCbG9j
ayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgc3RydWN0IFNTQURhdGEgewogICAgICAgICBP
cGVyYW5kczxGbHVzaGVkQXQ+IGZsdXNoQXRIZWFkOwogICAgICAgICBPcGVyYW5kczxGbHVzaGVk
QXQ+IGZsdXNoQXRUYWlsOwotICAgICAgICBPcGVyYW5kczxOb2RlKj4gYXZhaWxhYmlsaXR5QXRI
ZWFkOwotICAgICAgICBPcGVyYW5kczxOb2RlKj4gYXZhaWxhYmlsaXR5QXRUYWlsOworICAgICAg
ICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgT3Bl
cmFuZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHlBdFRhaWw7CiAgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+IGxpdmVBdEhlYWQ7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdFRhaWw7CiAg
ICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlz
aW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiBEaXNhc3NlbWJsZXI6OkRpc2Fzc2VtYmxlcihHcmFwaCYgZ3JhcGgpCiAg
ICAgOiBtX2dyYXBoKGdyYXBoKQogeworICAgIG1fZHVtcENvbnRleHQuZ3JhcGggPSAmbV9ncmFw
aDsKICAgICBtX2xhYmVsRm9yQmxvY2tJbmRleC5yZXNpemUoZ3JhcGgubnVtQmxvY2tzKCkpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNw
cAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVz
aEZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDkgQEAgdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEZsdQogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CiAg
ICAgICAgIG91dC5wcmludCgiRmx1c2hlZEpTVmFsdWUiKTsKICAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKKyAgICAgICAgb3V0LnByaW50KCJDb25mbGljdGluZ0Zs
dXNoIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3Jt
YXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9y
bWF0LmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rmx1c2hGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsOCBAQCBlbnVtIEZsdXNo
Rm9ybWF0IHsKICAgICBGbHVzaGVkRG91YmxlLAogICAgIEZsdXNoZWRDZWxsLAogICAgIEZsdXNo
ZWRCb29sZWFuLAotICAgIEZsdXNoZWRKU1ZhbHVlCisgICAgRmx1c2hlZEpTVmFsdWUsCisgICAg
Q29uZmxpY3RpbmdGbHVzaAogfTsKIAogaW5saW5lIE5vZGVGbGFncyByZXN1bHRGb3IoRmx1c2hG
b3JtYXQgZm9ybWF0KQpAQCAtNTQsNiArNTUsNyBAQCBpbmxpbmUgTm9kZUZsYWdzIHJlc3VsdEZv
cihGbHVzaEZvcm1hdCBmCiAgICAgY2FzZSBEZWFkRmx1c2g6CiAgICAgY2FzZSBGbHVzaGVkSlNW
YWx1ZToKICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoK
ICAgICAgICAgcmV0dXJuIE5vZGVSZXN1bHRKUzsKICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKICAg
ICAgICAgcmV0dXJuIE5vZGVSZXN1bHRJbnQzMjsKQEAgLTczLDYgKzc1LDcgQEAgaW5saW5lIFVz
ZUtpbmQgdXNlS2luZEZvcihGbHVzaEZvcm1hdCBmbwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAg
ICAgY2FzZSBEZWFkRmx1c2g6CiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICBjYXNlIENv
bmZsaWN0aW5nRmx1c2g6CiAgICAgICAgIHJldHVybiBVbnR5cGVkVXNlOwogICAgIGNhc2UgRmx1
c2hlZENlbGw6CiAgICAgICAgIHJldHVybiBDZWxsVXNlOwpAQCAtOTMsNiArOTYsNyBAQCBpbmxp
bmUgRGF0YUZvcm1hdCBkYXRhRm9ybWF0Rm9yKEZsdXNoRm9yCiB7CiAgICAgc3dpdGNoIChmb3Jt
YXQpIHsKICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAg
ICAgICAgIHJldHVybiBEYXRhRm9ybWF0RGVhZDsKICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgog
ICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGbHVzaGVkQXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmx1c2hlZEF0LmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBGbHVzaGVkQXQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBpZiAobV9mb3JtYXQgPT0gRGVh
ZEZsdXNoKQorICAgIGlmIChtX2Zvcm1hdCA9PSBEZWFkRmx1c2ggfHwgbV9mb3JtYXQgPT0gQ29u
ZmxpY3RpbmdGbHVzaCkKICAgICAgICAgb3V0LnByaW50KG1fZm9ybWF0KTsKICAgICBlbHNlCiAg
ICAgICAgIG91dC5wcmludCgiciIsIG1fdmlydHVhbFJlZ2lzdGVyLCAiOiIsIG1fZm9ybWF0KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAkocmV2aXNpb24g
MTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTIgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAg
CisgICAgZXhwbGljaXQgRmx1c2hlZEF0KEZsdXNoRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgOiBt
X2Zvcm1hdChmb3JtYXQpCisgICAgeworICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERlYWRGbHVz
aCB8fCBmb3JtYXQgPT0gQ29uZmxpY3RpbmdGbHVzaCk7CisgICAgfQorICAgIAogICAgIEZsdXNo
ZWRBdChGbHVzaEZvcm1hdCBmb3JtYXQsIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIp
CiAgICAgICAgIDogbV9mb3JtYXQoZm9ybWF0KQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVy
KHZpcnR1YWxSZWdpc3RlcikKQEAgLTY1LDYgKzcxLDE3IEBAIHB1YmxpYzoKICAgICAKICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRmx1c2hlZEF0JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7IH0KICAgICAKKyAgICBGbHVzaGVkQXQgbWVyZ2UoY29uc3QgRmx1c2hl
ZEF0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMpCisgICAgICAgICAg
ICByZXR1cm4gb3RoZXI7CisgICAgICAgIGlmICghb3RoZXIpCisgICAgICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgICAgIGlmICgqdGhpcyA9PSBvdGhlcikKKyAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgcmV0dXJuIEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTkxNDEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzkzLDYgKzM5Myw3IEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVh
bSYKIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRl
eHQpCiB7CiAgICAgRHVtcENvbnRleHQgbXlDb250ZXh0OworICAgIG15Q29udGV4dC5ncmFwaCA9
IHRoaXM7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICBjb250ZXh0ID0gJm15Q29udGV4dDsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1
OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtNDE2LDYgKzQxNiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBleGVjdXRh
YmxlRm9yKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICB9CiAgICAgCisgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSkKKyAgICB7CisgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAg
cmV0dXJuIG1fcHJvZmlsZWRCbG9jazsKKyAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7CisgICAgfQorICAgIAogICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdp
bikKICAgICB7CiAgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJh
c2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIG1fcHJvZmlsZWRCbG9jayk7CkBAIC03NzYsNiAr
NzgzLDQxIEBAIHB1YmxpYzoKICAgICBEZXNpcmVkV2F0Y2hwb2ludHMmIHdhdGNocG9pbnRzKCkg
eyByZXR1cm4gbV9wbGFuLndhdGNocG9pbnRzOyB9CiAgICAgRGVzaXJlZFN0cnVjdHVyZUNoYWlu
cyYgY2hhaW5zKCkgeyByZXR1cm4gbV9wbGFuLmNoYWluczsgfQogICAgIAorICAgIEZ1bGxCeXRl
Y29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7Cisg
ICAgICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgRnVsbEJ5dGVjb2RlTGl2ZW5lc3M+OjppdGVyYXRv
ciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKKyAgICAgICAgaWYg
KGl0ZXIgIT0gbV9ieXRlY29kZUxpdmVuZXNzLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuICpp
dGVyLT52YWx1ZTsKKyAgICAgICAgCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNv
ZGVMaXZlbmVzcz4gbGl2ZW5lc3MgPSBzdGQ6Om1ha2VfdW5pcXVlPEZ1bGxCeXRlY29kZUxpdmVu
ZXNzPigpOworICAgICAgICBjb2RlQmxvY2stPmxpdmVuZXNzQW5hbHlzaXMoKS5jb21wdXRlRnVs
bExpdmVuZXNzKCpsaXZlbmVzcyk7CisgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1
bHQgPSAqbGl2ZW5lc3M7CisgICAgICAgIG1fYnl0ZWNvZGVMaXZlbmVzcy5hZGQoY29kZUJsb2Nr
LCBzdGQ6Om1vdmUobGl2ZW5lc3MpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxpdmVuZXNzRm9yKGJh
c2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSkpOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbikKKyAgICB7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGlmIChv
cGVyYW5kLm9mZnNldCgpIDwgY29kZU9yaWdpbi5zdGFja09mZnNldCgpICsgSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBsaXZlbmVzc0Zvcihp
bmxpbmVDYWxsRnJhbWUpLm9wZXJhbmRJc0xpdmUoCisgICAgICAgICAgICAgICAgICAgIG9wZXJh
bmQub2Zmc2V0KCkgLSBjb2RlT3JpZ2luLnN0YWNrT2Zmc2V0KCksIGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgh
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCiAgICAgVk0mIG1fdm07CiAgICAgUGxhbiYgbV9wbGFuOwogICAgIENvZGVC
bG9jayogbV9jb2RlQmxvY2s7CkBAIC03OTcsNiArODM5LDcgQEAgcHVibGljOgogICAgIFNlZ21l
bnRlZFZlY3RvcjxTd2l0Y2hEYXRhLCA0PiBtX3N3aXRjaERhdGE7CiAgICAgVmVjdG9yPElubGlu
ZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgT3duUHRyPElubGlu
ZUNhbGxGcmFtZVNldD4gbV9pbmxpbmVDYWxsRnJhbWVzOworICAgIEhhc2hNYXA8Q29kZUJsb2Nr
Kiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVu
ZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CiAgICAgSGFzaFNldDxFeGVjdXRhYmxlQmFz
ZSo+IG1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQ7CiAgICAgQml0VmVjdG9yIG1f
bGF6eVZhcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRDb3Vu
dGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01vdkhpbnRDb3VudGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdNb3ZIaW50Q291bnRpbmdQ
aGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2Nr
SW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9u
U2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTW92SGludENvdW50aW5n
UGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIE1vdkhpbnRDb3VudGluZ1BoYXNl
KEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIk1vdkhpbnQgY291bnRpbmci
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnQg
dGhhdCB3ZSBoYXZlbid0IGRvbmUgdGhpcyBhbHJlYWR5LgorICAgICAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX3Zhcmlh
YmxlQWNjZXNzRGF0YS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07Cisg
ICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS0+aXNSb290KCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPm1vdkhpbnRD
b3VudCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT5zaW5nbGVNb3ZIaW50
KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxv
Y2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6Cisg
ICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgICAgIGNhc2UgTW92SGlu
dEFuZENoZWNrOgorICAgICAgICAgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+Y291bnRNb3ZIaW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdl
dEFyZ3VtZW50OgorICAgICAgICAgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+Y291bnRNb3ZIaW50KG5vZGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAg
ICAgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Y291bnRNb3ZIaW50KDAp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1Nb3ZIaW50Q291bnRpbmcoR3Jh
cGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgTW92
SGludCBDb3VudGluZyIpOworICAgIHJldHVybiBydW5QaGFzZTxNb3ZIaW50Q291bnRpbmdQaGFz
ZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZI
aW50Q291bnRpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTW92SGludENvdW50aW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTW92SGludENvdW50aW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHTW92SGludENvdW50aW5nUGhhc2VfaAorI2RlZmluZSBERkdNb3ZI
aW50Q291bnRpbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbXB1dGVzIFZhcmlhYmxl
QWNjZXNzRGF0YTo6bV9tb3ZIaW50Q291bnQuIFZhcmlhYmxlcyB0aGF0IGFyZSBhc3NpZ25lZCBv
bmx5IG9uY2UgY2FuIGdldAorLy8gdHJlYXRlZCBzcGVjaWFsbHkuIEZvciBleGFtcGxlLCBPU1Ig
ZXhpdCBpbiB0aGUgRlRMIGNhbiBhbGxvdyB0aGUgZm9ybWF0IHVzZWQgZm9yIHN1Y2gKKy8vIG5v
ZGVzIEJhc2ljQmxvY2s6OnNzYS0+YXZhaWxhYmlsdGl5QXRIZWFkL1RhaWwuIFRoaXMgaXMgYSBm
b3J3YXJkIGZsb3cgdHlwZSBpbmZlcmVuY2UKKy8vIG92ZXIgTW92SGludHMuIEF0IHRoZSB0aW1l
IHdoZW4gTW92SGludHMgYXJlIGludHJvZHVjZWQsIHdlIHdlcmUgY2VydGFpbiB0aGF0IGF0IGFu
eQorLy8gcG9pbnQgaW4gdGhlIHByb2dyYW0gd2hlcmUgYSBieXRlY29kZSB2YXJpYWJsZSBoYWQg
YmVlbiBsaXZlLCBhbGwgb2YgdGhlIE1vdkhpbnRzIHRoYXQKKy8vIGZsb3dlZCBpbnRvIHRoYXQg
cG9pbnQgZm9yIHRoYXQgdmFyaWFibGUgaGFkIHRoZSBzYW1lIEZsdXNoRm9ybWF0LiBUaGlzIGFu
YWx5c2lzIHdpbGwgdGVsbAorLy8geW91IHdoYXQgdGhhdCBmb3JtYXQgd291bGQgaGF2ZSBiZWVu
LgorCitib29sIHBlcmZvcm1Nb3ZIaW50Q291bnRpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdNb3ZIaW50Q291bnRpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNw
cAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNzcgKzQ3
LDgzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBT
U0EpOwogICAgICAgICAKLSAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZpcnN0Owot
ICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOwor
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7
IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhl
YWQuZmlsbChBdmFpbGFiaWxpdHkoKSk7CisgICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFi
aWxpdHlBdFRhaWwuZmlsbChBdmFpbGFiaWxpdHkoKSk7CisgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGRlcHRoRmlyc3RbaV07Ci0gICAgICAg
ICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuZmlsbCgwKTsKLSAgICAgICAgICAg
IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbC5maWxsKDApOworICAgICAgICBCYXNpY0Js
b2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygwKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1
bWVudCA9IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm51bWJlck9mQXJndW1lbnQoKTsg
YXJndW1lbnQtLTspIHsKKyAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFk
LmFyZ3VtZW50KGFyZ3VtZW50KSA9CisgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2
YWlsYWJsZSgpLndpdGhGbHVzaCgKKyAgICAgICAgICAgICAgICAgICAgRmx1c2hlZEF0KEZsdXNo
ZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpKTsKICAgICAg
ICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gcm9vdC0+c3NhLT5hdmFpbGFiaWxp
dHlBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspCisgICAgICAgICAgICByb290LT5z
c2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2NhbCkgPSBBdmFpbGFiaWxpdHk6OnVuYXZh
aWxhYmxlKCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVw
dGhGaXJzdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBk
ZXB0aEZpcnN0W2ldOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSBlZGl0IGF2YWls
YWJpbGl0eUF0VGFpbCBpbi1wbGFjZSwgYnV0IGZpcnN0IGluaXRpYWxpemUgaXQgdG8KLSAgICAg
ICAgICAgIC8vIGF2YWlsYWJpbGl0eUF0SGVhZC4KLSAgICAgICAgICAgIE9wZXJhbmRzPE5vZGUq
PiYgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsOwotICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOworICAg
ICAgICAvLyBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgYnkgcHJvY2Vzc2luZyBi
bG9ja3MgaW4gcmV2ZXJzZSBwb3N0b3JkZXIuCisgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0
PiBhdmFpbGFiaWxpdHk7CisgICAgICAgIGJvb2wgY2hhbmdlZDsKKyAgICAgICAgZG8geworICAg
ICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9k
ZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5k
ZXgpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAg
ICAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7Ci0gICAgICAgICAgICAgICAgICAgIGF2
YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAg
ICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IDA7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVudDogewotICAgICAgICAg
ICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGU7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNz
YS0+YXZhaWxhYmlsaXR5QXRIZWFkOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsg
Kytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJndW1lbnQ6IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxh
YmlsaXR5KHZhcmlhYmxlKS53aXRoRmx1c2godmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgorICAg
ICAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBHZXRBcmd1bWVudDogeworICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID0gQXZhaWxhYmlsaXR5KHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eTo6
dW5hdmFpbGFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBq
LS07KSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1
Y2Nlc3NvcihqKTsKLSAgICAgICAgICAgICAgICBPcGVyYW5kczxOb2RlKj4mIHN1Y2Nlc3NvckF2
YWlsYWJpbGl0eSA9IHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gYXZhaWxhYmlsaXR5LnNpemUoKTsgay0tOykgewot
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBteU5vZGUgPSBhdmFpbGFiaWxpdHlba107Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghbXlOb2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoIXN1
Y2Nlc3Nvci0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKG15Tm9kZSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBvdmVyd3JpdGUgYXZhaWxhYmlsaXR5IHdpdGgg
YSBib2d1cyBub2RlCi0gICAgICAgICAgICAgICAgICAgIC8vIGF0IG1lcmdlIHBvaW50cy4gVGhp
cyBpcyBmaW5lLCBzaW5jZSBtZXJnZSBwb2ludHMgaGF2ZQotICAgICAgICAgICAgICAgICAgICAv
LyBNb3ZIaW50KFBoaSkncyB0byB3b3JrIGFyb3VuZCB0aGlzLiBUaGUgb3V0Y29tZSBvZiB0aGlz
IGlzCi0gICAgICAgICAgICAgICAgICAgIC8vIHlvdSBtaWdodCBoYXZlIGEgcHJvZ3JhbSBpbiB3
aGljaCBhIG5vZGUgaGFwcGVucyB0byByZW1haW4KLSAgICAgICAgICAgICAgICAgICAgLy8gbGl2
ZSBpbnRvIHNvbWUgYmxvY2sgQiwgYW5kIHNlcGFyYXRlbHkgKGR1ZSB0byBjb3B5Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIHByb3BhZ2F0aW9uKSBqdXN0IG9uZSBvZiB0aGUgcHJlZGVjZXNzb3Jz
IG9mIEIgaXNzdWVkIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gTW92SGludCBwdXR0aW5nIHRo
YXQgbm9kZSBpbnRvIHNvbWUgbG9jYWwuIFRoZW4gaW4gQiB3ZSBtaWdodAotICAgICAgICAgICAg
ICAgICAgICAvLyB0aGluayB0aGF0IHRoYXQgbm9kZSBpcyBhIHZhbGlkIHZhbHVlIGZvciB0aGF0
IGxvY2FsLiBPZgotICAgICAgICAgICAgICAgICAgICAvLyBjb3Vyc2UgaWYgdGhhdCBsb2NhbCB3
YXMgYWN0dWFsbHkgbGl2ZSBpbiBCLCBCIHdvdWxkIGhhdmUgYQotICAgICAgICAgICAgICAgICAg
ICAvLyBQaGkgZm9yIGl0LiBTbyBlc3NlbnRpYWxseSB3ZSdsbCBoYXZlIE9TUiBleGl0IGRyb3Bw
aW5nIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgLy8gbm9kZSdzIHZhbHVlIGludG8gdGhlIGxv
Y2FsIHdoZW4gd2Ugb3RoZXJ3aXNlIChpbiB0aGUgREZHKQotICAgICAgICAgICAgICAgICAgICAv
LyB3b3VsZCBoYXZlIGRyb3BwZWQgdW5kZWZpbmVkIGludG8gdGhlIGxvY2FsLiBUaGlzIHNlZW1z
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGhhcm1sZXNzLgotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yQXZhaWxhYmlsaXR5W2tdID0gbXlOb2RlOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkgPT0gYmxv
Y2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFi
aWxpdHlBdFRhaWwgPSBhdmFpbGFiaWxpdHk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNj
ZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7
CisgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNj
ZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBhdmFpbGFiaWxpdHkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ldID0gYXZhaWxhYmlsaXR5W2ld
Lm1lcmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFp
bGFiaWxpdHlBdEhlYWRbaV0pOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQp
OwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw5ICszNiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdy
YXBoOwogCi0vLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRpeUF0SGVhZC9U
YWlsLiBUaGlzIHJlbGllcyBvbiBsaXZlbmVzcwotLy8gYW5hbHlzaXMgcGhhc2UgaGF2aW5nIGJl
ZW4gcnVuIGFuZCB0aGUgZ3JhcGggbm90IGhhdmluZyBiZWVuIHRyYW5zZm9ybWVkCi0vLyBhZnRl
ciB0aGF0LgorLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5hdmFpbGFiaWx0aXlBdEhlYWQv
VGFpbC4gVGhpcyBpcyBhIGZvcndhcmQgZmxvdyB0eXBlIGluZmVyZW5jZQorLy8gb3ZlciBNb3ZI
aW50cy4gQXQgdGhlIHRpbWUgd2hlbiBNb3ZIaW50cyBhcmUgaW50cm9kdWNlZCwgd2Ugd2VyZSBj
ZXJ0YWluIHRoYXQgYXQgYW55CisvLyBwb2ludCBpbiB0aGUgcHJvZ3JhbSB3aGVyZSBhIGJ5dGVj
b2RlIHZhcmlhYmxlIGhhZCBiZWVuIGxpdmUsIGFsbCBvZiB0aGUgTW92SGludHMgdGhhdAorLy8g
Zmxvd2VkIGludG8gdGhhdCBwb2ludCBmb3IgdGhhdCB2YXJpYWJsZSBoYWQgdGhlIHNhbWUgRmx1
c2hGb3JtYXQuIFRoaXMgYW5hbHlzaXMgd2lsbCB0ZWxsCisvLyB5b3Ugd2hhdCB0aGF0IGZvcm1h
dCB3b3VsZCBoYXZlIGJlZW4uCiAKIGJvb2wgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
KEdyYXBoJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2
aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIkRGR0xJQ01QaGFzZS5o
IgogI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0xv
b3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHTW92SGludENvdW50aW5n
UGhhc2UuaCIKICNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCiAj
aW5jbHVkZSAiREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdQ
cmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIKQEAgLTI3Miw2ICsyNzMsNyBAQCBQbGFuOjpDb21w
aWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1TdGFja0xheW91
dChkZmcpOwogICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAgICBw
ZXJmb3JtRmx1c2hMaXZlbmVzc0FuYWx5c2lzKGRmZyk7CisgICAgICAgIHBlcmZvcm1Nb3ZIaW50
Q291bnRpbmcoZGZnKTsKICAgICAgICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKGRm
Zyk7CiAgICAgICAgIHBlcmZvcm1XYXRjaHBvaW50Q29sbGVjdGlvbihkZmcpOwogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlz
aW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAgICBj
YXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoU291
cmNlSXNEZWFkKTsKICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAgICAgICAgICAgIHJl
dHVybiBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywgd2hlcmUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lv
biAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw4IEBAIHB1YmxpYzoKICAgICAgICAg
LCBtX2lzUHJvZml0YWJsZVRvVW5ib3goZmFsc2UpCiAgICAgICAgICwgbV9pc0xvYWRlZEZyb20o
ZmFsc2UpCiAgICAgICAgICwgbV9kb3VibGVGb3JtYXRTdGF0ZShFbXB0eURvdWJsZUZvcm1hdFN0
YXRlKQorICAgICAgICAsIG1fbW92SGludENvdW50KDApCisgICAgICAgICwgbV9zaW5nbGVNb3ZI
aW50KDApCiAgICAgewogICAgICAgICBjbGVhclZvdGVzKCk7CiAgICAgfQpAQCAtNzIsNiArNzQs
OCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jaGVja0FycmF5SG9pc3RpbmdGYWlsZWQoZmFsc2Up
CiAgICAgICAgICwgbV9pc1Byb2ZpdGFibGVUb1VuYm94KGZhbHNlKQogICAgICAgICAsIG1fZG91
YmxlRm9ybWF0U3RhdGUoRW1wdHlEb3VibGVGb3JtYXRTdGF0ZSkKKyAgICAgICAgLCBtX21vdkhp
bnRDb3VudCgwKQorICAgICAgICAsIG1fc2luZ2xlTW92SGludCgwKQogICAgIHsKICAgICAgICAg
Y2xlYXJWb3RlcygpOwogICAgIH0KQEAgLTM1Miw2ICszNTYsMTcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gRmx1c2hlZEF0KGZsdXNoRm9ybWF0KCksIG1hY2hpbmVMb2NhbCgpKTsKICAgICB9
CiAgICAgCisgICAgYm9vbCBpc1NpbmdseUFzc2lnbmVkKCkgY29uc3QgeyByZXR1cm4gbV9tb3ZI
aW50Q291bnQgPT0gMTsgfQorICAgIHZvaWQgY291bnRNb3ZIaW50KE5vZGUqIG5vZGUpCisgICAg
eworICAgICAgICBpZiAoIW1fbW92SGludENvdW50KyspCisgICAgICAgICAgICBtX3NpbmdsZU1v
dkhpbnQgPSBub2RlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3NpbmdsZU1vdkhpbnQg
PSAwOworICAgIH0KKyAgICB1bnNpZ25lZCBtb3ZIaW50Q291bnQoKSBjb25zdCB7IHJldHVybiBt
X21vdkhpbnRDb3VudDsgfQorICAgIE5vZGUqIHNpbmdsZU1vdkhpbnQoKSBjb25zdCB7IHJldHVy
biBtX3NpbmdsZU1vdkhpbnQ7IH0KKyAgICAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBpcyBzbGln
aHRseSBzcGFjZS1pbmVmZmljaWVudCwgc2luY2UgYW55dGhpbmcgd2UncmUgdW5pZmllZCB3aXRo
CiAgICAgLy8gd2lsbCBoYXZlIHRoZSBzYW1lIG9wZXJhbmQgYW5kIHNob3VsZCBoYXZlIHRoZSBz
YW1lIHByZWRpY3Rpb24uIEJ1dApAQCAtMzc0LDYgKzM4OSw5IEBAIHByaXZhdGU6CiAKICAgICBm
bG9hdCBtX3ZvdGVzWzJdOyAvLyBVc2VkIHByaW1hcmlseSBmb3IgZG91YmxlIHZvdGluZyBidXQg
bWF5IGJlIHJldXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuCiAgICAgRG91YmxlRm9ybWF0U3RhdGUg
bV9kb3VibGVGb3JtYXRTdGF0ZTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX21vdkhpbnRDb3VudDsK
KyAgICBOb2RlKiBtX3NpbmdsZU1vdkhpbnQ7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDYgKzY5LDkgQEAgdm9pZCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wOjpkdW1wKFBy
aW50UwogICAgICAgICBvdXQucHJpbnQoIn4iKTsKIAogICAgIG91dC5wcmludChBYmJyZXZpYXRl
ZFNwZWN1bGF0aW9uRHVtcChtX2RhdGEtPnByZWRpY3Rpb24oKSksICIvIiwgbV9kYXRhLT5mbHVz
aEZvcm1hdCgpKTsKKyAgICAKKyAgICBpZiAobV9kYXRhLT5pc1NpbmdseUFzc2lnbmVkKCkpCisg
ICAgICAgIG91dC5wcmludCgiPT4iLCBtX2RhdGEtPnNpbmdsZU1vdkhpbnQoKSk7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzAsNiArNzAsMTAgQEAgcHVibGljOgogICAgICAgICAsIG1fZnRsU3RhdGUoc3RhdGUpCiAg
ICAgICAgICwgbV9oZWFwcyhzdGF0ZS5jb250ZXh0KQogICAgICAgICAsIG1fb3V0KHN0YXRlLmNv
bnRleHQpCisgICAgICAgICwgbV9ib29sZWFuTG9jYWxzKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBtX2ludDMyTG9jYWxzKE9w
ZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAg
ICAgLCBtX2ludDY0TG9jYWxzKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZh
cmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBtX2RvdWJsZUxvY2FscyhPcGVyYW5kc0xpa2UsIHN0
YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCiAgICAgICAgICwgbV92YWx1ZVNv
dXJjZXMoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFk
KQogICAgICAgICAsIG1fc3RhdGUoc3RhdGUuZ3JhcGgpCiAgICAgICAgICwgbV9pbnRlcnByZXRl
cihzdGF0ZS5ncmFwaCwgbV9zdGF0ZSkKQEAgLTEwMSw2ICsxMDUsMTAgQEAgcHVibGljOgogICAg
ICAgICBtX3Byb2xvZ3VlID0gYXBwZW5kQmFzaWNCbG9jayhtX2Z0bFN0YXRlLmNvbnRleHQsIG1f
ZnRsU3RhdGUuZnVuY3Rpb24pOwogICAgICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlKTsK
ICAgICAgICAgY3JlYXRlUGhpVmFyaWFibGVzKCk7CisgICAgICAgIGNyZWF0ZVNoYWRvd0xvY2Fs
cyhtX2Jvb2xlYW5Mb2NhbHMsIG1fb3V0LmJvb2xlYW4pOworICAgICAgICBjcmVhdGVTaGFkb3dM
b2NhbHMobV9pbnQzMkxvY2FscywgbV9vdXQuaW50MzIpOworICAgICAgICBjcmVhdGVTaGFkb3dM
b2NhbHMobV9pbnQ2NExvY2FscywgbV9vdXQuaW50NjQpOworICAgICAgICBjcmVhdGVTaGFkb3dM
b2NhbHMobV9kb3VibGVMb2NhbHMsIG1fb3V0LmRvdWJsZVR5cGUpOwogICAgICAgICAKICAgICAg
ICAgbV9jYWxsRnJhbWUgPSBtX291dC5wYXJhbSgwKTsKICAgICAgICAgbV90YWdUeXBlTnVtYmVy
ID0gbV9vdXQuY29uc3RJbnQ2NChUYWdUeXBlTnVtYmVyKTsKQEAgLTE2OCw2ICsxNzYsMTIgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICB2b2lkIGNyZWF0ZVNoYWRvd0xv
Y2FscyhPcGVyYW5kczxMVmFsdWU+JiBvcGVyYW5kcywgTFR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG9wZXJhbmRzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAg
IG9wZXJhbmRzW2ldID0gbV9vdXQuYWxsb2NhKHR5cGUpOworICAgIH0KKyAgICAKICAgICB2b2lk
IGNvbXBpbGVCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7CiAgICAgICAgIGlmICghYmxv
Y2spCkBAIC01NjcsMjEgKzU4MSwzMSBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUganNWYWx1
ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsKIAogICAgICAgICBzd2l0Y2gg
KHVzZUtpbmRGb3IodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSB7Ci0gICAgICAgIGNhc2UgSW50
MzJVc2U6CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUJh
Y2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbV9ub2RlLCBpc05vdEludDMy
KGpzVmFsdWUpKTsKLSAgICAgICAgICAgIHNldEludDMyKHVuYm94SW50MzIoanNWYWx1ZSkpOwor
ICAgICAgICAgICAgTFZhbHVlIGludFZhbHVlID0gdW5ib3hJbnQzMihqc1ZhbHVlKTsKKyAgICAg
ICAgICAgIHNldEludDMyKGludFZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0LnNldChpbnRWYWx1
ZSwgbV9pbnQzMkxvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICB9CisgICAgICAgIGNhc2Ug
Q2VsbFVzZTogewogICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1
ZVZhbHVlKGpzVmFsdWUpLCBtX25vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7CiAgICAgICAgICAg
ICBzZXRKU1ZhbHVlKGpzVmFsdWUpOworICAgICAgICAgICAgbV9vdXQuc2V0KGpzVmFsdWUsIG1f
aW50NjRMb2NhbHMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgfQorICAgICAgICBjYXNlIEJv
b2xlYW5Vc2U6IHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZShqc1ZhbHVlKSwgbV9ub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOwotICAgICAg
ICAgICAgc2V0Qm9vbGVhbih1bmJveEJvb2xlYW4oanNWYWx1ZSkpOworICAgICAgICAgICAgTFZh
bHVlIGJvb2xlYW5WYWx1ZSA9IHVuYm94Qm9vbGVhbihqc1ZhbHVlKTsKKyAgICAgICAgICAgIHNl
dEJvb2xlYW4oYm9vbGVhblZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0LnNldChib29sZWFuVmFs
dWUsIG1fYm9vbGVhbkxvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICB9CisgICAgICAg
IGNhc2UgVW50eXBlZFVzZTogewogICAgICAgICAgICAgc2V0SlNWYWx1ZShqc1ZhbHVlKTsKKyAg
ICAgICAgICAgIG1fb3V0LnNldChqc1ZhbHVlLCBtX2ludDY0TG9jYWxzLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC02MTIsNDMgKzYzNiwzOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZv
aWQgY29tcGlsZVNldExvY2FsKCkKICAgICB7Ci0gICAgICAgIG9ic2VydmVNb3ZIaW50KG1fbm9k
ZSk7CisgICAgICAgIG9ic2VydmVNb3ZIaW50KCk7CiAgICAgICAgIAogICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAg
ICAgICAgc3dpdGNoICh2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkgewogICAgICAgICBjYXNlIEZs
dXNoZWRKU1ZhbHVlOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1f
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVz
c0Zvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3Rh
Y2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1
c2hlZERvdWJsZTogewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUodmFsdWUsIGFkZHJl
c3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291
cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKERvdWJsZUluSlNT
dGFjaywgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBG
bHVzaGVkSW50MzI6IHsKICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZv
cih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2Vz
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2ss
IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2hl
ZEludDUyOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQ1MihtX25vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDUySW5KU1N0YWNrLCB2YXJp
YWJsZS0+bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWRDZWxs
OiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ssIHZhcmlhYmxlLT5t
YWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46IHsK
QEAgLTY1NiwzMiArNjc1LDM3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5zdG9yZTY0
KAogICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKSwKICAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKHZhcmlhYmxlLT5t
YWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywgdmFyaWFibGUtPm1h
Y2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBEZWFkRmx1c2g6CisgICAgICAg
IGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGVtaXRNb3ZIaW50KCk7CisgICAgICAgIAorICAgICAgICAv
LyBEbyB0aGlzIGxhc3Qgc28gdGhhdCB3ZSBkb24ndCBsZWF2ZSBtX3ZhbHVlU291cmNlcyBjbGFp
bWluZyB0aGF0IHdlIGhhdmUgdG8KKyAgICAgICAgLy8gbG9hZCB0aGlzIHZhcmlhYmxlJ3MgdmFs
dWUgZnJvbSB0aGUgc2hhZG93IGxvY2Fscy4gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24uCisgICAg
ICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KKyAgICAgICAg
ICAgIFZhbHVlU291cmNlOjpmbHVzaGVkQXQodmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBjb21waWxlTW92SGludCgpCiAgICAgewotICAgICAgICBvYnNlcnZl
TW92SGludChtX25vZGUpOworICAgICAgICBlbWl0TW92SGludCgpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBpbGVab21iaWVIaW50KCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogZGF0YSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fdmFs
dWVTb3VyY2VzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0Rl
YWQpOworICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpID0gVmFs
dWVTb3VyY2UoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlTW92SGludEFuZENoZWNr
KCkKICAgICB7Ci0gICAgICAgIG9ic2VydmVNb3ZIaW50KG1fbm9kZSk7Ci0gICAgICAgIHNwZWN1
bGF0ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgb2JzZXJ2ZU1vdkhpbnQoKTsKKyAgICAg
ICAgZW1pdE1vdkhpbnQoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlUGhhbnRvbSgp
CkBAIC0zODQ5LDE3ICszODczLDQ4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplT1NS
RXhpdFN0YXRlRm9yQmxvY2soKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92
YWx1ZVNvdXJjZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2gg
PSBtX2hpZ2hCbG9jay0+c3NhLT5mbHVzaEF0SGVhZFtpXTsKKyAgICAgICAgICAgIEF2YWlsYWJp
bGl0eSBhdmFpbGFiaWx0aXkgPSBtX2hpZ2hCbG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRb
aV07CisgICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBhdmFpbGFiaWxpdHkuZmx1c2hlZEF0
KCk7CiAgICAgICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgpKSB7Ci0gICAgICAgICAgICBj
YXNlIERlYWRGbHVzaDogewotICAgICAgICAgICAgICAgIC8vIE11c3QgY29uc2lkZXIgYXZhaWxh
YmxlIG5vZGVzIGluc3RlYWQuCi0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJs
b2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXTsKLSAgICAgICAgICAgICAgICBpZiAoIW5v
ZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAgICAgICAgY2FzZSBDb25m
bGljdGluZ0ZsdXNoOiB7CisgICAgICAgICAgICAgICAgLy8gTXVzdCBjb25zaWRlciBhdmFpbGFi
bGUgdmFyaWFibGVzIGluc3RlYWQuCisgICAgICAgICAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHku
aGFzVmFyaWFibGUoKSkgewogICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9
IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX3Zh
bHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKG5vZGUpOworICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBhdmFpbGFiaWxpdHkudmFyaWFibGUoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoTm9kZSogbm9kZSA9IHZhcmlhYmxlLT5zaW5nbGVNb3ZIaW50KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBPU1IgZXhpdCBzaG91
bGQganVzdCB0cnkgdG8gbGF6aWx5IGZpZ3VyZSBvdXQgaG93CisgICAgICAgICAgICAgICAgICAg
IC8vIHRvIHJlYWQgYW5kIGRlY29kZSB3aGF0ZXZlciBub2RlIHRoaXMgdmFyaWFibGUgb3JpZ2lu
YXRlZCBmcm9tLgorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVl
U291cmNlcyhub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCB0aGUgdmFyaWFibGUgaXMgbXVsdGlwbHktYXNzaWduZWQgYW5kIHdlIHdpbGwgZW5zdXJlIHRo
YXQKKyAgICAgICAgICAgICAgICAvLyBpbiBlYWNoIHBsYWNlIHdoZXJlIHdlIGFzc2lnbiBpdCwg
d2Ugd2lsbCB1c2UgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24uCisgICAgICAgICAgICAgICAgc3dp
dGNoICh2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRmx1
c2hlZEpTVmFsdWU6CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWwp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNo
ZWREb3VibGU6CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVT
b3VyY2UoRG91YmxlSW5Mb2NhbCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
U291cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMySW5Mb2NhbCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgorICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDUySW5Mb2NhbCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hl
ZEJvb2xlYW46CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVT
b3VyY2UoQm9vbGVhbkluTG9jYWwpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCkBAIC0zOTQ1LDYgKzQwMDAsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFZhbHVlU291
cmNlIHNvdXJjZSA9IG1fdmFsdWVTb3VyY2VzW2ldOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBzd2l0Y2ggKHNvdXJjZS5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVJbkxvY2Fs
OgorICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudEZvckxvY2FsKAorICAgICAgICAgICAg
ICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0SlNWYWx1ZSwgbV9pbnQ2NExv
Y2Fsc1tpXSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJs
ZUluTG9jYWw6CisgICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50Rm9yTG9jYWwoCisgICAg
ICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXREb3VibGUsIG1f
ZG91YmxlTG9jYWxzW2ldKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgSW50MzJJbkxvY2FsOgorICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudEZvckxvY2Fs
KAorICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0SW50
MzIsIG1faW50MzJMb2NhbHNbaV0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBJbnQ1MkluTG9jYWw6CisgICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50Rm9y
TG9jYWwoCisgICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3Jt
YXRJbnQ1MiwgbV9pbnQ2NExvY2Fsc1tpXSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEJvb2xlYW5JbkxvY2FsOgorICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1
bWVudEZvckxvY2FsKAorICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZh
bHVlRm9ybWF0Qm9vbGVhbiwgbV9ib29sZWFuTG9jYWxzW2ldKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgVmFsdWVJbkpTU3RhY2s6CiAgICAgICAgICAgICAgICAg
ZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrKHNvdXJjZS52aXJ0dWFsUmVn
aXN0ZXIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00MDk5LDYgKzQxNzQsMTMgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICB2b2lkIGFkZEV4aXRBcmd1bWVu
dEZvckxvY2FsKAorICAgICAgICBPU1JFeGl0JiBleGl0LCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIHVuc2lnbmVkIGluZGV4LCBWYWx1ZUZvcm1hdCBmb3JtYXQsCisgICAgICAgIExWYWx1
ZSBsb2NhbCkKKyAgICB7CisgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMs
IGluZGV4LCBmb3JtYXQsIG1fb3V0LmdldChsb2NhbCkpOworICAgIH0KKyAgICAKICAgICB2b2lk
IGFkZEV4aXRBcmd1bWVudCgKICAgICAgICAgT1NSRXhpdCYgZXhpdCwgRXhpdEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCB1bnNpZ25lZCBpbmRleCwgVmFsdWVGb3JtYXQgZm9ybWF0LAogICAgICAg
ICBMVmFsdWUgdmFsdWUpCkBAIC00MTA3LDE0ICs0MTg5LDY3IEBAIHByaXZhdGU6CiAgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIG9ic2VydmVN
b3ZIaW50KE5vZGUqIG5vZGUpCisgICAgLy8gTm90aWZpZXMgb3VyIGxvY2FsIHZhbHVlIHNvdXJj
ZXMgdGhhdCB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYXZhaWxhYmxlIHZpYSB0aGUgZ2l2ZW4KKyAg
ICAvLyBub2RlLgorICAgIHZvaWQgb2JzZXJ2ZU1vdkhpbnQoKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKG5vZGUtPmNvbnRhaW5zTW92SGludCgpKTsKLSAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkg
IT0gWm9tYmllSGludCk7CisgICAgICAgIEFTU0VSVChtX25vZGUtPmNvbnRhaW5zTW92SGludCgp
KTsKKyAgICAgICAgQVNTRVJUKG1fbm9kZS0+b3AoKSAhPSBab21iaWVIaW50KTsKKyAgICAgICAg
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbV9ub2RlLT5sb2NhbCgpOwogICAg
ICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT5sb2NhbCgpOwor
ICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKG9wZXJhbmQpID0gVmFsdWVTb3VyY2UobV9u
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBGb3Igc2luZ2x5LWFz
c2lnbmVkIHZhcmlhYmxlcywgdGhpcyBqdXN0IG9ic2VydmVzIHRoYXQgdGhlIHZhcmlhYmxlIGlz
IGF2YWlsYWJsZSB2aWEKKyAgICAvLyB0aGUgYXBwcm9wcmlhdGUgbm9kZS4gRm9yIG11bHRpcGx5
LWFzc2lnbmVkIHZhcmlhYmxlcywgdGhpcyBzdG9yZXMgdGhlIHZhcmlhYmxlcyB2YWx1ZQorICAg
IC8vIGludG8gb3VyIGJ5dGVjb2RlIHNoYWRvdyBsb2NhbHMgYW5kIG5vdGVzIHRoaXMgaW4gbV92
YWx1ZVNvdXJjZXMuCisgICAgdm9pZCBlbWl0TW92SGludCgpCisgICAgeworICAgICAgICBBU1NF
UlQobV9ub2RlLT5jb250YWluc01vdkhpbnQoKSk7CisgICAgICAgIEFTU0VSVChtX25vZGUtPm9w
KCkgIT0gWm9tYmllSGludCk7CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IGRhdGEgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBpZiAoZGF0YS0+
aXNTaW5nbHlBc3NpZ25lZCgpKSB7CisgICAgICAgICAgICBvYnNlcnZlTW92SGludCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX3ZhbHVlU291
cmNlcy5vcGVyYW5kKG9wZXJhbmQpID0gVmFsdWVTb3VyY2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KTsKKyAgICAgICAgc3dpdGNoIChkYXRhLT5mbHVzaEZvcm1hdCgpKSB7CisgICAgICAgIGNhc2Ug
Rmx1c2hlZERvdWJsZToKKyAgICAgICAgICAgIG1fb3V0LnNldChsb3dEb3VibGUobV9ub2RlLT5j
aGlsZDEoKSksIG1fZG91YmxlTG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkpOworICAgICAg
ICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVlU291cmNl
KERvdWJsZUluTG9jYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgICAgICBtX291dC5zZXQobG93SW50MzIobV9u
b2RlLT5jaGlsZDEoKSksIG1faW50MzJMb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSk7Cisg
ICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpID0gVmFsdWVT
b3VyY2UoSW50MzJJbkxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgorICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0ludDUy
KG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2ludDY0TG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkp
OworICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZh
bHVlU291cmNlKEludDUySW5Mb2NhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSksIG1faW50NjRMb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCgp
KSk7CisgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpID0g
VmFsdWVTb3VyY2UoVmFsdWVJbkxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICBtX291dC5zZXQo
bG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwgbV9ib29sZWFuTG9jYWxzLm9wZXJhbmQoZGF0
YS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChkYXRhLT5s
b2NhbCgpKSA9IFZhbHVlU291cmNlKEJvb2xlYW5JbkxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgICAg
ICBtX291dC5zZXQobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgbV9pbnQ2NExvY2Fscy5v
cGVyYW5kKGRhdGEtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJh
bmQoZGF0YS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWwpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogICAgIH0KICAgICAKICAgICB2b2lkIHNldEludDMyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1
ZSkKQEAgLTQyNzQsNiArNDQwOSwxMiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8Tm9kZSosIExv
d2VyZWROb2RlVmFsdWU+IG1fZG91YmxlVmFsdWVzOwogICAgIEhhc2hTZXQ8Tm9kZSo+IG1fbGl2
ZTsKICAgICAKKyAgICAvLyBCeXRlY29kZSBzaGFkb3cgbG9jYWxzLgorICAgIE9wZXJhbmRzPExW
YWx1ZT4gbV9ib29sZWFuTG9jYWxzOworICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9pbnQzMkxvY2Fs
czsKKyAgICBPcGVyYW5kczxMVmFsdWU+IG1faW50NjRMb2NhbHM7CisgICAgT3BlcmFuZHM8TFZh
bHVlPiBtX2RvdWJsZUxvY2FsczsKKyAgICAKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1f
cGhpczsKICAgICAKICAgICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gbV92YWx1ZVNvdXJjZXM7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE1OTE0MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5OSw2ICsxOTksNyBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIGludFRvUHRyKExWYWx1ZSB2
YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIHZhbHVl
LCB0eXBlKTsgfQogICAgIExWYWx1ZSBiaXRDYXN0KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkg
eyByZXR1cm4gYnVpbGRCaXRDYXN0KG1fYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9CiAgICAgCisg
ICAgTFZhbHVlIGFsbG9jYShMVHlwZSB0eXBlKSB7IHJldHVybiBidWlsZEFsbG9jYShtX2J1aWxk
ZXIsIHR5cGUpOyB9CiAgICAgTFZhbHVlIGdldChMVmFsdWUgcmVmZXJlbmNlKSB7IHJldHVybiBi
dWlsZExvYWQobV9idWlsZGVyLCByZWZlcmVuY2UpOyB9CiAgICAgTFZhbHVlIHNldChMVmFsdWUg
dmFsdWUsIExWYWx1ZSByZWZlcmVuY2UpIHsgcmV0dXJuIGJ1aWxkU3RvcmUobV9idWlsZGVyLCB2
YWx1ZSwgcmVmZXJlbmNlKTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExWYWx1ZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2
ICszNiwyMSBAQCB2b2lkIFZhbHVlU291cmNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAg
Y2FzZSBTb3VyY2VOb3RTZXQ6CiAgICAgICAgIG91dC5wcmludCgiU291cmNlTm90U2V0Iik7CiAg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlSW5Mb2NhbDoKKyAgICAgICAgb3V0LnByaW50
KCJWYWx1ZUluTG9jYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50MzJJbkxvY2Fs
OgorICAgICAgICBvdXQucHJpbnQoIkludDMySW5Mb2NhbCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJbnQ1MkluTG9jYWw6CisgICAgICAgIG91dC5wcmludCgiSW50NTJJbkxvY2FsIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJvb2xlYW5JbkxvY2FsOgorICAgICAgICBvdXQu
cHJpbnQoIkJvb2xlYW5JbkxvY2FsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJs
ZUluTG9jYWw6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlSW5Mb2NhbCIpOworICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBWYWx1ZUluSlNTdGFjazoKICAgICAgICAgb3V0LnByaW50KCJWYWx1
ZUluSlNTdGFjazoiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHJldmlzaW9uIDE1
OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgewogCiBlbnVtIFZhbHVlU291cmNlS2luZCB7CiAgICAgU291cmNlTm90U2V0LAorICAgIFZh
bHVlSW5Mb2NhbCwKKyAgICBJbnQzMkluTG9jYWwsCisgICAgSW50NTJJbkxvY2FsLAorICAgIEJv
b2xlYW5JbkxvY2FsLAorICAgIERvdWJsZUluTG9jYWwsCiAgICAgVmFsdWVJbkpTU3RhY2ssCiAg
ICAgSW50MzJJbkpTU3RhY2ssCiAgICAgSW50NTJJbkpTU3RhY2ssCkBAIC01Niw3ICs2MSw3IEBA
IHB1YmxpYzoKICAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQga2luZCkK
ICAgICAgICAgOiBtX2tpbmQoa2luZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0g
U291cmNlSXNEZWFkKTsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBTb3VyY2VJc0RlYWQgfHwg
bV9raW5kID09IFZhbHVlSW5Mb2NhbCB8fCBtX2tpbmQgPT0gSW50MzJJbkxvY2FsIHx8IG1fa2lu
ZCA9PSBJbnQ1MkluTG9jYWwgfHwgbV9raW5kID09IEJvb2xlYW5JbkxvY2FsIHx8IG1fa2luZCA9
PSBEb3VibGVJbkxvY2FsKTsKICAgICB9CiAgICAgCiAgICAgZXhwbGljaXQgVmFsdWVTb3VyY2Uo
REZHOjpOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRHVt
cENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0R1bXBDb250ZXh0LmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRHVtcENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCwx
MSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotRHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KCkgeyB9
CitEdW1wQ29udGV4dDo6RHVtcENvbnRleHQoKQorICAgIDogbV9ncmFwaCgwKQoreworfQorCiBE
dW1wQ29udGV4dDo6fkR1bXBDb250ZXh0KCkgeyB9CiAKIGJvb2wgRHVtcENvbnRleHQ6OmlzRW1w
dHkoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRHVtcENvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EdW1wQ29u
dGV4dC5oCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EdW1wQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCituYW1lc3BhY2UgREZHIHsgY2xhc3MgR3JhcGg7IH0KKwogc3RydWN0IER1
bXBDb250ZXh0IHsKICAgICBEdW1wQ29udGV4dCgpOwogICAgIH5EdW1wQ29udGV4dCgpOwpAQCAt
NDEsNiArNDMsNyBAQCBzdHJ1Y3QgRHVtcENvbnRleHQgewogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCA9ICIiKSBjb25zdDsKICAgICAKICAgICBTdHJpbmdI
YXNoRHVtcENvbnRleHQ8U3RydWN0dXJlPiBzdHJ1Y3R1cmVzOworICAgIERGRzo6R3JhcGgqIGdy
YXBoOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
OSwxMyArNDY5LDEzIEBAIHB1YmxpYzoKICAgICBib29sIHVzZXNOb25TdHJpY3RFdmFsKCkgeyBy
ZXR1cm4gbV91c2VzTm9uU3RyaWN0RXZhbDsgfQogICAgIHZvaWQgc2V0VXNlc05vblN0cmljdEV2
YWwoYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCkgeyBtX3VzZXNOb25TdHJpY3RFdmFsID0gdXNlc05v
blN0cmljdEV2YWw7IH0KIAotICAgIGludCBjYXB0dXJlU3RhcnQoKSB7IHJldHVybiBtX2NhcHR1
cmVTdGFydDsgfQorICAgIGludCBjYXB0dXJlU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1
cmVTdGFydDsgfQogICAgIHZvaWQgc2V0Q2FwdHVyZVN0YXJ0KGludCBjYXB0dXJlU3RhcnQpIHsg
bV9jYXB0dXJlU3RhcnQgPSBjYXB0dXJlU3RhcnQ7IH0KIAotICAgIGludCBjYXB0dXJlRW5kKCkg
eyByZXR1cm4gbV9jYXB0dXJlRW5kOyB9CisgICAgaW50IGNhcHR1cmVFbmQoKSBjb25zdCB7IHJl
dHVybiBtX2NhcHR1cmVFbmQ7IH0KICAgICB2b2lkIHNldENhcHR1cmVFbmQoaW50IGNhcHR1cmVF
bmQpIHsgbV9jYXB0dXJlRW5kID0gY2FwdHVyZUVuZDsgfQogCi0gICAgaW50IGNhcHR1cmVDb3Vu
dCgpIHsgcmV0dXJuIC0obV9jYXB0dXJlRW5kIC0gbV9jYXB0dXJlU3RhcnQpOyB9CisgICAgaW50
IGNhcHR1cmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIC0obV9jYXB0dXJlRW5kIC0gbV9jYXB0dXJl
U3RhcnQpOyB9CiAKICAgICBpbnQgcGFyYW1ldGVyQ291bnQoKSB7IHJldHVybiBtX3BhcmFtZXRl
ckNvdW50SW5jbHVkaW5nVGhpcyAtIDE7IH0KICAgICBpbnQgcGFyYW1ldGVyQ291bnRJbmNsdWRp
bmdUaGlzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216971</attachid>
            <date>2013-11-14 13:21:38 -0800</date>
            <delta_ts>2013-11-14 13:35:49 -0800</delta_ts>
            <desc>compiles with FTL disabled</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>89728</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1OTE0MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtOTEsNiArOTEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdBcnJheU1vZGUuY3Bw
CiAgICAgZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCisgICAgZGZnL0RGR0F2YWlsYWJp
bGl0eS5jcHAKICAgICBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKICAgICBk
ZmcvREZHQmFzaWNCbG9jay5jcHAKICAgICBkZmcvREZHQmluYXJ5U3dpdGNoLmNwcApAQCAtMTM5
LDYgKzE0MCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0xvbmdM
aXZlZFN0YXRlLmNwcAogICAgIGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAK
ICAgICBkZmcvREZHTWluaWZpZWROb2RlLmNwcAorICAgIGRmZy9ERkdNb3ZIaW50Q291bnRpbmdQ
aGFzZS5jcHAKICAgICBkZmcvREZHTmF0dXJhbExvb3BzLmNwcAogICAgIGRmZy9ERkdOb2RlLmNw
cAogICAgIGRmZy9ERkdOb2RlRmxhZ3MuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMCArMTAw
LDExIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQXJyYXlQcm9maWxlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eVZhbEluZm8uaCBcCi0gICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
QmFzaWNCbG9jay5jcHAgXAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUJhc2ljQmxvY2suaCBcCi0gICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaCBcCkBAIC0xMzIs
NiArMTMzLDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4aXRLaW5kLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeHBy
ZXNzaW9uUmFuZ2VJbmZvLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxs
Qnl0ZWNvZGVMaXZlbmVzcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
U3RhdHVzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5o
IFwKQEAgLTIwNyw2ICsyMDksOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmNwcCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAgXApAQCAtMzE4LDYgKzMyMiw4IEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWluaWZpZWRJRC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVk
Tm9kZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludENvdW50aW5nUGhhc2UuY3Bw
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNlLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTMzOCw2ICszMzgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCIgLz4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5LmNwcCIgLz4NCiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2suY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPg0K
QEAgLTM4NCw2ICszODUsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xv
bmdMaXZlZFN0YXRlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZE5vZGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR05hdHVyYWxMb29wcy5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdOb2RlRmxhZ3MuY3BwIiAvPg0KQEAgLTc0NSw2ICs3NDcsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnlWYWxJbmZvLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzSW5saW5lLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcQ2FsbExpbmtJbmZvLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcQ2FsbExpbmtTdGF0dXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIiAvPg0KQEAgLTc2
Miw2ICs3NjUsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhlY3V0
aW9uQ291bnRlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV4
aXRLaW5kLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhwcmVz
c2lvblJhbmdlSW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XEZ1bGxCeXRlY29kZUxpdmVuc3MuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxHZXRCeUlkU3RhdHVzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcSGFuZGxlckluZm8uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxJbmxpbmVDYWxsRnJhbWVTZXQuaCIgLz4NCkBAIC04MTIsNiArODE2LDcgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9y
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRl
LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F2YWlsYWJpbGl0eS5o
IiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdh
dGlvblBoYXNlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2lj
QmxvY2suaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9j
a0lubGluZXMuaCIgLz4NCkBAIC04NzMsNiArODc4LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZEdyYXBoLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR01pbmlmaWVkSUQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHTWluaWZpZWROb2RlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR05hdHVyYWxMb29wcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdOb2RlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R05vZGVBbGxvY2F0b3IuaCIgLz4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw2ICsyNjAs
MTIgQEAKIAkJMEY2Mzk0NzgxNURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2Mzk0ODQx
NUU0ODExODAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ4MTE1RTQ4MTE0MDA2QTU5N0MgLyogREZH
QXJyYXlNb2RlLmNwcCAqLzsgfTsKIAkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0Fy
cmF5TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2Mzk0ODIxNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjY2RUMwMTgzNTY2RjkwMEQw
MTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEg
LyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAv
KiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxp
dmVuZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDMjE4MzU2NzJC
MDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCAqLzsgfTsKKwkJMEY2NjZFQzcxODM1Njcy
QjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQzMxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWls
YWJpbGl0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGNjY2RUM4MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVD
NDE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwICovOyB9Owor
CQkwRjY2NkVDOTE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50aW5nUGhhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUM1MTgz
NTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZCMTRERjNGMTYwMEI3
QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyog
REZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNzAyNUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MDI1
QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgKi87IH07
CkBAIC0xNTQ3LDYgKzE1NTMsMTIgQEAKIAkJMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0ODExNUU0
ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdBcnJheU1vZGUuY3BwOyBwYXRoID0gZGZnL0RGR0FycmF5TW9kZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3
QyAvKiBERkdBcnJheU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
QXJyYXlNb2RlLmg7IHBhdGggPSBkZmcvREZHQXJyYXlNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXNJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bGxCeXRlY29kZUxpdmVuZXNzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjY2RUMyMTgzNTY3MkIwMEQwMTdGMSAvKiBE
RkdBdmFpbGFiaWxpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHQXZhaWxhYmlsaXR5LmNwcDsgcGF0aCA9IGRmZy9ERkdBdmFpbGFiaWxpdHkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZH
QXZhaWxhYmlsaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0F2YWls
YWJpbGl0eS5oOyBwYXRoID0gZGZnL0RGR0F2YWlsYWJpbGl0eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjY2NkVDNDE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50
aW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTW92
SGludENvdW50aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQzUxODM1NjcyQjAwRDAx
N0YxIC8qIERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHTW92SGlu
dENvdW50aW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjgx
NERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQWRqYWNlbmN5TGlzdC5oOyBwYXRoID0gZGZnL0RGR0FkamFjZW5j
eUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjkxNERGM0YxMzAw
QjdCMkU0IC8qIERGR0VkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
RWRnZS5oOyBwYXRoID0gZGZnL0RGR0VkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzM5LDYgKzM3NTEsOCBAQAogCQkJCTBGNjM5
NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLywKIAkJCQlBN0Q5QTI4RjE3
QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCiAJCQkJQTdE
OUEyOTAxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCAqLywKKwkJ
CQkwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCAqLywKKwkJ
CQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggKi8sCiAJCQkJ
MEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
Y3BwICovLAogCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlLmggKi8sCiAJCQkJQTdEODlDRTMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jh
c2ljQmxvY2suY3BwICovLApAQCAtMzg0OSw2ICszODYzLDggQEAKIAkJCQkwRkI0QjUxMDE2QjNB
OTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovLAogCQkJCTBGMkJEQzRDMTUyMjgxODMw
MENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwICovLAogCQkJCTBGMkJEQzNFMTUyMjgwMTcw
MENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCAqLywKKwkJCQkwRjY2NkVDNDE4MzU2NzJCMDBE
MDE3RjEgLyogREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwICovLAorCQkJCTBGNjY2RUM1MTgz
NTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oICovLAogCQkJCUE3Mzc4
MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovLAogCQkJCUE3Mzc4
MTBCMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLywKIAkJCQkwRkI0QjUx
RTE2QjYyNzcyMDAzRjY5NkIgLyogREZHTm9kZS5jcHAgKi8sCkBAIC00MDMxLDE1ICs0MDQ3LDE2
IEBACiAJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQzJGQ0FFMEMxN0E5QzI0RTAwMzRD
NzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi8sCi0JCQkJQzJGQ0FFMEQxN0E5QzI0RTAw
MzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovLAotCQkJCUMyRkNBRTBFMTdBOUMyNEUw
MDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwICovLAotCQkJCUMyRkNBRTBG
MTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLywKIAkJCQkw
RjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgKi8s
CiAJCQkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUu
aCAqLywKIAkJCQkwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCAq
LywKIAkJCQkwRjYzOTQ1MjE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggKi8sCisJ
CQkJQzJGQ0FFMEMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi8s
CisJCQkJQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICov
LAogCQkJCTBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmgg
Ki8sCisJCQkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAgKi8sCisJCQkJQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcy5oICovLAorCQkJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8sCiAJCQkJMEY4MDIzRTkxNjEzODMyMzAw
QTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovLAogCQkJCTBGMEI4M0FFMTRCQ0Y3MTQwMDg4NUI0RiAv
KiBDYWxsTGlua0luZm8uY3BwICovLAogCQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4NUI0RiAvKiBD
YWxsTGlua0luZm8uaCAqLywKQEAgLTQwNjgsNiArNDA4NSw3IEBACiAJCQkJMEZCMTA1ODIxNjc1
NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCAqLywKIAkJCQkwRkIxMDU4MzE2NzU0ODBDMDBG
OEFCNkUgLyogRXhpdEtpbmQuaCAqLywKIAkJCQkwRjBCODNBQTE0QkNGNUI5MDA4ODVCNEYgLyog
RXhwcmVzc2lvblJhbmdlSW5mby5oICovLAorCQkJCTBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAv
KiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovLAogCQkJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjND
NiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYzQzYg
LyogR2V0QnlJZFN0YXR1cy5oICovLAogCQkJCTBGMEI4M0E4MTRCQ0Y1NUUwMDg4NUI0RiAvKiBI
YW5kbGVySW5mby5oICovLApAQCAtNDQ1NSw2ICs0NDczLDcgQEAKIAkJCQkyQTZGNDYyNjE3RTk1
OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGOTc0
NDcxMzhDODUzRTAwREExQzY3IC8qIEhlYXBSb290VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzI0RDMxRTMxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFw
VGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwRjBFMTZGNUNE
MDBCMzQ0NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCkBAIC00NTY0LDYgKzQ1ODMs
NyBAQAogCQkJCTdDMTg0RTFGMTdCRUUyMkUwMDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDM0JBMjk1MTdDMDM5NTYwMDcyRERDOSAvKiBKU1Byb21p
c2VSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0REVGOTYxODJEOTkxNDAwNTIyQzIy
IC8qIEpTTWFwSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjY2RUM5MTgzNTY3MkIw
MEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0MzQkEyOTcxN0MwMzk1NjAwNzJEREM5IC8qIEpTUHJvbWlzZVJlc29sdmVyQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDM0JBMjk5MTdDMDM5NTYwMDcyRERDOSAvKiBKU1Byb21p
c2VSZXNvbHZlclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYyNTUzRDIxNjEzNkUx
QTAwOUYxN0QwIC8qIEpTUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtNDY5Niw2ICs0NzE2LDcg
QEAKIAkJCQk5NUNENDU3NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTEwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGVOb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlBNTE2NkFEMzUxMDAwRjVCQTMgLyogUHJvZmls
ZXJCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0Yx
IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUI5MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVT
ZXF1ZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8q
IFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNDgwNSw2ICs0ODI2LDcg
QEAKIAkJCQlBN0E4QUYzRjE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdBOEFGNDAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVGMDhDRjE0NkM3NjMzMDAwNDcyQTkgLyogVW5jb25k
aXRpb25hbEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjZFQzcxODM1NjcyQjAw
RDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCNjAxODIx
NjM5RkQyQTAwMzcyQkEzIC8qIFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJFODkyQzE2RDAyOEFEMDA5RTRGRDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC01MjY4LDYgKzUyOTAsNyBAQAogCQkJCTE0N0YzOUMwMTA3RUMzNzYwMDQy
N0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0MDE3
RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0ODE2RTFCMTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjY2NkVDODE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50aW5n
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NjMxMDdFQzExQTAwMTNFN0IyIC8q
IEJvb2xlYW5Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg2NDEwN0VD
MTFBMDAxM0U3QjIgLyogQm9vbGVhbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4
MDg2NTEwN0VDMTFBMDAxM0U3QjIgLyogQm9vbGVhblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTU2OTAsNiArNTcxMyw3IEBACiAJCQkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8q
IFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjJFMTcxRTNFMjMw
MEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ5NEYzMDE3MUUz
RTIzMDBCRTc3QTQgLyogV2F0Y2hkb2dNYWMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NjZF
QzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQUNGNzM3NzE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNEU4NEY5RTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
QmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUJhc2ljQmxvY2suaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw4ICszNiw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiAKLXR5
cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgRmFzdEJpdFZlY3RvciwgV1RGOjpJbnRIYXNoPHVuc2ln
bmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4gPiBCeXRl
Y29kZVRvQml0bWFwTWFwOwotCiBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2sgOiBwdWJsaWMgUmVm
Q291bnRlZDxCeXRlY29kZUJhc2ljQmxvY2s+IHsKIHB1YmxpYzoKICAgICBlbnVtIFNwZWNpYWxC
bG9ja1R5cGUgeyBFbnRyeUJsb2NrLCBFeGl0QmxvY2sgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oIgogCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNz
LmgiCiAjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpA
QCAtMzgsNDQgKzQwLDIzIEBAIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVMaXZl
bmUKICAgICBjb21wdXRlKCk7CiB9CiAKLXN0YXRpYyBpbnQgbnVtYmVyT2ZDYXB0dXJlZFZhcmlh
YmxlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBpZiAoIWNvZGVCbG9jay0+c3ltYm9s
VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+c3ltYm9s
VGFibGUoKS0+Y2FwdHVyZUNvdW50KCk7Ci19Ci0KLXN0YXRpYyBpbnQgY2FwdHVyZVN0YXJ0KENv
ZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5jYXB0dXJlU3RhcnQoKTsKLX0KLQotc3RhdGljIGludCBjYXB0dXJlRW5kKENvZGVCbG9jayog
Y29kZUJsb2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJl
RW5kKCk7Ci19Ci0KIHN0YXRpYyBib29sIGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKENvZGVC
bG9jayogY29kZUJsb2NrLCBpbnQgb3BlcmFuZCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZyhvcGVyYW5kKTsKICAgICByZXR1cm4gIWNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lz
dGVySW5kZXgob3BlcmFuZCkgLy8gRG9uJ3QgY2FyZSBhYm91dCBjb25zdGFudHMuCiAgICAgICAg
ICYmIHZpcnR1YWxSZWcuaXNMb2NhbCgpIC8vIERvbid0IGNhcmUgYWJvdXQgYXJndW1lbnRzLgot
ICAgICAgICAmJiAoIW51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMoY29kZUJsb2NrKSAvLyBJZiB3
ZSBoYXZlIG5vIGNhcHR1cmVkIHZhcmlhYmxlcywgd2UncmUgZ29vZCB0byBnby4KLSAgICAgICAg
ICAgIHx8ICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY2FwdHVyZVN0YXJ0KGNvZGVCbG9jaykgfHwg
KHZpcnR1YWxSZWcub2Zmc2V0KCkgPD0gY2FwdHVyZUVuZChjb2RlQmxvY2spKSkpOworICAgICAg
ICAmJiAoIWNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkgLy8gSWYgd2UgaGF2ZSBubyBjYXB0dXJl
ZCB2YXJpYWJsZXMsIHdlJ3JlIGdvb2QgdG8gZ28uCisgICAgICAgICAgICB8fCAodmlydHVhbFJl
Zy5vZmZzZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkgfHwgKHZpcnR1YWxSZWcub2Zm
c2V0KCkgPD0gY29kZUJsb2NrLT5jYXB0dXJlRW5kKCkpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNl
dEZvck9wZXJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZhc3RCaXRWZWN0b3ImIGJpdHMsIGlu
dCBvcGVyYW5kKQogewogICAgIEFTU0VSVChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2Rl
QmxvY2ssIG9wZXJhbmQpKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5k
KTsKLSAgICBpZiAodmlydHVhbFJlZy5vZmZzZXQoKSA+IGNhcHR1cmVTdGFydChjb2RlQmxvY2sp
KQorICAgIGlmICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQo
KSkKICAgICAgICAgYml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkpOwogICAgIGVsc2UKLSAg
ICAgICAgYml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkgLSBudW1iZXJPZkNhcHR1cmVkVmFy
aWFibGVzKGNvZGVCbG9jaykpOworICAgICAgICBiaXRzLnNldCh2aXJ0dWFsUmVnLnRvTG9jYWwo
KSAtIGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkpOwogfQogCiBzdGF0aWMgdm9pZCBjb21wdXRl
VXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgdXNlcykKQEAgLTUzMywxMyArNTE0LDMyIEBAIHN0
YXRpYyBCeXRlY29kZUJhc2ljQmxvY2sqIGZpbmRCYXNpY0Jsb2MKICAgICByZXR1cm4gYmFzaWNC
bG9ja1sxXS5nZXQoKTsKIH0KIAorc3RhdGljIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+PiYgYmFz
aWNCbG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiB1c2VzLCBG
YXN0Qml0VmVjdG9yJiBkZWZzLCBGYXN0Qml0VmVjdG9yJiBvdXQpCit7CisgICAgdXNlcy5jbGVh
ckFsbCgpOworICAgIGRlZnMuY2xlYXJBbGwoKTsKKyAgICAKKyAgICBjb21wdXRlVXNlc0ZvckJ5
dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQsIHVzZXMpOworICAgIGNvbXB1
dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgZGVmcyk7
CisgICAgCisgICAgb3V0LmV4Y2x1ZGUoZGVmcyk7CisgICAgb3V0Lm1lcmdlKHVzZXMpOworICAg
IAorICAgIC8vIElmIHdlIGhhdmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIHdlIHdhbnQgdGhlIGxp
dmUtaW4gdmFyaWFibGVzIG9mIHRoZSAKKyAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9jayB0
byBiZSBpbmNsdWRlZCBpbiB0aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgYnl0ZWNvZGUu
CisgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSB7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9j
ayogaGFuZGxlckJsb2NrID0gZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGJhc2ljQmxv
Y2tzLCBoYW5kbGVyLT50YXJnZXQpOworICAgICAgICBBU1NFUlQoaGFuZGxlckJsb2NrKTsKKyAg
ICAgICAgb3V0Lm1lcmdlKGhhbmRsZXJCbG9jay0+aW4oKSk7CisgICAgfQorfQorCiBzdGF0aWMg
dm9pZCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrLCBWZWN0b3I8UmVmUHRyPEJ5dGVjb2Rl
QmFzaWNCbG9jaz4gPiYgYmFzaWNCbG9ja3MsIHVuc2lnbmVkIHRhcmdldE9mZnNldCwgRmFzdEJp
dFZlY3RvciYgcmVzdWx0KQogewogICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwog
ICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygpKTsKIAogICAgIEZhc3RCaXRWZWN0b3Ig
b3V0ID0gYmxvY2stPm91dCgpOwotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gMDsKIAogICAg
IEZhc3RCaXRWZWN0b3IgdXNlczsKICAgICBGYXN0Qml0VmVjdG9yIGRlZnM7CkBAIC01NTAsMjMg
KzU1MCw4IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWMKICAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+Ynl0ZWNvZGVPZmZzZXRzKClbaV07
CiAgICAgICAgIGlmICh0YXJnZXRPZmZzZXQgPiBieXRlY29kZU9mZnNldCkKICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIHVzZXMuY2xlYXJBbGwoKTsKLSAgICAgICAgZGVmcy5jbGVhckFs
bCgpOwotCi0gICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBi
eXRlY29kZU9mZnNldCwgdXNlcyk7Ci0gICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZz
ZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgZGVmcyk7Ci0KLSAgICAgICAgb3V0LmV4Y2x1
ZGUoZGVmcyk7Ci0gICAgICAgIG91dC5tZXJnZSh1c2VzKTsKLQotICAgICAgICAvLyBJZiB3ZSBo
YXZlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCB3ZSB3YW50IHRoZSBsaXZlLWluIHZhcmlhYmxlcyBv
ZiB0aGUgCi0gICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGVyIGJsb2NrIHRvIGJlIGluY2x1ZGVk
IGluIHRoZSBsaXZlLWluIG9mIHRoaXMgcGFydGljdWxhciBieXRlY29kZS4KLSAgICAgICAgaWYg
KChoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQpKSkgewotICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBoYW5kbGVyQmxvY2sg
PSBmaW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoYmFzaWNCbG9ja3MsIGhhbmRsZXItPnRh
cmdldCk7Ci0gICAgICAgICAgICBBU1NFUlQoaGFuZGxlckJsb2NrKTsKLSAgICAgICAgICAgIG91
dC5tZXJnZShoYW5kbGVyQmxvY2stPmluKCkpOwotICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBzdGVwT3Zlckluc3RydWN0aW9uKGNvZGVCbG9jaywgYmFzaWNCbG9ja3MsIGJ5dGVjb2RlT2Zm
c2V0LCB1c2VzLCBkZWZzLCBvdXQpOwogICAgIH0KIAogICAgIHJlc3VsdC5zZXQob3V0KTsKQEAg
LTU4Myw3ICs1NjgsNyBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6cnVuTGl2ZW5l
CiB7CiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZWYXJpYWJsZXMg
PSB1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzICsgCi0gICAgICAgIHVubGlua2VkQ29kZUJs
b2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAtIG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9j
b2RlQmxvY2spOworICAgICAgICB1bmxpbmtlZENvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3Rl
cnMgLSBtX2NvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9iYXNpY0Jsb2Nrcy5zaXplKCk7IGkrKykgewogICAgICAgICBCeXRlY29kZUJh
c2ljQmxvY2sqIGJsb2NrID0gbV9iYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKQEAgLTYyMiwzNiArNjA3
LDMwIEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmUKIAogYm9vbCBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6Om9wZXJhbmRJc0xpdmVBdEJ5dGVjb2RlT2Zmc2V0KGlu
dCBvcGVyYW5kLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsKLSAgICBpbnQgbnVtQ2FwdHVy
ZWRWYXJzID0gbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhtX2NvZGVCbG9jayk7Ci0gICAgaWYg
KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0FyZ3VtZW50KCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGlmIChvcGVyYW5kIDw9IGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykgJiYgb3Bl
cmFuZCA+IGNhcHR1cmVFbmQobV9jb2RlQmxvY2spKQorICAgIGlmIChvcGVyYW5kSXNBbHdheXNM
aXZlKG1fY29kZUJsb2NrLCBvcGVyYW5kKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgRmFz
dEJpdFZlY3RvciByZXN1bHQ7CiAgICAgZ2V0TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVyZWRWYXJz
QXRCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVz
dWx0LmdldChvcGVyYW5kIC0gbnVtQ2FwdHVyZWRWYXJzKTsKKyAgICByZXR1cm4gb3BlcmFuZFRo
YXRJc05vdEFsd2F5c0xpdmVJc0xpdmUobV9jb2RlQmxvY2ssIHJlc3VsdCwgb3BlcmFuZCk7CiB9
CiAKLUZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0lu
Zm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorRmFzdEJpdFZlY3Rv
ciBnZXRMaXZlbmVzc0luZm8oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZhc3RCaXRWZWN0
b3ImIG91dCkKIHsKLSAgICBGYXN0Qml0VmVjdG9yIHRlbXA7CiAgICAgRmFzdEJpdFZlY3RvciBy
ZXN1bHQ7CiAKLSAgICBnZXRMaXZlbmVzc0luZm9Gb3JOb25DYXB0dXJlZFZhcnNBdEJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCB0ZW1wKTsKLQotICAgIHVuc2lnbmVkIG51bUNhcHR1cmVk
VmFycyA9IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9jb2RlQmxvY2spOworICAgIHVuc2ln
bmVkIG51bUNhcHR1cmVkVmFycyA9IGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCk7CiAgICAgaWYg
KG51bUNhcHR1cmVkVmFycykgewotICAgICAgICBpbnQgZmlyc3RDYXB0dXJlZExvY2FsID0gVmly
dHVhbFJlZ2lzdGVyKGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykpLnRvTG9jYWwoKTsKLSAgICAg
ICAgcmVzdWx0LnJlc2l6ZSh0ZW1wLm51bUJpdHMoKSArIG51bUNhcHR1cmVkVmFycyk7CisgICAg
ICAgIGludCBmaXJzdENhcHR1cmVkTG9jYWwgPSBWaXJ0dWFsUmVnaXN0ZXIoY29kZUJsb2NrLT5j
YXB0dXJlU3RhcnQoKSkudG9Mb2NhbCgpOworICAgICAgICByZXN1bHQucmVzaXplKG91dC5udW1C
aXRzKCkgKyBudW1DYXB0dXJlZFZhcnMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtQ2FwdHVyZWRWYXJzOyArK2kpCiAgICAgICAgICAgICByZXN1bHQuc2V0KGZpcnN0Q2Fw
dHVyZWRMb2NhbCArIGkpOwogICAgIH0gZWxzZQotICAgICAgICByZXN1bHQucmVzaXplKHRlbXAu
bnVtQml0cygpKTsKKyAgICAgICAgcmVzdWx0LnJlc2l6ZShvdXQubnVtQml0cygpKTsKIAotICAg
IGludCB0ZW1wTGVuZ3RoID0gdGVtcC5udW1CaXRzKCk7Ci0gICAgQVNTRVJUKHRlbXBMZW5ndGgg
Pj0gMCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZW1wTGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgaWYgKCF0ZW1wLmdldChpKSkKKyAgICBpbnQgb3V0TGVuZ3RoID0gb3V0Lm51bUJpdHMoKTsK
KyAgICBBU1NFUlQob3V0TGVuZ3RoID49IDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0
TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKCFvdXQuZ2V0KGkpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgaWYgKCFudW1DYXB0dXJlZFZhcnMpIHsKQEAgLTY1OSw3ICs2Mzgs
NyBAQCBGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKS5vZmZzZXQoKSA+IGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykpCisgICAgICAgIGlm
ICh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKS5vZmZzZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVy
ZVN0YXJ0KCkpCiAgICAgICAgICAgICByZXN1bHQuc2V0KGkpOwogICAgICAgICBlbHNlIAogICAg
ICAgICAgICAgcmVzdWx0LnNldChudW1DYXB0dXJlZFZhcnMgKyBpKTsKQEAgLTY2Nyw2ICs2NDYs
MzkgQEAgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OgogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK0Zhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpn
ZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQor
eworICAgIEZhc3RCaXRWZWN0b3Igb3V0OworICAgIGdldExpdmVuZXNzSW5mb0Zvck5vbkNhcHR1
cmVkVmFyc0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgcmV0dXJu
IGdldExpdmVuZXNzSW5mbyhtX2NvZGVCbG9jaywgb3V0KTsKK30KKwordm9pZCBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MoRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mm
IHJlc3VsdCkKK3sKKyAgICBGYXN0Qml0VmVjdG9yIG91dDsKKyAgICBGYXN0Qml0VmVjdG9yIHVz
ZXM7CisgICAgRmFzdEJpdFZlY3RvciBkZWZzOworICAgIAorICAgIHJlc3VsdC5tX2NvZGVCbG9j
ayA9IG1fY29kZUJsb2NrOworICAgIHJlc3VsdC5tX21hcC5jbGVhcigpOworICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fYmFzaWNCbG9ja3Muc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEJ5
dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jhc2ljQmxvY2tzW2ldLmdldCgpOworICAgICAg
ICBpZiAoYmxvY2stPmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLT5pc0V4aXRCbG9jaygpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBvdXQgPSBibG9jay0+b3V0KCk7
CisgICAgICAgIHVzZXMucmVzaXplKG91dC5udW1CaXRzKCkpOworICAgICAgICBkZWZzLnJlc2l6
ZShvdXQubnVtQml0cygpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5ieXRlY29kZU9mZnNldHMoKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0cygpW2ldOworICAgICAg
ICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihtX2NvZGVCbG9jaywgbV9iYXNpY0Jsb2NrcywgYnl0
ZWNvZGVPZmZzZXQsIHVzZXMsIGRlZnMsIG91dCk7CisgICAgICAgICAgICByZXN1bHQubV9tYXAu
YWRkKGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMoKQogewogICAgIEludGVycHJldGVy
KiBpbnRlcnByZXRlciA9IG1fY29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRlcjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsMTMgKzM0LDE2IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOworY2xh
c3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3M7CiAKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cyB7CiBwdWJsaWM6CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzKENvZGVCbG9jayopOwot
CisgICAgCiAgICAgYm9vbCBvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9mZnNldChpbnQgb3BlcmFu
ZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5l
c3NJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAgCisg
ICAgdm9pZCBjb21wdXRlRnVsbExpdmVuZXNzKEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQp
OwogCiBwcml2YXRlOgogICAgIHZvaWQgY29tcHV0ZSgpOwpAQCAtNTMsNiArNTYsMTIgQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiBtX2Jhc2ljQmxv
Y2tzOwogfTsKIAoraW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgaW50IG9wZXJhbmQpOworaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5
c0xpdmVJc0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91
dCwgaW50IG9wZXJhbmQpOworaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CisKK0Zhc3RC
aXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvKENvZGVCbG9jayosIGNvbnN0IEZhc3RCaXRWZWN0b3Im
IG91dCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lc19oCisjZGVmaW5l
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXNfaAorCisjaW5jbHVkZSAiQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitpbmxpbmUgYm9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKENvZGVCbG9jayogY29kZUJs
b2NrLCBpbnQgb3BlcmFuZCkKK3sKKyAgICBpZiAoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlz
QXJndW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG9wZXJhbmQgPD0g
Y29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSAmJiBvcGVyYW5kID4gY29kZUJsb2NrLT5jYXB0dXJl
RW5kKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZl
KENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVy
YW5kKQoreworICAgIHJldHVybiBvdXQuZ2V0KG9wZXJhbmQgLSBjb2RlQmxvY2stPmNhcHR1cmVD
b3VudCgpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShDb2RlQmxvY2sqIGNvZGVC
bG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK3sKKyAgICByZXR1
cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShjb2RlQmxvY2ssIG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0
SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvZGVCbG9jaywgb3V0LCBvcGVyYW5kKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxp
bmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNiArMzU0LDI3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX25lZWRzQWN0aXZhdGlvbjsKICAgICB9CisgICAgCisgICAg
dW5zaWduZWQgY2FwdHVyZUNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghc3ltYm9s
VGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gc3ltYm9sVGFi
bGUoKS0+Y2FwdHVyZUNvdW50KCk7CisgICAgfQorICAgIAorICAgIGludCBjYXB0dXJlU3RhcnQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKTsK
KyAgICB9CisgICAgCisgICAgaW50IGNhcHR1cmVFbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7CisgICAgfQogCiAgICAgYm9vbCBpc0NhcHR1
cmVkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBJbmxpbmVDYWxsRnJhbWUqID0gMCkgY29uc3Q7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZ1bGxCeXRlY29kZUxpdmVuZXNzX2gK
KyNkZWZpbmUgRnVsbEJ5dGVjb2RlTGl2ZW5lc3NfaAorCisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRW
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczsKKwordHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBGYXN0Qml0VmVjdG9yLCBXVEY6Oklu
dEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2ln
bmVkPiA+IEJ5dGVjb2RlVG9CaXRtYXBNYXA7CisKK2NsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNz
IHsKK3B1YmxpYzoKKyAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcygpIDogbV9jb2RlQmxvY2soMCkg
eyB9CisgICAgCisgICAgLy8gV2Ugc2F5ICJvdXQiIHRvIHJlZmVyIHRvIHRoZSBiaXR2ZWN0b3Ig
dGhhdCBjb250YWlucyByYXcgcmVzdWx0cyBmb3IgYSBieXRlY29kZQorICAgIC8vIGluc3RydWN0
aW9uLgorICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGdldE91dCh1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQnl0ZWNvZGVUb0JpdG1hcE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VSVChp
dGVyICE9IG1fbWFwLmVuZCgpKTsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworICAgIH0K
KyAgICAKKyAgICBib29sIG9wZXJhbmRJc0xpdmUoaW50IG9wZXJhbmQsIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2
ZShtX2NvZGVCbG9jaywgb3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xp
dmUobV9jb2RlQmxvY2ssIGdldE91dChieXRlY29kZUluZGV4KSwgb3BlcmFuZCk7CisgICAgfQor
ICAgIAorICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3ModW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRMaXZlbmVzc0luZm8obV9jb2RlQmxv
Y2ssIGdldE91dChieXRlY29kZUluZGV4KSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworICAgIAorICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7CisgICAgQnl0ZWNvZGVUb0JpdG1hcE1hcCBtX21hcDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRnVsbEJ5dGVjb2RlTGl2ZW5lc3NfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0F2YWlsYWJpbGl0eS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKwordm9pZCBBdmFpbGFiaWxpdHk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgMCk7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5Ojpk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25z
dAoreworICAgIG91dC5wcmludChtX2ZsdXNoZWRBdCwgIi8iKTsKKyAgICAKKyAgICBHcmFwaCog
Z3JhcGggPSBjb250ZXh0ID8gY29udGV4dC0+Z3JhcGggOiAwOworICAgIAorICAgIGlmICh2YXJp
YWJsZUlzVW5kZWNpZGVkKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJVbmRlY2lkZWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAodmFyaWFibGVJc1VuYXZhaWxhYmxl
KCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJVbmF2YWlsYWJsZSIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChncmFwaCkgeworICAgICAgICBvdXQucHJpbnQoVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcCgqZ3JhcGgsIG1fdmFyaWFibGUpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihtX3ZhcmlhYmxlKSk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQXZhaWxhYmlsaXR5X2gKKyNkZWZp
bmUgREZHQXZhaWxhYmlsaXR5X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHRmx1c2hlZEF0LmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQXZhaWxhYmlsaXR5IHsKK3B1
YmxpYzoKKyAgICBBdmFpbGFiaWxpdHkoKQorICAgICAgICA6IG1fdmFyaWFibGUoMCkKKyAgICAg
ICAgLCBtX2ZsdXNoZWRBdChEZWFkRmx1c2gpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBs
aWNpdCBBdmFpbGFiaWxpdHkoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSkKKyAgICAgICAg
OiBtX3ZhcmlhYmxlKHZhcmlhYmxlKQorICAgICAgICAsIG1fZmx1c2hlZEF0KENvbmZsaWN0aW5n
Rmx1c2gpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgQXZhaWxhYmlsaXR5IHVuYXZh
aWxhYmxlKCkKKyAgICB7CisgICAgICAgIEF2YWlsYWJpbGl0eSByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX3ZhcmlhYmxlID0gYml0d2lzZV9jYXN0PFZhcmlhYmxlQWNjZXNzRGF0YSo+KHN0YXRp
Y19jYXN0PGludHB0cl90PigxKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIEF2YWlsYWJpbGl0eSB3aXRoRmx1c2goRmx1c2hlZEF0IGZsdXNoKQorICAgIHsKKyAg
ICAgICAgQXZhaWxhYmlsaXR5IHJlc3VsdCA9ICp0aGlzOworICAgICAgICByZXN1bHQubV9mbHVz
aGVkQXQgPSBmbHVzaDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
Ym9vbCB2YXJpYWJsZUlzVW5kZWNpZGVkKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZSA9PSAw
OyB9CisgICAgYm9vbCB2YXJpYWJsZUlzVW5hdmFpbGFibGUoKSBjb25zdCB7IHJldHVybiAqdGhp
cyA9PSB1bmF2YWlsYWJsZSgpOyB9CisgICAgCisgICAgYm9vbCBoYXNWYXJpYWJsZSgpIGNvbnN0
IHsgcmV0dXJuICF2YXJpYWJsZUlzVW5kZWNpZGVkKCkgJiYgIXZhcmlhYmxlSXNVbmF2YWlsYWJs
ZSgpOyB9CisgICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoIXZhcmlhYmxlSXNVbmRlY2lkZWQoKSk7CisgICAgICAgIEFT
U0VSVCghdmFyaWFibGVJc1VuYXZhaWxhYmxlKCkpOworICAgICAgICByZXR1cm4gbV92YXJpYWJs
ZTsKKyAgICB9CisgICAgCisgICAgRmx1c2hlZEF0IGZsdXNoZWRBdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZmx1c2hlZEF0OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biB2YXJpYWJsZUlzVW5hdmFpbGFibGUoKSAmJiAhZmx1c2hlZEF0KCk7IH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBBdmFpbGFiaWxpdHkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdmFyaWFibGUgPT0gb3RoZXIubV92YXJpYWJsZQorICAgICAgICAgICAgJiYg
bV9mbHVzaGVkQXQgPT0gb3RoZXIubV9mbHVzaGVkQXQ7CisgICAgfQorICAgIAorICAgIEF2YWls
YWJpbGl0eSBtZXJnZShjb25zdCBBdmFpbGFiaWxpdHkmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQXZhaWxhYmlsaXR5IHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIGlmICh2YXJpYWJs
ZUlzVW5kZWNpZGVkKCkpCisgICAgICAgICAgICByZXN1bHQgPSBvdGhlcjsKKyAgICAgICAgZWxz
ZSBpZiAob3RoZXIudmFyaWFibGVJc1VuZGVjaWRlZCgpKQorICAgICAgICAgICAgcmVzdWx0ID0g
KnRoaXM7CisgICAgICAgIGVsc2UgaWYgKHZhcmlhYmxlKCkgPT0gb3RoZXIudmFyaWFibGUoKSkK
KyAgICAgICAgICAgIHJlc3VsdCA9ICp0aGlzOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXN1bHQgPSB1bmF2YWlsYWJsZSgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdC53
aXRoRmx1c2goZmx1c2hlZEF0KCkubWVyZ2Uob3RoZXIuZmx1c2hlZEF0KCkpKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG1fdmFyaWFibGU7CisgICAgRmx1c2hlZEF0IG1fZmx1c2hl
ZEF0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBdmFpbGFiaWxpdHlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTU5MTQxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Fi
c3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHkuaCIKICNpbmNsdWRlICJE
RkdCcmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdGbHVzaGVkQXQuaCIKICNpbmNsdWRl
ICJERkdOb2RlLmgiCkBAIC0xNDAsOCArMTQxLDggQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZD
b3VudGVkPEJhc2ljQmxvYwogICAgIHN0cnVjdCBTU0FEYXRhIHsKICAgICAgICAgT3BlcmFuZHM8
Rmx1c2hlZEF0PiBmbHVzaEF0SGVhZDsKICAgICAgICAgT3BlcmFuZHM8Rmx1c2hlZEF0PiBmbHVz
aEF0VGFpbDsKLSAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0eUF0SGVhZDsKLSAg
ICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAgT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPEF2
YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5QXRUYWlsOwogICAgICAgICBIYXNoU2V0PE5vZGUqPiBs
aXZlQXRIZWFkOwogICAgICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlQXRUYWlsOwogICAgICAgICBI
YXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxNTkx
NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogRGlzYXNzZW1ibGVyOjpEaXNhc3NlbWJsZXIoR3JhcGgmIGdyYXBoKQogICAgIDogbV9n
cmFwaChncmFwaCkKIHsKKyAgICBtX2R1bXBDb250ZXh0LmdyYXBoID0gJm1fZ3JhcGg7CiAgICAg
bV9sYWJlbEZvckJsb2NrSW5kZXgucmVzaXplKGdyYXBoLm51bUJsb2NrcygpKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAJKHJldmlz
aW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBGbHUKICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICBv
dXQucHJpbnQoIkZsdXNoZWRKU1ZhbHVlIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENv
bmZsaWN0aW5nRmx1c2g6CisgICAgICAgIG91dC5wcmludCgiQ29uZmxpY3RpbmdGbHVzaCIpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCShy
ZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9y
bWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDggQEAgZW51bSBGbHVzaEZvcm1hdCB7
CiAgICAgRmx1c2hlZERvdWJsZSwKICAgICBGbHVzaGVkQ2VsbCwKICAgICBGbHVzaGVkQm9vbGVh
biwKLSAgICBGbHVzaGVkSlNWYWx1ZQorICAgIEZsdXNoZWRKU1ZhbHVlLAorICAgIENvbmZsaWN0
aW5nRmx1c2gKIH07CiAKIGlubGluZSBOb2RlRmxhZ3MgcmVzdWx0Rm9yKEZsdXNoRm9ybWF0IGZv
cm1hdCkKQEAgLTU0LDYgKzU1LDcgQEAgaW5saW5lIE5vZGVGbGFncyByZXN1bHRGb3IoRmx1c2hG
b3JtYXQgZgogICAgIGNhc2UgRGVhZEZsdXNoOgogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CiAg
ICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAgICAg
IHJldHVybiBOb2RlUmVzdWx0SlM7CiAgICAgY2FzZSBGbHVzaGVkSW50MzI6CiAgICAgICAgIHJl
dHVybiBOb2RlUmVzdWx0SW50MzI7CkBAIC03Myw2ICs3NSw3IEBAIGlubGluZSBVc2VLaW5kIHVz
ZUtpbmRGb3IoRmx1c2hGb3JtYXQgZm8KICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2Ug
RGVhZEZsdXNoOgogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgY2FzZSBDb25mbGljdGlu
Z0ZsdXNoOgogICAgICAgICByZXR1cm4gVW50eXBlZFVzZTsKICAgICBjYXNlIEZsdXNoZWRDZWxs
OgogICAgICAgICByZXR1cm4gQ2VsbFVzZTsKQEAgLTkzLDYgKzk2LDcgQEAgaW5saW5lIERhdGFG
b3JtYXQgZGF0YUZvcm1hdEZvcihGbHVzaEZvcgogewogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAg
ICAgY2FzZSBEZWFkRmx1c2g6CisgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgogICAgICAgICBy
ZXR1cm4gRGF0YUZvcm1hdERlYWQ7CiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAgICAgICAg
cmV0dXJuIERhdGFGb3JtYXRKUzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rmx1c2hlZEF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZsdXNoZWRBdC5jcHAJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmx1c2hlZEF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgRmx1c2hlZEF0OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZm9ybWF0ID09IERlYWRGbHVzaCkK
KyAgICBpZiAobV9mb3JtYXQgPT0gRGVhZEZsdXNoIHx8IG1fZm9ybWF0ID09IENvbmZsaWN0aW5n
Rmx1c2gpCiAgICAgICAgIG91dC5wcmludChtX2Zvcm1hdCk7CiAgICAgZWxzZQogICAgICAgICBv
dXQucHJpbnQoInIiLCBtX3ZpcnR1YWxSZWdpc3RlciwgIjoiLCBtX2Zvcm1hdCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgJKHJldmlzaW9uIDE1OTE0MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDYgKzQyLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAorICAgIGV4
cGxpY2l0IEZsdXNoZWRBdChGbHVzaEZvcm1hdCBmb3JtYXQpCisgICAgICAgIDogbV9mb3JtYXQo
Zm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEZWFkRmx1c2ggfHwgZm9y
bWF0ID09IENvbmZsaWN0aW5nRmx1c2gpOworICAgIH0KKyAgICAKICAgICBGbHVzaGVkQXQoRmx1
c2hGb3JtYXQgZm9ybWF0LCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgICAg
ICA6IG1fZm9ybWF0KGZvcm1hdCkKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFs
UmVnaXN0ZXIpCkBAIC02NSw2ICs3MSwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IEZsdXNoZWRBdCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOyB9CiAgICAgCisgICAgRmx1c2hlZEF0IG1lcmdlKGNvbnN0IEZsdXNoZWRBdCYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzKQorICAgICAgICAgICAgcmV0dXJu
IG90aGVyOworICAgICAgICBpZiAoIW90aGVyKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgICAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgIHJldHVybiBGbHVzaGVkQXQoQ29uZmxpY3RpbmdGbHVzaCk7CisgICAgfQorICAgIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Myw2
ICszOTMsNyBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiB2b2lk
IEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KQogewog
ICAgIER1bXBDb250ZXh0IG15Q29udGV4dDsKKyAgICBteUNvbnRleHQuZ3JhcGggPSB0aGlzOwog
ICAgIGlmICghY29udGV4dCkKICAgICAgICAgY29udGV4dCA9ICZteUNvbnRleHQ7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTkxNDEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
REZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJG
dWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZVNldC5oIgog
I2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmgiCkBAIC00MTYsNiArNDE3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGV4ZWN1
dGFibGVGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KICAgICAKKyAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAg
ICByZXR1cm4gbV9wcm9maWxlZEJsb2NrOworICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxv
Y2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICB9CisgICAgCiAgICAg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3Jp
Z2luKQogICAgIHsKICAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5k
QmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgbV9wcm9maWxlZEJsb2NrKTsKQEAgLTc3Niw2
ICs3ODQsNDEgQEAgcHVibGljOgogICAgIERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMo
KSB7IHJldHVybiBtX3BsYW4ud2F0Y2hwb2ludHM7IH0KICAgICBEZXNpcmVkU3RydWN0dXJlQ2hh
aW5zJiBjaGFpbnMoKSB7IHJldHVybiBtX3BsYW4uY2hhaW5zOyB9CiAgICAgCisgICAgRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsK
KyAgICAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2Rl
TGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9IG1fYnl0ZWNvZGVMaXZlbmVzcy5maW5kKGNvZGVC
bG9jayk7CisgICAgICAgIGlmIChpdGVyICE9IG1fYnl0ZWNvZGVMaXZlbmVzcy5lbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybiAqaXRlci0+dmFsdWU7CisgICAgICAgIAorICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+IGxpdmVuZXNzID0gc3RkOjptYWtlX3VuaXF1
ZTxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4oKTsKKyAgICAgICAgY29kZUJsb2NrLT5saXZlbmVzc0Fu
YWx5c2lzKCkuY29tcHV0ZUZ1bGxMaXZlbmVzcygqbGl2ZW5lc3MpOworICAgICAgICBGdWxsQnl0
ZWNvZGVMaXZlbmVzcyYgcmVzdWx0ID0gKmxpdmVuZXNzOworICAgICAgICBtX2J5dGVjb2RlTGl2
ZW5lc3MuYWRkKGNvZGVCbG9jaywgc3RkOjptb3ZlKGxpdmVuZXNzKSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVz
c0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBsaXZlbmVzc0ZvcihiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAgeworICAgICAgICBmb3IgKDs7KSB7
CisgICAgICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA8IGNvZGVPcmlnaW4uc3RhY2tPZmZz
ZXQoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbGl2ZW5lc3NGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpLm9wZXJhbmRJc0xp
dmUoCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmQub2Zmc2V0KCkgLSBjb2RlT3JpZ2luLnN0
YWNrT2Zmc2V0KCksIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvZGVP
cmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgVk0mIG1fdm07
CiAgICAgUGxhbiYgbV9wbGFuOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC03OTcs
NiArODQwLDcgQEAgcHVibGljOgogICAgIFNlZ21lbnRlZFZlY3RvcjxTd2l0Y2hEYXRhLCA0PiBt
X3N3aXRjaERhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVW
YXJpYWJsZURhdGE7CiAgICAgT3duUHRyPElubGluZUNhbGxGcmFtZVNldD4gbV9pbmxpbmVDYWxs
RnJhbWVzOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRl
Y29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVu
dHM7CiAgICAgSGFzaFNldDxFeGVjdXRhYmxlQmFzZSo+IG1fZXhlY3V0YWJsZXNXaG9zZUFyZ3Vt
ZW50c0VzY2FwZWQ7CiAgICAgQml0VmVjdG9yIG1fbGF6eVZhcnM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludENvdW50
aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dy
YXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2Uu
aCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgTW92SGludENvdW50aW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVi
bGljOgorICAgIE1vdkhpbnRDb3VudGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQ
aGFzZShncmFwaCwgIk1vdkhpbnQgY291bnRpbmciKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7
CisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnQgdGhhdCB3ZSBoYXZlbid0IGRvbmUgdGhpcyBh
bHJlYWR5LgorICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gJm1fZ3Jh
cGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJs
ZS0+aXNSb290KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIEFTU0VSVCghdmFyaWFibGUtPm1vdkhpbnRDb3VudCgpKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoIXZhcmlhYmxlLT5zaW5nbGVNb3ZIaW50KCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50
OgorICAgICAgICAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgorICAgICAgICAgICAgICAg
ICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Y291bnRNb3ZIaW50KG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3VtZW50OgorICAgICAgICAgICAgICAg
ICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Y291bnRNb3ZIaW50KG5vZGUpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICAgICAgICAgICAgICBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+Y291bnRNb3ZIaW50KDApOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCiti
b29sIHBlcmZvcm1Nb3ZIaW50Q291bnRpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5n
UmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgTW92SGludCBDb3VudGluZyIpOworICAgIHJldHVy
biBydW5QaGFzZTxNb3ZIaW50Q291bnRpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludENvdW50aW5nUGhhc2Uu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludENv
dW50aW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTW92SGludENv
dW50aW5nUGhhc2VfaAorI2RlZmluZSBERkdNb3ZIaW50Q291bnRpbmdQaGFzZV9oCisKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
R3JhcGg7CisKKy8vIENvbXB1dGVzIFZhcmlhYmxlQWNjZXNzRGF0YTo6bV9tb3ZIaW50Q291bnQu
IFZhcmlhYmxlcyB0aGF0IGFyZSBhc3NpZ25lZCBvbmx5IG9uY2UgY2FuIGdldAorLy8gdHJlYXRl
ZCBzcGVjaWFsbHkuIEZvciBleGFtcGxlLCBPU1IgZXhpdCBpbiB0aGUgRlRMIGNhbiBhbGxvdyB0
aGUgZm9ybWF0IHVzZWQgZm9yIHN1Y2gKKy8vIG5vZGVzIEJhc2ljQmxvY2s6OnNzYS0+YXZhaWxh
YmlsdGl5QXRIZWFkL1RhaWwuIFRoaXMgaXMgYSBmb3J3YXJkIGZsb3cgdHlwZSBpbmZlcmVuY2UK
Ky8vIG92ZXIgTW92SGludHMuIEF0IHRoZSB0aW1lIHdoZW4gTW92SGludHMgYXJlIGludHJvZHVj
ZWQsIHdlIHdlcmUgY2VydGFpbiB0aGF0IGF0IGFueQorLy8gcG9pbnQgaW4gdGhlIHByb2dyYW0g
d2hlcmUgYSBieXRlY29kZSB2YXJpYWJsZSBoYWQgYmVlbiBsaXZlLCBhbGwgb2YgdGhlIE1vdkhp
bnRzIHRoYXQKKy8vIGZsb3dlZCBpbnRvIHRoYXQgcG9pbnQgZm9yIHRoYXQgdmFyaWFibGUgaGFk
IHRoZSBzYW1lIEZsdXNoRm9ybWF0LiBUaGlzIGFuYWx5c2lzIHdpbGwgdGVsbAorLy8geW91IHdo
YXQgdGhhdCBmb3JtYXQgd291bGQgaGF2ZSBiZWVuLgorCitib29sIHBlcmZvcm1Nb3ZIaW50Q291
bnRpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdNb3ZIaW50Q291bnRpbmdQaGFzZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsNzcgKzQ3LDgyIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwogICAgICAgICAKLSAgICAgICAgVmVj
dG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZpcnN0OwotICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0lu
RGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAg
ICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuZmlsbChBdmFpbGFiaWxpdHkoKSk7Cisg
ICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwuZmlsbChBdmFpbGFiaWxp
dHkoKSk7CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IGRlcHRoRmlyc3RbaV07Ci0gICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxp
dHlBdEhlYWQuZmlsbCgwKTsKLSAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0
VGFpbC5maWxsKDApOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygw
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IHJvb3QtPnNzYS0+YXZhaWxhYmls
aXR5QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7CisgICAgICAgICAg
ICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5hcmd1bWVudChhcmd1bWVudCkgPQorICAg
ICAgICAgICAgICAgIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKS53aXRoRmx1c2goCisgICAg
ICAgICAgICAgICAgICAgIEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoYXJndW1lbnQpKSk7CiAgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBsb2NhbCA9IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm51bWJlck9mTG9jYWxzKCk7
IGxvY2FsLS07KQorICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubG9j
YWwobG9jYWwpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOwogICAgICAgICAKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhGaXJzdFtpXTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gV2UgZWRpdCBhdmFpbGFiaWxpdHlBdFRhaWwgaW4tcGxhY2UsIGJ1
dCBmaXJzdCBpbml0aWFsaXplIGl0IHRvCi0gICAgICAgICAgICAvLyBhdmFpbGFiaWxpdHlBdEhl
YWQuCi0gICAgICAgICAgICBPcGVyYW5kczxOb2RlKj4mIGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5z
c2EtPmF2YWlsYWJpbGl0eUF0VGFpbDsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eSA9IGJsb2Nr
LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBtYWRl
IG1vcmUgZWZmaWNpZW50IGJ5IHByb2Nlc3NpbmcgYmxvY2tzIGluIHJldmVyc2UgcG9zdG9yZGVy
LgorICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eTsKKyAgICAgICAg
Ym9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsg
bm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAg
ICAgICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5k
Q2hlY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0
eS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBjYXNlIEdldEFyZ3VtZW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tz
KCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRBcmd1bWVudDogeworICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkodmFyaWFibGUpLndpdGhGbHVz
aCh2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTW92
SGludEFuZENoZWNrOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBBdmFp
bGFiaWxpdHkodmFyaWFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2YWls
YWJsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGotLTspIHsK
LSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29y
KGopOwotICAgICAgICAgICAgICAgIE9wZXJhbmRzPE5vZGUqPiYgc3VjY2Vzc29yQXZhaWxhYmls
aXR5ID0gc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKLSAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGsgPSBhdmFpbGFiaWxpdHkuc2l6ZSgpOyBrLS07KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIE5vZGUqIG15Tm9kZSA9IGF2YWlsYWJpbGl0eVtrXTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFteU5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzc29y
LT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMobXlOb2RlKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgbWF5IG92ZXJ3cml0ZSBhdmFpbGFiaWxpdHkgd2l0aCBhIGJvZ3Vz
IG5vZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gYXQgbWVyZ2UgcG9pbnRzLiBUaGlzIGlzIGZp
bmUsIHNpbmNlIG1lcmdlIHBvaW50cyBoYXZlCi0gICAgICAgICAgICAgICAgICAgIC8vIE1vdkhp
bnQoUGhpKSdzIHRvIHdvcmsgYXJvdW5kIHRoaXMuIFRoZSBvdXRjb21lIG9mIHRoaXMgaXMKLSAg
ICAgICAgICAgICAgICAgICAgLy8geW91IG1pZ2h0IGhhdmUgYSBwcm9ncmFtIGluIHdoaWNoIGEg
bm9kZSBoYXBwZW5zIHRvIHJlbWFpbgotICAgICAgICAgICAgICAgICAgICAvLyBsaXZlIGludG8g
c29tZSBibG9jayBCLCBhbmQgc2VwYXJhdGVseSAoZHVlIHRvIGNvcHkKLSAgICAgICAgICAgICAg
ICAgICAgLy8gcHJvcGFnYXRpb24pIGp1c3Qgb25lIG9mIHRoZSBwcmVkZWNlc3NvcnMgb2YgQiBp
c3N1ZWQgYQotICAgICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50IHB1dHRpbmcgdGhhdCBub2Rl
IGludG8gc29tZSBsb2NhbC4gVGhlbiBpbiBCIHdlIG1pZ2h0Ci0gICAgICAgICAgICAgICAgICAg
IC8vIHRoaW5rIHRoYXQgdGhhdCBub2RlIGlzIGEgdmFsaWQgdmFsdWUgZm9yIHRoYXQgbG9jYWwu
IE9mCi0gICAgICAgICAgICAgICAgICAgIC8vIGNvdXJzZSBpZiB0aGF0IGxvY2FsIHdhcyBhY3R1
YWxseSBsaXZlIGluIEIsIEIgd291bGQgaGF2ZSBhCi0gICAgICAgICAgICAgICAgICAgIC8vIFBo
aSBmb3IgaXQuIFNvIGVzc2VudGlhbGx5IHdlJ2xsIGhhdmUgT1NSIGV4aXQgZHJvcHBpbmcgdGhp
cwotICAgICAgICAgICAgICAgICAgICAvLyBub2RlJ3MgdmFsdWUgaW50byB0aGUgbG9jYWwgd2hl
biB3ZSBvdGhlcndpc2UgKGluIHRoZSBERkcpCi0gICAgICAgICAgICAgICAgICAgIC8vIHdvdWxk
IGhhdmUgZHJvcHBlZCB1bmRlZmluZWQgaW50byB0aGUgbG9jYWwuIFRoaXMgc2VlbXMKLSAgICAg
ICAgICAgICAgICAgICAgLy8gaGFybWxlc3MuCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBzdWNjZXNzb3JBdmFpbGFiaWxpdHlba10gPSBteU5vZGU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eSA9PSBibG9jay0+c3Nh
LT5hdmFpbGFiaWxpdHlBdFRhaWwpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0
VGFpbCA9IGF2YWlsYWJpbGl0eTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3Nvcklu
ZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsKKyAgICAg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3Nvcihz
dWNjZXNzb3JJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGF2
YWlsYWJpbGl0eS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nl
c3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0gPSBhdmFpbGFiaWxpdHlbaV0ubWVyZ2Uo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0
eUF0SGVhZFtpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CiAgICAg
ICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2UuaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2
LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgR3JhcGg7CiAK
LS8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+YXZhaWxhYmlsdGl5QXRIZWFkL1RhaWwuIFRo
aXMgcmVsaWVzIG9uIGxpdmVuZXNzCi0vLyBhbmFseXNpcyBwaGFzZSBoYXZpbmcgYmVlbiBydW4g
YW5kIHRoZSBncmFwaCBub3QgaGF2aW5nIGJlZW4gdHJhbnNmb3JtZWQKLS8vIGFmdGVyIHRoYXQu
CisvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRpeUF0SGVhZC9UYWlsLiBU
aGlzIGlzIGEgZm9yd2FyZCBmbG93IHR5cGUgaW5mZXJlbmNlCisvLyBvdmVyIE1vdkhpbnRzLiBB
dCB0aGUgdGltZSB3aGVuIE1vdkhpbnRzIGFyZSBpbnRyb2R1Y2VkLCB3ZSB3ZXJlIGNlcnRhaW4g
dGhhdCBhdCBhbnkKKy8vIHBvaW50IGluIHRoZSBwcm9ncmFtIHdoZXJlIGEgYnl0ZWNvZGUgdmFy
aWFibGUgaGFkIGJlZW4gbGl2ZSwgYWxsIG9mIHRoZSBNb3ZIaW50cyB0aGF0CisvLyBmbG93ZWQg
aW50byB0aGF0IHBvaW50IGZvciB0aGF0IHZhcmlhYmxlIGhhZCB0aGUgc2FtZSBGbHVzaEZvcm1h
dC4gVGhpcyBhbmFseXNpcyB3aWxsIHRlbGwKKy8vIHlvdSB3aGF0IHRoYXQgZm9ybWF0IHdvdWxk
IGhhdmUgYmVlbi4KIAogYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcGgm
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAx
NTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiREZHTElDTVBoYXNlLmgiCiAjaW5j
bHVkZSAiREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHTG9vcFByZUhl
YWRlckNyZWF0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5o
IgogI2luY2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKICNpbmNsdWRl
ICJERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rp
b25JbmplY3Rpb25QaGFzZS5oIgpAQCAtMjcyLDYgKzI3Myw3IEBAIFBsYW46OkNvbXBpbGF0aW9u
UGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybVN0YWNrTGF5b3V0KGRmZyk7
CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1G
bHVzaExpdmVuZXNzQW5hbHlzaXMoZGZnKTsKKyAgICAgICAgcGVyZm9ybU1vdkhpbnRDb3VudGlu
ZyhkZmcpOwogICAgICAgICBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoZGZnKTsKICAg
ICAgICAgcGVyZm9ybVdhdGNocG9pbnRDb2xsZWN0aW9uKGRmZyk7CiAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMTU5
MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dp
dGNoIChmb3JtYXQpIHsKICAgICAgICAgY2FzZSBEZWFkRmx1c2g6CisgICAgICAgIGNhc2UgQ29u
ZmxpY3RpbmdGbHVzaDoKICAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShTb3VyY2VJc0Rl
YWQpOwogICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICAgICAgcmV0dXJuIFZh
bHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCB3aGVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDE1OTE0
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgREZHVmFyaWFibGVBY2Nl
c3NEYXRhX2gKICNkZWZpbmUgREZHVmFyaWFibGVBY2Nlc3NEYXRhX2gKIAorI2luY2x1ZGUgIkRG
R0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0RvdWJsZUZvcm1hdFN0YXRlLmgiCiAjaW5jbHVkZSAi
REZHRmx1c2hGb3JtYXQuaCIKICNpbmNsdWRlICJERkdGbHVzaGVkQXQuaCIKQEAgLTM5LDYgKzQw
LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitzdHJ1Y3QgTm9kZTsK
KwogZW51bSBEb3VibGVCYWxsb3QgeyBWb3RlVmFsdWUsIFZvdGVEb3VibGUgfTsKIAogY2xhc3Mg
VmFyaWFibGVBY2Nlc3NEYXRhIDogcHVibGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+
IHsKQEAgLTU2LDYgKzU5LDggQEAgcHVibGljOgogICAgICAgICAsIG1faXNQcm9maXRhYmxlVG9V
bmJveChmYWxzZSkKICAgICAgICAgLCBtX2lzTG9hZGVkRnJvbShmYWxzZSkKICAgICAgICAgLCBt
X2RvdWJsZUZvcm1hdFN0YXRlKEVtcHR5RG91YmxlRm9ybWF0U3RhdGUpCisgICAgICAgICwgbV9t
b3ZIaW50Q291bnQoMCkKKyAgICAgICAgLCBtX3NpbmdsZU1vdkhpbnQoMCkKICAgICB7CiAgICAg
ICAgIGNsZWFyVm90ZXMoKTsKICAgICB9CkBAIC03Miw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICAg
ICAgLCBtX2NoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZChmYWxzZSkKICAgICAgICAgLCBtX2lzUHJv
Zml0YWJsZVRvVW5ib3goZmFsc2UpCiAgICAgICAgICwgbV9kb3VibGVGb3JtYXRTdGF0ZShFbXB0
eURvdWJsZUZvcm1hdFN0YXRlKQorICAgICAgICAsIG1fbW92SGludENvdW50KDApCisgICAgICAg
ICwgbV9zaW5nbGVNb3ZIaW50KDApCiAgICAgewogICAgICAgICBjbGVhclZvdGVzKCk7CiAgICAg
fQpAQCAtMzUyLDYgKzM1OSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBGbHVzaGVkQXQo
Zmx1c2hGb3JtYXQoKSwgbWFjaGluZUxvY2FsKCkpOwogICAgIH0KICAgICAKKyAgICBib29sIGlz
U2luZ2x5QXNzaWduZWQoKSBjb25zdCB7IHJldHVybiBtX21vdkhpbnRDb3VudCA9PSAxOyB9Cisg
ICAgdm9pZCBjb3VudE1vdkhpbnQoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbV9t
b3ZIaW50Q291bnQrKykKKyAgICAgICAgICAgIG1fc2luZ2xlTW92SGludCA9IG5vZGU7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fc2luZ2xlTW92SGludCA9IDA7CisgICAgfQorICAgIHVu
c2lnbmVkIG1vdkhpbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbW92SGludENvdW50OyB9Cisg
ICAgTm9kZSogc2luZ2xlTW92SGludCgpIGNvbnN0IHsgcmV0dXJuIG1fc2luZ2xlTW92SGludDsg
fQorICAgIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNp
ZW50LCBzaW5jZSBhbnl0aGluZyB3ZSdyZSB1bmlmaWVkIHdpdGgKICAgICAvLyB3aWxsIGhhdmUg
dGhlIHNhbWUgb3BlcmFuZCBhbmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0
CkBAIC0zNzQsNiArMzkyLDkgQEAgcHJpdmF0ZToKIAogICAgIGZsb2F0IG1fdm90ZXNbMl07IC8v
IFVzZWQgcHJpbWFyaWx5IGZvciBkb3VibGUgdm90aW5nIGJ1dCBtYXkgYmUgcmV1c2VkIGZvciBv
dGhlciBwdXJwb3Nlcy4KICAgICBEb3VibGVGb3JtYXRTdGF0ZSBtX2RvdWJsZUZvcm1hdFN0YXRl
OworICAgIAorICAgIHVuc2lnbmVkIG1fbW92SGludENvdW50OworICAgIE5vZGUqIG1fc2luZ2xl
TW92SGludDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1w
LmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksOSBA
QCB2b2lkIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXA6OmR1bXAoUHJpbnRTCiAgICAgICAgIG91dC5w
cmludCgifiIpOwogCiAgICAgb3V0LnByaW50KEFiYnJldmlhdGVkU3BlY3VsYXRpb25EdW1wKG1f
ZGF0YS0+cHJlZGljdGlvbigpKSwgIi8iLCBtX2RhdGEtPmZsdXNoRm9ybWF0KCkpOworICAgIAor
ICAgIGlmIChtX2RhdGEtPmlzU2luZ2x5QXNzaWduZWQoKSkKKyAgICAgICAgb3V0LnByaW50KCI9
PiIsIG1fZGF0YS0+c2luZ2xlTW92SGludCgpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxMCBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9mdGxTdGF0ZShzdGF0ZSkKICAgICAgICAgLCBtX2hlYXBzKHN0
YXRlLmNvbnRleHQpCiAgICAgICAgICwgbV9vdXQoc3RhdGUuY29udGV4dCkKKyAgICAgICAgLCBt
X2Jvb2xlYW5Mb2NhbHMoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkKQorICAgICAgICAsIG1faW50MzJMb2NhbHMoT3BlcmFuZHNMaWtlLCBzdGF0ZS5n
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1faW50NjRMb2NhbHMo
T3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAg
ICAgICAsIG1fZG91YmxlTG9jYWxzKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCkt
PnZhcmlhYmxlc0F0SGVhZCkKICAgICAgICAgLCBtX3ZhbHVlU291cmNlcyhPcGVyYW5kc0xpa2Us
IHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCiAgICAgICAgICwgbV9zdGF0
ZShzdGF0ZS5ncmFwaCkKICAgICAgICAgLCBtX2ludGVycHJldGVyKHN0YXRlLmdyYXBoLCBtX3N0
YXRlKQpAQCAtMTAxLDYgKzEwNSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJvbG9ndWUgPSBh
cHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuY29udGV4dCwgbV9mdGxTdGF0ZS5mdW5jdGlvbik7
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUpOwogICAgICAgICBjcmVhdGVQaGlW
YXJpYWJsZXMoKTsKKyAgICAgICAgY3JlYXRlU2hhZG93TG9jYWxzKG1fYm9vbGVhbkxvY2Fscywg
bV9vdXQuYm9vbGVhbik7CisgICAgICAgIGNyZWF0ZVNoYWRvd0xvY2FscyhtX2ludDMyTG9jYWxz
LCBtX291dC5pbnQzMik7CisgICAgICAgIGNyZWF0ZVNoYWRvd0xvY2FscyhtX2ludDY0TG9jYWxz
LCBtX291dC5pbnQ2NCk7CisgICAgICAgIGNyZWF0ZVNoYWRvd0xvY2FscyhtX2RvdWJsZUxvY2Fs
cywgbV9vdXQuZG91YmxlVHlwZSk7CiAgICAgICAgIAogICAgICAgICBtX2NhbGxGcmFtZSA9IG1f
b3V0LnBhcmFtKDApOwogICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBtX291dC5jb25zdEludDY0
KFRhZ1R5cGVOdW1iZXIpOwpAQCAtMTY4LDYgKzE3NiwxMiBAQCBwcml2YXRlOgogICAgICAgICB9
CiAgICAgfQogICAgIAorICAgIHZvaWQgY3JlYXRlU2hhZG93TG9jYWxzKE9wZXJhbmRzPExWYWx1
ZT4mIG9wZXJhbmRzLCBMVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gb3BlcmFuZHMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgb3BlcmFuZHNbaV0gPSBtX291
dC5hbGxvY2EodHlwZSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY29tcGlsZUJsb2NrKEJhc2lj
QmxvY2sqIGJsb2NrKQogICAgIHsKICAgICAgICAgaWYgKCFibG9jaykKQEAgLTIwNCw4ICsyMTgs
NiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZv
ckJsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBtX2xpdmUgPSBibG9jay0+c3NhLT5saXZlQXRI
ZWFkOwotICAgICAgICAKICAgICAgICAgbV9zdGF0ZS5yZXNldCgpOwogICAgICAgICBtX3N0YXRl
LmJlZ2luQmFzaWNCbG9jayhtX2hpZ2hCbG9jayk7CiAgICAgICAgIApAQCAtNDc1LDEyICs0ODcs
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmIChtX25vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICBERkdfTk9E
RV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBtX25vZGUsIHVzZSk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAobV9ub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpCi0gICAgICAgICAgICBtX2xpdmUuYWRk
KG1fbm9kZSk7Ci0gICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRXhlY3V0ZUVmZmVjdHMpCiAg
ICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGVFZmZlY3RzKG5vZGVJbmRleCk7CiAgICAg
ICAgIApAQCAtNTY3LDIxICs1NzMsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIGpzVmFs
dWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVyYW5kKSk7CiAKICAgICAgICAgc3dpdGNo
ICh1c2VLaW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkgewotICAgICAgICBjYXNlIElu
dDMyVXNlOgorICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBzcGVjdWxhdGVC
YWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG1fbm9kZSwgaXNOb3RJbnQz
Mihqc1ZhbHVlKSk7Ci0gICAgICAgICAgICBzZXRJbnQzMih1bmJveEludDMyKGpzVmFsdWUpKTsK
KyAgICAgICAgICAgIExWYWx1ZSBpbnRWYWx1ZSA9IHVuYm94SW50MzIoanNWYWx1ZSk7CisgICAg
ICAgICAgICBzZXRJbnQzMihpbnRWYWx1ZSk7CisgICAgICAgICAgICBtX291dC5zZXQoaW50VmFs
dWUsIG1faW50MzJMb2NhbHMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgfQorICAgICAgICBjYXNl
IENlbGxVc2U6IHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZShqc1ZhbHVlKSwgbV9ub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOwogICAgICAgICAg
ICAgc2V0SlNWYWx1ZShqc1ZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0LnNldChqc1ZhbHVlLCBt
X2ludDY0TG9jYWxzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBC
b29sZWFuVXNlOiB7CiAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1Zh
bHVlVmFsdWUoanNWYWx1ZSksIG1fbm9kZSwgaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKLSAgICAg
ICAgICAgIHNldEJvb2xlYW4odW5ib3hCb29sZWFuKGpzVmFsdWUpKTsKKyAgICAgICAgICAgIExW
YWx1ZSBib29sZWFuVmFsdWUgPSB1bmJveEJvb2xlYW4oanNWYWx1ZSk7CisgICAgICAgICAgICBz
ZXRCb29sZWFuKGJvb2xlYW5WYWx1ZSk7CisgICAgICAgICAgICBtX291dC5zZXQoYm9vbGVhblZh
bHVlLCBtX2Jvb2xlYW5Mb2NhbHMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFVudHlwZWRVc2U6IHsKICAgICAgICAgICAgIHNldEpTVmFsdWUoanNWYWx1ZSk7Cisg
ICAgICAgICAgICBtX291dC5zZXQoanNWYWx1ZSwgbV9pbnQ2NExvY2Fscy5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNjEyLDQzICs2MjgsMzggQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIGNvbXBpbGVTZXRMb2NhbCgpCiAgICAgewotICAgICAgICBvYnNlcnZlTW92SGludChtX25v
ZGUpOworICAgICAgICBvYnNlcnZlTW92SGludCgpOwogICAgICAgICAKICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAg
ICAgICAgIHN3aXRjaCAodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpIHsKICAgICAgICAgY2FzZSBG
bHVzaGVkSlNWYWx1ZTogewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZSht
X25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJl
c3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291
cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0
YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZs
dXNoZWREb3VibGU6IHsKICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91YmxlKHZhbHVlLCBhZGRy
ZXNzRm9yKHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNv
dXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpT
U3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
Rmx1c2hlZEludDMyOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBheWxvYWRG
b3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNl
cy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNr
LCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNo
ZWRJbnQ1MjogewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50NTIobV9ub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQ1MkluSlNTdGFjaywgdmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaGVkQ2Vs
bDogewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUt
Pm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCB2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOiB7
CkBAIC02NTYsMzIgKzY2NywzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuc3RvcmU2
NCgKICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbiksCiAgICAgICAgICAgICAgICAgYWRkcmVzc0Zvcih2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ssIHZhcmlhYmxlLT5t
YWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAg
ICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBlbWl0TW92SGludCgpOworICAgICAgICAKKyAgICAgICAg
Ly8gRG8gdGhpcyBsYXN0IHNvIHRoYXQgd2UgZG9uJ3QgbGVhdmUgbV92YWx1ZVNvdXJjZXMgY2xh
aW1pbmcgdGhhdCB3ZSBoYXZlIHRvCisgICAgICAgIC8vIGxvYWQgdGhpcyB2YXJpYWJsZSdzIHZh
bHVlIGZyb20gdGhlIHNoYWRvdyBsb2NhbHMuIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uLgorICAg
ICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAg
ICAgICBWYWx1ZVNvdXJjZTo6Zmx1c2hlZEF0KHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoKQogICAgIHsKLSAgICAgICAgb2JzZXJ2
ZU1vdkhpbnQobV9ub2RlKTsKKyAgICAgICAgZW1pdE1vdkhpbnQoKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlWm9tYmllSGludCgpCiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIGRhdGEgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBtX3Zh
bHVlU291cmNlcy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoU291cmNlSXNE
ZWFkKTsKKyAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZh
bHVlU291cmNlKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU1vdkhpbnRBbmRDaGVj
aygpCiAgICAgewotICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOwotICAgICAgICBzcGVj
dWxhdGUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG9ic2VydmVNb3ZIaW50KCk7CisgICAg
ICAgIGVtaXRNb3ZIaW50KCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVBoYW50b20o
KQpAQCAtMzgyMiwyNSArMzgzOCw2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzTGl2ZShO
b2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGl2ZS5jb250YWlucyhub2RlKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCB1c2UoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKGVkZ2UtPmhhc1Jlc3VsdCgpKTsKLSAgICAgICAgaWYgKCFlZGdlLmRvZXNLaWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fbGl2ZS5yZW1vdmUoZWRnZS5ub2RlKCkpOwot
ICAgIH0KLSAgICAKLSAgICAvLyBXcmFwcGVyIHVzZWQgb25seSBmb3IgREZHX05PREVfRE9fVE9f
Q0hJTERSRU4KLSAgICB2b2lkIHVzZShOb2RlKiwgRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAg
dXNlKGVkZ2UpOwotICAgIH0KLSAgICAKICAgICBMQmFzaWNCbG9jayBsb3dCbG9jayhCYXNpY0Js
b2NrKiBibG9jaykKICAgICB7CiAgICAgICAgIHJldHVybiBtX2Jsb2Nrcy5nZXQoYmxvY2spOwpA
QCAtMzg0OSwxNyArMzg0Niw0OCBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4
aXRTdGF0ZUZvckJsb2NrKCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFs
dWVTb3VyY2VzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0g
bV9oaWdoQmxvY2stPnNzYS0+Zmx1c2hBdEhlYWRbaV07CisgICAgICAgICAgICBBdmFpbGFiaWxp
dHkgYXZhaWxhYmlsdGl5ID0gbV9oaWdoQmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ld
OworICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNoZWRBdCgp
OwogICAgICAgICAgICAgc3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgewotICAgICAgICAgICAgY2Fz
ZSBEZWFkRmx1c2g6IHsKLSAgICAgICAgICAgICAgICAvLyBNdXN0IGNvbnNpZGVyIGF2YWlsYWJs
ZSBub2RlcyBpbnN0ZWFkLgotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hCbG9j
ay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFub2Rl
KSB7CisgICAgICAgICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgICAgIGNhc2UgQ29uZmxp
Y3RpbmdGbHVzaDogeworICAgICAgICAgICAgICAgIC8vIE11c3QgY29uc2lkZXIgYXZhaWxhYmxl
IHZhcmlhYmxlcyBpbnN0ZWFkLgorICAgICAgICAgICAgICAgIGlmICghYXZhaWxhYmlsaXR5Lmhh
c1ZhcmlhYmxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBW
YWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV92YWx1
ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShub2RlKTsKKyAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gYXZhaWxhYmlsaXR5LnZhcmlhYmxlKCk7CisgICAgICAg
ICAgICAgICAgaWYgKE5vZGUqIG5vZGUgPSB2YXJpYWJsZS0+c2luZ2xlTW92SGludCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgT1NSIGV4aXQgc2hvdWxk
IGp1c3QgdHJ5IHRvIGxhemlseSBmaWd1cmUgb3V0IGhvdworICAgICAgICAgICAgICAgICAgICAv
LyB0byByZWFkIGFuZCBkZWNvZGUgd2hhdGV2ZXIgbm9kZSB0aGlzIHZhcmlhYmxlIG9yaWdpbmF0
ZWQgZnJvbS4KKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNv
dXJjZXMobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQg
dGhlIHZhcmlhYmxlIGlzIG11bHRpcGx5LWFzc2lnbmVkIGFuZCB3ZSB3aWxsIGVuc3VyZSB0aGF0
CisgICAgICAgICAgICAgICAgLy8gaW4gZWFjaCBwbGFjZSB3aGVyZSB3ZSBhc3NpZ24gaXQsIHdl
IHdpbGwgdXNlIHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgICAgIHN3aXRj
aCAodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNo
ZWRKU1ZhbHVlOgorICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkxvY2FsKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVk
RG91YmxlOgorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291
cmNlKERvdWJsZUluTG9jYWwpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNv
dXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluTG9jYWwpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQ1MkluTG9jYWwpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRC
b29sZWFuOgorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291
cmNlKEJvb2xlYW5JbkxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IApAQCAtMzk0Miw5ICszOTcwLDM0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhcmd1bWVudHMu
YXBwZW5kKGxvd1ZhbHVlLnZhbHVlKCkpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlm
ICghbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKGV4aXQubV92YWx1ZXMub3BlcmFuZEZvckluZGV4
KGkpKSkgeworICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRl
YWQoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAogICAgICAgICAgICAgVmFsdWVTb3VyY2Ugc291cmNlID0gbV92YWx1ZVNvdXJjZXNbaV07
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoc291cmNlLmtpbmQoKSkgeworICAg
ICAgICAgICAgY2FzZSBWYWx1ZUluTG9jYWw6CisgICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3Vt
ZW50Rm9yTG9jYWwoCisgICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFs
dWVGb3JtYXRKU1ZhbHVlLCBtX2ludDY0TG9jYWxzW2ldKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlSW5Mb2NhbDoKKyAgICAgICAgICAgICAgICBhZGRF
eGl0QXJndW1lbnRGb3JMb2NhbCgKKyAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRz
LCBpLCBWYWx1ZUZvcm1hdERvdWJsZSwgbV9kb3VibGVMb2NhbHNbaV0pOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbnQzMkluTG9jYWw6CisgICAgICAgICAgICAg
ICAgYWRkRXhpdEFyZ3VtZW50Rm9yTG9jYWwoCisgICAgICAgICAgICAgICAgICAgIGV4aXQsIGFy
Z3VtZW50cywgaSwgVmFsdWVGb3JtYXRJbnQzMiwgbV9pbnQzMkxvY2Fsc1tpXSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEludDUySW5Mb2NhbDoKKyAgICAgICAg
ICAgICAgICBhZGRFeGl0QXJndW1lbnRGb3JMb2NhbCgKKyAgICAgICAgICAgICAgICAgICAgZXhp
dCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1hdEludDUyLCBtX2ludDY0TG9jYWxzW2ldKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQm9vbGVhbkluTG9jYWw6Cisg
ICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50Rm9yTG9jYWwoCisgICAgICAgICAgICAgICAg
ICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXRCb29sZWFuLCBtX2Jvb2xlYW5Mb2Nh
bHNbaV0pOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZUlu
SlNTdGFjazoKICAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpp
bkpTU3RhY2soc291cmNlLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTM5NTgsNyArNDAxMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZXhpdC5t
X3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoc291cmNlLnZpcnR1YWxS
ZWdpc3RlcigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU291
cmNlSXNEZWFkOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6
OmRlYWQoKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBIYXZlTm9kZToKICAgICAg
ICAgICAgICAgICBhZGRFeGl0QXJndW1lbnRGb3JOb2RlKGV4aXQsIGFyZ3VtZW50cywgaSwgc291
cmNlLm5vZGUoKSk7CkBAIC0zOTkxLDUzICs0MDQ0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgaWYg
KHRyeVRvU2V0Q29uc3RhbnRFeGl0QXJndW1lbnQoZXhpdCwgaW5kZXgsIG5vZGUpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgaWYgKCFpc0xpdmUobm9kZSkpIHsKLSAg
ICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKHBlcm1pdHNPU1JCYWNrd2FyZFJld2lyaW5nKG5vZGUtPm9wKCkpKSB7Ci0gICAgICAgICAg
ICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBpZiAo
dHJ5VG9TZXRDb25zdGFudEV4aXRBcmd1bWVudChleGl0LCBpbmRleCwgbm9kZSkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAoaXNMaXZlKG5vZGUpKQot
ICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBi
ZXN0Tm9kZSA9IDA7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgYmVzdFNjb3JlID0gMDsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3Ig
aXRlciA9IG1fbGl2ZS5iZWdpbigpOwotICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+Ojpp
dGVyYXRvciBlbmQgPSBtX2xpdmUuZW5kKCk7Ci0gICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0g
Kml0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmZsYWdzKCkgJiBOb2Rl
SGFzVmFyQXJncykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZS0+Y2hpbGQxKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+Y2hpbGQx
KCkgIT0gbm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBteVNjb3JlID0gZm9yd2FyZFJld2lyaW5nU2VsZWN0aW9uU2Nv
cmUoY2FuZGlkYXRlLT5vcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG15U2NvcmUgPD0g
YmVzdFNjb3JlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGJlc3ROb2RlID0gY2FuZGlkYXRlOwotICAgICAgICAgICAgICAgICAgICBiZXN0
U2NvcmUgPSBteVNjb3JlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoYmVzdE5vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGlzTGl2ZShiZXN0Tm9kZSkpOwotICAgICAgICAgICAgICAgICAgICBub2RlID0gYmVzdE5vZGU7
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghZm91bmQpIHsKLSAg
ICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2luZGV4XSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgQVNTRVJUKGlzTGl2ZShub2RlKSk7Ci0KICAgICAgICAgTG93ZXJlZE5vZGVW
YWx1ZSB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KG5vZGUpOwogICAgICAgICBpZiAoaXNWYWxp
ZCh2YWx1ZSkpIHsKICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMs
IGluZGV4LCBWYWx1ZUZvcm1hdEludDMyLCB2YWx1ZS52YWx1ZSgpKTsKQEAgLTQwOTksNiArNDEw
NSwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIHZvaWQgYWRkRXhp
dEFyZ3VtZW50Rm9yTG9jYWwoCisgICAgICAgIE9TUkV4aXQmIGV4aXQsIEV4aXRBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgdW5zaWduZWQgaW5kZXgsIFZhbHVlRm9ybWF0IGZvcm1hdCwKKyAgICAg
ICAgTFZhbHVlIGxvY2FsKQorICAgIHsKKyAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFy
Z3VtZW50cywgaW5kZXgsIGZvcm1hdCwgbV9vdXQuZ2V0KGxvY2FsKSk7CisgICAgfQorICAgIAog
ICAgIHZvaWQgYWRkRXhpdEFyZ3VtZW50KAogICAgICAgICBPU1JFeGl0JiBleGl0LCBFeGl0QXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIHVuc2lnbmVkIGluZGV4LCBWYWx1ZUZvcm1hdCBmb3JtYXQs
CiAgICAgICAgIExWYWx1ZSB2YWx1ZSkKQEAgLTQxMDcsMTQgKzQxMjAsNjcgQEAgcHJpdmF0ZToK
ICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
b2JzZXJ2ZU1vdkhpbnQoTm9kZSogbm9kZSkKKyAgICAvLyBOb3RpZmllcyBvdXIgbG9jYWwgdmFs
dWUgc291cmNlcyB0aGF0IHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhdmFpbGFibGUgdmlhIHRoZSBn
aXZlbgorICAgIC8vIG5vZGUuCisgICAgdm9pZCBvYnNlcnZlTW92SGludCgpCiAgICAgewotICAg
ICAgICBBU1NFUlQobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpOwotICAgICAgICBBU1NFUlQobm9k
ZS0+b3AoKSAhPSBab21iaWVIaW50KTsKKyAgICAgICAgQVNTRVJUKG1fbm9kZS0+Y29udGFpbnNN
b3ZIaW50KCkpOworICAgICAgICBBU1NFUlQobV9ub2RlLT5vcCgpICE9IFpvbWJpZUhpbnQpOwog
ICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT5sb2NhbCgp
OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG1fbm9kZS0+bG9jYWwoKTsKICAg
ICAgICAgCi0gICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQob3BlcmFuZCkgPSBWYWx1ZVNv
dXJjZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVy
YW5kKG9wZXJhbmQpID0gVmFsdWVTb3VyY2UobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAg
IH0KKyAgICAKKyAgICAvLyBGb3Igc2luZ2x5LWFzc2lnbmVkIHZhcmlhYmxlcywgdGhpcyBqdXN0
IG9ic2VydmVzIHRoYXQgdGhlIHZhcmlhYmxlIGlzIGF2YWlsYWJsZSB2aWEKKyAgICAvLyB0aGUg
YXBwcm9wcmlhdGUgbm9kZS4gRm9yIG11bHRpcGx5LWFzc2lnbmVkIHZhcmlhYmxlcywgdGhpcyBz
dG9yZXMgdGhlIHZhcmlhYmxlcyB2YWx1ZQorICAgIC8vIGludG8gb3VyIGJ5dGVjb2RlIHNoYWRv
dyBsb2NhbHMgYW5kIG5vdGVzIHRoaXMgaW4gbV92YWx1ZVNvdXJjZXMuCisgICAgdm9pZCBlbWl0
TW92SGludCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9ub2RlLT5jb250YWluc01vdkhpbnQo
KSk7CisgICAgICAgIEFTU0VSVChtX25vZGUtPm9wKCkgIT0gWm9tYmllSGludCk7CisgICAgICAg
IAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX25vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICBpZiAoZGF0YS0+aXNTaW5nbHlBc3NpZ25lZCgpKSB7CisgICAg
ICAgICAgICBvYnNlcnZlTW92SGludCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGRhdGEtPmZsdXNoRm9ybWF0KCkpIHsKKyAgICAg
ICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKSwgbV9kb3VibGVMb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSk7
CisgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpID0gVmFs
dWVTb3VyY2UoRG91YmxlSW5Mb2NhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgIG1fb3V0LnNldChsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbV9pbnQzMkxvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2Fs
KCkpKTsKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZShJbnQzMkluTG9jYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6CisgICAgICAgICAgICBtX291dC5zZXQo
bG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSksIG1faW50NjRMb2NhbHMub3BlcmFuZChkYXRhLT5s
b2NhbCgpKSk7CisgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKGRhdGEtPmxvY2Fs
KCkpID0gVmFsdWVTb3VyY2UoSW50NTJJbkxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgICAgICBtX291dC5z
ZXQobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9pbnQ2NExvY2Fscy5vcGVyYW5kKGRhdGEt
PmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQoZGF0YS0+bG9j
YWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWwpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgIG1f
b3V0LnNldChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2Jvb2xlYW5Mb2NhbHMub3Bl
cmFuZChkYXRhLT5sb2NhbCgpKSk7CisgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5k
KGRhdGEtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoQm9vbGVhbkluTG9jYWwpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAg
ICAgICAgICAgIG1fb3V0LnNldChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2ludDY0
TG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0SW50MzIoTm9kZSogbm9kZSwgTFZh
bHVlIHZhbHVlKQpAQCAtNDI3Miw3ICs0MzM4LDEyIEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxO
b2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9ib29sZWFuVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9k
ZSosIExvd2VyZWROb2RlVmFsdWU+IG1fc3RvcmFnZVZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUq
LCBMb3dlcmVkTm9kZVZhbHVlPiBtX2RvdWJsZVZhbHVlczsKLSAgICBIYXNoU2V0PE5vZGUqPiBt
X2xpdmU7CisgICAgCisgICAgLy8gQnl0ZWNvZGUgc2hhZG93IGxvY2Fscy4KKyAgICBPcGVyYW5k
czxMVmFsdWU+IG1fYm9vbGVhbkxvY2FsczsKKyAgICBPcGVyYW5kczxMVmFsdWU+IG1faW50MzJM
b2NhbHM7CisgICAgT3BlcmFuZHM8TFZhbHVlPiBtX2ludDY0TG9jYWxzOworICAgIE9wZXJhbmRz
PExWYWx1ZT4gbV9kb3VibGVMb2NhbHM7CiAgICAgCiAgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVl
PiBtX3BoaXM7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJ
KHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksNyBAQCBwdWJsaWM6CiAgICAgTFZhbHVl
IGludFRvUHRyKExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRUb1B0
cihtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIExWYWx1ZSBiaXRDYXN0KExWYWx1ZSB2
YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRCaXRDYXN0KG1fYnVpbGRlciwgdmFsdWUs
IHR5cGUpOyB9CiAgICAgCisgICAgTFZhbHVlIGFsbG9jYShMVHlwZSB0eXBlKSB7IHJldHVybiBi
dWlsZEFsbG9jYShtX2J1aWxkZXIsIHR5cGUpOyB9CiAgICAgTFZhbHVlIGdldChMVmFsdWUgcmVm
ZXJlbmNlKSB7IHJldHVybiBidWlsZExvYWQobV9idWlsZGVyLCByZWZlcmVuY2UpOyB9CiAgICAg
TFZhbHVlIHNldChMVmFsdWUgdmFsdWUsIExWYWx1ZSByZWZlcmVuY2UpIHsgcmV0dXJuIGJ1aWxk
U3RvcmUobV9idWlsZGVyLCB2YWx1ZSwgcmVmZXJlbmNlKTsgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHJldmlzaW9uIDE1OTE0
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw2ICszNiwyMSBAQCB2b2lkIFZhbHVlU291cmNlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpCiAgICAgY2FzZSBTb3VyY2VOb3RTZXQ6CiAgICAgICAgIG91dC5wcmludCgi
U291cmNlTm90U2V0Iik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlSW5Mb2NhbDoK
KyAgICAgICAgb3V0LnByaW50KCJWYWx1ZUluTG9jYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW50MzJJbkxvY2FsOgorICAgICAgICBvdXQucHJpbnQoIkludDMySW5Mb2NhbCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ1MkluTG9jYWw6CisgICAgICAgIG91dC5wcmlu
dCgiSW50NTJJbkxvY2FsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJvb2xlYW5Jbkxv
Y2FsOgorICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW5JbkxvY2FsIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIERvdWJsZUluTG9jYWw6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlSW5M
b2NhbCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBWYWx1ZUluSlNTdGFjazoKICAgICAg
ICAgb3V0LnByaW50KCJWYWx1ZUluSlNTdGFjazoiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3Vy
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291
cmNlLmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
VmFsdWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBlbnVtIFZhbHVlU291cmNlS2luZCB7CiAgICAgU291
cmNlTm90U2V0LAorICAgIFZhbHVlSW5Mb2NhbCwKKyAgICBJbnQzMkluTG9jYWwsCisgICAgSW50
NTJJbkxvY2FsLAorICAgIEJvb2xlYW5JbkxvY2FsLAorICAgIERvdWJsZUluTG9jYWwsCiAgICAg
VmFsdWVJbkpTU3RhY2ssCiAgICAgSW50MzJJbkpTU3RhY2ssCiAgICAgSW50NTJJbkpTU3RhY2ss
CkBAIC01Niw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1
ZVNvdXJjZUtpbmQga2luZCkKICAgICAgICAgOiBtX2tpbmQoa2luZCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVChtX2tpbmQgPT0gU291cmNlSXNEZWFkKTsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9
PSBTb3VyY2VJc0RlYWQgfHwgbV9raW5kID09IFZhbHVlSW5Mb2NhbCB8fCBtX2tpbmQgPT0gSW50
MzJJbkxvY2FsIHx8IG1fa2luZCA9PSBJbnQ1MkluTG9jYWwgfHwgbV9raW5kID09IEJvb2xlYW5J
bkxvY2FsIHx8IG1fa2luZCA9PSBEb3VibGVJbkxvY2FsKTsKICAgICB9CiAgICAgCiAgICAgZXhw
bGljaXQgVmFsdWVTb3VyY2UoREZHOjpOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRHVtcENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRHVtcENvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotRHVtcENvbnRleHQ6
OkR1bXBDb250ZXh0KCkgeyB9CitEdW1wQ29udGV4dDo6RHVtcENvbnRleHQoKQorICAgIDogZ3Jh
cGgoMCkKK3sKK30KKwogRHVtcENvbnRleHQ6On5EdW1wQ29udGV4dCgpIHsgfQogCiBib29sIER1
bXBDb250ZXh0Ojppc0VtcHR5KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0R1bXBDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRHVtcENvbnRleHQuaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRHVtcENvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIERGRyB7IGNsYXNzIEdyYXBo
OyB9CisKIHN0cnVjdCBEdW1wQ29udGV4dCB7CiAgICAgRHVtcENvbnRleHQoKTsKICAgICB+RHVt
cENvbnRleHQoKTsKQEAgLTQxLDYgKzQzLDcgQEAgc3RydWN0IER1bXBDb250ZXh0IHsKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXggPSAiIikgY29uc3Q7CiAg
ICAgCiAgICAgU3RyaW5nSGFzaER1bXBDb250ZXh0PFN0cnVjdHVyZT4gc3RydWN0dXJlczsKKyAg
ICBERkc6OkdyYXBoKiBncmFwaDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxNTkx
NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NjksMTMgKzQ2OSwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VzTm9u
U3RyaWN0RXZhbCgpIHsgcmV0dXJuIG1fdXNlc05vblN0cmljdEV2YWw7IH0KICAgICB2b2lkIHNl
dFVzZXNOb25TdHJpY3RFdmFsKGJvb2wgdXNlc05vblN0cmljdEV2YWwpIHsgbV91c2VzTm9uU3Ry
aWN0RXZhbCA9IHVzZXNOb25TdHJpY3RFdmFsOyB9CiAKLSAgICBpbnQgY2FwdHVyZVN0YXJ0KCkg
eyByZXR1cm4gbV9jYXB0dXJlU3RhcnQ7IH0KKyAgICBpbnQgY2FwdHVyZVN0YXJ0KCkgY29uc3Qg
eyByZXR1cm4gbV9jYXB0dXJlU3RhcnQ7IH0KICAgICB2b2lkIHNldENhcHR1cmVTdGFydChpbnQg
Y2FwdHVyZVN0YXJ0KSB7IG1fY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZVN0YXJ0OyB9CiAKLSAgICBp
bnQgY2FwdHVyZUVuZCgpIHsgcmV0dXJuIG1fY2FwdHVyZUVuZDsgfQorICAgIGludCBjYXB0dXJl
RW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJlRW5kOyB9CiAgICAgdm9pZCBzZXRDYXB0dXJl
RW5kKGludCBjYXB0dXJlRW5kKSB7IG1fY2FwdHVyZUVuZCA9IGNhcHR1cmVFbmQ7IH0KIAotICAg
IGludCBjYXB0dXJlQ291bnQoKSB7IHJldHVybiAtKG1fY2FwdHVyZUVuZCAtIG1fY2FwdHVyZVN0
YXJ0KTsgfQorICAgIGludCBjYXB0dXJlQ291bnQoKSBjb25zdCB7IHJldHVybiAtKG1fY2FwdHVy
ZUVuZCAtIG1fY2FwdHVyZVN0YXJ0KTsgfQogCiAgICAgaW50IHBhcmFtZXRlckNvdW50KCkgeyBy
ZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9CiAgICAgaW50IHBhcmFt
ZXRlckNvdW50SW5jbHVkaW5nVGhpcygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRp
bmdUaGlzOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216974</attachid>
            <date>2013-11-14 13:35:49 -0800</date>
            <delta_ts>2013-11-14 15:06:54 -0800</delta_ts>
            <desc>it builds</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>90872</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1OTE0MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtOTEsNiArOTEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdBcnJheU1vZGUuY3Bw
CiAgICAgZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCisgICAgZGZnL0RGR0F2YWlsYWJp
bGl0eS5jcHAKICAgICBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKICAgICBk
ZmcvREZHQmFzaWNCbG9jay5jcHAKICAgICBkZmcvREZHQmluYXJ5U3dpdGNoLmNwcApAQCAtMTM5
LDYgKzE0MCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0xvbmdM
aXZlZFN0YXRlLmNwcAogICAgIGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAK
ICAgICBkZmcvREZHTWluaWZpZWROb2RlLmNwcAorICAgIGRmZy9ERkdNb3ZIaW50Q291bnRpbmdQ
aGFzZS5jcHAKICAgICBkZmcvREZHTmF0dXJhbExvb3BzLmNwcAogICAgIGRmZy9ERkdOb2RlLmNw
cAogICAgIGRmZy9ERkdOb2RlRmxhZ3MuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMCArMTAw
LDExIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQXJyYXlQcm9maWxlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eVZhbEluZm8uaCBcCi0gICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
QmFzaWNCbG9jay5jcHAgXAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUJhc2ljQmxvY2suaCBcCi0gICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaCBcCkBAIC0xMzIs
NiArMTMzLDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4aXRLaW5kLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeHBy
ZXNzaW9uUmFuZ2VJbmZvLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxs
Qnl0ZWNvZGVMaXZlbmVzcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
U3RhdHVzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5o
IFwKQEAgLTIwNyw2ICsyMDksOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmNwcCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAgXApAQCAtMzE4LDYgKzMyMiw4IEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWluaWZpZWRJRC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVk
Tm9kZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludENvdW50aW5nUGhhc2UuY3Bw
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNlLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTMzOCw2ICszMzgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCIgLz4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5LmNwcCIgLz4NCiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2suY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPg0K
QEAgLTM4NCw2ICszODUsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xv
bmdMaXZlZFN0YXRlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZE5vZGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR05hdHVyYWxMb29wcy5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdOb2RlRmxhZ3MuY3BwIiAvPg0KQEAgLTc0NSw2ICs3NDcsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnlWYWxJbmZvLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzSW5saW5lLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcQ2FsbExpbmtJbmZvLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcQ2FsbExpbmtTdGF0dXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIiAvPg0KQEAgLTc2
Miw2ICs3NjUsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhlY3V0
aW9uQ291bnRlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV4
aXRLaW5kLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhwcmVz
c2lvblJhbmdlSW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XEZ1bGxCeXRlY29kZUxpdmVuc3MuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxHZXRCeUlkU3RhdHVzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcSGFuZGxlckluZm8uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxJbmxpbmVDYWxsRnJhbWVTZXQuaCIgLz4NCkBAIC04MTIsNiArODE2LDcgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9y
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRl
LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F2YWlsYWJpbGl0eS5o
IiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdh
dGlvblBoYXNlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2lj
QmxvY2suaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9j
a0lubGluZXMuaCIgLz4NCkBAIC04NzMsNiArODc4LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZEdyYXBoLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR01pbmlmaWVkSUQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHTWluaWZpZWROb2RlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR05hdHVyYWxMb29wcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdOb2RlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R05vZGVBbGxvY2F0b3IuaCIgLz4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw2ICsyNjAs
MTIgQEAKIAkJMEY2Mzk0NzgxNURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2Mzk0ODQx
NUU0ODExODAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ4MTE1RTQ4MTE0MDA2QTU5N0MgLyogREZH
QXJyYXlNb2RlLmNwcCAqLzsgfTsKIAkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0Fy
cmF5TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2Mzk0ODIxNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjY2RUMwMTgzNTY2RjkwMEQw
MTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEg
LyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAv
KiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxp
dmVuZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDMjE4MzU2NzJC
MDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCAqLzsgfTsKKwkJMEY2NjZFQzcxODM1Njcy
QjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQzMxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWls
YWJpbGl0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGNjY2RUM4MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVD
NDE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwICovOyB9Owor
CQkwRjY2NkVDOTE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50aW5nUGhhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUM1MTgz
NTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZCMTRERjNGMTYwMEI3
QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyog
REZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNzAyNUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MDI1
QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgKi87IH07
CkBAIC0xNTQ3LDYgKzE1NTMsMTIgQEAKIAkJMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0ODExNUU0
ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdBcnJheU1vZGUuY3BwOyBwYXRoID0gZGZnL0RGR0FycmF5TW9kZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3
QyAvKiBERkdBcnJheU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
QXJyYXlNb2RlLmg7IHBhdGggPSBkZmcvREZHQXJyYXlNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXNJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bGxCeXRlY29kZUxpdmVuZXNzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjY2RUMyMTgzNTY3MkIwMEQwMTdGMSAvKiBE
RkdBdmFpbGFiaWxpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHQXZhaWxhYmlsaXR5LmNwcDsgcGF0aCA9IGRmZy9ERkdBdmFpbGFiaWxpdHkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZH
QXZhaWxhYmlsaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0F2YWls
YWJpbGl0eS5oOyBwYXRoID0gZGZnL0RGR0F2YWlsYWJpbGl0eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjY2NkVDNDE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50
aW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTW92
SGludENvdW50aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQzUxODM1NjcyQjAwRDAx
N0YxIC8qIERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHTW92SGlu
dENvdW50aW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjgx
NERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQWRqYWNlbmN5TGlzdC5oOyBwYXRoID0gZGZnL0RGR0FkamFjZW5j
eUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjkxNERGM0YxMzAw
QjdCMkU0IC8qIERGR0VkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
RWRnZS5oOyBwYXRoID0gZGZnL0RGR0VkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzM5LDYgKzM3NTEsOCBAQAogCQkJCTBGNjM5
NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLywKIAkJCQlBN0Q5QTI4RjE3
QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCiAJCQkJQTdE
OUEyOTAxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCAqLywKKwkJ
CQkwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCAqLywKKwkJ
CQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggKi8sCiAJCQkJ
MEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
Y3BwICovLAogCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlLmggKi8sCiAJCQkJQTdEODlDRTMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jh
c2ljQmxvY2suY3BwICovLApAQCAtMzg0OSw2ICszODYzLDggQEAKIAkJCQkwRkI0QjUxMDE2QjNB
OTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovLAogCQkJCTBGMkJEQzRDMTUyMjgxODMw
MENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwICovLAogCQkJCTBGMkJEQzNFMTUyMjgwMTcw
MENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCAqLywKKwkJCQkwRjY2NkVDNDE4MzU2NzJCMDBE
MDE3RjEgLyogREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwICovLAorCQkJCTBGNjY2RUM1MTgz
NTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oICovLAogCQkJCUE3Mzc4
MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovLAogCQkJCUE3Mzc4
MTBCMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLywKIAkJCQkwRkI0QjUx
RTE2QjYyNzcyMDAzRjY5NkIgLyogREZHTm9kZS5jcHAgKi8sCkBAIC00MDMxLDE1ICs0MDQ3LDE2
IEBACiAJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQzJGQ0FFMEMxN0E5QzI0RTAwMzRD
NzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi8sCi0JCQkJQzJGQ0FFMEQxN0E5QzI0RTAw
MzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovLAotCQkJCUMyRkNBRTBFMTdBOUMyNEUw
MDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwICovLAotCQkJCUMyRkNBRTBG
MTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLywKIAkJCQkw
RjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgKi8s
CiAJCQkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUu
aCAqLywKIAkJCQkwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCAq
LywKIAkJCQkwRjYzOTQ1MjE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggKi8sCisJ
CQkJQzJGQ0FFMEMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi8s
CisJCQkJQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICov
LAogCQkJCTBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmgg
Ki8sCisJCQkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAgKi8sCisJCQkJQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcy5oICovLAorCQkJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8sCiAJCQkJMEY4MDIzRTkxNjEzODMyMzAw
QTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovLAogCQkJCTBGMEI4M0FFMTRCQ0Y3MTQwMDg4NUI0RiAv
KiBDYWxsTGlua0luZm8uY3BwICovLAogCQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4NUI0RiAvKiBD
YWxsTGlua0luZm8uaCAqLywKQEAgLTQwNjgsNiArNDA4NSw3IEBACiAJCQkJMEZCMTA1ODIxNjc1
NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCAqLywKIAkJCQkwRkIxMDU4MzE2NzU0ODBDMDBG
OEFCNkUgLyogRXhpdEtpbmQuaCAqLywKIAkJCQkwRjBCODNBQTE0QkNGNUI5MDA4ODVCNEYgLyog
RXhwcmVzc2lvblJhbmdlSW5mby5oICovLAorCQkJCTBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAv
KiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovLAogCQkJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjND
NiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYzQzYg
LyogR2V0QnlJZFN0YXR1cy5oICovLAogCQkJCTBGMEI4M0E4MTRCQ0Y1NUUwMDg4NUI0RiAvKiBI
YW5kbGVySW5mby5oICovLApAQCAtNDQ1NSw2ICs0NDczLDcgQEAKIAkJCQkyQTZGNDYyNjE3RTk1
OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGOTc0
NDcxMzhDODUzRTAwREExQzY3IC8qIEhlYXBSb290VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzI0RDMxRTMxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFw
VGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwRjBFMTZGNUNE
MDBCMzQ0NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCkBAIC00NTY0LDYgKzQ1ODMs
NyBAQAogCQkJCTdDMTg0RTFGMTdCRUUyMkUwMDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDM0JBMjk1MTdDMDM5NTYwMDcyRERDOSAvKiBKU1Byb21p
c2VSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0REVGOTYxODJEOTkxNDAwNTIyQzIy
IC8qIEpTTWFwSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjY2RUM5MTgzNTY3MkIw
MEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0MzQkEyOTcxN0MwMzk1NjAwNzJEREM5IC8qIEpTUHJvbWlzZVJlc29sdmVyQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDM0JBMjk5MTdDMDM5NTYwMDcyRERDOSAvKiBKU1Byb21p
c2VSZXNvbHZlclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYyNTUzRDIxNjEzNkUx
QTAwOUYxN0QwIC8qIEpTUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtNDY5Niw2ICs0NzE2LDcg
QEAKIAkJCQk5NUNENDU3NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTEwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGVOb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlBNTE2NkFEMzUxMDAwRjVCQTMgLyogUHJvZmls
ZXJCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0Yx
IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUI5MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVT
ZXF1ZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8q
IFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNDgwNSw2ICs0ODI2LDcg
QEAKIAkJCQlBN0E4QUYzRjE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdBOEFGNDAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVGMDhDRjE0NkM3NjMzMDAwNDcyQTkgLyogVW5jb25k
aXRpb25hbEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjZFQzcxODM1NjcyQjAw
RDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCNjAxODIx
NjM5RkQyQTAwMzcyQkEzIC8qIFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJFODkyQzE2RDAyOEFEMDA5RTRGRDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC01MjY4LDYgKzUyOTAsNyBAQAogCQkJCTE0N0YzOUMwMTA3RUMzNzYwMDQy
N0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0MDE3
RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0ODE2RTFCMTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjY2NkVDODE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50aW5n
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NjMxMDdFQzExQTAwMTNFN0IyIC8q
IEJvb2xlYW5Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg2NDEwN0VD
MTFBMDAxM0U3QjIgLyogQm9vbGVhbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4
MDg2NTEwN0VDMTFBMDAxM0U3QjIgLyogQm9vbGVhblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTU2OTAsNiArNTcxMyw3IEBACiAJCQkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8q
IFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjJFMTcxRTNFMjMw
MEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ5NEYzMDE3MUUz
RTIzMDBCRTc3QTQgLyogV2F0Y2hkb2dNYWMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NjZF
QzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQUNGNzM3NzE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNEU4NEY5RTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
QmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUJhc2ljQmxvY2suaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw4ICszNiw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiAKLXR5
cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgRmFzdEJpdFZlY3RvciwgV1RGOjpJbnRIYXNoPHVuc2ln
bmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4gPiBCeXRl
Y29kZVRvQml0bWFwTWFwOwotCiBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2sgOiBwdWJsaWMgUmVm
Q291bnRlZDxCeXRlY29kZUJhc2ljQmxvY2s+IHsKIHB1YmxpYzoKICAgICBlbnVtIFNwZWNpYWxC
bG9ja1R5cGUgeyBFbnRyeUJsb2NrLCBFeGl0QmxvY2sgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oIgogCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNz
LmgiCiAjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpA
QCAtMzgsNDQgKzQwLDIzIEBAIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVMaXZl
bmUKICAgICBjb21wdXRlKCk7CiB9CiAKLXN0YXRpYyBpbnQgbnVtYmVyT2ZDYXB0dXJlZFZhcmlh
YmxlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBpZiAoIWNvZGVCbG9jay0+c3ltYm9s
VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+c3ltYm9s
VGFibGUoKS0+Y2FwdHVyZUNvdW50KCk7Ci19Ci0KLXN0YXRpYyBpbnQgY2FwdHVyZVN0YXJ0KENv
ZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5jYXB0dXJlU3RhcnQoKTsKLX0KLQotc3RhdGljIGludCBjYXB0dXJlRW5kKENvZGVCbG9jayog
Y29kZUJsb2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJl
RW5kKCk7Ci19Ci0KIHN0YXRpYyBib29sIGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKENvZGVC
bG9jayogY29kZUJsb2NrLCBpbnQgb3BlcmFuZCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZyhvcGVyYW5kKTsKICAgICByZXR1cm4gIWNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lz
dGVySW5kZXgob3BlcmFuZCkgLy8gRG9uJ3QgY2FyZSBhYm91dCBjb25zdGFudHMuCiAgICAgICAg
ICYmIHZpcnR1YWxSZWcuaXNMb2NhbCgpIC8vIERvbid0IGNhcmUgYWJvdXQgYXJndW1lbnRzLgot
ICAgICAgICAmJiAoIW51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMoY29kZUJsb2NrKSAvLyBJZiB3
ZSBoYXZlIG5vIGNhcHR1cmVkIHZhcmlhYmxlcywgd2UncmUgZ29vZCB0byBnby4KLSAgICAgICAg
ICAgIHx8ICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY2FwdHVyZVN0YXJ0KGNvZGVCbG9jaykgfHwg
KHZpcnR1YWxSZWcub2Zmc2V0KCkgPD0gY2FwdHVyZUVuZChjb2RlQmxvY2spKSkpOworICAgICAg
ICAmJiAoIWNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkgLy8gSWYgd2UgaGF2ZSBubyBjYXB0dXJl
ZCB2YXJpYWJsZXMsIHdlJ3JlIGdvb2QgdG8gZ28uCisgICAgICAgICAgICB8fCAodmlydHVhbFJl
Zy5vZmZzZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkgfHwgKHZpcnR1YWxSZWcub2Zm
c2V0KCkgPD0gY29kZUJsb2NrLT5jYXB0dXJlRW5kKCkpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNl
dEZvck9wZXJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZhc3RCaXRWZWN0b3ImIGJpdHMsIGlu
dCBvcGVyYW5kKQogewogICAgIEFTU0VSVChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2Rl
QmxvY2ssIG9wZXJhbmQpKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5k
KTsKLSAgICBpZiAodmlydHVhbFJlZy5vZmZzZXQoKSA+IGNhcHR1cmVTdGFydChjb2RlQmxvY2sp
KQorICAgIGlmICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQo
KSkKICAgICAgICAgYml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkpOwogICAgIGVsc2UKLSAg
ICAgICAgYml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkgLSBudW1iZXJPZkNhcHR1cmVkVmFy
aWFibGVzKGNvZGVCbG9jaykpOworICAgICAgICBiaXRzLnNldCh2aXJ0dWFsUmVnLnRvTG9jYWwo
KSAtIGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkpOwogfQogCiBzdGF0aWMgdm9pZCBjb21wdXRl
VXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgdXNlcykKQEAgLTUzMywxMyArNTE0LDMyIEBAIHN0
YXRpYyBCeXRlY29kZUJhc2ljQmxvY2sqIGZpbmRCYXNpY0Jsb2MKICAgICByZXR1cm4gYmFzaWNC
bG9ja1sxXS5nZXQoKTsKIH0KIAorc3RhdGljIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+PiYgYmFz
aWNCbG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiB1c2VzLCBG
YXN0Qml0VmVjdG9yJiBkZWZzLCBGYXN0Qml0VmVjdG9yJiBvdXQpCit7CisgICAgdXNlcy5jbGVh
ckFsbCgpOworICAgIGRlZnMuY2xlYXJBbGwoKTsKKyAgICAKKyAgICBjb21wdXRlVXNlc0ZvckJ5
dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQsIHVzZXMpOworICAgIGNvbXB1
dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgZGVmcyk7
CisgICAgCisgICAgb3V0LmV4Y2x1ZGUoZGVmcyk7CisgICAgb3V0Lm1lcmdlKHVzZXMpOworICAg
IAorICAgIC8vIElmIHdlIGhhdmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIHdlIHdhbnQgdGhlIGxp
dmUtaW4gdmFyaWFibGVzIG9mIHRoZSAKKyAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9jayB0
byBiZSBpbmNsdWRlZCBpbiB0aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgYnl0ZWNvZGUu
CisgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSB7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9j
ayogaGFuZGxlckJsb2NrID0gZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGJhc2ljQmxv
Y2tzLCBoYW5kbGVyLT50YXJnZXQpOworICAgICAgICBBU1NFUlQoaGFuZGxlckJsb2NrKTsKKyAg
ICAgICAgb3V0Lm1lcmdlKGhhbmRsZXJCbG9jay0+aW4oKSk7CisgICAgfQorfQorCiBzdGF0aWMg
dm9pZCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrLCBWZWN0b3I8UmVmUHRyPEJ5dGVjb2Rl
QmFzaWNCbG9jaz4gPiYgYmFzaWNCbG9ja3MsIHVuc2lnbmVkIHRhcmdldE9mZnNldCwgRmFzdEJp
dFZlY3RvciYgcmVzdWx0KQogewogICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwog
ICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygpKTsKIAogICAgIEZhc3RCaXRWZWN0b3Ig
b3V0ID0gYmxvY2stPm91dCgpOwotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gMDsKIAogICAg
IEZhc3RCaXRWZWN0b3IgdXNlczsKICAgICBGYXN0Qml0VmVjdG9yIGRlZnM7CkBAIC01NTAsMjMg
KzU1MCw4IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWMKICAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+Ynl0ZWNvZGVPZmZzZXRzKClbaV07
CiAgICAgICAgIGlmICh0YXJnZXRPZmZzZXQgPiBieXRlY29kZU9mZnNldCkKICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIHVzZXMuY2xlYXJBbGwoKTsKLSAgICAgICAgZGVmcy5jbGVhckFs
bCgpOwotCi0gICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBi
eXRlY29kZU9mZnNldCwgdXNlcyk7Ci0gICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZz
ZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgZGVmcyk7Ci0KLSAgICAgICAgb3V0LmV4Y2x1
ZGUoZGVmcyk7Ci0gICAgICAgIG91dC5tZXJnZSh1c2VzKTsKLQotICAgICAgICAvLyBJZiB3ZSBo
YXZlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCB3ZSB3YW50IHRoZSBsaXZlLWluIHZhcmlhYmxlcyBv
ZiB0aGUgCi0gICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGVyIGJsb2NrIHRvIGJlIGluY2x1ZGVk
IGluIHRoZSBsaXZlLWluIG9mIHRoaXMgcGFydGljdWxhciBieXRlY29kZS4KLSAgICAgICAgaWYg
KChoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQpKSkgewotICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBoYW5kbGVyQmxvY2sg
PSBmaW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoYmFzaWNCbG9ja3MsIGhhbmRsZXItPnRh
cmdldCk7Ci0gICAgICAgICAgICBBU1NFUlQoaGFuZGxlckJsb2NrKTsKLSAgICAgICAgICAgIG91
dC5tZXJnZShoYW5kbGVyQmxvY2stPmluKCkpOwotICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBzdGVwT3Zlckluc3RydWN0aW9uKGNvZGVCbG9jaywgYmFzaWNCbG9ja3MsIGJ5dGVjb2RlT2Zm
c2V0LCB1c2VzLCBkZWZzLCBvdXQpOwogICAgIH0KIAogICAgIHJlc3VsdC5zZXQob3V0KTsKQEAg
LTU4Myw3ICs1NjgsNyBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6cnVuTGl2ZW5l
CiB7CiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZWYXJpYWJsZXMg
PSB1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzICsgCi0gICAgICAgIHVubGlua2VkQ29kZUJs
b2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAtIG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9j
b2RlQmxvY2spOworICAgICAgICB1bmxpbmtlZENvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3Rl
cnMgLSBtX2NvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9iYXNpY0Jsb2Nrcy5zaXplKCk7IGkrKykgewogICAgICAgICBCeXRlY29kZUJh
c2ljQmxvY2sqIGJsb2NrID0gbV9iYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKQEAgLTYyMiwzNiArNjA3
LDMwIEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmUKIAogYm9vbCBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6Om9wZXJhbmRJc0xpdmVBdEJ5dGVjb2RlT2Zmc2V0KGlu
dCBvcGVyYW5kLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsKLSAgICBpbnQgbnVtQ2FwdHVy
ZWRWYXJzID0gbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhtX2NvZGVCbG9jayk7Ci0gICAgaWYg
KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0FyZ3VtZW50KCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGlmIChvcGVyYW5kIDw9IGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykgJiYgb3Bl
cmFuZCA+IGNhcHR1cmVFbmQobV9jb2RlQmxvY2spKQorICAgIGlmIChvcGVyYW5kSXNBbHdheXNM
aXZlKG1fY29kZUJsb2NrLCBvcGVyYW5kKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgRmFz
dEJpdFZlY3RvciByZXN1bHQ7CiAgICAgZ2V0TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVyZWRWYXJz
QXRCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVz
dWx0LmdldChvcGVyYW5kIC0gbnVtQ2FwdHVyZWRWYXJzKTsKKyAgICByZXR1cm4gb3BlcmFuZFRo
YXRJc05vdEFsd2F5c0xpdmVJc0xpdmUobV9jb2RlQmxvY2ssIHJlc3VsdCwgb3BlcmFuZCk7CiB9
CiAKLUZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0lu
Zm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorRmFzdEJpdFZlY3Rv
ciBnZXRMaXZlbmVzc0luZm8oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZhc3RCaXRWZWN0
b3ImIG91dCkKIHsKLSAgICBGYXN0Qml0VmVjdG9yIHRlbXA7CiAgICAgRmFzdEJpdFZlY3RvciBy
ZXN1bHQ7CiAKLSAgICBnZXRMaXZlbmVzc0luZm9Gb3JOb25DYXB0dXJlZFZhcnNBdEJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCB0ZW1wKTsKLQotICAgIHVuc2lnbmVkIG51bUNhcHR1cmVk
VmFycyA9IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9jb2RlQmxvY2spOworICAgIHVuc2ln
bmVkIG51bUNhcHR1cmVkVmFycyA9IGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCk7CiAgICAgaWYg
KG51bUNhcHR1cmVkVmFycykgewotICAgICAgICBpbnQgZmlyc3RDYXB0dXJlZExvY2FsID0gVmly
dHVhbFJlZ2lzdGVyKGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykpLnRvTG9jYWwoKTsKLSAgICAg
ICAgcmVzdWx0LnJlc2l6ZSh0ZW1wLm51bUJpdHMoKSArIG51bUNhcHR1cmVkVmFycyk7CisgICAg
ICAgIGludCBmaXJzdENhcHR1cmVkTG9jYWwgPSBWaXJ0dWFsUmVnaXN0ZXIoY29kZUJsb2NrLT5j
YXB0dXJlU3RhcnQoKSkudG9Mb2NhbCgpOworICAgICAgICByZXN1bHQucmVzaXplKG91dC5udW1C
aXRzKCkgKyBudW1DYXB0dXJlZFZhcnMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtQ2FwdHVyZWRWYXJzOyArK2kpCiAgICAgICAgICAgICByZXN1bHQuc2V0KGZpcnN0Q2Fw
dHVyZWRMb2NhbCArIGkpOwogICAgIH0gZWxzZQotICAgICAgICByZXN1bHQucmVzaXplKHRlbXAu
bnVtQml0cygpKTsKKyAgICAgICAgcmVzdWx0LnJlc2l6ZShvdXQubnVtQml0cygpKTsKIAotICAg
IGludCB0ZW1wTGVuZ3RoID0gdGVtcC5udW1CaXRzKCk7Ci0gICAgQVNTRVJUKHRlbXBMZW5ndGgg
Pj0gMCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZW1wTGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgaWYgKCF0ZW1wLmdldChpKSkKKyAgICBpbnQgb3V0TGVuZ3RoID0gb3V0Lm51bUJpdHMoKTsK
KyAgICBBU1NFUlQob3V0TGVuZ3RoID49IDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0
TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKCFvdXQuZ2V0KGkpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgaWYgKCFudW1DYXB0dXJlZFZhcnMpIHsKQEAgLTY1OSw3ICs2Mzgs
NyBAQCBGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKS5vZmZzZXQoKSA+IGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykpCisgICAgICAgIGlm
ICh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKS5vZmZzZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVy
ZVN0YXJ0KCkpCiAgICAgICAgICAgICByZXN1bHQuc2V0KGkpOwogICAgICAgICBlbHNlIAogICAg
ICAgICAgICAgcmVzdWx0LnNldChudW1DYXB0dXJlZFZhcnMgKyBpKTsKQEAgLTY2Nyw2ICs2NDYs
MzkgQEAgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OgogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK0Zhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpn
ZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQor
eworICAgIEZhc3RCaXRWZWN0b3Igb3V0OworICAgIGdldExpdmVuZXNzSW5mb0Zvck5vbkNhcHR1
cmVkVmFyc0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgcmV0dXJu
IGdldExpdmVuZXNzSW5mbyhtX2NvZGVCbG9jaywgb3V0KTsKK30KKwordm9pZCBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MoRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mm
IHJlc3VsdCkKK3sKKyAgICBGYXN0Qml0VmVjdG9yIG91dDsKKyAgICBGYXN0Qml0VmVjdG9yIHVz
ZXM7CisgICAgRmFzdEJpdFZlY3RvciBkZWZzOworICAgIAorICAgIHJlc3VsdC5tX2NvZGVCbG9j
ayA9IG1fY29kZUJsb2NrOworICAgIHJlc3VsdC5tX21hcC5jbGVhcigpOworICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fYmFzaWNCbG9ja3Muc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEJ5
dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jhc2ljQmxvY2tzW2ldLmdldCgpOworICAgICAg
ICBpZiAoYmxvY2stPmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLT5pc0V4aXRCbG9jaygpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBvdXQgPSBibG9jay0+b3V0KCk7
CisgICAgICAgIHVzZXMucmVzaXplKG91dC5udW1CaXRzKCkpOworICAgICAgICBkZWZzLnJlc2l6
ZShvdXQubnVtQml0cygpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5ieXRlY29kZU9mZnNldHMoKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0cygpW2ldOworICAgICAg
ICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihtX2NvZGVCbG9jaywgbV9iYXNpY0Jsb2NrcywgYnl0
ZWNvZGVPZmZzZXQsIHVzZXMsIGRlZnMsIG91dCk7CisgICAgICAgICAgICByZXN1bHQubV9tYXAu
YWRkKGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMoKQogewogICAgIEludGVycHJldGVy
KiBpbnRlcnByZXRlciA9IG1fY29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRlcjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsMTMgKzM0LDE2IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOworY2xh
c3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3M7CiAKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cyB7CiBwdWJsaWM6CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzKENvZGVCbG9jayopOwot
CisgICAgCiAgICAgYm9vbCBvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9mZnNldChpbnQgb3BlcmFu
ZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5l
c3NJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAgCisg
ICAgdm9pZCBjb21wdXRlRnVsbExpdmVuZXNzKEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQp
OwogCiBwcml2YXRlOgogICAgIHZvaWQgY29tcHV0ZSgpOwpAQCAtNTMsNiArNTYsMTIgQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiBtX2Jhc2ljQmxv
Y2tzOwogfTsKIAoraW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgaW50IG9wZXJhbmQpOworaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5
c0xpdmVJc0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91
dCwgaW50IG9wZXJhbmQpOworaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CisKK0Zhc3RC
aXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvKENvZGVCbG9jayosIGNvbnN0IEZhc3RCaXRWZWN0b3Im
IG91dCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lc19oCisjZGVmaW5l
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXNfaAorCisjaW5jbHVkZSAiQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitpbmxpbmUgYm9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKENvZGVCbG9jayogY29kZUJs
b2NrLCBpbnQgb3BlcmFuZCkKK3sKKyAgICBpZiAoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlz
QXJndW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG9wZXJhbmQgPD0g
Y29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSAmJiBvcGVyYW5kID4gY29kZUJsb2NrLT5jYXB0dXJl
RW5kKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZl
KENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVy
YW5kKQoreworICAgIHJldHVybiBvdXQuZ2V0KG9wZXJhbmQgLSBjb2RlQmxvY2stPmNhcHR1cmVD
b3VudCgpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShDb2RlQmxvY2sqIGNvZGVC
bG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK3sKKyAgICByZXR1
cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShjb2RlQmxvY2ssIG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0
SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvZGVCbG9jaywgb3V0LCBvcGVyYW5kKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxp
bmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNiArMzU0LDI3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX25lZWRzQWN0aXZhdGlvbjsKICAgICB9CisgICAgCisgICAg
dW5zaWduZWQgY2FwdHVyZUNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghc3ltYm9s
VGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gc3ltYm9sVGFi
bGUoKS0+Y2FwdHVyZUNvdW50KCk7CisgICAgfQorICAgIAorICAgIGludCBjYXB0dXJlU3RhcnQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKTsK
KyAgICB9CisgICAgCisgICAgaW50IGNhcHR1cmVFbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7CisgICAgfQogCiAgICAgYm9vbCBpc0NhcHR1
cmVkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBJbmxpbmVDYWxsRnJhbWUqID0gMCkgY29uc3Q7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZ1bGxCeXRlY29kZUxpdmVuZXNzX2gK
KyNkZWZpbmUgRnVsbEJ5dGVjb2RlTGl2ZW5lc3NfaAorCisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRW
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczsKKwordHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBGYXN0Qml0VmVjdG9yLCBXVEY6Oklu
dEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2ln
bmVkPiA+IEJ5dGVjb2RlVG9CaXRtYXBNYXA7CisKK2NsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNz
IHsKK3B1YmxpYzoKKyAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcygpIDogbV9jb2RlQmxvY2soMCkg
eyB9CisgICAgCisgICAgLy8gV2Ugc2F5ICJvdXQiIHRvIHJlZmVyIHRvIHRoZSBiaXR2ZWN0b3Ig
dGhhdCBjb250YWlucyByYXcgcmVzdWx0cyBmb3IgYSBieXRlY29kZQorICAgIC8vIGluc3RydWN0
aW9uLgorICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGdldE91dCh1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQnl0ZWNvZGVUb0JpdG1hcE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VSVChp
dGVyICE9IG1fbWFwLmVuZCgpKTsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworICAgIH0K
KyAgICAKKyAgICBib29sIG9wZXJhbmRJc0xpdmUoaW50IG9wZXJhbmQsIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2
ZShtX2NvZGVCbG9jaywgb3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xp
dmUobV9jb2RlQmxvY2ssIGdldE91dChieXRlY29kZUluZGV4KSwgb3BlcmFuZCk7CisgICAgfQor
ICAgIAorICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3ModW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRMaXZlbmVzc0luZm8obV9jb2RlQmxv
Y2ssIGdldE91dChieXRlY29kZUluZGV4KSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworICAgIAorICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7CisgICAgQnl0ZWNvZGVUb0JpdG1hcE1hcCBtX21hcDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRnVsbEJ5dGVjb2RlTGl2ZW5lc3NfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0F2YWlsYWJpbGl0eS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKwordm9pZCBBdmFpbGFiaWxpdHk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgMCk7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5Ojpk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25z
dAoreworICAgIG91dC5wcmludChtX2ZsdXNoZWRBdCwgIi8iKTsKKyAgICAKKyAgICBHcmFwaCog
Z3JhcGggPSBjb250ZXh0ID8gY29udGV4dC0+Z3JhcGggOiAwOworICAgIAorICAgIGlmICh2YXJp
YWJsZUlzVW5kZWNpZGVkKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJVbmRlY2lkZWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAodmFyaWFibGVJc1VuYXZhaWxhYmxl
KCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJVbmF2YWlsYWJsZSIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChncmFwaCkgeworICAgICAgICBvdXQucHJpbnQoVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcCgqZ3JhcGgsIG1fdmFyaWFibGUpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihtX3ZhcmlhYmxlKSk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQXZhaWxhYmlsaXR5X2gKKyNkZWZp
bmUgREZHQXZhaWxhYmlsaXR5X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHRmx1c2hlZEF0LmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQXZhaWxhYmlsaXR5IHsKK3B1
YmxpYzoKKyAgICBBdmFpbGFiaWxpdHkoKQorICAgICAgICA6IG1fdmFyaWFibGUoMCkKKyAgICAg
ICAgLCBtX2ZsdXNoZWRBdChEZWFkRmx1c2gpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBs
aWNpdCBBdmFpbGFiaWxpdHkoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSkKKyAgICAgICAg
OiBtX3ZhcmlhYmxlKHZhcmlhYmxlKQorICAgICAgICAsIG1fZmx1c2hlZEF0KENvbmZsaWN0aW5n
Rmx1c2gpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgQXZhaWxhYmlsaXR5IHVuYXZh
aWxhYmxlKCkKKyAgICB7CisgICAgICAgIEF2YWlsYWJpbGl0eSByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX3ZhcmlhYmxlID0gYml0d2lzZV9jYXN0PFZhcmlhYmxlQWNjZXNzRGF0YSo+KHN0YXRp
Y19jYXN0PGludHB0cl90PigxKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIEF2YWlsYWJpbGl0eSB3aXRoRmx1c2goRmx1c2hlZEF0IGZsdXNoKQorICAgIHsKKyAg
ICAgICAgQXZhaWxhYmlsaXR5IHJlc3VsdCA9ICp0aGlzOworICAgICAgICByZXN1bHQubV9mbHVz
aGVkQXQgPSBmbHVzaDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
Ym9vbCB2YXJpYWJsZUlzVW5kZWNpZGVkKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZSA9PSAw
OyB9CisgICAgYm9vbCB2YXJpYWJsZUlzVW5hdmFpbGFibGUoKSBjb25zdCB7IHJldHVybiAqdGhp
cyA9PSB1bmF2YWlsYWJsZSgpOyB9CisgICAgCisgICAgYm9vbCBoYXNWYXJpYWJsZSgpIGNvbnN0
IHsgcmV0dXJuICF2YXJpYWJsZUlzVW5kZWNpZGVkKCkgJiYgIXZhcmlhYmxlSXNVbmF2YWlsYWJs
ZSgpOyB9CisgICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoIXZhcmlhYmxlSXNVbmRlY2lkZWQoKSk7CisgICAgICAgIEFT
U0VSVCghdmFyaWFibGVJc1VuYXZhaWxhYmxlKCkpOworICAgICAgICByZXR1cm4gbV92YXJpYWJs
ZTsKKyAgICB9CisgICAgCisgICAgRmx1c2hlZEF0IGZsdXNoZWRBdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZmx1c2hlZEF0OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biB2YXJpYWJsZUlzVW5hdmFpbGFibGUoKSAmJiAhZmx1c2hlZEF0KCk7IH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBBdmFpbGFiaWxpdHkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdmFyaWFibGUgPT0gb3RoZXIubV92YXJpYWJsZQorICAgICAgICAgICAgJiYg
bV9mbHVzaGVkQXQgPT0gb3RoZXIubV9mbHVzaGVkQXQ7CisgICAgfQorICAgIAorICAgIEF2YWls
YWJpbGl0eSBtZXJnZShjb25zdCBBdmFpbGFiaWxpdHkmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQXZhaWxhYmlsaXR5IHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIGlmICh2YXJpYWJs
ZUlzVW5kZWNpZGVkKCkpCisgICAgICAgICAgICByZXN1bHQgPSBvdGhlcjsKKyAgICAgICAgZWxz
ZSBpZiAob3RoZXIudmFyaWFibGVJc1VuZGVjaWRlZCgpKQorICAgICAgICAgICAgcmVzdWx0ID0g
KnRoaXM7CisgICAgICAgIGVsc2UgaWYgKHZhcmlhYmxlKCkgPT0gb3RoZXIudmFyaWFibGUoKSkK
KyAgICAgICAgICAgIHJlc3VsdCA9ICp0aGlzOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXN1bHQgPSB1bmF2YWlsYWJsZSgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdC53
aXRoRmx1c2goZmx1c2hlZEF0KCkubWVyZ2Uob3RoZXIuZmx1c2hlZEF0KCkpKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG1fdmFyaWFibGU7CisgICAgRmx1c2hlZEF0IG1fZmx1c2hl
ZEF0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBdmFpbGFiaWxpdHlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTU5MTQxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Fi
c3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHkuaCIKICNpbmNsdWRlICJE
RkdCcmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdGbHVzaGVkQXQuaCIKICNpbmNsdWRl
ICJERkdOb2RlLmgiCkBAIC0xNDAsOCArMTQxLDggQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZD
b3VudGVkPEJhc2ljQmxvYwogICAgIHN0cnVjdCBTU0FEYXRhIHsKICAgICAgICAgT3BlcmFuZHM8
Rmx1c2hlZEF0PiBmbHVzaEF0SGVhZDsKICAgICAgICAgT3BlcmFuZHM8Rmx1c2hlZEF0PiBmbHVz
aEF0VGFpbDsKLSAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0eUF0SGVhZDsKLSAg
ICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAgT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPEF2
YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5QXRUYWlsOwogICAgICAgICBIYXNoU2V0PE5vZGUqPiBs
aXZlQXRIZWFkOwogICAgICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlQXRUYWlsOwogICAgICAgICBI
YXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxNTkx
NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogRGlzYXNzZW1ibGVyOjpEaXNhc3NlbWJsZXIoR3JhcGgmIGdyYXBoKQogICAgIDogbV9n
cmFwaChncmFwaCkKIHsKKyAgICBtX2R1bXBDb250ZXh0LmdyYXBoID0gJm1fZ3JhcGg7CiAgICAg
bV9sYWJlbEZvckJsb2NrSW5kZXgucmVzaXplKGdyYXBoLm51bUJsb2NrcygpKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAJKHJldmlz
aW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBGbHUKICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICBv
dXQucHJpbnQoIkZsdXNoZWRKU1ZhbHVlIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENv
bmZsaWN0aW5nRmx1c2g6CisgICAgICAgIG91dC5wcmludCgiQ29uZmxpY3RpbmdGbHVzaCIpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCShy
ZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9y
bWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDggQEAgZW51bSBGbHVzaEZvcm1hdCB7
CiAgICAgRmx1c2hlZERvdWJsZSwKICAgICBGbHVzaGVkQ2VsbCwKICAgICBGbHVzaGVkQm9vbGVh
biwKLSAgICBGbHVzaGVkSlNWYWx1ZQorICAgIEZsdXNoZWRKU1ZhbHVlLAorICAgIENvbmZsaWN0
aW5nRmx1c2gKIH07CiAKIGlubGluZSBOb2RlRmxhZ3MgcmVzdWx0Rm9yKEZsdXNoRm9ybWF0IGZv
cm1hdCkKQEAgLTU0LDYgKzU1LDcgQEAgaW5saW5lIE5vZGVGbGFncyByZXN1bHRGb3IoRmx1c2hG
b3JtYXQgZgogICAgIGNhc2UgRGVhZEZsdXNoOgogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CiAg
ICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAgICAg
IHJldHVybiBOb2RlUmVzdWx0SlM7CiAgICAgY2FzZSBGbHVzaGVkSW50MzI6CiAgICAgICAgIHJl
dHVybiBOb2RlUmVzdWx0SW50MzI7CkBAIC03Myw2ICs3NSw3IEBAIGlubGluZSBVc2VLaW5kIHVz
ZUtpbmRGb3IoRmx1c2hGb3JtYXQgZm8KICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2Ug
RGVhZEZsdXNoOgogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgY2FzZSBDb25mbGljdGlu
Z0ZsdXNoOgogICAgICAgICByZXR1cm4gVW50eXBlZFVzZTsKICAgICBjYXNlIEZsdXNoZWRDZWxs
OgogICAgICAgICByZXR1cm4gQ2VsbFVzZTsKQEAgLTkzLDYgKzk2LDcgQEAgaW5saW5lIERhdGFG
b3JtYXQgZGF0YUZvcm1hdEZvcihGbHVzaEZvcgogewogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAg
ICAgY2FzZSBEZWFkRmx1c2g6CisgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgogICAgICAgICBy
ZXR1cm4gRGF0YUZvcm1hdERlYWQ7CiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAgICAgICAg
cmV0dXJuIERhdGFGb3JtYXRKUzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rmx1c2hlZEF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZsdXNoZWRBdC5jcHAJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmx1c2hlZEF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgRmx1c2hlZEF0OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZm9ybWF0ID09IERlYWRGbHVzaCkK
KyAgICBpZiAobV9mb3JtYXQgPT0gRGVhZEZsdXNoIHx8IG1fZm9ybWF0ID09IENvbmZsaWN0aW5n
Rmx1c2gpCiAgICAgICAgIG91dC5wcmludChtX2Zvcm1hdCk7CiAgICAgZWxzZQogICAgICAgICBv
dXQucHJpbnQoInIiLCBtX3ZpcnR1YWxSZWdpc3RlciwgIjoiLCBtX2Zvcm1hdCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgJKHJldmlzaW9uIDE1OTE0MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDYgKzQyLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAorICAgIGV4
cGxpY2l0IEZsdXNoZWRBdChGbHVzaEZvcm1hdCBmb3JtYXQpCisgICAgICAgIDogbV9mb3JtYXQo
Zm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEZWFkRmx1c2ggfHwgZm9y
bWF0ID09IENvbmZsaWN0aW5nRmx1c2gpOworICAgIH0KKyAgICAKICAgICBGbHVzaGVkQXQoRmx1
c2hGb3JtYXQgZm9ybWF0LCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgICAg
ICA6IG1fZm9ybWF0KGZvcm1hdCkKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFs
UmVnaXN0ZXIpCkBAIC02NSw2ICs3MSwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IEZsdXNoZWRBdCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOyB9CiAgICAgCisgICAgRmx1c2hlZEF0IG1lcmdlKGNvbnN0IEZsdXNoZWRBdCYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzKQorICAgICAgICAgICAgcmV0dXJu
IG90aGVyOworICAgICAgICBpZiAoIW90aGVyKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgICAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgIHJldHVybiBGbHVzaGVkQXQoQ29uZmxpY3RpbmdGbHVzaCk7CisgICAgfQorICAgIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Myw2
ICszOTMsNyBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiB2b2lk
IEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KQogewog
ICAgIER1bXBDb250ZXh0IG15Q29udGV4dDsKKyAgICBteUNvbnRleHQuZ3JhcGggPSB0aGlzOwog
ICAgIGlmICghY29udGV4dCkKICAgICAgICAgY29udGV4dCA9ICZteUNvbnRleHQ7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTkxNDEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
REZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJG
dWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZVNldC5oIgog
I2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmgiCkBAIC00MTYsNiArNDE3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGV4ZWN1
dGFibGVGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KICAgICAKKyAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAg
ICByZXR1cm4gbV9wcm9maWxlZEJsb2NrOworICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxv
Y2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICB9CisgICAgCiAgICAg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3Jp
Z2luKQogICAgIHsKICAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5k
QmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgbV9wcm9maWxlZEJsb2NrKTsKQEAgLTc3Niw2
ICs3ODQsNDEgQEAgcHVibGljOgogICAgIERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMo
KSB7IHJldHVybiBtX3BsYW4ud2F0Y2hwb2ludHM7IH0KICAgICBEZXNpcmVkU3RydWN0dXJlQ2hh
aW5zJiBjaGFpbnMoKSB7IHJldHVybiBtX3BsYW4uY2hhaW5zOyB9CiAgICAgCisgICAgRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsK
KyAgICAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2Rl
TGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9IG1fYnl0ZWNvZGVMaXZlbmVzcy5maW5kKGNvZGVC
bG9jayk7CisgICAgICAgIGlmIChpdGVyICE9IG1fYnl0ZWNvZGVMaXZlbmVzcy5lbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybiAqaXRlci0+dmFsdWU7CisgICAgICAgIAorICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+IGxpdmVuZXNzID0gc3RkOjptYWtlX3VuaXF1
ZTxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4oKTsKKyAgICAgICAgY29kZUJsb2NrLT5saXZlbmVzc0Fu
YWx5c2lzKCkuY29tcHV0ZUZ1bGxMaXZlbmVzcygqbGl2ZW5lc3MpOworICAgICAgICBGdWxsQnl0
ZWNvZGVMaXZlbmVzcyYgcmVzdWx0ID0gKmxpdmVuZXNzOworICAgICAgICBtX2J5dGVjb2RlTGl2
ZW5lc3MuYWRkKGNvZGVCbG9jaywgc3RkOjptb3ZlKGxpdmVuZXNzKSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVz
c0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBsaXZlbmVzc0ZvcihiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAgeworICAgICAgICBmb3IgKDs7KSB7
CisgICAgICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA8IGNvZGVPcmlnaW4uc3RhY2tPZmZz
ZXQoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbGl2ZW5lc3NGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpLm9wZXJhbmRJc0xp
dmUoCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmQub2Zmc2V0KCkgLSBjb2RlT3JpZ2luLnN0
YWNrT2Zmc2V0KCksIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvZGVP
cmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgVk0mIG1fdm07
CiAgICAgUGxhbiYgbV9wbGFuOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC03OTcs
NiArODQwLDcgQEAgcHVibGljOgogICAgIFNlZ21lbnRlZFZlY3RvcjxTd2l0Y2hEYXRhLCA0PiBt
X3N3aXRjaERhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVW
YXJpYWJsZURhdGE7CiAgICAgT3duUHRyPElubGluZUNhbGxGcmFtZVNldD4gbV9pbmxpbmVDYWxs
RnJhbWVzOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRl
Y29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVu
dHM7CiAgICAgSGFzaFNldDxFeGVjdXRhYmxlQmFzZSo+IG1fZXhlY3V0YWJsZXNXaG9zZUFyZ3Vt
ZW50c0VzY2FwZWQ7CiAgICAgQml0VmVjdG9yIG1fbGF6eVZhcnM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludENvdW50
aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dy
YXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2Uu
aCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgTW92SGludENvdW50aW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVi
bGljOgorICAgIE1vdkhpbnRDb3VudGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQ
aGFzZShncmFwaCwgIk1vdkhpbnQgY291bnRpbmciKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7
CisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnQgdGhhdCB3ZSBoYXZlbid0IGRvbmUgdGhpcyBh
bHJlYWR5LgorICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gJm1fZ3Jh
cGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJs
ZS0+aXNSb290KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIEFTU0VSVCghdmFyaWFibGUtPm1vdkhpbnRDb3VudCgpKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoIXZhcmlhYmxlLT5zaW5nbGVNb3ZIaW50KCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50
OgorICAgICAgICAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgorICAgICAgICAgICAgICAg
ICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Y291bnRNb3ZIaW50KG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3VtZW50OgorICAgICAgICAgICAgICAg
ICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Y291bnRNb3ZIaW50KG5vZGUpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICAgICAgICAgICAgICBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+Y291bnRNb3ZIaW50KDApOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCiti
b29sIHBlcmZvcm1Nb3ZIaW50Q291bnRpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5n
UmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgTW92SGludCBDb3VudGluZyIpOworICAgIHJldHVy
biBydW5QaGFzZTxNb3ZIaW50Q291bnRpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludENvdW50aW5nUGhhc2Uu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludENv
dW50aW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTW92SGludENv
dW50aW5nUGhhc2VfaAorI2RlZmluZSBERkdNb3ZIaW50Q291bnRpbmdQaGFzZV9oCisKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
R3JhcGg7CisKKy8vIENvbXB1dGVzIFZhcmlhYmxlQWNjZXNzRGF0YTo6bV9tb3ZIaW50Q291bnQu
IFZhcmlhYmxlcyB0aGF0IGFyZSBhc3NpZ25lZCBvbmx5IG9uY2UgY2FuIGdldAorLy8gdHJlYXRl
ZCBzcGVjaWFsbHkuIEZvciBleGFtcGxlLCBPU1IgZXhpdCBpbiB0aGUgRlRMIGNhbiBhbGxvdyB0
aGUgZm9ybWF0IHVzZWQgZm9yIHN1Y2gKKy8vIG5vZGVzIEJhc2ljQmxvY2s6OnNzYS0+YXZhaWxh
YmlsdGl5QXRIZWFkL1RhaWwuIFRoaXMgaXMgYSBmb3J3YXJkIGZsb3cgdHlwZSBpbmZlcmVuY2UK
Ky8vIG92ZXIgTW92SGludHMuIEF0IHRoZSB0aW1lIHdoZW4gTW92SGludHMgYXJlIGludHJvZHVj
ZWQsIHdlIHdlcmUgY2VydGFpbiB0aGF0IGF0IGFueQorLy8gcG9pbnQgaW4gdGhlIHByb2dyYW0g
d2hlcmUgYSBieXRlY29kZSB2YXJpYWJsZSBoYWQgYmVlbiBsaXZlLCBhbGwgb2YgdGhlIE1vdkhp
bnRzIHRoYXQKKy8vIGZsb3dlZCBpbnRvIHRoYXQgcG9pbnQgZm9yIHRoYXQgdmFyaWFibGUgaGFk
IHRoZSBzYW1lIEZsdXNoRm9ybWF0LiBUaGlzIGFuYWx5c2lzIHdpbGwgdGVsbAorLy8geW91IHdo
YXQgdGhhdCBmb3JtYXQgd291bGQgaGF2ZSBiZWVuLgorCitib29sIHBlcmZvcm1Nb3ZIaW50Q291
bnRpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdNb3ZIaW50Q291bnRpbmdQaGFzZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsNzcgKzQ3LDgyIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwogICAgICAgICAKLSAgICAgICAgVmVj
dG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZpcnN0OwotICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0lu
RGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAg
ICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuZmlsbChBdmFpbGFiaWxpdHkoKSk7Cisg
ICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwuZmlsbChBdmFpbGFiaWxp
dHkoKSk7CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IGRlcHRoRmlyc3RbaV07Ci0gICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxp
dHlBdEhlYWQuZmlsbCgwKTsKLSAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0
VGFpbC5maWxsKDApOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygw
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IHJvb3QtPnNzYS0+YXZhaWxhYmls
aXR5QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7CisgICAgICAgICAg
ICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5hcmd1bWVudChhcmd1bWVudCkgPQorICAg
ICAgICAgICAgICAgIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKS53aXRoRmx1c2goCisgICAg
ICAgICAgICAgICAgICAgIEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoYXJndW1lbnQpKSk7CiAgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBsb2NhbCA9IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm51bWJlck9mTG9jYWxzKCk7
IGxvY2FsLS07KQorICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubG9j
YWwobG9jYWwpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOwogICAgICAgICAKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhGaXJzdFtpXTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gV2UgZWRpdCBhdmFpbGFiaWxpdHlBdFRhaWwgaW4tcGxhY2UsIGJ1
dCBmaXJzdCBpbml0aWFsaXplIGl0IHRvCi0gICAgICAgICAgICAvLyBhdmFpbGFiaWxpdHlBdEhl
YWQuCi0gICAgICAgICAgICBPcGVyYW5kczxOb2RlKj4mIGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5z
c2EtPmF2YWlsYWJpbGl0eUF0VGFpbDsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eSA9IGJsb2Nr
LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBtYWRl
IG1vcmUgZWZmaWNpZW50IGJ5IHByb2Nlc3NpbmcgYmxvY2tzIGluIHJldmVyc2UgcG9zdG9yZGVy
LgorICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eTsKKyAgICAgICAg
Ym9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsg
bm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAg
ICAgICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5k
Q2hlY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0
eS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBjYXNlIEdldEFyZ3VtZW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tz
KCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRBcmd1bWVudDogeworICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkodmFyaWFibGUpLndpdGhGbHVz
aCh2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTW92
SGludEFuZENoZWNrOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBBdmFp
bGFiaWxpdHkodmFyaWFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2YWls
YWJsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGotLTspIHsK
LSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29y
KGopOwotICAgICAgICAgICAgICAgIE9wZXJhbmRzPE5vZGUqPiYgc3VjY2Vzc29yQXZhaWxhYmls
aXR5ID0gc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKLSAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGsgPSBhdmFpbGFiaWxpdHkuc2l6ZSgpOyBrLS07KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIE5vZGUqIG15Tm9kZSA9IGF2YWlsYWJpbGl0eVtrXTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFteU5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzc29y
LT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMobXlOb2RlKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgbWF5IG92ZXJ3cml0ZSBhdmFpbGFiaWxpdHkgd2l0aCBhIGJvZ3Vz
IG5vZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gYXQgbWVyZ2UgcG9pbnRzLiBUaGlzIGlzIGZp
bmUsIHNpbmNlIG1lcmdlIHBvaW50cyBoYXZlCi0gICAgICAgICAgICAgICAgICAgIC8vIE1vdkhp
bnQoUGhpKSdzIHRvIHdvcmsgYXJvdW5kIHRoaXMuIFRoZSBvdXRjb21lIG9mIHRoaXMgaXMKLSAg
ICAgICAgICAgICAgICAgICAgLy8geW91IG1pZ2h0IGhhdmUgYSBwcm9ncmFtIGluIHdoaWNoIGEg
bm9kZSBoYXBwZW5zIHRvIHJlbWFpbgotICAgICAgICAgICAgICAgICAgICAvLyBsaXZlIGludG8g
c29tZSBibG9jayBCLCBhbmQgc2VwYXJhdGVseSAoZHVlIHRvIGNvcHkKLSAgICAgICAgICAgICAg
ICAgICAgLy8gcHJvcGFnYXRpb24pIGp1c3Qgb25lIG9mIHRoZSBwcmVkZWNlc3NvcnMgb2YgQiBp
c3N1ZWQgYQotICAgICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50IHB1dHRpbmcgdGhhdCBub2Rl
IGludG8gc29tZSBsb2NhbC4gVGhlbiBpbiBCIHdlIG1pZ2h0Ci0gICAgICAgICAgICAgICAgICAg
IC8vIHRoaW5rIHRoYXQgdGhhdCBub2RlIGlzIGEgdmFsaWQgdmFsdWUgZm9yIHRoYXQgbG9jYWwu
IE9mCi0gICAgICAgICAgICAgICAgICAgIC8vIGNvdXJzZSBpZiB0aGF0IGxvY2FsIHdhcyBhY3R1
YWxseSBsaXZlIGluIEIsIEIgd291bGQgaGF2ZSBhCi0gICAgICAgICAgICAgICAgICAgIC8vIFBo
aSBmb3IgaXQuIFNvIGVzc2VudGlhbGx5IHdlJ2xsIGhhdmUgT1NSIGV4aXQgZHJvcHBpbmcgdGhp
cwotICAgICAgICAgICAgICAgICAgICAvLyBub2RlJ3MgdmFsdWUgaW50byB0aGUgbG9jYWwgd2hl
biB3ZSBvdGhlcndpc2UgKGluIHRoZSBERkcpCi0gICAgICAgICAgICAgICAgICAgIC8vIHdvdWxk
IGhhdmUgZHJvcHBlZCB1bmRlZmluZWQgaW50byB0aGUgbG9jYWwuIFRoaXMgc2VlbXMKLSAgICAg
ICAgICAgICAgICAgICAgLy8gaGFybWxlc3MuCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBzdWNjZXNzb3JBdmFpbGFiaWxpdHlba10gPSBteU5vZGU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eSA9PSBibG9jay0+c3Nh
LT5hdmFpbGFiaWxpdHlBdFRhaWwpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0
VGFpbCA9IGF2YWlsYWJpbGl0eTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3Nvcklu
ZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsKKyAgICAg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3Nvcihz
dWNjZXNzb3JJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGF2
YWlsYWJpbGl0eS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nl
c3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0gPSBhdmFpbGFiaWxpdHlbaV0ubWVyZ2Uo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0
eUF0SGVhZFtpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CiAgICAg
ICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2UuaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2
LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgR3JhcGg7CiAK
LS8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+YXZhaWxhYmlsdGl5QXRIZWFkL1RhaWwuIFRo
aXMgcmVsaWVzIG9uIGxpdmVuZXNzCi0vLyBhbmFseXNpcyBwaGFzZSBoYXZpbmcgYmVlbiBydW4g
YW5kIHRoZSBncmFwaCBub3QgaGF2aW5nIGJlZW4gdHJhbnNmb3JtZWQKLS8vIGFmdGVyIHRoYXQu
CisvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRpeUF0SGVhZC9UYWlsLiBU
aGlzIGlzIGEgZm9yd2FyZCBmbG93IHR5cGUgaW5mZXJlbmNlCisvLyBvdmVyIE1vdkhpbnRzLiBB
dCB0aGUgdGltZSB3aGVuIE1vdkhpbnRzIGFyZSBpbnRyb2R1Y2VkLCB3ZSB3ZXJlIGNlcnRhaW4g
dGhhdCBhdCBhbnkKKy8vIHBvaW50IGluIHRoZSBwcm9ncmFtIHdoZXJlIGEgYnl0ZWNvZGUgdmFy
aWFibGUgaGFkIGJlZW4gbGl2ZSwgYWxsIG9mIHRoZSBNb3ZIaW50cyB0aGF0CisvLyBmbG93ZWQg
aW50byB0aGF0IHBvaW50IGZvciB0aGF0IHZhcmlhYmxlIGhhZCB0aGUgc2FtZSBGbHVzaEZvcm1h
dC4gVGhpcyBhbmFseXNpcyB3aWxsIHRlbGwKKy8vIHlvdSB3aGF0IHRoYXQgZm9ybWF0IHdvdWxk
IGhhdmUgYmVlbi4KIAogYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcGgm
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAx
NTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiREZHTElDTVBoYXNlLmgiCiAjaW5j
bHVkZSAiREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHTG9vcFByZUhl
YWRlckNyZWF0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5o
IgogI2luY2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKICNpbmNsdWRl
ICJERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rp
b25JbmplY3Rpb25QaGFzZS5oIgpAQCAtMjcyLDYgKzI3Myw3IEBAIFBsYW46OkNvbXBpbGF0aW9u
UGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybVN0YWNrTGF5b3V0KGRmZyk7
CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1G
bHVzaExpdmVuZXNzQW5hbHlzaXMoZGZnKTsKKyAgICAgICAgcGVyZm9ybU1vdkhpbnRDb3VudGlu
ZyhkZmcpOwogICAgICAgICBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoZGZnKTsKICAg
ICAgICAgcGVyZm9ybVdhdGNocG9pbnRDb2xsZWN0aW9uKGRmZyk7CiAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMTU5
MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dp
dGNoIChmb3JtYXQpIHsKICAgICAgICAgY2FzZSBEZWFkRmx1c2g6CisgICAgICAgIGNhc2UgQ29u
ZmxpY3RpbmdGbHVzaDoKICAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShTb3VyY2VJc0Rl
YWQpOwogICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICAgICAgcmV0dXJuIFZh
bHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCB3aGVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDE1OTE0
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgREZHVmFyaWFibGVBY2Nl
c3NEYXRhX2gKICNkZWZpbmUgREZHVmFyaWFibGVBY2Nlc3NEYXRhX2gKIAorI2luY2x1ZGUgIkRG
R0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0RvdWJsZUZvcm1hdFN0YXRlLmgiCiAjaW5jbHVkZSAi
REZHRmx1c2hGb3JtYXQuaCIKICNpbmNsdWRlICJERkdGbHVzaGVkQXQuaCIKQEAgLTM5LDYgKzQw
LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitzdHJ1Y3QgTm9kZTsK
KwogZW51bSBEb3VibGVCYWxsb3QgeyBWb3RlVmFsdWUsIFZvdGVEb3VibGUgfTsKIAogY2xhc3Mg
VmFyaWFibGVBY2Nlc3NEYXRhIDogcHVibGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+
IHsKQEAgLTU2LDYgKzU5LDggQEAgcHVibGljOgogICAgICAgICAsIG1faXNQcm9maXRhYmxlVG9V
bmJveChmYWxzZSkKICAgICAgICAgLCBtX2lzTG9hZGVkRnJvbShmYWxzZSkKICAgICAgICAgLCBt
X2RvdWJsZUZvcm1hdFN0YXRlKEVtcHR5RG91YmxlRm9ybWF0U3RhdGUpCisgICAgICAgICwgbV9t
b3ZIaW50Q291bnQoMCkKKyAgICAgICAgLCBtX3NpbmdsZU1vdkhpbnQoMCkKICAgICB7CiAgICAg
ICAgIGNsZWFyVm90ZXMoKTsKICAgICB9CkBAIC03Miw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICAg
ICAgLCBtX2NoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZChmYWxzZSkKICAgICAgICAgLCBtX2lzUHJv
Zml0YWJsZVRvVW5ib3goZmFsc2UpCiAgICAgICAgICwgbV9kb3VibGVGb3JtYXRTdGF0ZShFbXB0
eURvdWJsZUZvcm1hdFN0YXRlKQorICAgICAgICAsIG1fbW92SGludENvdW50KDApCisgICAgICAg
ICwgbV9zaW5nbGVNb3ZIaW50KDApCiAgICAgewogICAgICAgICBjbGVhclZvdGVzKCk7CiAgICAg
fQpAQCAtMzUyLDYgKzM1OSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBGbHVzaGVkQXQo
Zmx1c2hGb3JtYXQoKSwgbWFjaGluZUxvY2FsKCkpOwogICAgIH0KICAgICAKKyAgICBib29sIGlz
U2luZ2x5QXNzaWduZWQoKSBjb25zdCB7IHJldHVybiBtX21vdkhpbnRDb3VudCA9PSAxOyB9Cisg
ICAgdm9pZCBjb3VudE1vdkhpbnQoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbV9t
b3ZIaW50Q291bnQrKykKKyAgICAgICAgICAgIG1fc2luZ2xlTW92SGludCA9IG5vZGU7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fc2luZ2xlTW92SGludCA9IDA7CisgICAgfQorICAgIHVu
c2lnbmVkIG1vdkhpbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbW92SGludENvdW50OyB9Cisg
ICAgTm9kZSogc2luZ2xlTW92SGludCgpIGNvbnN0IHsgcmV0dXJuIG1fc2luZ2xlTW92SGludDsg
fQorICAgIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNp
ZW50LCBzaW5jZSBhbnl0aGluZyB3ZSdyZSB1bmlmaWVkIHdpdGgKICAgICAvLyB3aWxsIGhhdmUg
dGhlIHNhbWUgb3BlcmFuZCBhbmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0
CkBAIC0zNzQsNiArMzkyLDkgQEAgcHJpdmF0ZToKIAogICAgIGZsb2F0IG1fdm90ZXNbMl07IC8v
IFVzZWQgcHJpbWFyaWx5IGZvciBkb3VibGUgdm90aW5nIGJ1dCBtYXkgYmUgcmV1c2VkIGZvciBv
dGhlciBwdXJwb3Nlcy4KICAgICBEb3VibGVGb3JtYXRTdGF0ZSBtX2RvdWJsZUZvcm1hdFN0YXRl
OworICAgIAorICAgIHVuc2lnbmVkIG1fbW92SGludENvdW50OworICAgIE5vZGUqIG1fc2luZ2xl
TW92SGludDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1w
LmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksOSBA
QCB2b2lkIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXA6OmR1bXAoUHJpbnRTCiAgICAgICAgIG91dC5w
cmludCgifiIpOwogCiAgICAgb3V0LnByaW50KEFiYnJldmlhdGVkU3BlY3VsYXRpb25EdW1wKG1f
ZGF0YS0+cHJlZGljdGlvbigpKSwgIi8iLCBtX2RhdGEtPmZsdXNoRm9ybWF0KCkpOworICAgIAor
ICAgIGlmIChtX2RhdGEtPmlzU2luZ2x5QXNzaWduZWQoKSkKKyAgICAgICAgb3V0LnByaW50KCI9
PiIsIG1fZGF0YS0+c2luZ2xlTW92SGludCgpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxMCBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9mdGxTdGF0ZShzdGF0ZSkKICAgICAgICAgLCBtX2hlYXBzKHN0
YXRlLmNvbnRleHQpCiAgICAgICAgICwgbV9vdXQoc3RhdGUuY29udGV4dCkKKyAgICAgICAgLCBt
X2Jvb2xlYW5Mb2NhbHMoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkKQorICAgICAgICAsIG1faW50MzJMb2NhbHMoT3BlcmFuZHNMaWtlLCBzdGF0ZS5n
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1faW50NjRMb2NhbHMo
T3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAg
ICAgICAsIG1fZG91YmxlTG9jYWxzKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCkt
PnZhcmlhYmxlc0F0SGVhZCkKICAgICAgICAgLCBtX3ZhbHVlU291cmNlcyhPcGVyYW5kc0xpa2Us
IHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCiAgICAgICAgICwgbV9zdGF0
ZShzdGF0ZS5ncmFwaCkKICAgICAgICAgLCBtX2ludGVycHJldGVyKHN0YXRlLmdyYXBoLCBtX3N0
YXRlKQpAQCAtMTAxLDYgKzEwNSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJvbG9ndWUgPSBh
cHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuY29udGV4dCwgbV9mdGxTdGF0ZS5mdW5jdGlvbik7
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUpOwogICAgICAgICBjcmVhdGVQaGlW
YXJpYWJsZXMoKTsKKyAgICAgICAgY3JlYXRlU2hhZG93TG9jYWxzKG1fYm9vbGVhbkxvY2Fscywg
bV9vdXQuYm9vbGVhbik7CisgICAgICAgIGNyZWF0ZVNoYWRvd0xvY2FscyhtX2ludDMyTG9jYWxz
LCBtX291dC5pbnQzMik7CisgICAgICAgIGNyZWF0ZVNoYWRvd0xvY2FscyhtX2ludDY0TG9jYWxz
LCBtX291dC5pbnQ2NCk7CisgICAgICAgIGNyZWF0ZVNoYWRvd0xvY2FscyhtX2RvdWJsZUxvY2Fs
cywgbV9vdXQuZG91YmxlVHlwZSk7CiAgICAgICAgIAogICAgICAgICBtX2NhbGxGcmFtZSA9IG1f
b3V0LnBhcmFtKDApOwogICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBtX291dC5jb25zdEludDY0
KFRhZ1R5cGVOdW1iZXIpOwpAQCAtMTY4LDYgKzE3NiwxMiBAQCBwcml2YXRlOgogICAgICAgICB9
CiAgICAgfQogICAgIAorICAgIHZvaWQgY3JlYXRlU2hhZG93TG9jYWxzKE9wZXJhbmRzPExWYWx1
ZT4mIG9wZXJhbmRzLCBMVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gb3BlcmFuZHMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgb3BlcmFuZHNbaV0gPSBtX291
dC5hbGxvY2EodHlwZSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY29tcGlsZUJsb2NrKEJhc2lj
QmxvY2sqIGJsb2NrKQogICAgIHsKICAgICAgICAgaWYgKCFibG9jaykKQEAgLTIwNCw4ICsyMTgs
NiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZv
ckJsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBtX2xpdmUgPSBibG9jay0+c3NhLT5saXZlQXRI
ZWFkOwotICAgICAgICAKICAgICAgICAgbV9zdGF0ZS5yZXNldCgpOwogICAgICAgICBtX3N0YXRl
LmJlZ2luQmFzaWNCbG9jayhtX2hpZ2hCbG9jayk7CiAgICAgICAgIApAQCAtNDc1LDEyICs0ODcs
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmIChtX25vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICBERkdfTk9E
RV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBtX25vZGUsIHVzZSk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAobV9ub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpCi0gICAgICAgICAgICBtX2xpdmUuYWRk
KG1fbm9kZSk7Ci0gICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRXhlY3V0ZUVmZmVjdHMpCiAg
ICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGVFZmZlY3RzKG5vZGVJbmRleCk7CiAgICAg
ICAgIApAQCAtNTY3LDIxICs1NzMsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIGpzVmFs
dWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVyYW5kKSk7CiAKICAgICAgICAgc3dpdGNo
ICh1c2VLaW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkgewotICAgICAgICBjYXNlIElu
dDMyVXNlOgorICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBzcGVjdWxhdGVC
YWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG1fbm9kZSwgaXNOb3RJbnQz
Mihqc1ZhbHVlKSk7Ci0gICAgICAgICAgICBzZXRJbnQzMih1bmJveEludDMyKGpzVmFsdWUpKTsK
KyAgICAgICAgICAgIExWYWx1ZSBpbnRWYWx1ZSA9IHVuYm94SW50MzIoanNWYWx1ZSk7CisgICAg
ICAgICAgICBzZXRJbnQzMihpbnRWYWx1ZSk7CisgICAgICAgICAgICBtX291dC5zZXQoaW50VmFs
dWUsIG1faW50MzJMb2NhbHMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgfQorICAgICAgICBjYXNl
IENlbGxVc2U6IHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZShqc1ZhbHVlKSwgbV9ub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOwogICAgICAgICAg
ICAgc2V0SlNWYWx1ZShqc1ZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0LnNldChqc1ZhbHVlLCBt
X2ludDY0TG9jYWxzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBC
b29sZWFuVXNlOiB7CiAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1Zh
bHVlVmFsdWUoanNWYWx1ZSksIG1fbm9kZSwgaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKLSAgICAg
ICAgICAgIHNldEJvb2xlYW4odW5ib3hCb29sZWFuKGpzVmFsdWUpKTsKKyAgICAgICAgICAgIExW
YWx1ZSBib29sZWFuVmFsdWUgPSB1bmJveEJvb2xlYW4oanNWYWx1ZSk7CisgICAgICAgICAgICBz
ZXRCb29sZWFuKGJvb2xlYW5WYWx1ZSk7CisgICAgICAgICAgICBtX291dC5zZXQoYm9vbGVhblZh
bHVlLCBtX2Jvb2xlYW5Mb2NhbHMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFVudHlwZWRVc2U6IHsKICAgICAgICAgICAgIHNldEpTVmFsdWUoanNWYWx1ZSk7Cisg
ICAgICAgICAgICBtX291dC5zZXQoanNWYWx1ZSwgbV9pbnQ2NExvY2Fscy5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNjEyLDQzICs2MjgsMzggQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIGNvbXBpbGVTZXRMb2NhbCgpCiAgICAgewotICAgICAgICBvYnNlcnZlTW92SGludChtX25v
ZGUpOworICAgICAgICBvYnNlcnZlTW92SGludCgpOwogICAgICAgICAKICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAg
ICAgICAgIHN3aXRjaCAodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpIHsKICAgICAgICAgY2FzZSBG
bHVzaGVkSlNWYWx1ZTogewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZSht
X25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJl
c3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291
cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0
YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZs
dXNoZWREb3VibGU6IHsKICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91YmxlKHZhbHVlLCBhZGRy
ZXNzRm9yKHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNv
dXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpT
U3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
Rmx1c2hlZEludDMyOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBheWxvYWRG
b3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNl
cy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNr
LCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNo
ZWRJbnQ1MjogewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50NTIobV9ub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQ1MkluSlNTdGFjaywgdmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaGVkQ2Vs
bDogewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUt
Pm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCB2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOiB7
CkBAIC02NTYsMzIgKzY2NywzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuc3RvcmU2
NCgKICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbiksCiAgICAgICAgICAgICAgICAgYWRkcmVzc0Zvcih2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ssIHZhcmlhYmxlLT5t
YWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAg
ICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBlbWl0TW92SGludCgpOworICAgICAgICAKKyAgICAgICAg
Ly8gRG8gdGhpcyBsYXN0IHNvIHRoYXQgd2UgZG9uJ3QgbGVhdmUgbV92YWx1ZVNvdXJjZXMgY2xh
aW1pbmcgdGhhdCB3ZSBoYXZlIHRvCisgICAgICAgIC8vIGxvYWQgdGhpcyB2YXJpYWJsZSdzIHZh
bHVlIGZyb20gdGhlIHNoYWRvdyBsb2NhbHMuIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uLgorICAg
ICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAg
ICAgICBWYWx1ZVNvdXJjZTo6Zmx1c2hlZEF0KHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoKQogICAgIHsKLSAgICAgICAgb2JzZXJ2
ZU1vdkhpbnQobV9ub2RlKTsKKyAgICAgICAgZW1pdE1vdkhpbnQoKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlWm9tYmllSGludCgpCiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIGRhdGEgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBtX3Zh
bHVlU291cmNlcy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoU291cmNlSXNE
ZWFkKTsKKyAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZh
bHVlU291cmNlKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU1vdkhpbnRBbmRDaGVj
aygpCiAgICAgewotICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOwotICAgICAgICBzcGVj
dWxhdGUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG9ic2VydmVNb3ZIaW50KCk7CisgICAg
ICAgIGVtaXRNb3ZIaW50KCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVBoYW50b20o
KQpAQCAtMzgyMiwyNSArMzgzOCw2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzTGl2ZShO
b2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGl2ZS5jb250YWlucyhub2RlKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCB1c2UoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKGVkZ2UtPmhhc1Jlc3VsdCgpKTsKLSAgICAgICAgaWYgKCFlZGdlLmRvZXNLaWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fbGl2ZS5yZW1vdmUoZWRnZS5ub2RlKCkpOwot
ICAgIH0KLSAgICAKLSAgICAvLyBXcmFwcGVyIHVzZWQgb25seSBmb3IgREZHX05PREVfRE9fVE9f
Q0hJTERSRU4KLSAgICB2b2lkIHVzZShOb2RlKiwgRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAg
dXNlKGVkZ2UpOwotICAgIH0KLSAgICAKICAgICBMQmFzaWNCbG9jayBsb3dCbG9jayhCYXNpY0Js
b2NrKiBibG9jaykKICAgICB7CiAgICAgICAgIHJldHVybiBtX2Jsb2Nrcy5nZXQoYmxvY2spOwpA
QCAtMzg0OSwxNyArMzg0Niw0OCBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4
aXRTdGF0ZUZvckJsb2NrKCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFs
dWVTb3VyY2VzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0g
bV9oaWdoQmxvY2stPnNzYS0+Zmx1c2hBdEhlYWRbaV07CisgICAgICAgICAgICBBdmFpbGFiaWxp
dHkgYXZhaWxhYmlsaXR5ID0gbV9oaWdoQmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ld
OworICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNoZWRBdCgp
OwogICAgICAgICAgICAgc3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgewotICAgICAgICAgICAgY2Fz
ZSBEZWFkRmx1c2g6IHsKLSAgICAgICAgICAgICAgICAvLyBNdXN0IGNvbnNpZGVyIGF2YWlsYWJs
ZSBub2RlcyBpbnN0ZWFkLgotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hCbG9j
ay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFub2Rl
KSB7CisgICAgICAgICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgICAgIGNhc2UgQ29uZmxp
Y3RpbmdGbHVzaDogeworICAgICAgICAgICAgICAgIC8vIE11c3QgY29uc2lkZXIgYXZhaWxhYmxl
IHZhcmlhYmxlcyBpbnN0ZWFkLgorICAgICAgICAgICAgICAgIGlmICghYXZhaWxhYmlsaXR5Lmhh
c1ZhcmlhYmxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBW
YWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV92YWx1
ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShub2RlKTsKKyAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gYXZhaWxhYmlsaXR5LnZhcmlhYmxlKCk7CisgICAgICAg
ICAgICAgICAgaWYgKE5vZGUqIG5vZGUgPSB2YXJpYWJsZS0+c2luZ2xlTW92SGludCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgT1NSIGV4aXQgc2hvdWxk
IGp1c3QgdHJ5IHRvIGxhemlseSBmaWd1cmUgb3V0IGhvdworICAgICAgICAgICAgICAgICAgICAv
LyB0byByZWFkIGFuZCBkZWNvZGUgd2hhdGV2ZXIgbm9kZSB0aGlzIHZhcmlhYmxlIG9yaWdpbmF0
ZWQgZnJvbS4KKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNv
dXJjZShub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0
aGUgdmFyaWFibGUgaXMgbXVsdGlwbHktYXNzaWduZWQgYW5kIHdlIHdpbGwgZW5zdXJlIHRoYXQK
KyAgICAgICAgICAgICAgICAvLyBpbiBlYWNoIHBsYWNlIHdoZXJlIHdlIGFzc2lnbiBpdCwgd2Ug
d2lsbCB1c2UgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24uCisgICAgICAgICAgICAgICAgc3dpdGNo
ICh2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hl
ZEpTVmFsdWU6CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWwpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRE
b3VibGU6CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3Vy
Y2UoRG91YmxlSW5Mb2NhbCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291
cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMySW5Mb2NhbCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgorICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDUySW5Mb2NhbCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJv
b2xlYW46CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3Vy
Y2UoQm9vbGVhbkluTG9jYWwpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CkBAIC0zOTQyLDkgKzM5NzAsMzYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQobG93VmFsdWUudmFsdWUoKSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYm9v
bCBpc0xpdmUgPSBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoCisgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyKGV4aXQubV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpKSwgZXhpdC5tX2Nv
ZGVPcmlnaW4pOworICAgICAgICAgICAgaWYgKCFpc0xpdmUpIHsKKyAgICAgICAgICAgICAgICBl
eGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIFZhbHVlU291
cmNlIHNvdXJjZSA9IG1fdmFsdWVTb3VyY2VzW2ldOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBzd2l0Y2ggKHNvdXJjZS5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVJbkxvY2Fs
OgorICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudEZvckxvY2FsKAorICAgICAgICAgICAg
ICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0SlNWYWx1ZSwgbV9pbnQ2NExv
Y2Fsc1tpXSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJs
ZUluTG9jYWw6CisgICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50Rm9yTG9jYWwoCisgICAg
ICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXREb3VibGUsIG1f
ZG91YmxlTG9jYWxzW2ldKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgSW50MzJJbkxvY2FsOgorICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudEZvckxvY2Fs
KAorICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0SW50
MzIsIG1faW50MzJMb2NhbHNbaV0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBJbnQ1MkluTG9jYWw6CisgICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50Rm9y
TG9jYWwoCisgICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3Jt
YXRJbnQ1MiwgbV9pbnQ2NExvY2Fsc1tpXSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEJvb2xlYW5JbkxvY2FsOgorICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1
bWVudEZvckxvY2FsKAorICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZh
bHVlRm9ybWF0Qm9vbGVhbiwgbV9ib29sZWFuTG9jYWxzW2ldKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgVmFsdWVJbkpTU3RhY2s6CiAgICAgICAgICAgICAgICAg
ZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrKHNvdXJjZS52aXJ0dWFsUmVn
aXN0ZXIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zOTU4LDcgKzQwMTMsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6Omlu
SlNTdGFja0FzRG91YmxlKHNvdXJjZS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNvdXJjZUlzRGVhZDoKLSAgICAgICAgICAgICAg
ICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgSGF2ZU5vZGU6CiAgICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50
Rm9yTm9kZShleGl0LCBhcmd1bWVudHMsIGksIHNvdXJjZS5ub2RlKCkpOwpAQCAtMzk5MSw1MyAr
NDA0Niw2IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50RXhpdEFyZ3Vt
ZW50KGV4aXQsIGluZGV4LCBub2RlKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0g
ICAgICAgIGlmICghaXNMaXZlKG5vZGUpKSB7Ci0gICAgICAgICAgICBib29sIGZvdW5kID0gZmFs
c2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChwZXJtaXRzT1NSQmFja3dhcmRSZXdp
cmluZyhub2RlLT5vcCgpKSkgewotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRFeGl0QXJndW1l
bnQoZXhpdCwgaW5kZXgsIG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzTGl2ZShub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQg
PSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZv
dW5kKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogYmVzdE5vZGUgPSAwOwotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGJlc3RTY29yZSA9IDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2xpdmUuYmVnaW4oKTsKLSAg
ICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9saXZlLmVuZCgp
OwotICAgICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9ICppdGVyOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoY2FuZGlkYXRlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUt
PmNoaWxkMSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmNoaWxkMSgpICE9IG5vZGUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbXlTY29y
ZSA9IGZvcndhcmRSZXdpcmluZ1NlbGVjdGlvblNjb3JlKGNhbmRpZGF0ZS0+b3AoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChteVNjb3JlIDw9IGJlc3RTY29yZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBiZXN0Tm9kZSA9IGNhbmRp
ZGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgYmVzdFNjb3JlID0gbXlTY29yZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGJlc3ROb2Rl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChpc0xpdmUoYmVzdE5vZGUpKTsKLSAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IGJlc3ROb2RlOwotICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVl
c1tpbmRleF0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChpc0xpdmUo
bm9kZSkpOwotCiAgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVz
LmdldChub2RlKTsKICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CiAgICAgICAgICAgICBh
ZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRJbnQzMiwg
dmFsdWUudmFsdWUoKSk7CkBAIC00MDk5LDYgKzQxMDcsMTMgQEAgcHJpdmF0ZToKICAgICAgICAg
fQogICAgIH0KICAgICAKKyAgICB2b2lkIGFkZEV4aXRBcmd1bWVudEZvckxvY2FsKAorICAgICAg
ICBPU1JFeGl0JiBleGl0LCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIHVuc2lnbmVkIGlu
ZGV4LCBWYWx1ZUZvcm1hdCBmb3JtYXQsCisgICAgICAgIExWYWx1ZSBsb2NhbCkKKyAgICB7Cisg
ICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBmb3JtYXQsIG1f
b3V0LmdldChsb2NhbCkpOworICAgIH0KKyAgICAKICAgICB2b2lkIGFkZEV4aXRBcmd1bWVudCgK
ICAgICAgICAgT1NSRXhpdCYgZXhpdCwgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCB1bnNp
Z25lZCBpbmRleCwgVmFsdWVGb3JtYXQgZm9ybWF0LAogICAgICAgICBMVmFsdWUgdmFsdWUpCkBA
IC00MTA3LDE0ICs0MTIyLDY3IEBAIHByaXZhdGU6CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQo
dmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIG9ic2VydmVNb3ZIaW50KE5vZGUqIG5vZGUp
CisgICAgLy8gTm90aWZpZXMgb3VyIGxvY2FsIHZhbHVlIHNvdXJjZXMgdGhhdCB0aGUgZ2l2ZW4g
dmFyaWFibGUgaXMgYXZhaWxhYmxlIHZpYSB0aGUgZ2l2ZW4KKyAgICAvLyBub2RlLgorICAgIHZv
aWQgb2JzZXJ2ZU1vdkhpbnQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG5vZGUtPmNvbnRhaW5z
TW92SGludCgpKTsKLSAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gWm9tYmllSGludCk7Cisg
ICAgICAgIEFTU0VSVChtX25vZGUtPmNvbnRhaW5zTW92SGludCgpKTsKKyAgICAgICAgQVNTRVJU
KG1fbm9kZS0+b3AoKSAhPSBab21iaWVIaW50KTsKICAgICAgICAgCi0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQgPSBtX25vZGUtPmxvY2FsKCk7CiAgICAgICAgIAotICAgICAgICBtX3ZhbHVlU291
cmNlcy5vcGVyYW5kKG9wZXJhbmQpID0gVmFsdWVTb3VyY2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KTsKKyAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChvcGVyYW5kKSA9IFZhbHVlU291cmNl
KG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gRm9yIHNpbmds
eS1hc3NpZ25lZCB2YXJpYWJsZXMsIHRoaXMganVzdCBvYnNlcnZlcyB0aGF0IHRoZSB2YXJpYWJs
ZSBpcyBhdmFpbGFibGUgdmlhCisgICAgLy8gdGhlIGFwcHJvcHJpYXRlIG5vZGUuIEZvciBtdWx0
aXBseS1hc3NpZ25lZCB2YXJpYWJsZXMsIHRoaXMgc3RvcmVzIHRoZSB2YXJpYWJsZXMgdmFsdWUK
KyAgICAvLyBpbnRvIG91ciBieXRlY29kZSBzaGFkb3cgbG9jYWxzIGFuZCBub3RlcyB0aGlzIGlu
IG1fdmFsdWVTb3VyY2VzLgorICAgIHZvaWQgZW1pdE1vdkhpbnQoKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fbm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpOworICAgICAgICBBU1NFUlQobV9ub2Rl
LT5vcCgpICE9IFpvbWJpZUhpbnQpOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiBkYXRhID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgaWYgKGRh
dGEtPmlzU2luZ2x5QXNzaWduZWQoKSkgeworICAgICAgICAgICAgb2JzZXJ2ZU1vdkhpbnQoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3dpdGNo
IChkYXRhLT5mbHVzaEZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAg
ICAgICAgICAgIG1fb3V0LnNldChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIG1fZG91Ymxl
TG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKERvdWJsZUluTG9jYWwpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50
MzI6CisgICAgICAgICAgICBtX291dC5zZXQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIG1f
aW50MzJMb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSk7CisgICAgICAgICAgICBtX3ZhbHVl
U291cmNlcy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJbkxvY2Fs
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hl
ZEludDUyOgorICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkp
LCBtX2ludDY0TG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbV92
YWx1ZVNvdXJjZXMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDUySW5M
b2NhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZs
dXNoZWRDZWxsOgorICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSksIG1faW50NjRMb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSk7CisgICAgICAgICAgICBt
X3ZhbHVlU291cmNlcy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJ
bkxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
Rmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICBtX291dC5zZXQobG93Qm9vbGVhbihtX25vZGUt
PmNoaWxkMSgpKSwgbV9ib29sZWFuTG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkpOworICAg
ICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVlU291
cmNlKEJvb2xlYW5JbkxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgICAgICBtX291dC5zZXQobG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgbV9pbnQ2NExvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2Fs
KCkpKTsKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICB2b2lkIHNldEludDMyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKQEAgLTQyNzIsNyArNDM0
MCwxMiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1f
Ym9vbGVhblZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX3N0
b3JhZ2VWYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9kb3Vi
bGVWYWx1ZXM7Ci0gICAgSGFzaFNldDxOb2RlKj4gbV9saXZlOworICAgIAorICAgIC8vIEJ5dGVj
b2RlIHNoYWRvdyBsb2NhbHMuCisgICAgT3BlcmFuZHM8TFZhbHVlPiBtX2Jvb2xlYW5Mb2NhbHM7
CisgICAgT3BlcmFuZHM8TFZhbHVlPiBtX2ludDMyTG9jYWxzOworICAgIE9wZXJhbmRzPExWYWx1
ZT4gbV9pbnQ2NExvY2FsczsKKyAgICBPcGVyYW5kczxMVmFsdWU+IG1fZG91YmxlTG9jYWxzOwog
ICAgIAogICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9waGlzOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTks
NiArMTk5LDcgQEAgcHVibGljOgogICAgIExWYWx1ZSBpbnRUb1B0cihMVmFsdWUgdmFsdWUsIExU
eXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkSW50VG9QdHIobV9idWlsZGVyLCB2YWx1ZSwgdHlwZSk7
IH0KICAgICBMVmFsdWUgYml0Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJu
IGJ1aWxkQml0Q2FzdChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIAorICAgIExWYWx1
ZSBhbGxvY2EoTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRBbGxvY2EobV9idWlsZGVyLCB0eXBl
KTsgfQogICAgIExWYWx1ZSBnZXQoTFZhbHVlIHJlZmVyZW5jZSkgeyByZXR1cm4gYnVpbGRMb2Fk
KG1fYnVpbGRlciwgcmVmZXJlbmNlKTsgfQogICAgIExWYWx1ZSBzZXQoTFZhbHVlIHZhbHVlLCBM
VmFsdWUgcmVmZXJlbmNlKSB7IHJldHVybiBidWlsZFN0b3JlKG1fYnVpbGRlciwgdmFsdWUsIHJl
ZmVyZW5jZSk7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFs
dWVTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
VmFsdWVTb3VyY2UuY3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMjEg
QEAgdm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgIGNhc2UgU291
cmNlTm90U2V0OgogICAgICAgICBvdXQucHJpbnQoIlNvdXJjZU5vdFNldCIpOwogICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBWYWx1ZUluTG9jYWw6CisgICAgICAgIG91dC5wcmludCgiVmFsdWVJ
bkxvY2FsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDMySW5Mb2NhbDoKKyAgICAg
ICAgb3V0LnByaW50KCJJbnQzMkluTG9jYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SW50NTJJbkxvY2FsOgorICAgICAgICBvdXQucHJpbnQoIkludDUySW5Mb2NhbCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBCb29sZWFuSW5Mb2NhbDoKKyAgICAgICAgb3V0LnByaW50KCJC
b29sZWFuSW5Mb2NhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGVJbkxvY2Fs
OgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUluTG9jYWwiKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgVmFsdWVJbkpTU3RhY2s6CiAgICAgICAgIG91dC5wcmludCgiVmFsdWVJbkpTU3Rh
Y2s6IiwgdmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oCShyZXZpc2lvbiAxNTkxNDEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAi
REZHRmx1c2hlZEF0LmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTM4LDYgKzM5LDEx
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogZW51bSBWYWx1ZVNvdXJjZUtp
bmQgewogICAgIFNvdXJjZU5vdFNldCwKKyAgICBWYWx1ZUluTG9jYWwsCisgICAgSW50MzJJbkxv
Y2FsLAorICAgIEludDUySW5Mb2NhbCwKKyAgICBCb29sZWFuSW5Mb2NhbCwKKyAgICBEb3VibGVJ
bkxvY2FsLAogICAgIFZhbHVlSW5KU1N0YWNrLAogICAgIEludDMySW5KU1N0YWNrLAogICAgIElu
dDUySW5KU1N0YWNrLApAQCAtNTYsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgVmFs
dWVTb3VyY2UoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCiAgICAgICAgIDogbV9raW5kKGtpbmQpCiAg
ICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFNvdXJjZUlzRGVhZCk7CisgICAgICAgIEFT
U0VSVChtX2tpbmQgPT0gU291cmNlSXNEZWFkIHx8IG1fa2luZCA9PSBWYWx1ZUluTG9jYWwgfHwg
bV9raW5kID09IEludDMySW5Mb2NhbCB8fCBtX2tpbmQgPT0gSW50NTJJbkxvY2FsIHx8IG1fa2lu
ZCA9PSBCb29sZWFuSW5Mb2NhbCB8fCBtX2tpbmQgPT0gRG91YmxlSW5Mb2NhbCk7CiAgICAgfQog
ICAgIAogICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKERGRzo6Tm9kZSogbm9kZSkKQEAgLTcyLDYg
Kzc4LDI4IEBAIHB1YmxpYzoKICAgICAgICAgbV92YWx1ZS52aXJ0dWFsUmVnaXN0ZXIgPSByZWcu
b2Zmc2V0KCk7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBWYWx1ZVNvdXJjZSBmbHVzaGVkQXQo
Y29uc3QgREZHOjpGbHVzaGVkQXQmIGZsdXNoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChmbHVz
aC5mb3JtYXQoKSkgeworICAgICAgICBjYXNlIERGRzo6Rmx1c2hlZEpTVmFsdWU6CisgICAgICAg
IGNhc2UgREZHOjpGbHVzaGVkQ2VsbDoKKyAgICAgICAgY2FzZSBERkc6OkZsdXNoZWRCb29sZWFu
OgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCBmbHVzaC52
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBERkc6OkZsdXNo
ZWREb3VibGU6CisgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNr
LCBmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBE
Rkc6OkZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShJbnQzMklu
SlNTdGFjaywgZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgREZHOjpGbHVzaGVkSW50NTI6CisgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2Uo
SW50NTJJbkpTU3RhY2ssIGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKFNvdXJjZUlz
RGVhZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgVmFsdWVTb3VyY2VLaW5kIGtpbmQo
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fa2luZDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EdW1wQ29udGV4dC5jcHAJKHJldmlzaW9uIDE1OTE0MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUR1bXBDb250
ZXh0OjpEdW1wQ29udGV4dCgpIHsgfQorRHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KCkKKyAgICA6
IGdyYXBoKDApCit7Cit9CisKIER1bXBDb250ZXh0Ojp+RHVtcENvbnRleHQoKSB7IH0KIAogYm9v
bCBEdW1wQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EdW1wQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSBERkcgeyBjbGFzcyBH
cmFwaDsgfQorCiBzdHJ1Y3QgRHVtcENvbnRleHQgewogICAgIER1bXBDb250ZXh0KCk7CiAgICAg
fkR1bXBDb250ZXh0KCk7CkBAIC00MSw2ICs0Myw3IEBAIHN0cnVjdCBEdW1wQ29udGV4dCB7CiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4ID0gIiIpIGNvbnN0
OwogICAgIAogICAgIFN0cmluZ0hhc2hEdW1wQ29udGV4dDxTdHJ1Y3R1cmU+IHN0cnVjdHVyZXM7
CisgICAgREZHOjpHcmFwaCogZ3JhcGg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24g
MTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDY5LDEzICs0NjksMTMgQEAgcHVibGljOgogICAgIGJvb2wgdXNl
c05vblN0cmljdEV2YWwoKSB7IHJldHVybiBtX3VzZXNOb25TdHJpY3RFdmFsOyB9CiAgICAgdm9p
ZCBzZXRVc2VzTm9uU3RyaWN0RXZhbChib29sIHVzZXNOb25TdHJpY3RFdmFsKSB7IG1fdXNlc05v
blN0cmljdEV2YWwgPSB1c2VzTm9uU3RyaWN0RXZhbDsgfQogCi0gICAgaW50IGNhcHR1cmVTdGFy
dCgpIHsgcmV0dXJuIG1fY2FwdHVyZVN0YXJ0OyB9CisgICAgaW50IGNhcHR1cmVTdGFydCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FwdHVyZVN0YXJ0OyB9CiAgICAgdm9pZCBzZXRDYXB0dXJlU3RhcnQo
aW50IGNhcHR1cmVTdGFydCkgeyBtX2NhcHR1cmVTdGFydCA9IGNhcHR1cmVTdGFydDsgfQogCi0g
ICAgaW50IGNhcHR1cmVFbmQoKSB7IHJldHVybiBtX2NhcHR1cmVFbmQ7IH0KKyAgICBpbnQgY2Fw
dHVyZUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZUVuZDsgfQogICAgIHZvaWQgc2V0Q2Fw
dHVyZUVuZChpbnQgY2FwdHVyZUVuZCkgeyBtX2NhcHR1cmVFbmQgPSBjYXB0dXJlRW5kOyB9CiAK
LSAgICBpbnQgY2FwdHVyZUNvdW50KCkgeyByZXR1cm4gLShtX2NhcHR1cmVFbmQgLSBtX2NhcHR1
cmVTdGFydCk7IH0KKyAgICBpbnQgY2FwdHVyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gLShtX2Nh
cHR1cmVFbmQgLSBtX2NhcHR1cmVTdGFydCk7IH0KIAogICAgIGludCBwYXJhbWV0ZXJDb3VudCgp
IHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQogICAgIGludCBw
YXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoKSB7IHJldHVybiBtX3BhcmFtZXRlckNvdW50SW5j
bHVkaW5nVGhpczsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216986</attachid>
            <date>2013-11-14 15:06:54 -0800</date>
            <delta_ts>2013-11-14 16:37:50 -0800</delta_ts>
            <desc>starting to pass some tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>96049</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1OTE0MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtOTEsNiArOTEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdBcnJheU1vZGUuY3Bw
CiAgICAgZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCisgICAgZGZnL0RGR0F2YWlsYWJp
bGl0eS5jcHAKICAgICBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKICAgICBk
ZmcvREZHQmFzaWNCbG9jay5jcHAKICAgICBkZmcvREZHQmluYXJ5U3dpdGNoLmNwcApAQCAtMTM5
LDYgKzE0MCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0xvbmdM
aXZlZFN0YXRlLmNwcAogICAgIGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAK
ICAgICBkZmcvREZHTWluaWZpZWROb2RlLmNwcAorICAgIGRmZy9ERkdNb3ZIaW50Q291bnRpbmdQ
aGFzZS5jcHAKICAgICBkZmcvREZHTmF0dXJhbExvb3BzLmNwcAogICAgIGRmZy9ERkdOb2RlLmNw
cAogICAgIGRmZy9ERkdOb2RlRmxhZ3MuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMCArMTAw
LDExIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQXJyYXlQcm9maWxlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eVZhbEluZm8uaCBcCi0gICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
QmFzaWNCbG9jay5jcHAgXAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUJhc2ljQmxvY2suaCBcCi0gICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaCBcCkBAIC0xMzIs
NiArMTMzLDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4aXRLaW5kLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeHBy
ZXNzaW9uUmFuZ2VJbmZvLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxs
Qnl0ZWNvZGVMaXZlbmVzcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
U3RhdHVzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5o
IFwKQEAgLTIwNyw2ICsyMDksOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmNwcCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAgXApAQCAtMzE4LDYgKzMyMiw4IEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWluaWZpZWRJRC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVk
Tm9kZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludENvdW50aW5nUGhhc2UuY3Bw
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNlLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTMzOCw2ICszMzgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCIgLz4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5LmNwcCIgLz4NCiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2suY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPg0K
QEAgLTM4NCw2ICszODUsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xv
bmdMaXZlZFN0YXRlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZE5vZGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR05hdHVyYWxMb29wcy5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdOb2RlRmxhZ3MuY3BwIiAvPg0KQEAgLTc0NSw2ICs3NDcsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnlWYWxJbmZvLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzSW5saW5lLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcQ2FsbExpbmtJbmZvLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcQ2FsbExpbmtTdGF0dXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIiAvPg0KQEAgLTc2
Miw2ICs3NjUsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhlY3V0
aW9uQ291bnRlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV4
aXRLaW5kLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhwcmVz
c2lvblJhbmdlSW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XEZ1bGxCeXRlY29kZUxpdmVuc3MuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxHZXRCeUlkU3RhdHVzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcSGFuZGxlckluZm8uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxJbmxpbmVDYWxsRnJhbWVTZXQuaCIgLz4NCkBAIC04MTIsNiArODE2LDcgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9y
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRl
LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F2YWlsYWJpbGl0eS5o
IiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdh
dGlvblBoYXNlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2lj
QmxvY2suaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9j
a0lubGluZXMuaCIgLz4NCkBAIC04NzMsNiArODc4LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZEdyYXBoLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR01pbmlmaWVkSUQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHTWluaWZpZWROb2RlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR05hdHVyYWxMb29wcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdOb2RlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R05vZGVBbGxvY2F0b3IuaCIgLz4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw2ICsyNjAs
MTIgQEAKIAkJMEY2Mzk0NzgxNURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2Mzk0ODQx
NUU0ODExODAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ4MTE1RTQ4MTE0MDA2QTU5N0MgLyogREZH
QXJyYXlNb2RlLmNwcCAqLzsgfTsKIAkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0Fy
cmF5TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2Mzk0ODIxNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjY2RUMwMTgzNTY2RjkwMEQw
MTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEg
LyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAv
KiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxp
dmVuZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDMjE4MzU2NzJC
MDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCAqLzsgfTsKKwkJMEY2NjZFQzcxODM1Njcy
QjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQzMxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWls
YWJpbGl0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGNjY2RUM4MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVD
NDE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwICovOyB9Owor
CQkwRjY2NkVDOTE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50aW5nUGhhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUM1MTgz
NTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZCMTRERjNGMTYwMEI3
QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyog
REZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNzAyNUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MDI1
QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgKi87IH07
CkBAIC0xNTQ3LDYgKzE1NTMsMTIgQEAKIAkJMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0ODExNUU0
ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdBcnJheU1vZGUuY3BwOyBwYXRoID0gZGZnL0RGR0FycmF5TW9kZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3
QyAvKiBERkdBcnJheU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
QXJyYXlNb2RlLmg7IHBhdGggPSBkZmcvREZHQXJyYXlNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXNJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bGxCeXRlY29kZUxpdmVuZXNzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjY2RUMyMTgzNTY3MkIwMEQwMTdGMSAvKiBE
RkdBdmFpbGFiaWxpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHQXZhaWxhYmlsaXR5LmNwcDsgcGF0aCA9IGRmZy9ERkdBdmFpbGFiaWxpdHkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZH
QXZhaWxhYmlsaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0F2YWls
YWJpbGl0eS5oOyBwYXRoID0gZGZnL0RGR0F2YWlsYWJpbGl0eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjY2NkVDNDE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50
aW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTW92
SGludENvdW50aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQzUxODM1NjcyQjAwRDAx
N0YxIC8qIERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHTW92SGlu
dENvdW50aW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjgx
NERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQWRqYWNlbmN5TGlzdC5oOyBwYXRoID0gZGZnL0RGR0FkamFjZW5j
eUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjkxNERGM0YxMzAw
QjdCMkU0IC8qIERGR0VkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
RWRnZS5oOyBwYXRoID0gZGZnL0RGR0VkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzM5LDYgKzM3NTEsOCBAQAogCQkJCTBGNjM5
NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLywKIAkJCQlBN0Q5QTI4RjE3
QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCiAJCQkJQTdE
OUEyOTAxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCAqLywKKwkJ
CQkwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCAqLywKKwkJ
CQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggKi8sCiAJCQkJ
MEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
Y3BwICovLAogCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlLmggKi8sCiAJCQkJQTdEODlDRTMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jh
c2ljQmxvY2suY3BwICovLApAQCAtMzg0OSw2ICszODYzLDggQEAKIAkJCQkwRkI0QjUxMDE2QjNB
OTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovLAogCQkJCTBGMkJEQzRDMTUyMjgxODMw
MENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwICovLAogCQkJCTBGMkJEQzNFMTUyMjgwMTcw
MENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCAqLywKKwkJCQkwRjY2NkVDNDE4MzU2NzJCMDBE
MDE3RjEgLyogREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwICovLAorCQkJCTBGNjY2RUM1MTgz
NTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oICovLAogCQkJCUE3Mzc4
MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovLAogCQkJCUE3Mzc4
MTBCMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLywKIAkJCQkwRkI0QjUx
RTE2QjYyNzcyMDAzRjY5NkIgLyogREZHTm9kZS5jcHAgKi8sCkBAIC00MDMxLDE1ICs0MDQ3LDE2
IEBACiAJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQzJGQ0FFMEMxN0E5QzI0RTAwMzRD
NzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi8sCi0JCQkJQzJGQ0FFMEQxN0E5QzI0RTAw
MzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovLAotCQkJCUMyRkNBRTBFMTdBOUMyNEUw
MDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwICovLAotCQkJCUMyRkNBRTBG
MTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLywKIAkJCQkw
RjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgKi8s
CiAJCQkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUu
aCAqLywKIAkJCQkwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCAq
LywKIAkJCQkwRjYzOTQ1MjE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggKi8sCisJ
CQkJQzJGQ0FFMEMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi8s
CisJCQkJQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICov
LAogCQkJCTBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmgg
Ki8sCisJCQkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAgKi8sCisJCQkJQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcy5oICovLAorCQkJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8sCiAJCQkJMEY4MDIzRTkxNjEzODMyMzAw
QTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovLAogCQkJCTBGMEI4M0FFMTRCQ0Y3MTQwMDg4NUI0RiAv
KiBDYWxsTGlua0luZm8uY3BwICovLAogCQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4NUI0RiAvKiBD
YWxsTGlua0luZm8uaCAqLywKQEAgLTQwNjgsNiArNDA4NSw3IEBACiAJCQkJMEZCMTA1ODIxNjc1
NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCAqLywKIAkJCQkwRkIxMDU4MzE2NzU0ODBDMDBG
OEFCNkUgLyogRXhpdEtpbmQuaCAqLywKIAkJCQkwRjBCODNBQTE0QkNGNUI5MDA4ODVCNEYgLyog
RXhwcmVzc2lvblJhbmdlSW5mby5oICovLAorCQkJCTBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAv
KiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovLAogCQkJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjND
NiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYzQzYg
LyogR2V0QnlJZFN0YXR1cy5oICovLAogCQkJCTBGMEI4M0E4MTRCQ0Y1NUUwMDg4NUI0RiAvKiBI
YW5kbGVySW5mby5oICovLApAQCAtNDQ1NSw2ICs0NDczLDcgQEAKIAkJCQkyQTZGNDYyNjE3RTk1
OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGOTc0
NDcxMzhDODUzRTAwREExQzY3IC8qIEhlYXBSb290VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzI0RDMxRTMxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFw
VGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwRjBFMTZGNUNE
MDBCMzQ0NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCkBAIC00NTY0LDYgKzQ1ODMs
NyBAQAogCQkJCTdDMTg0RTFGMTdCRUUyMkUwMDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDM0JBMjk1MTdDMDM5NTYwMDcyRERDOSAvKiBKU1Byb21p
c2VSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0REVGOTYxODJEOTkxNDAwNTIyQzIy
IC8qIEpTTWFwSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjY2RUM5MTgzNTY3MkIw
MEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0MzQkEyOTcxN0MwMzk1NjAwNzJEREM5IC8qIEpTUHJvbWlzZVJlc29sdmVyQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDM0JBMjk5MTdDMDM5NTYwMDcyRERDOSAvKiBKU1Byb21p
c2VSZXNvbHZlclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYyNTUzRDIxNjEzNkUx
QTAwOUYxN0QwIC8qIEpTUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtNDY5Niw2ICs0NzE2LDcg
QEAKIAkJCQk5NUNENDU3NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTEwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGVOb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlBNTE2NkFEMzUxMDAwRjVCQTMgLyogUHJvZmls
ZXJCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0Yx
IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUI5MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVT
ZXF1ZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8q
IFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNDgwNSw2ICs0ODI2LDcg
QEAKIAkJCQlBN0E4QUYzRjE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdBOEFGNDAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVGMDhDRjE0NkM3NjMzMDAwNDcyQTkgLyogVW5jb25k
aXRpb25hbEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjZFQzcxODM1NjcyQjAw
RDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCNjAxODIx
NjM5RkQyQTAwMzcyQkEzIC8qIFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJFODkyQzE2RDAyOEFEMDA5RTRGRDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC01MjY4LDYgKzUyOTAsNyBAQAogCQkJCTE0N0YzOUMwMTA3RUMzNzYwMDQy
N0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0MDE3
RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0ODE2RTFCMTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjY2NkVDODE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50aW5n
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NjMxMDdFQzExQTAwMTNFN0IyIC8q
IEJvb2xlYW5Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg2NDEwN0VD
MTFBMDAxM0U3QjIgLyogQm9vbGVhbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4
MDg2NTEwN0VDMTFBMDAxM0U3QjIgLyogQm9vbGVhblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTU2OTAsNiArNTcxMyw3IEBACiAJCQkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8q
IFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjJFMTcxRTNFMjMw
MEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ5NEYzMDE3MUUz
RTIzMDBCRTc3QTQgLyogV2F0Y2hkb2dNYWMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NjZF
QzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQUNGNzM3NzE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNEU4NEY5RTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
QmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUJhc2ljQmxvY2suaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw4ICszNiw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiAKLXR5
cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgRmFzdEJpdFZlY3RvciwgV1RGOjpJbnRIYXNoPHVuc2ln
bmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4gPiBCeXRl
Y29kZVRvQml0bWFwTWFwOwotCiBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2sgOiBwdWJsaWMgUmVm
Q291bnRlZDxCeXRlY29kZUJhc2ljQmxvY2s+IHsKIHB1YmxpYzoKICAgICBlbnVtIFNwZWNpYWxC
bG9ja1R5cGUgeyBFbnRyeUJsb2NrLCBFeGl0QmxvY2sgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oIgogCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNz
LmgiCiAjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpA
QCAtMzgsNDQgKzQwLDIzIEBAIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVMaXZl
bmUKICAgICBjb21wdXRlKCk7CiB9CiAKLXN0YXRpYyBpbnQgbnVtYmVyT2ZDYXB0dXJlZFZhcmlh
YmxlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBpZiAoIWNvZGVCbG9jay0+c3ltYm9s
VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+c3ltYm9s
VGFibGUoKS0+Y2FwdHVyZUNvdW50KCk7Ci19Ci0KLXN0YXRpYyBpbnQgY2FwdHVyZVN0YXJ0KENv
ZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5jYXB0dXJlU3RhcnQoKTsKLX0KLQotc3RhdGljIGludCBjYXB0dXJlRW5kKENvZGVCbG9jayog
Y29kZUJsb2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJl
RW5kKCk7Ci19Ci0KIHN0YXRpYyBib29sIGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKENvZGVC
bG9jayogY29kZUJsb2NrLCBpbnQgb3BlcmFuZCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZyhvcGVyYW5kKTsKICAgICByZXR1cm4gIWNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lz
dGVySW5kZXgob3BlcmFuZCkgLy8gRG9uJ3QgY2FyZSBhYm91dCBjb25zdGFudHMuCiAgICAgICAg
ICYmIHZpcnR1YWxSZWcuaXNMb2NhbCgpIC8vIERvbid0IGNhcmUgYWJvdXQgYXJndW1lbnRzLgot
ICAgICAgICAmJiAoIW51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMoY29kZUJsb2NrKSAvLyBJZiB3
ZSBoYXZlIG5vIGNhcHR1cmVkIHZhcmlhYmxlcywgd2UncmUgZ29vZCB0byBnby4KLSAgICAgICAg
ICAgIHx8ICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY2FwdHVyZVN0YXJ0KGNvZGVCbG9jaykgfHwg
KHZpcnR1YWxSZWcub2Zmc2V0KCkgPD0gY2FwdHVyZUVuZChjb2RlQmxvY2spKSkpOworICAgICAg
ICAmJiAoIWNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkgLy8gSWYgd2UgaGF2ZSBubyBjYXB0dXJl
ZCB2YXJpYWJsZXMsIHdlJ3JlIGdvb2QgdG8gZ28uCisgICAgICAgICAgICB8fCAodmlydHVhbFJl
Zy5vZmZzZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkgfHwgKHZpcnR1YWxSZWcub2Zm
c2V0KCkgPD0gY29kZUJsb2NrLT5jYXB0dXJlRW5kKCkpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNl
dEZvck9wZXJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZhc3RCaXRWZWN0b3ImIGJpdHMsIGlu
dCBvcGVyYW5kKQogewogICAgIEFTU0VSVChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2Rl
QmxvY2ssIG9wZXJhbmQpKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5k
KTsKLSAgICBpZiAodmlydHVhbFJlZy5vZmZzZXQoKSA+IGNhcHR1cmVTdGFydChjb2RlQmxvY2sp
KQorICAgIGlmICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQo
KSkKICAgICAgICAgYml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkpOwogICAgIGVsc2UKLSAg
ICAgICAgYml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkgLSBudW1iZXJPZkNhcHR1cmVkVmFy
aWFibGVzKGNvZGVCbG9jaykpOworICAgICAgICBiaXRzLnNldCh2aXJ0dWFsUmVnLnRvTG9jYWwo
KSAtIGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkpOwogfQogCiBzdGF0aWMgdm9pZCBjb21wdXRl
VXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgdXNlcykKQEAgLTMwMyw4ICsyODQsOCBAQCBzdGF0
aWMgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0CiAgICAgICAgIGludCBiYXNlID0g
aW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICBpbnQgY291bnQgPSBpbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykg
ewotICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywg
YmFzZSArIGkpKQotICAgICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2Vz
LCBiYXNlICsgaSk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mo
Y29kZUJsb2NrLCBiYXNlIC0gaSkpCisgICAgICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2Rl
QmxvY2ssIHVzZXMsIGJhc2UgLSBpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNTMzLDEzICs1MTQsMzIgQEAgc3RhdGljIEJ5dGVjb2RlQmFzaWNCbG9jayogZmluZEJh
c2ljQmxvYwogICAgIHJldHVybiBiYXNpY0Jsb2NrWzFdLmdldCgpOwogfQogCitzdGF0aWMgdm9p
ZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9jayogY29kZUJsb2NrLCBWZWN0b3I8UmVmUHRy
PEJ5dGVjb2RlQmFzaWNCbG9jaz4+JiBiYXNpY0Jsb2NrcywgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQsIEZhc3RCaXRWZWN0b3ImIHVzZXMsIEZhc3RCaXRWZWN0b3ImIGRlZnMsIEZhc3RCaXRWZWN0
b3ImIG91dCkKK3sKKyAgICB1c2VzLmNsZWFyQWxsKCk7CisgICAgZGVmcy5jbGVhckFsbCgpOwor
ICAgIAorICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29k
ZU9mZnNldCwgdXNlcyk7CisgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxv
Y2ssIGJ5dGVjb2RlT2Zmc2V0LCBkZWZzKTsKKyAgICAKKyAgICBvdXQuZXhjbHVkZShkZWZzKTsK
KyAgICBvdXQubWVyZ2UodXNlcyk7CisgICAgCisgICAgLy8gSWYgd2UgaGF2ZSBhbiBleGNlcHRp
b24gaGFuZGxlciwgd2Ugd2FudCB0aGUgbGl2ZS1pbiB2YXJpYWJsZXMgb2YgdGhlIAorICAgIC8v
IGV4Y2VwdGlvbiBoYW5kbGVyIGJsb2NrIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBsaXZlLWluIG9m
IHRoaXMgcGFydGljdWxhciBieXRlY29kZS4KKyAgICBpZiAoSGFuZGxlckluZm8qIGhhbmRsZXIg
PSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkpIHsK
KyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBoYW5kbGVyQmxvY2sgPSBmaW5kQmFzaWNCbG9j
a1dpdGhMZWFkZXJPZmZzZXQoYmFzaWNCbG9ja3MsIGhhbmRsZXItPnRhcmdldCk7CisgICAgICAg
IEFTU0VSVChoYW5kbGVyQmxvY2spOworICAgICAgICBvdXQubWVyZ2UoaGFuZGxlckJsb2NrLT5p
bigpKTsKKyAgICB9Cit9CisKIHN0YXRpYyB2b2lkIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0
ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxv
Y2ssIFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiA+JiBiYXNpY0Jsb2NrcywgdW5z
aWduZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCiB7CiAgICAgQVNTRVJU
KCFibG9jay0+aXNFeGl0QmxvY2soKSk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNFbnRyeUJsb2Nr
KCkpOwogCiAgICAgRmFzdEJpdFZlY3RvciBvdXQgPSBibG9jay0+b3V0KCk7Ci0gICAgSGFuZGxl
ckluZm8qIGhhbmRsZXIgPSAwOwogCiAgICAgRmFzdEJpdFZlY3RvciB1c2VzOwogICAgIEZhc3RC
aXRWZWN0b3IgZGVmczsKQEAgLTU1MCwyMyArNTUwLDggQEAgc3RhdGljIHZvaWQgY29tcHV0ZUxv
Y2FsTGl2ZW5lc3NGb3JCeXRlYwogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJs
b2NrLT5ieXRlY29kZU9mZnNldHMoKVtpXTsKICAgICAgICAgaWYgKHRhcmdldE9mZnNldCA+IGJ5
dGVjb2RlT2Zmc2V0KQogICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgdXNlcy5jbGVhckFs
bCgpOwotICAgICAgICBkZWZzLmNsZWFyQWxsKCk7Ci0KLSAgICAgICAgY29tcHV0ZVVzZXNGb3JC
eXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCB1c2VzKTsKLSAgICAgICAg
Y29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCBk
ZWZzKTsKLQotICAgICAgICBvdXQuZXhjbHVkZShkZWZzKTsKLSAgICAgICAgb3V0Lm1lcmdlKHVz
ZXMpOwotCi0gICAgICAgIC8vIElmIHdlIGhhdmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIHdlIHdh
bnQgdGhlIGxpdmUtaW4gdmFyaWFibGVzIG9mIHRoZSAKLSAgICAgICAgLy8gZXhjZXB0aW9uIGhh
bmRsZXIgYmxvY2sgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGxpdmUtaW4gb2YgdGhpcyBwYXJ0aWN1
bGFyIGJ5dGVjb2RlLgotICAgICAgICBpZiAoKGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJG
b3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkpKSB7Ci0gICAgICAgICAgICBCeXRlY29k
ZUJhc2ljQmxvY2sqIGhhbmRsZXJCbG9jayA9IGZpbmRCYXNpY0Jsb2NrV2l0aExlYWRlck9mZnNl
dChiYXNpY0Jsb2NrcywgaGFuZGxlci0+dGFyZ2V0KTsKLSAgICAgICAgICAgIEFTU0VSVChoYW5k
bGVyQmxvY2spOwotICAgICAgICAgICAgb3V0Lm1lcmdlKGhhbmRsZXJCbG9jay0+aW4oKSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29kZUJsb2Nr
LCBiYXNpY0Jsb2NrcywgYnl0ZWNvZGVPZmZzZXQsIHVzZXMsIGRlZnMsIG91dCk7CiAgICAgfQog
CiAgICAgcmVzdWx0LnNldChvdXQpOwpAQCAtNTgzLDcgKzU2OCw3IEBAIHZvaWQgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpydW5MaXZlbmUKIHsKICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5s
aW5rZWRDb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKICAgICB1
bnNpZ25lZCBudW1iZXJPZlZhcmlhYmxlcyA9IHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZhcnMg
KyAKLSAgICAgICAgdW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIC0gbnVt
YmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhtX2NvZGVCbG9jayk7CisgICAgICAgIHVubGlua2VkQ29k
ZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAtIG1fY29kZUJsb2NrLT5jYXB0dXJlQ291bnQo
KTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jhc2ljQmxvY2tzLnNpemUoKTsg
aSsrKSB7CiAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jhc2ljQmxvY2tz
W2ldLmdldCgpOwpAQCAtNjIyLDM2ICs2MDcsMzAgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmdldExpdmVuZQogCiBib29sIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6b3BlcmFu
ZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9wZXJhbmQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KQogewotICAgIGludCBudW1DYXB0dXJlZFZhcnMgPSBudW1iZXJPZkNhcHR1cmVkVmFyaWFi
bGVzKG1fY29kZUJsb2NrKTsKLSAgICBpZiAoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlzQXJn
dW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKG9wZXJhbmQgPD0gY2FwdHVy
ZVN0YXJ0KG1fY29kZUJsb2NrKSAmJiBvcGVyYW5kID4gY2FwdHVyZUVuZChtX2NvZGVCbG9jaykp
CisgICAgaWYgKG9wZXJhbmRJc0Fsd2F5c0xpdmUobV9jb2RlQmxvY2ssIG9wZXJhbmQpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBGYXN0Qml0VmVjdG9yIHJlc3VsdDsKICAgICBnZXRMaXZl
bmVzc0luZm9Gb3JOb25DYXB0dXJlZFZhcnNBdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0
LCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQuZ2V0KG9wZXJhbmQgLSBudW1DYXB0dXJlZFZh
cnMpOworICAgIHJldHVybiBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShtX2NvZGVC
bG9jaywgcmVzdWx0LCBvcGVyYW5kKTsKIH0KIAotRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQpCitGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mbyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0KQogewotICAgIEZhc3RCaXRWZWN0b3Ig
dGVtcDsKICAgICBGYXN0Qml0VmVjdG9yIHJlc3VsdDsKIAotICAgIGdldExpdmVuZXNzSW5mb0Zv
ck5vbkNhcHR1cmVkVmFyc0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIHRlbXApOwot
Ci0gICAgdW5zaWduZWQgbnVtQ2FwdHVyZWRWYXJzID0gbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxl
cyhtX2NvZGVCbG9jayk7CisgICAgdW5zaWduZWQgbnVtQ2FwdHVyZWRWYXJzID0gY29kZUJsb2Nr
LT5jYXB0dXJlQ291bnQoKTsKICAgICBpZiAobnVtQ2FwdHVyZWRWYXJzKSB7Ci0gICAgICAgIGlu
dCBmaXJzdENhcHR1cmVkTG9jYWwgPSBWaXJ0dWFsUmVnaXN0ZXIoY2FwdHVyZVN0YXJ0KG1fY29k
ZUJsb2NrKSkudG9Mb2NhbCgpOwotICAgICAgICByZXN1bHQucmVzaXplKHRlbXAubnVtQml0cygp
ICsgbnVtQ2FwdHVyZWRWYXJzKTsKKyAgICAgICAgaW50IGZpcnN0Q2FwdHVyZWRMb2NhbCA9IFZp
cnR1YWxSZWdpc3Rlcihjb2RlQmxvY2stPmNhcHR1cmVTdGFydCgpKS50b0xvY2FsKCk7CisgICAg
ICAgIHJlc3VsdC5yZXNpemUob3V0Lm51bUJpdHMoKSArIG51bUNhcHR1cmVkVmFycyk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1DYXB0dXJlZFZhcnM7ICsraSkKICAgICAg
ICAgICAgIHJlc3VsdC5zZXQoZmlyc3RDYXB0dXJlZExvY2FsICsgaSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIHJlc3VsdC5yZXNpemUodGVtcC5udW1CaXRzKCkpOworICAgICAgICByZXN1bHQucmVz
aXplKG91dC5udW1CaXRzKCkpOwogCi0gICAgaW50IHRlbXBMZW5ndGggPSB0ZW1wLm51bUJpdHMo
KTsKLSAgICBBU1NFUlQodGVtcExlbmd0aCA+PSAwKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IHRlbXBMZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoIXRlbXAuZ2V0KGkpKQorICAgIGludCBv
dXRMZW5ndGggPSBvdXQubnVtQml0cygpOworICAgIEFTU0VSVChvdXRMZW5ndGggPj0gMCk7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdXRMZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoIW91
dC5nZXQoaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAoIW51bUNhcHR1
cmVkVmFycykgewpAQCAtNjU5LDcgKzYzOCw3IEBAIEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjoKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLm9mZnNldCgpID4gY2FwdHVyZVN0YXJ0
KG1fY29kZUJsb2NrKSkKKyAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLm9m
ZnNldCgpID4gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSkKICAgICAgICAgICAgIHJlc3VsdC5z
ZXQoaSk7CiAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICByZXN1bHQuc2V0KG51bUNhcHR1cmVk
VmFycyArIGkpOwpAQCAtNjY3LDYgKzY0NiwzOSBAQCBGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpczo6CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorRmFzdEJpdFZlY3RvciBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgRmFzdEJpdFZlY3RvciBvdXQ7CisgICAg
Z2V0TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCwgb3V0KTsKKyAgICByZXR1cm4gZ2V0TGl2ZW5lc3NJbmZvKG1fY29kZUJsb2NrLCBv
dXQpOworfQorCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZUZ1bGxMaXZl
bmVzcyhGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgcmVzdWx0KQoreworICAgIEZhc3RCaXRWZWN0b3Ig
b3V0OworICAgIEZhc3RCaXRWZWN0b3IgdXNlczsKKyAgICBGYXN0Qml0VmVjdG9yIGRlZnM7Cisg
ICAgCisgICAgcmVzdWx0Lm1fY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CisgICAgcmVzdWx0Lm1f
bWFwLmNsZWFyKCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9iYXNpY0Jsb2Nrcy5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmFz
aWNCbG9ja3NbaV0uZ2V0KCk7CisgICAgICAgIGlmIChibG9jay0+aXNFbnRyeUJsb2NrKCkgfHwg
YmxvY2stPmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisg
ICAgICAgIG91dCA9IGJsb2NrLT5vdXQoKTsKKyAgICAgICAgdXNlcy5yZXNpemUob3V0Lm51bUJp
dHMoKSk7CisgICAgICAgIGRlZnMucmVzaXplKG91dC5udW1CaXRzKCkpOworICAgICAgICAKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0cygpLnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+Ynl0
ZWNvZGVPZmZzZXRzKClbaV07CisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKG1fY29k
ZUJsb2NrLCBtX2Jhc2ljQmxvY2tzLCBieXRlY29kZU9mZnNldCwgdXNlcywgZGVmcywgb3V0KTsK
KyAgICAgICAgICAgIHJlc3VsdC5tX21hcC5hZGQoYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVz
dWx0cygpCiB7CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9jb2RlQmxvY2stPnZt
KCktPmludGVycHJldGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAkocmV2aXNpb24gMTU5MTQx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyArMzQsMTYgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBGdWxsQnl0ZWNvZGVMaXZlbmVzczsKIAogY2xh
c3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIHsKIHB1YmxpYzoKICAgICBCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMoQ29kZUJsb2NrKik7Ci0KKyAgICAKICAgICBib29sIG9wZXJhbmRJc0xpdmVB
dEJ5dGVjb2RlT2Zmc2V0KGludCBvcGVyYW5kLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAg
ICAgRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAKKyAgICB2b2lkIGNvbXB1dGVGdWxsTGl2ZW5lc3MoRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MmIHJlc3VsdCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjb21wdXRl
KCk7CkBAIC01Myw2ICs1NiwxMiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8Qnl0ZWNv
ZGVCYXNpY0Jsb2NrPiA+IG1fYmFzaWNCbG9ja3M7CiB9OwogCitpbmxpbmUgYm9vbCBvcGVyYW5k
SXNBbHdheXNMaXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBpbnQgb3BlcmFuZCk7CitpbmxpbmUg
Ym9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CitpbmxpbmUgYm9vbCBv
cGVyYW5kSXNMaXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBv
dXQsIGludCBvcGVyYW5kKTsKKworRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm8oQ29kZUJs
b2NrKiwgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXNJbmxpbmVzX2gKKyNkZWZpbmUgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5l
c19oCisKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBib29sIG9wZXJhbmRJc0Fs
d2F5c0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGludCBvcGVyYW5kKQoreworICAgIGlmIChW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNBcmd1bWVudCgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gb3BlcmFuZCA8PSBjb2RlQmxvY2stPmNhcHR1cmVTdGFydCgpICYmIG9w
ZXJhbmQgPiBjb2RlQmxvY2stPmNhcHR1cmVFbmQoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmFu
ZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZh
c3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpCit7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWcob3BlcmFuZCk7CisgICAgaWYgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPiBjb2RlQmxv
Y2stPmNhcHR1cmVTdGFydCgpKQorICAgICAgICByZXR1cm4gb3V0LmdldCh2aXJ0dWFsUmVnLnRv
TG9jYWwoKSk7CisgICAgc2l6ZV90IGluZGV4ID0gdmlydHVhbFJlZy50b0xvY2FsKCkgLSBjb2Rl
QmxvY2stPmNhcHR1cmVDb3VudCgpOworICAgIGlmIChpbmRleCA+PSBvdXQubnVtQml0cygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG91dC5nZXQoaW5kZXgpOworfQorCitp
bmxpbmUgYm9vbCBvcGVyYW5kSXNMaXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0
Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoreworICAgIHJldHVybiBvcGVyYW5kSXNBbHdh
eXNMaXZlKGNvZGVCbG9jaywgb3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJ
c0xpdmUoY29kZUJsb2NrLCBvdXQsIG9wZXJhbmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTkx
NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1NCw2ICszNTQsMjcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIG1fbmVlZHNBY3RpdmF0aW9uOwogICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBjYXB0dXJl
Q291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291
bnQoKTsKKyAgICB9CisgICAgCisgICAgaW50IGNhcHR1cmVTdGFydCgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoIXN5bWJvbFRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpOworICAgIH0KKyAgICAKKyAg
ICBpbnQgY2FwdHVyZUVuZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIXN5bWJvbFRhYmxl
KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlKCkt
PmNhcHR1cmVFbmQoKTsKKyAgICB9CiAKICAgICBib29sIGlzQ2FwdHVyZWQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIElubGluZUNhbGxGcmFtZSogPSAwKSBjb25zdDsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHJldmlzaW9u
IDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgSW5saW5lQ2FsbEZyYW1l
OjpkdW1wSW5Db250ZXh0KFByaW4KICAgICBlbHNlCiAgICAgICAgIG91dC5wcmludCgiLCBrbm93
biBjYWxsZWU6ICIsIGluQ29udGV4dChjYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLCBjb250ZXh0
KSk7CiAgICAgb3V0LnByaW50KCIsIG51bUFyZ3MrdGhpcyA9ICIsIGFyZ3VtZW50cy5zaXplKCkp
OwotICAgIG91dC5wcmludCgiLCBzdGFjayA+PSByIiwgc3RhY2tPZmZzZXQpOworICAgIG91dC5w
cmludCgiLCBzdGFjayA8IGxvYyIsIFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCkudG9Mb2Nh
bCgpKTsKICAgICBvdXQucHJpbnQoIj4iKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBGdWxsQnl0ZWNvZGVMaXZlbmVzc19oCisjZGVmaW5lIEZ1bGxCeXRlY29kZUxpdmVuZXNzX2gK
KworI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CisKK3R5cGVkZWYgSGFzaE1hcDx1bnNpZ25l
ZCwgRmFzdEJpdFZlY3RvciwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4gPiBCeXRlY29kZVRvQml0bWFwTWFwOworCitj
bGFzcyBGdWxsQnl0ZWNvZGVMaXZlbmVzcyB7CitwdWJsaWM6CisgICAgRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MoKSA6IG1fY29kZUJsb2NrKDApIHsgfQorICAgIAorICAgIC8vIFdlIHNheSAib3V0IiB0
byByZWZlciB0byB0aGUgYml0dmVjdG9yIHRoYXQgY29udGFpbnMgcmF3IHJlc3VsdHMgZm9yIGEg
Ynl0ZWNvZGUKKyAgICAvLyBpbnN0cnVjdGlvbi4KKyAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBn
ZXRPdXQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEJ5dGVj
b2RlVG9CaXRtYXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKGJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICBBU1NFUlQoaXRlciAhPSBtX21hcC5lbmQoKSk7CisgICAgICAgIHJl
dHVybiBpdGVyLT52YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYW5kSXNMaXZlKGlu
dCBvcGVyYW5kLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUobV9jb2RlQmxvY2ssIG9wZXJhbmQpIHx8IG9wZXJh
bmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKG1fY29kZUJsb2NrLCBnZXRPdXQoYnl0ZWNvZGVJ
bmRleCksIG9wZXJhbmQpOworICAgIH0KKyAgICAKKyAgICBGYXN0Qml0VmVjdG9yIGdldExpdmVu
ZXNzKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
Z2V0TGl2ZW5lc3NJbmZvKG1fY29kZUJsb2NrLCBnZXRPdXQoYnl0ZWNvZGVJbmRleCkpOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczsKKyAgICAKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIEJ5dGVjb2RlVG9C
aXRtYXBNYXAgbV9tYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEZ1
bGxCeXRlY29kZUxpdmVuZXNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXZhaWxhYmlsaXR5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHkuaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgQXZhaWxhYmlsaXR5OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIDApOwor
fQorCit2b2lkIEF2YWlsYWJpbGl0eTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBE
dW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9mbHVzaGVkQXQs
ICIvIik7CisgICAgCisgICAgR3JhcGgqIGdyYXBoID0gY29udGV4dCA/IGNvbnRleHQtPmdyYXBo
IDogMDsKKyAgICAKKyAgICBpZiAodmFyaWFibGVJc1VuZGVjaWRlZCgpKSB7CisgICAgICAgIG91
dC5wcmludCgiVW5kZWNpZGVkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
aWYgKHZhcmlhYmxlSXNVbmF2YWlsYWJsZSgpKSB7CisgICAgICAgIG91dC5wcmludCgiVW5hdmFp
bGFibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoZ3JhcGgpIHsK
KyAgICAgICAgb3V0LnByaW50KFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKmdyYXBoLCBtX3Zhcmlh
YmxlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KFJhd1Bv
aW50ZXIobV92YXJpYWJsZSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBdmFpbGFiaWxpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0F2YWlsYWJpbGl0eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR0F2YWlsYWJpbGl0eV9oCisjZGVmaW5lIERGR0F2YWlsYWJpbGl0eV9oCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0ZsdXNoZWRBdC5oIgorI2luY2x1ZGUgIkRGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEF2YWlsYWJpbGl0eSB7CitwdWJsaWM6CisgICAgQXZhaWxhYmlsaXR5KCkKKyAgICAg
ICAgOiBtX3ZhcmlhYmxlKDApCisgICAgICAgICwgbV9mbHVzaGVkQXQoRGVhZEZsdXNoKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgQXZhaWxhYmlsaXR5KFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUpCisgICAgICAgIDogbV92YXJpYWJsZSh2YXJpYWJsZSkKKyAgICAgICAg
LCBtX2ZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIEF2YWlsYWJpbGl0eSB1bmF2YWlsYWJsZSgpCisgICAgeworICAgICAgICBBdmFpbGFi
aWxpdHkgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YXJpYWJsZSA9IHVuYXZhaWxhYmxlTWFy
a2VyKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEF2YWlsYWJp
bGl0eSB3aXRoRmx1c2goRmx1c2hlZEF0IGZsdXNoKQorICAgIHsKKyAgICAgICAgQXZhaWxhYmls
aXR5IHJlc3VsdCA9ICp0aGlzOworICAgICAgICByZXN1bHQubV9mbHVzaGVkQXQgPSBmbHVzaDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCB2YXJpYWJsZUlz
VW5kZWNpZGVkKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZSA9PSAwOyB9CisgICAgYm9vbCB2
YXJpYWJsZUlzVW5hdmFpbGFibGUoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlID09IHVuYXZh
aWxhYmxlTWFya2VyKCk7IH0KKyAgICAKKyAgICBib29sIGhhc1ZhcmlhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gIXZhcmlhYmxlSXNVbmRlY2lkZWQoKSAmJiAhdmFyaWFibGVJc1VuYXZhaWxhYmxlKCk7
IH0KKyAgICAKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVCghdmFyaWFibGVJc1VuZGVjaWRlZCgpKTsKKyAgICAgICAgQVNTRVJU
KCF2YXJpYWJsZUlzVW5hdmFpbGFibGUoKSk7CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlOwor
ICAgIH0KKyAgICAKKyAgICBGbHVzaGVkQXQgZmx1c2hlZEF0KCkgY29uc3QgeyByZXR1cm4gbV9m
bHVzaGVkQXQ7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIHZh
cmlhYmxlSXNVbmF2YWlsYWJsZSgpICYmICFmbHVzaGVkQXQoKTsgfQorCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0eSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV92YXJpYWJsZSA9PSBvdGhlci5tX3ZhcmlhYmxlCisgICAgICAgICAgICAmJiBtX2Zs
dXNoZWRBdCA9PSBvdGhlci5tX2ZsdXNoZWRBdDsKKyAgICB9CisgICAgCisgICAgQXZhaWxhYmls
aXR5IG1lcmdlKGNvbnN0IEF2YWlsYWJpbGl0eSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBBdmFpbGFiaWxpdHkgcmVzdWx0OworICAgICAgICAKKyAgICAgICAgaWYgKHZhcmlhYmxlSXNV
bmRlY2lkZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IG90aGVyOworICAgICAgICBlbHNlIGlm
IChvdGhlci52YXJpYWJsZUlzVW5kZWNpZGVkKCkpCisgICAgICAgICAgICByZXN1bHQgPSAqdGhp
czsKKyAgICAgICAgZWxzZSBpZiAobV92YXJpYWJsZSA9PSBvdGhlci5tX3ZhcmlhYmxlKQorICAg
ICAgICAgICAgcmVzdWx0ID0gKnRoaXM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHVuYXZhaWxhYmxlKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0LndpdGhG
bHVzaChmbHVzaGVkQXQoKS5tZXJnZShvdGhlci5mbHVzaGVkQXQoKSkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworCitwcml2YXRlOgorICAgIHN0
YXRpYyBWYXJpYWJsZUFjY2Vzc0RhdGEqIHVuYXZhaWxhYmxlTWFya2VyKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VmFyaWFibGVBY2Nlc3NEYXRhKj4oc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KDEpKTsKKyAgICB9CisgICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBtX3Zh
cmlhYmxlOworICAgIEZsdXNoZWRBdCBtX2ZsdXNoZWRBdDsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
QXZhaWxhYmlsaXR5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAi
REZHQXZhaWxhYmlsaXR5LmgiCiAjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5j
bHVkZSAiREZHRmx1c2hlZEF0LmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgpAQCAtMTQwLDggKzE0
MSw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICBzdHJ1
Y3QgU1NBRGF0YSB7CiAgICAgICAgIE9wZXJhbmRzPEZsdXNoZWRBdD4gZmx1c2hBdEhlYWQ7CiAg
ICAgICAgIE9wZXJhbmRzPEZsdXNoZWRBdD4gZmx1c2hBdFRhaWw7Ci0gICAgICAgIE9wZXJhbmRz
PE5vZGUqPiBhdmFpbGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgIE9wZXJhbmRzPE5vZGUqPiBhdmFp
bGFiaWxpdHlBdFRhaWw7CisgICAgICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxhYmls
aXR5QXRIZWFkOworICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0
VGFpbDsKICAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKICAgICAgICAgSGFzaFNl
dDxOb2RlKj4gbGl2ZUF0VGFpbDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1
ZT4gdmFsdWVzQXRIZWFkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcz
LDYgKzMwNzMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBOb2RlKiBiYXNlID0gY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKGdsb2JhbE9i
amVjdCwgc3RhdHVzLnN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUp
KSk7CiAgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IHN0YXR1cy5z
cGVjaWZpY1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KSwgY2VsbENvbnN0YW50KHNwZWNpZmljVmFsdWUuYXNDZWxsKCkpKTsKICAgICAgICAgICAg
ICAgICBlbHNlCkBAIC0zMDgxLDYgKzMwODIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZh
cjoKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewor
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSkpKTsKICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFs
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWVu
dHJ5LmNvdWxkQmVXYXRjaGVkKCkgfHwgIW1fZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFs
aWQoZW50cnkud2F0Y2hwb2ludFNldCgpKSkgewogICAgICAgICAgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKGRzdCksIGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFu
ZCksIE9wSW5mbyhwcmVkaWN0aW9uKSkpOwpAQCAtMzEzMSw2ICszMTMzLDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IGNlbGxD
b25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1cy5vbGRTdHJ1Y3R1
cmUoKSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJl
Z2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2Us
IGlkZW50aWZpZXJOdW1iZXIsIHN0YXRpY19jYXN0PFByb3BlcnR5T2Zmc2V0PihvcGVyYW5kKSwg
Z2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKICAgICAgICAgICAgICAgICAvLyBLZWVwIHNj
b3BlIGFsaXZlIHVudGlsIGFmdGVyIHB1dC4KICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBo
YW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CkBAIC0zMTM4LDYgKzMxNDEsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhh
bnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBTeW1i
b2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQodWlk
KTsKICAgICAgICAgICAgICAgICBBU1NFUlQoIWVudHJ5LmNvdWxkQmVXYXRjaGVkKCkgfHwgIW1f
Z3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoZW50cnkud2F0Y2hwb2ludFNldCgpKSk7
CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5k
KSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBEaXNh
c3NlbWJsZXI6OkRpc2Fzc2VtYmxlcihHcmFwaCYgZ3JhcGgpCiAgICAgOiBtX2dyYXBoKGdyYXBo
KQogeworICAgIG1fZHVtcENvbnRleHQuZ3JhcGggPSAmbV9ncmFwaDsKICAgICBtX2xhYmVsRm9y
QmxvY2tJbmRleC5yZXNpemUoZ3JhcGgubnVtQmxvY2tzKCkpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAkocmV2aXNpb24gMTU5MTQx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDYgKzU2LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIEZsdQogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CiAgICAgICAgIG91dC5wcmludCgi
Rmx1c2hlZEpTVmFsdWUiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uZmxpY3RpbmdG
bHVzaDoKKyAgICAgICAgb3V0LnByaW50KCJDb25mbGljdGluZ0ZsdXNoIik7CisgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHJldmlzaW9uIDE1
OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsOCBAQCBlbnVtIEZsdXNoRm9ybWF0IHsKICAgICBGbHVz
aGVkRG91YmxlLAogICAgIEZsdXNoZWRDZWxsLAogICAgIEZsdXNoZWRCb29sZWFuLAotICAgIEZs
dXNoZWRKU1ZhbHVlCisgICAgRmx1c2hlZEpTVmFsdWUsCisgICAgQ29uZmxpY3RpbmdGbHVzaAog
fTsKIAogaW5saW5lIE5vZGVGbGFncyByZXN1bHRGb3IoRmx1c2hGb3JtYXQgZm9ybWF0KQpAQCAt
NTQsNiArNTUsNyBAQCBpbmxpbmUgTm9kZUZsYWdzIHJlc3VsdEZvcihGbHVzaEZvcm1hdCBmCiAg
ICAgY2FzZSBEZWFkRmx1c2g6CiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAgICBjYXNlIEZs
dXNoZWRDZWxsOgorICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKICAgICAgICAgcmV0dXJuIE5v
ZGVSZXN1bHRKUzsKICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKICAgICAgICAgcmV0dXJuIE5vZGVS
ZXN1bHRJbnQzMjsKQEAgLTczLDYgKzc1LDcgQEAgaW5saW5lIFVzZUtpbmQgdXNlS2luZEZvcihG
bHVzaEZvcm1hdCBmbwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBEZWFkRmx1c2g6
CiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAg
ICAgICAgIHJldHVybiBVbnR5cGVkVXNlOwogICAgIGNhc2UgRmx1c2hlZENlbGw6CiAgICAgICAg
IHJldHVybiBDZWxsVXNlOwpAQCAtOTMsNiArOTYsNyBAQCBpbmxpbmUgRGF0YUZvcm1hdCBkYXRh
Rm9ybWF0Rm9yKEZsdXNoRm9yCiB7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIERl
YWRGbHVzaDoKKyAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAgICAgIHJldHVybiBEYXRh
Rm9ybWF0RGVhZDsKICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICByZXR1cm4gRGF0
YUZvcm1hdEpTOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0
LmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
bHVzaGVkQXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBGbHVzaGVkQXQ6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKIHsKLSAgICBpZiAobV9mb3JtYXQgPT0gRGVhZEZsdXNoKQorICAgIGlmICht
X2Zvcm1hdCA9PSBEZWFkRmx1c2ggfHwgbV9mb3JtYXQgPT0gQ29uZmxpY3RpbmdGbHVzaCkKICAg
ICAgICAgb3V0LnByaW50KG1fZm9ybWF0KTsKICAgICBlbHNlCiAgICAgICAgIG91dC5wcmludCgi
ciIsIG1fdmlydHVhbFJlZ2lzdGVyLCAiOiIsIG1fZm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsMTIgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCisgICAgZXhwbGljaXQgRmx1
c2hlZEF0KEZsdXNoRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgOiBtX2Zvcm1hdChmb3JtYXQpCisg
ICAgeworICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERlYWRGbHVzaCB8fCBmb3JtYXQgPT0gQ29u
ZmxpY3RpbmdGbHVzaCk7CisgICAgfQorICAgIAogICAgIEZsdXNoZWRBdChGbHVzaEZvcm1hdCBm
b3JtYXQsIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgIDogbV9mb3Jt
YXQoZm9ybWF0KQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlcikK
QEAgLTY1LDYgKzcxLDE3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgRmx1c2hlZEF0JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0K
ICAgICAKKyAgICBGbHVzaGVkQXQgbWVyZ2UoY29uc3QgRmx1c2hlZEF0JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghKnRoaXMpCisgICAgICAgICAgICByZXR1cm4gb3RoZXI7Cisg
ICAgICAgIGlmICghb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIGlm
ICgqdGhpcyA9PSBvdGhlcikKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgcmV0
dXJuIEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDYgKzM5Myw3IEBA
IHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKIHZvaWQgR3JhcGg6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgRHVtcENv
bnRleHQgbXlDb250ZXh0OworICAgIG15Q29udGV4dC5ncmFwaCA9IHRoaXM7CiAgICAgaWYgKCFj
b250ZXh0KQogICAgICAgICBjb250ZXh0ID0gJm15Q29udGV4dDsKICAgICAKQEAgLTY0Myw2ICs2
NDQsNTkgQEAgdm9pZCBHcmFwaDo6aW5pdGlhbGl6ZU5vZGVPd25lcnMoKQogICAgICAgICAgICAg
YmxvY2stPmF0KG5vZGVJbmRleCktPm1pc2Mub3duZXIgPSBibG9jazsKICAgICB9CiB9CisKK0Z1
bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3IoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCit7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVj
b2RlTGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9IG1fYnl0ZWNvZGVMaXZlbmVzcy5maW5kKGNv
ZGVCbG9jayk7CisgICAgaWYgKGl0ZXIgIT0gbV9ieXRlY29kZUxpdmVuZXNzLmVuZCgpKQorICAg
ICAgICByZXR1cm4gKml0ZXItPnZhbHVlOworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxGdWxs
Qnl0ZWNvZGVMaXZlbmVzcz4gbGl2ZW5lc3MgPSBzdGQ6Om1ha2VfdW5pcXVlPEZ1bGxCeXRlY29k
ZUxpdmVuZXNzPigpOworICAgIGNvZGVCbG9jay0+bGl2ZW5lc3NBbmFseXNpcygpLmNvbXB1dGVG
dWxsTGl2ZW5lc3MoKmxpdmVuZXNzKTsKKyAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgcmVzdWx0
ID0gKmxpdmVuZXNzOworICAgIG1fYnl0ZWNvZGVMaXZlbmVzcy5hZGQoY29kZUJsb2NrLCBzdGQ6
Om1vdmUobGl2ZW5lc3MpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitGdWxsQnl0ZWNvZGVM
aXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lKQoreworICAgIHJldHVybiBsaXZlbmVzc0ZvcihiYXNlbGluZUNvZGVCbG9ja0Zvcihpbmxp
bmVDYWxsRnJhbWUpKTsKK30KKworYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQoreworICAgIGZvciAoOzsp
IHsKKyAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3JpZ2luLnN0YWNrT2Zmc2V0
KCkgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKSB7CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVnID0gVmlydHVhbFJlZ2lzdGVyKAorICAgICAgICAgICAgICAgIG9wZXJhbmQu
b2Zmc2V0KCkgLSBjb2RlT3JpZ2luLnN0YWNrT2Zmc2V0KCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAocmVnLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGlmIChyZWcu
b2Zmc2V0KCkgPj0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIChyZWcub2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAocmVnLm9mZnNldCgpID09IEpTU3Rh
Y2s6OlNjb3BlQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGxpdmVuZXNzRm9yKGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKS5vcGVyYW5kSXNMaXZlKAorICAgICAgICAgICAgICAgIHJlZy5vZmZz
ZXQoKSwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAKKyAgICAgICAgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZXI7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQogICAgIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJERkdO
b2RlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1Zhcmlh
ZGljRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1
ZGUgIklubGluZUNhbGxGcmFtZVNldC5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRl
ICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCkBAIC00MTYsNiArNDE3LDEzIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGVGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpOwogICAgIH0KICAgICAKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9y
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrOworICAg
ICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2Fs
bEZyYW1lKTsKKyAgICB9CisgICAgCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zv
cihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgcmV0dXJuIGJh
c2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwg
bV9wcm9maWxlZEJsb2NrKTsKQEAgLTc3Niw2ICs3ODQsMTAgQEAgcHVibGljOgogICAgIERlc2ly
ZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMoKSB7IHJldHVybiBtX3BsYW4ud2F0Y2hwb2ludHM7
IH0KICAgICBEZXNpcmVkU3RydWN0dXJlQ2hhaW5zJiBjaGFpbnMoKSB7IHJldHVybiBtX3BsYW4u
Y2hhaW5zOyB9CiAgICAgCisgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENv
ZGVCbG9jayogY29kZUJsb2NrKTsKKyAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NG
b3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpOworICAgIGJvb2wgaXNMaXZlSW5C
eXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKTsK
KyAgICAKICAgICBWTSYgbV92bTsKICAgICBQbGFuJiBtX3BsYW47CiAgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKQEAgLTc5Nyw2ICs4MDksNyBAQCBwdWJsaWM6CiAgICAgU2VnbWVudGVkVmVj
dG9yPFN3aXRjaERhdGEsIDQ+IG1fc3dpdGNoRGF0YTsKICAgICBWZWN0b3I8SW5saW5lVmFyaWFi
bGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBPd25QdHI8SW5saW5lQ2FsbEZy
YW1lU2V0PiBtX2lubGluZUNhbGxGcmFtZXM7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6
OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAg
ICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKICAgICBIYXNoU2V0PEV4ZWN1dGFibGVCYXNlKj4gbV9l
eGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZDsKICAgICBCaXRWZWN0b3IgbV9sYXp5VmFy
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludENvdW50aW5nUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGlu
dENvdW50aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR01vdkhpbnRDb3VudGluZ1BoYXNlLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVz
LmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIK
KyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBNb3ZIaW50Q291bnRpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgTW92SGludENvdW50aW5nUGhhc2UoR3JhcGgm
IGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiTW92SGludCBjb3VudGluZyIpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9n
cmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFzc2VydCB0aGF0IHdl
IGhhdmVuJ3QgZG9uZSB0aGlzIGFscmVhZHkuCisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVE
KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fdmFyaWFibGVBY2Nl
c3NEYXRhLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXZhcmlhYmxlLT5pc1Jvb3QoKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+bW92SGludENvdW50KCkp
OworICAgICAgICAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPnNpbmdsZU1vdkhpbnQoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6
ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAg
ICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hl
Y2s6CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5jb3Vu
dE1vdkhpbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJndW1l
bnQ6CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5jb3Vu
dE1vdkhpbnQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5jb3VudE1vdkhpbnQoMCk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KK307CisKK2Jvb2wgcGVyZm9ybU1vdkhpbnRDb3VudGluZyhHcmFwaCYgZ3Jh
cGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBNb3ZIaW50IENv
dW50aW5nIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPE1vdkhpbnRDb3VudGluZ1BoYXNlPihncmFw
aCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRDb3Vu
dGluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
b3ZIaW50Q291bnRpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZV9oCisjZGVmaW5lIERGR01vdkhpbnRDb3Vu
dGluZ1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ29tcHV0ZXMgVmFyaWFibGVBY2Nlc3NE
YXRhOjptX21vdkhpbnRDb3VudC4gVmFyaWFibGVzIHRoYXQgYXJlIGFzc2lnbmVkIG9ubHkgb25j
ZSBjYW4gZ2V0CisvLyB0cmVhdGVkIHNwZWNpYWxseS4gRm9yIGV4YW1wbGUsIE9TUiBleGl0IGlu
IHRoZSBGVEwgY2FuIGFsbG93IHRoZSBmb3JtYXQgdXNlZCBmb3Igc3VjaAorLy8gbm9kZXMgQmFz
aWNCbG9jazo6c3NhLT5hdmFpbGFiaWx0aXlBdEhlYWQvVGFpbC4gVGhpcyBpcyBhIGZvcndhcmQg
ZmxvdyB0eXBlIGluZmVyZW5jZQorLy8gb3ZlciBNb3ZIaW50cy4gQXQgdGhlIHRpbWUgd2hlbiBN
b3ZIaW50cyBhcmUgaW50cm9kdWNlZCwgd2Ugd2VyZSBjZXJ0YWluIHRoYXQgYXQgYW55CisvLyBw
b2ludCBpbiB0aGUgcHJvZ3JhbSB3aGVyZSBhIGJ5dGVjb2RlIHZhcmlhYmxlIGhhZCBiZWVuIGxp
dmUsIGFsbCBvZiB0aGUgTW92SGludHMgdGhhdAorLy8gZmxvd2VkIGludG8gdGhhdCBwb2ludCBm
b3IgdGhhdCB2YXJpYWJsZSBoYWQgdGhlIHNhbWUgRmx1c2hGb3JtYXQuIFRoaXMgYW5hbHlzaXMg
d2lsbCB0ZWxsCisvLyB5b3Ugd2hhdCB0aGF0IGZvcm1hdCB3b3VsZCBoYXZlIGJlZW4uCisKK2Jv
b2wgcGVyZm9ybU1vdkhpbnRDb3VudGluZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR01vdkhp
bnRDb3VudGluZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZp
c2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3NyArNDcsOTAgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CiAg
ICAgICAgIAotICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7Ci0gICAgICAg
IG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7CisgICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJ
bmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5maWxs
KEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0
VGFpbC5maWxsKEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhGaXJzdFtpXTsKLSAgICAgICAgICAgIGJs
b2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5maWxsKDApOwotICAgICAgICAgICAgYmxvY2st
PnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLmZpbGwoMCk7CisgICAgICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBtX2dyYXBoLmJsb2NrKDApOworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0g
cm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1l
bnQtLTspIHsKKyAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmFyZ3Vt
ZW50KGFyZ3VtZW50KSA9CisgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJs
ZSgpLndpdGhGbHVzaCgKKyAgICAgICAgICAgICAgICAgICAgRmx1c2hlZEF0KEZsdXNoZWRKU1Zh
bHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpKTsKICAgICAgICAgfQor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhl
YWQubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspCisgICAgICAgICAgICByb290LT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2NhbCkgPSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxl
KCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJz
dC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBkZXB0aEZp
cnN0W2ldOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSBlZGl0IGF2YWlsYWJpbGl0
eUF0VGFpbCBpbi1wbGFjZSwgYnV0IGZpcnN0IGluaXRpYWxpemUgaXQgdG8KLSAgICAgICAgICAg
IC8vIGF2YWlsYWJpbGl0eUF0SGVhZC4KLSAgICAgICAgICAgIE9wZXJhbmRzPE5vZGUqPiYgYXZh
aWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsOwotICAgICAgICAgICAg
YXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8
IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBNb3ZIaW50OgotICAgICAgICAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7Ci0g
ICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2Ug
Wm9tYmllSGludDogewotICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBHZXRB
cmd1bWVudDogewotICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBp
ZiAobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSBtX2dyYXBoLm1fcHJvZmlsZWRCbG9jay0+bV9udW1D
YWxsZWVSZWdpc3RlcnM7IGxvY2FsLS07KSB7CisgICAgICAgICAgICAgICAgcm9vdC0+c3NhLT5h
dmFpbGFiaWxpdHlBdEhlYWQubG9jYWwobG9jYWwpID0KKyAgICAgICAgICAgICAgICAgICAgQXZh
aWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpLndpdGhGbHVzaCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9j
YWwpKSk7CiAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRo
aXMgY291bGQgYmUgbWFkZSBtb3JlIGVmZmljaWVudCBieSBwcm9jZXNzaW5nIGJsb2NrcyBpbiBy
ZXZlcnNlIHBvc3RvcmRlci4KKyAgICAgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFi
aWxpdHk7CisgICAgICAgIGJvb2wgY2hhbmdlZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAg
Y2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBqLS07KSB7Ci0gICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihqKTsKLSAgICAgICAgICAgICAg
ICBPcGVyYW5kczxOb2RlKj4mIHN1Y2Nlc3NvckF2YWlsYWJpbGl0eSA9IHN1Y2Nlc3Nvci0+c3Nh
LT5hdmFpbGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0g
YXZhaWxhYmlsaXR5LnNpemUoKTsgay0tOykgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBt
eU5vZGUgPSBhdmFpbGFiaWxpdHlba107Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbXlOb2Rl
KQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3Nvci0+c3NhLT5saXZlQXRIZWFkLmNv
bnRhaW5zKG15Tm9kZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIG1h
eSBvdmVyd3JpdGUgYXZhaWxhYmlsaXR5IHdpdGggYSBib2d1cyBub2RlCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGF0IG1lcmdlIHBvaW50cy4gVGhpcyBpcyBmaW5lLCBzaW5jZSBtZXJnZSBwb2lu
dHMgaGF2ZQotICAgICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50KFBoaSkncyB0byB3b3JrIGFy
b3VuZCB0aGlzLiBUaGUgb3V0Y29tZSBvZiB0aGlzIGlzCi0gICAgICAgICAgICAgICAgICAgIC8v
IHlvdSBtaWdodCBoYXZlIGEgcHJvZ3JhbSBpbiB3aGljaCBhIG5vZGUgaGFwcGVucyB0byByZW1h
aW4KLSAgICAgICAgICAgICAgICAgICAgLy8gbGl2ZSBpbnRvIHNvbWUgYmxvY2sgQiwgYW5kIHNl
cGFyYXRlbHkgKGR1ZSB0byBjb3B5Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByb3BhZ2F0aW9u
KSBqdXN0IG9uZSBvZiB0aGUgcHJlZGVjZXNzb3JzIG9mIEIgaXNzdWVkIGEKLSAgICAgICAgICAg
ICAgICAgICAgLy8gTW92SGludCBwdXR0aW5nIHRoYXQgbm9kZSBpbnRvIHNvbWUgbG9jYWwuIFRo
ZW4gaW4gQiB3ZSBtaWdodAotICAgICAgICAgICAgICAgICAgICAvLyB0aGluayB0aGF0IHRoYXQg
bm9kZSBpcyBhIHZhbGlkIHZhbHVlIGZvciB0aGF0IGxvY2FsLiBPZgotICAgICAgICAgICAgICAg
ICAgICAvLyBjb3Vyc2UgaWYgdGhhdCBsb2NhbCB3YXMgYWN0dWFsbHkgbGl2ZSBpbiBCLCBCIHdv
dWxkIGhhdmUgYQotICAgICAgICAgICAgICAgICAgICAvLyBQaGkgZm9yIGl0LiBTbyBlc3NlbnRp
YWxseSB3ZSdsbCBoYXZlIE9TUiBleGl0IGRyb3BwaW5nIHRoaXMKLSAgICAgICAgICAgICAgICAg
ICAgLy8gbm9kZSdzIHZhbHVlIGludG8gdGhlIGxvY2FsIHdoZW4gd2Ugb3RoZXJ3aXNlIChpbiB0
aGUgREZHKQotICAgICAgICAgICAgICAgICAgICAvLyB3b3VsZCBoYXZlIGRyb3BwZWQgdW5kZWZp
bmVkIGludG8gdGhlIGxvY2FsLiBUaGlzIHNlZW1zCi0gICAgICAgICAgICAgICAgICAgIC8vIGhh
cm1sZXNzLgotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgc3VjY2Vz
c29yQXZhaWxhYmlsaXR5W2tdID0gbXlOb2RlOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9j
a0luZGV4KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGF2
YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3Vt
ZW50OiB7CisgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSh2YXJpYWJsZSkud2l0aEZsdXNoKHZhcmlhYmxl
LT5mbHVzaGVkQXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hl
Y2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IEF2YWlsYWJpbGl0eSh2
YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNh
c2UgWm9tYmllSGludDogeworICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxh
YmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYmxvY2st
PnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gYXZhaWxhYmlsaXR5OworICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNz
b3JJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3Ig
PSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gYXZhaWxhYmlsaXR5LnNpemUoKTsgaS0tOykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXSA9IGF2
YWlsYWJpbGl0eVtpXS5tZXJnZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNz
b3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICB9IHdo
aWxlIChjaGFuZ2VkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsOSArMzYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCiBjbGFzcyBHcmFwaDsKIAotLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5hdmFpbGFi
aWx0aXlBdEhlYWQvVGFpbC4gVGhpcyByZWxpZXMgb24gbGl2ZW5lc3MKLS8vIGFuYWx5c2lzIHBo
YXNlIGhhdmluZyBiZWVuIHJ1biBhbmQgdGhlIGdyYXBoIG5vdCBoYXZpbmcgYmVlbiB0cmFuc2Zv
cm1lZAotLy8gYWZ0ZXIgdGhhdC4KKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+YXZhaWxh
YmlsdGl5QXRIZWFkL1RhaWwuIFRoaXMgaXMgYSBmb3J3YXJkIGZsb3cgdHlwZSBpbmZlcmVuY2UK
Ky8vIG92ZXIgTW92SGludHMuIEF0IHRoZSB0aW1lIHdoZW4gTW92SGludHMgYXJlIGludHJvZHVj
ZWQsIHdlIHdlcmUgY2VydGFpbiB0aGF0IGF0IGFueQorLy8gcG9pbnQgaW4gdGhlIHByb2dyYW0g
d2hlcmUgYSBieXRlY29kZSB2YXJpYWJsZSBoYWQgYmVlbiBsaXZlLCBhbGwgb2YgdGhlIE1vdkhp
bnRzIHRoYXQKKy8vIGZsb3dlZCBpbnRvIHRoYXQgcG9pbnQgZm9yIHRoYXQgdmFyaWFibGUgaGFk
IHRoZSBzYW1lIEZsdXNoRm9ybWF0LiBUaGlzIGFuYWx5c2lzIHdpbGwgdGVsbAorLy8geW91IHdo
YXQgdGhhdCBmb3JtYXQgd291bGQgaGF2ZSBiZWVuLgogCiBib29sIHBlcmZvcm1PU1JBdmFpbGFi
aWxpdHlBbmFseXNpcyhHcmFwaCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJE
RkdMSUNNUGhhc2UuaCIKICNpbmNsdWRlICJERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKICNp
bmNsdWRlICJERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR01v
dkhpbnRDb3VudGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgiCiAj
aW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiCkBAIC0yNzIsNiArMjczLDcg
QEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJm
b3JtU3RhY2tMYXlvdXQoZGZnKTsKICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZn
KTsKICAgICAgICAgcGVyZm9ybUZsdXNoTGl2ZW5lc3NBbmFseXNpcyhkZmcpOworICAgICAgICBw
ZXJmb3JtTW92SGludENvdW50aW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxp
dHlBbmFseXNpcyhkZmcpOwogICAgICAgICBwZXJmb3JtV2F0Y2hwb2ludENvbGxlY3Rpb24oZGZn
KTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291
cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNv
dXJjZS5oCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbHVlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICAgICBjYXNlIERlYWRGbHVz
aDoKKyAgICAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgogICAgICAgICAgICAgcmV0dXJuIFZh
bHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CiAg
ICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ssIHdoZXJlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0Rh
dGEuaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lm
bmRlZiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFfaAogI2RlZmluZSBERkdWYXJpYWJsZUFjY2Vzc0Rh
dGFfaAogCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHRG91YmxlRm9ybWF0
U3RhdGUuaCIKICNpbmNsdWRlICJERkdGbHVzaEZvcm1hdC5oIgogI2luY2x1ZGUgIkRGR0ZsdXNo
ZWRBdC5oIgpAQCAtMzksNiArNDAsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKK3N0cnVjdCBOb2RlOworCiBlbnVtIERvdWJsZUJhbGxvdCB7IFZvdGVWYWx1ZSwgVm90
ZURvdWJsZSB9OwogCiBjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGEgOiBwdWJsaWMgVW5pb25GaW5k
PFZhcmlhYmxlQWNjZXNzRGF0YT4gewpAQCAtNTYsNiArNTksOCBAQCBwdWJsaWM6CiAgICAgICAg
ICwgbV9pc1Byb2ZpdGFibGVUb1VuYm94KGZhbHNlKQogICAgICAgICAsIG1faXNMb2FkZWRGcm9t
KGZhbHNlKQogICAgICAgICAsIG1fZG91YmxlRm9ybWF0U3RhdGUoRW1wdHlEb3VibGVGb3JtYXRT
dGF0ZSkKKyAgICAgICAgLCBtX21vdkhpbnRDb3VudCgwKQorICAgICAgICAsIG1fc2luZ2xlTW92
SGludCgwKQogICAgIHsKICAgICAgICAgY2xlYXJWb3RlcygpOwogICAgIH0KQEAgLTcyLDYgKzc3
LDggQEAgcHVibGljOgogICAgICAgICAsIG1fY2hlY2tBcnJheUhvaXN0aW5nRmFpbGVkKGZhbHNl
KQogICAgICAgICAsIG1faXNQcm9maXRhYmxlVG9VbmJveChmYWxzZSkKICAgICAgICAgLCBtX2Rv
dWJsZUZvcm1hdFN0YXRlKEVtcHR5RG91YmxlRm9ybWF0U3RhdGUpCisgICAgICAgICwgbV9tb3ZI
aW50Q291bnQoMCkKKyAgICAgICAgLCBtX3NpbmdsZU1vdkhpbnQoMCkKICAgICB7CiAgICAgICAg
IGNsZWFyVm90ZXMoKTsKICAgICB9CkBAIC0zNTIsNiArMzU5LDE3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIEZsdXNoZWRBdChmbHVzaEZvcm1hdCgpLCBtYWNoaW5lTG9jYWwoKSk7CiAgICAg
fQogICAgIAorICAgIGJvb2wgaXNTaW5nbHlBc3NpZ25lZCgpIGNvbnN0IHsgcmV0dXJuIG1fbW92
SGludENvdW50ID09IDE7IH0KKyAgICB2b2lkIGNvdW50TW92SGludChOb2RlKiBub2RlKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX21vdkhpbnRDb3VudCsrKQorICAgICAgICAgICAgbV9zaW5nbGVN
b3ZIaW50ID0gbm9kZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zaW5nbGVNb3ZIaW50
ID0gMDsKKyAgICB9CisgICAgdW5zaWduZWQgbW92SGludENvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9tb3ZIaW50Q291bnQ7IH0KKyAgICBOb2RlKiBzaW5nbGVNb3ZIaW50KCkgY29uc3QgeyByZXR1
cm4gbV9zaW5nbGVNb3ZIaW50OyB9CisgICAgCiBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgc2xp
Z2h0bHkgc3BhY2UtaW5lZmZpY2llbnQsIHNpbmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZpZWQgd2l0
aAogICAgIC8vIHdpbGwgaGF2ZSB0aGUgc2FtZSBvcGVyYW5kIGFuZCBzaG91bGQgaGF2ZSB0aGUg
c2FtZSBwcmVkaWN0aW9uLiBCdXQKQEAgLTM3NCw2ICszOTIsOSBAQCBwcml2YXRlOgogCiAgICAg
ZmxvYXQgbV92b3Rlc1syXTsgLy8gVXNlZCBwcmltYXJpbHkgZm9yIGRvdWJsZSB2b3RpbmcgYnV0
IG1heSBiZSByZXVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLgogICAgIERvdWJsZUZvcm1hdFN0YXRl
IG1fZG91YmxlRm9ybWF0U3RhdGU7CisgICAgCisgICAgdW5zaWduZWQgbV9tb3ZIaW50Q291bnQ7
CisgICAgTm9kZSogbV9zaW5nbGVNb3ZIaW50OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0Rh
dGFEdW1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw2ICs2OSw5IEBAIHZvaWQgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcDo6ZHVtcChQ
cmludFMKICAgICAgICAgb3V0LnByaW50KCJ+Iik7CiAKICAgICBvdXQucHJpbnQoQWJicmV2aWF0
ZWRTcGVjdWxhdGlvbkR1bXAobV9kYXRhLT5wcmVkaWN0aW9uKCkpLCAiLyIsIG1fZGF0YS0+Zmx1
c2hGb3JtYXQoKSk7CisgICAgCisgICAgaWYgKE5vZGUqIG5vZGUgPSBtX2RhdGEtPnNpbmdsZU1v
dkhpbnQoKSkKKyAgICAgICAgb3V0LnByaW50KCI9PiIsIG5vZGUpOwogfQogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYg
KzcwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Z0bFN0YXRlKHN0YXRlKQogICAgICAgICAs
IG1faGVhcHMoc3RhdGUuY29udGV4dCkKICAgICAgICAgLCBtX291dChzdGF0ZS5jb250ZXh0KQor
ICAgICAgICAsIG1fYm9vbGVhbkxvY2FscyhPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2Nr
KDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9pbnQzMkxvY2FscyhPcGVyYW5kc0xp
a2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9p
bnQ2NExvY2FscyhPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNB
dEhlYWQpCisgICAgICAgICwgbV9kb3VibGVMb2NhbHMoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFw
aC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fdmFsdWVTb3VyY2VzKE9w
ZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKICAgICAg
ICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgICAgICAsIG1faW50ZXJwcmV0ZXIoc3RhdGUu
Z3JhcGgsIG1fc3RhdGUpCkBAIC0xMDEsNiArMTA1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9w
cm9sb2d1ZSA9IGFwcGVuZEJhc2ljQmxvY2sobV9mdGxTdGF0ZS5jb250ZXh0LCBtX2Z0bFN0YXRl
LmZ1bmN0aW9uKTsKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1ZSk7CiAgICAgICAg
IGNyZWF0ZVBoaVZhcmlhYmxlcygpOworICAgICAgICBjcmVhdGVTaGFkb3dMb2NhbHMobV9ib29s
ZWFuTG9jYWxzLCBtX291dC5ib29sZWFuKTsKKyAgICAgICAgY3JlYXRlU2hhZG93TG9jYWxzKG1f
aW50MzJMb2NhbHMsIG1fb3V0LmludDMyKTsKKyAgICAgICAgY3JlYXRlU2hhZG93TG9jYWxzKG1f
aW50NjRMb2NhbHMsIG1fb3V0LmludDY0KTsKKyAgICAgICAgY3JlYXRlU2hhZG93TG9jYWxzKG1f
ZG91YmxlTG9jYWxzLCBtX291dC5kb3VibGVUeXBlKTsKICAgICAgICAgCiAgICAgICAgIG1fY2Fs
bEZyYW1lID0gbV9vdXQucGFyYW0oMCk7CiAgICAgICAgIG1fdGFnVHlwZU51bWJlciA9IG1fb3V0
LmNvbnN0SW50NjQoVGFnVHlwZU51bWJlcik7CkBAIC0xNjgsNiArMTc2LDEyIEBAIHByaXZhdGU6
CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdm9pZCBjcmVhdGVTaGFkb3dMb2NhbHMoT3Bl
cmFuZHM8TFZhbHVlPiYgb3BlcmFuZHMsIExUeXBlIHR5cGUpCisgICAgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBvcGVyYW5kcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBvcGVyYW5k
c1tpXSA9IG1fb3V0LmFsbG9jYSh0eXBlKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb21waWxl
QmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICBpZiAoIWJsb2NrKQpAQCAt
MjA0LDggKzIxOCw2IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpbml0aWFsaXplT1NS
RXhpdFN0YXRlRm9yQmxvY2soKTsKICAgICAgICAgCi0gICAgICAgIG1fbGl2ZSA9IGJsb2NrLT5z
c2EtPmxpdmVBdEhlYWQ7Ci0gICAgICAgIAogICAgICAgICBtX3N0YXRlLnJlc2V0KCk7CiAgICAg
ICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1faGlnaEJsb2NrKTsKICAgICAgICAgCkBAIC00
NzUsMTIgKzQ4Nyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAg
ICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG1fbm9kZSwgdXNlKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChtX25vZGUtPmFkanVzdGVkUmVmQ291bnQoKSkKLSAgICAgICAgICAg
IG1fbGl2ZS5hZGQobV9ub2RlKTsKLSAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFeGVjdXRl
RWZmZWN0cykKICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobm9kZUlu
ZGV4KTsKICAgICAgICAgCkBAIC01NjcsMjEgKzU3MywzMSBAQCBwcml2YXRlOgogICAgICAgICBM
VmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsKIAogICAg
ICAgICBzd2l0Y2ggKHVzZUtpbmRGb3IodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSB7Ci0gICAg
ICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgICAg
IHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbV9ub2Rl
LCBpc05vdEludDMyKGpzVmFsdWUpKTsKLSAgICAgICAgICAgIHNldEludDMyKHVuYm94SW50MzIo
anNWYWx1ZSkpOworICAgICAgICAgICAgTFZhbHVlIGludFZhbHVlID0gdW5ib3hJbnQzMihqc1Zh
bHVlKTsKKyAgICAgICAgICAgIHNldEludDMyKGludFZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0
LnNldChpbnRWYWx1ZSwgbV9pbnQzMkxvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQ2VsbFVzZTogewogICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFk
VHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBtX25vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7
CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKGpzVmFsdWUpOworICAgICAgICAgICAgbV9vdXQuc2V0
KGpzVmFsdWUsIG1faW50NjRMb2NhbHMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEJvb2xlYW5Vc2U6IHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbV9ub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1
ZSkpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbih1bmJveEJvb2xlYW4oanNWYWx1ZSkpOworICAg
ICAgICAgICAgTFZhbHVlIGJvb2xlYW5WYWx1ZSA9IHVuYm94Qm9vbGVhbihqc1ZhbHVlKTsKKyAg
ICAgICAgICAgIHNldEJvb2xlYW4oYm9vbGVhblZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0LnNl
dChib29sZWFuVmFsdWUsIG1fYm9vbGVhbkxvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAg
ICB9CisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewogICAgICAgICAgICAgc2V0SlNWYWx1ZShq
c1ZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0LnNldChqc1ZhbHVlLCBtX2ludDY0TG9jYWxzLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC02MTIsNDMgKzYyOCwzOCBAQCBwcml2YXRlOgog
ICAgIAogICAgIHZvaWQgY29tcGlsZVNldExvY2FsKCkKICAgICB7Ci0gICAgICAgIG9ic2VydmVN
b3ZIaW50KG1fbm9kZSk7CisgICAgICAgIG9ic2VydmVNb3ZIaW50KCk7CiAgICAgICAgIAogICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKICAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkgewogICAg
ICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2
YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAg
IG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2Uo
VmFsdWVJbkpTU3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgRmx1c2hlZERvdWJsZTogewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93
RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUo
dmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAg
ICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNl
KERvdWJsZUluSlNTdGFjaywgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBGbHVzaGVkSW50MzI6IHsKICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1
ZSwgcGF5bG9hZEZvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1f
dmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50
MzJJbkpTU3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgRmx1c2hlZEludDUyOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQ1
MihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFk
ZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVl
U291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDUySW5K
U1N0YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEZsdXNoZWRDZWxsOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zv
cih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2Vz
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ss
IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2hl
ZEJvb2xlYW46IHsKQEAgLTY1NiwyMCArNjY3LDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBt
X291dC5zdG9yZTY0KAogICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEo
KSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKICAgICAgICAgICAgICAgICBhZGRyZXNzRm9y
KHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywg
dmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBEZWFkRmx1
c2g6CisgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGVtaXRNb3ZIaW50KCk7CisgICAgICAg
IAorICAgICAgICAvLyBEbyB0aGlzIGxhc3Qgc28gdGhhdCB3ZSBkb24ndCBsZWF2ZSBtX3ZhbHVl
U291cmNlcyBjbGFpbWluZyB0aGF0IHdlIGhhdmUgdG8KKyAgICAgICAgLy8gbG9hZCB0aGlzIHZh
cmlhYmxlJ3MgdmFsdWUgZnJvbSB0aGUgc2hhZG93IGxvY2Fscy4gVGhpcyBpcyBhbiBvcHRpbWl6
YXRpb24uCisgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID0KKyAgICAgICAgICAgIFZhbHVlU291cmNlOjpmbHVzaGVkQXQodmFyaWFibGUtPmZsdXNoZWRB
dCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlTW92SGludCgpCiAgICAgewotICAg
ICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOworICAgICAgICBlbWl0TW92SGludCgpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVab21iaWVIaW50KCkKQEAgLTY4MCw4ICs2OTYsOSBA
QCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZU1vdkhpbnRBbmRDaGVjaygpCiAgICAg
ewotICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOworICAgICAgICBvYnNlcnZlTW92SGlu
dCgpOwogICAgICAgICBzcGVjdWxhdGUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGVtaXRN
b3ZIaW50KCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVBoYW50b20oKQpAQCAtMzgy
MiwyNSArMzgzOSw2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzTGl2ZShOb2RlKiBub2Rl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGl2ZS5jb250YWlucyhub2RlKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCB1c2UoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGVkZ2Ut
Pmhhc1Jlc3VsdCgpKTsKLSAgICAgICAgaWYgKCFlZGdlLmRvZXNLaWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG1fbGl2ZS5yZW1vdmUoZWRnZS5ub2RlKCkpOwotICAgIH0KLSAg
ICAKLSAgICAvLyBXcmFwcGVyIHVzZWQgb25seSBmb3IgREZHX05PREVfRE9fVE9fQ0hJTERSRU4K
LSAgICB2b2lkIHVzZShOb2RlKiwgRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgdXNlKGVkZ2Up
OwotICAgIH0KLSAgICAKICAgICBMQmFzaWNCbG9jayBsb3dCbG9jayhCYXNpY0Jsb2NrKiBibG9j
aykKICAgICB7CiAgICAgICAgIHJldHVybiBtX2Jsb2Nrcy5nZXQoYmxvY2spOwpAQCAtMzg0OSwx
NyArMzg0Nyw0OCBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZv
ckJsb2NrKCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVTb3VyY2Vz
LnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gbV9oaWdoQmxv
Y2stPnNzYS0+Zmx1c2hBdEhlYWRbaV07CisgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxh
YmlsaXR5ID0gbV9oaWdoQmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ldOworICAgICAg
ICAgICAgRmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNoZWRBdCgpOwogICAgICAg
ICAgICAgc3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgewotICAgICAgICAgICAgY2FzZSBEZWFkRmx1
c2g6IHsKLSAgICAgICAgICAgICAgICAvLyBNdXN0IGNvbnNpZGVyIGF2YWlsYWJsZSBub2RlcyBp
bnN0ZWFkLgotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hCbG9jay0+c3NhLT5h
dmFpbGFiaWxpdHlBdEhlYWRbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlKSB7CisgICAg
ICAgICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVz
aDogeworICAgICAgICAgICAgICAgIC8vIE11c3QgY29uc2lkZXIgYXZhaWxhYmxlIHZhcmlhYmxl
cyBpbnN0ZWFkLgorICAgICAgICAgICAgICAgIGlmICghYXZhaWxhYmlsaXR5Lmhhc1ZhcmlhYmxl
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJj
ZShTb3VyY2VJc0RlYWQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNb
aV0gPSBWYWx1ZVNvdXJjZShub2RlKTsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gYXZhaWxhYmlsaXR5LnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAg
aWYgKE5vZGUqIG5vZGUgPSB2YXJpYWJsZS0+c2luZ2xlTW92SGludCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgT1NSIGV4aXQgc2hvdWxkIGp1c3QgdHJ5
IHRvIGxhemlseSBmaWd1cmUgb3V0IGhvdworICAgICAgICAgICAgICAgICAgICAvLyB0byByZWFk
IGFuZCBkZWNvZGUgd2hhdGV2ZXIgbm9kZSB0aGlzIHZhcmlhYmxlIG9yaWdpbmF0ZWQgZnJvbS4K
KyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShub2Rl
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFyaWFi
bGUgaXMgbXVsdGlwbHktYXNzaWduZWQgYW5kIHdlIHdpbGwgZW5zdXJlIHRoYXQKKyAgICAgICAg
ICAgICAgICAvLyBpbiBlYWNoIHBsYWNlIHdoZXJlIHdlIGFzc2lnbiBpdCwgd2Ugd2lsbCB1c2Ug
dGhlIHNhbWUgcmVwcmVzZW50YXRpb24uCisgICAgICAgICAgICAgICAgc3dpdGNoICh2YXJpYWJs
ZS0+Zmx1c2hGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6
CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWwpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6Cisg
ICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoRG91Ymxl
SW5Mb2NhbCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgRmx1c2hlZEludDMyOgorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9
IFZhbHVlU291cmNlKEludDMySW5Mb2NhbCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgorICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDUySW5Mb2NhbCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Cisg
ICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoQm9vbGVh
bkluTG9jYWwpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0zOTQy
LDkgKzM5NzEsMzcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93
VmFsdWUudmFsdWUoKSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZXhpdC5tX3ZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50IG9wZXJhbmQg
PSBleGl0Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIGJvb2wgaXNM
aXZlID0gbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKAorICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKSwgZXhpdC5tX2NvZGVPcmlnaW4pOworICAgICAgICAgICAgaWYgKCFp
c0xpdmUpIHsKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpk
ZWFkKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKICAgICAgICAgICAgIFZhbHVlU291cmNlIHNvdXJjZSA9IG1fdmFsdWVTb3VyY2VzW2ld
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHNvdXJjZS5raW5kKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgVmFsdWVJbkxvY2FsOgorICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1
bWVudEZvckxvY2FsKAorICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZh
bHVlRm9ybWF0SlNWYWx1ZSwgbV9pbnQ2NExvY2Fsc1tpXSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZUluTG9jYWw6CisgICAgICAgICAgICAgICAgYWRk
RXhpdEFyZ3VtZW50Rm9yTG9jYWwoCisgICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50
cywgaSwgVmFsdWVGb3JtYXREb3VibGUsIG1fZG91YmxlTG9jYWxzW2ldKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW50MzJJbkxvY2FsOgorICAgICAgICAgICAg
ICAgIGFkZEV4aXRBcmd1bWVudEZvckxvY2FsKAorICAgICAgICAgICAgICAgICAgICBleGl0LCBh
cmd1bWVudHMsIGksIFZhbHVlRm9ybWF0SW50MzIsIG1faW50MzJMb2NhbHNbaV0pOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbnQ1MkluTG9jYWw6CisgICAgICAg
ICAgICAgICAgYWRkRXhpdEFyZ3VtZW50Rm9yTG9jYWwoCisgICAgICAgICAgICAgICAgICAgIGV4
aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXRJbnQ1MiwgbV9pbnQ2NExvY2Fsc1tpXSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJvb2xlYW5JbkxvY2FsOgor
ICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudEZvckxvY2FsKAorICAgICAgICAgICAgICAg
ICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0Qm9vbGVhbiwgbV9ib29sZWFuTG9j
YWxzW2ldKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVmFsdWVJ
bkpTU3RhY2s6CiAgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6
aW5KU1N0YWNrKHNvdXJjZS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0zOTU4LDcgKzQwMTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGV4aXQu
bV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKHNvdXJjZS52aXJ0dWFs
UmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNv
dXJjZUlzRGVhZDoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVl
OjpkZWFkKCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgSGF2ZU5vZGU6CiAgICAg
ICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50Rm9yTm9kZShleGl0LCBhcmd1bWVudHMsIGksIHNv
dXJjZS5ub2RlKCkpOwpAQCAtMzk5MSw1MyArNDA0OCw2IEBAIHByaXZhdGU6CiAgICAgICAgIGlm
ICh0cnlUb1NldENvbnN0YW50RXhpdEFyZ3VtZW50KGV4aXQsIGluZGV4LCBub2RlKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGlmICghaXNMaXZlKG5vZGUpKSB7Ci0g
ICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhub2RlLT5vcCgpKSkgewotICAgICAgICAg
ICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHRyeVRvU2V0Q29uc3RhbnRFeGl0QXJndW1lbnQoZXhpdCwgaW5kZXgsIG5vZGUpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKGlzTGl2ZShub2RlKSkK
LSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSog
YmVzdE5vZGUgPSAwOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJlc3RTY29yZSA9IDA7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9y
IGl0ZXIgPSBtX2xpdmUuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6
aXRlcmF0b3IgZW5kID0gbV9saXZlLmVuZCgpOwotICAgICAgICAgICAgICAgIGZvciAoOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9
ICppdGVyOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5mbGFncygpICYgTm9k
ZUhhc1ZhckFyZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUtPmNoaWxkMSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmNoaWxk
MSgpICE9IG5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbXlTY29yZSA9IGZvcndhcmRSZXdpcmluZ1NlbGVjdGlvblNj
b3JlKGNhbmRpZGF0ZS0+b3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChteVNjb3JlIDw9
IGJlc3RTY29yZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICBiZXN0Tm9kZSA9IGNhbmRpZGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgYmVz
dFNjb3JlID0gbXlTY29yZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKGJlc3ROb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VS
VChpc0xpdmUoYmVzdE5vZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGJlc3ROb2Rl
OwotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0g
ICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpbmRleF0gPSBFeGl0VmFsdWU6OmRlYWQoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIEFTU0VSVChpc0xpdmUobm9kZSkpOwotCiAgICAgICAgIExvd2VyZWROb2Rl
VmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChub2RlKTsKICAgICAgICAgaWYgKGlzVmFs
aWQodmFsdWUpKSB7CiAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRz
LCBpbmRleCwgVmFsdWVGb3JtYXRJbnQzMiwgdmFsdWUudmFsdWUoKSk7CkBAIC00MDk5LDYgKzQx
MDksMTMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICB2b2lkIGFkZEV4
aXRBcmd1bWVudEZvckxvY2FsKAorICAgICAgICBPU1JFeGl0JiBleGl0LCBFeGl0QXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIHVuc2lnbmVkIGluZGV4LCBWYWx1ZUZvcm1hdCBmb3JtYXQsCisgICAg
ICAgIExWYWx1ZSBsb2NhbCkKKyAgICB7CisgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBh
cmd1bWVudHMsIGluZGV4LCBmb3JtYXQsIG1fb3V0LmdldChsb2NhbCkpOworICAgIH0KKyAgICAK
ICAgICB2b2lkIGFkZEV4aXRBcmd1bWVudCgKICAgICAgICAgT1NSRXhpdCYgZXhpdCwgRXhpdEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCB1bnNpZ25lZCBpbmRleCwgVmFsdWVGb3JtYXQgZm9ybWF0
LAogICAgICAgICBMVmFsdWUgdmFsdWUpCkBAIC00MTA3LDE0ICs0MTI0LDc3IEBAIHByaXZhdGU6
CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IG9ic2VydmVNb3ZIaW50KE5vZGUqIG5vZGUpCisgICAgLy8gTm90aWZpZXMgb3VyIGxvY2FsIHZh
bHVlIHNvdXJjZXMgdGhhdCB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYXZhaWxhYmxlIHZpYSB0aGUg
Z2l2ZW4KKyAgICAvLyBub2RlLgorICAgIHZvaWQgb2JzZXJ2ZU1vdkhpbnQoKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG5vZGUtPmNvbnRhaW5zTW92SGludCgpKTsKLSAgICAgICAgQVNTRVJUKG5v
ZGUtPm9wKCkgIT0gWm9tYmllSGludCk7CisgICAgICAgIEFTU0VSVChtX25vZGUtPmNvbnRhaW5z
TW92SGludCgpKTsKKyAgICAgICAgQVNTRVJUKG1fbm9kZS0+b3AoKSAhPSBab21iaWVIaW50KTsK
ICAgICAgICAgCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+bG9jYWwo
KTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBtX25vZGUtPmxvY2FsKCk7CiAg
ICAgICAgIAotICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKG9wZXJhbmQpID0gVmFsdWVT
b3VyY2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgbV92YWx1ZVNvdXJjZXMub3Bl
cmFuZChvcGVyYW5kKSA9IFZhbHVlU291cmNlKG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAg
ICB9CisgICAgCisgICAgLy8gRm9yIHNpbmdseS1hc3NpZ25lZCB2YXJpYWJsZXMsIHRoaXMganVz
dCBvYnNlcnZlcyB0aGF0IHRoZSB2YXJpYWJsZSBpcyBhdmFpbGFibGUgdmlhCisgICAgLy8gdGhl
IGFwcHJvcHJpYXRlIG5vZGUuIEZvciBtdWx0aXBseS1hc3NpZ25lZCB2YXJpYWJsZXMsIHRoaXMg
c3RvcmVzIHRoZSB2YXJpYWJsZXMgdmFsdWUKKyAgICAvLyBpbnRvIG91ciBieXRlY29kZSBzaGFk
b3cgbG9jYWxzIGFuZCBub3RlcyB0aGlzIGluIG1fdmFsdWVTb3VyY2VzLgorICAgIHZvaWQgZW1p
dE1vdkhpbnQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbm9kZS0+Y29udGFpbnNNb3ZIaW50
KCkpOworICAgICAgICBBU1NFUlQobV9ub2RlLT5vcCgpICE9IFpvbWJpZUhpbnQpOworICAgICAg
ICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhID0gbV9ub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgaWYgKGRhdGEtPmlzU2luZ2x5QXNzaWduZWQoKSkgeworICAg
ICAgICAgICAgb2JzZXJ2ZU1vdkhpbnQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgc3dpdGNoIChkYXRhLT5mbHVzaEZvcm1hdCgpKSB7CisgICAg
ICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAgICAgIG1fb3V0LnNldCgKKyAgICAgICAg
ICAgICAgICBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uKSwKKyAgICAgICAgICAgICAgICBtX2RvdWJsZUxvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2Fs
KCkpKTsKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZShEb3VibGVJbkxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICAgICAgbV9vdXQuc2V0
KAorICAgICAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbiksCisgICAgICAgICAgICAgICAgbV9pbnQzMkxvY2Fscy5vcGVyYW5kKGRh
dGEtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQoZGF0YS0+
bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQzMkluTG9jYWwpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6CisgICAgICAgICAgICBt
X291dC5zZXQoCisgICAgICAgICAgICAgICAgbG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSwgTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICBtX2ludDY0TG9jYWxzLm9w
ZXJhbmQoZGF0YS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFu
ZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDUySW5Mb2NhbCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAg
ICAgICAgbV9vdXQuc2V0KAorICAgICAgICAgICAgICAgIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICBtX2ludDY0TG9j
YWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMu
b3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFu
OgorICAgICAgICAgICAgbV9vdXQuc2V0KAorICAgICAgICAgICAgICAgIGxvd0Jvb2xlYW4obV9u
b2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAg
ICBtX2Jvb2xlYW5Mb2NhbHMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSk7CisgICAgICAgICAgICBt
X3ZhbHVlU291cmNlcy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoQm9vbGVh
bkluTG9jYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgICAgIG1fb3V0LnNldChsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpLCBtX2ludDY0TG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkpOworICAg
ICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVlU291
cmNlKFZhbHVlSW5Mb2NhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0
SW50MzIoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQpAQCAtNDI3Miw3ICs0MzUyLDEyIEBAIHBy
aXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9ib29sZWFuVmFs
dWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fc3RvcmFnZVZhbHVl
czsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2RvdWJsZVZhbHVlczsK
LSAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7CisgICAgCisgICAgLy8gQnl0ZWNvZGUgc2hhZG93
IGxvY2Fscy4KKyAgICBPcGVyYW5kczxMVmFsdWU+IG1fYm9vbGVhbkxvY2FsczsKKyAgICBPcGVy
YW5kczxMVmFsdWU+IG1faW50MzJMb2NhbHM7CisgICAgT3BlcmFuZHM8TFZhbHVlPiBtX2ludDY0
TG9jYWxzOworICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9kb3VibGVMb2NhbHM7CiAgICAgCiAgICAg
SGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3BoaXM7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksNyBA
QCBwdWJsaWM6CiAgICAgTFZhbHVlIGludFRvUHRyKExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkg
eyByZXR1cm4gYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIExW
YWx1ZSBiaXRDYXN0KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRCaXRD
YXN0KG1fYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9CiAgICAgCisgICAgTFZhbHVlIGFsbG9jYShM
VHlwZSB0eXBlKSB7IHJldHVybiBidWlsZEFsbG9jYShtX2J1aWxkZXIsIHR5cGUpOyB9CiAgICAg
TFZhbHVlIGdldChMVmFsdWUgcmVmZXJlbmNlKSB7IHJldHVybiBidWlsZExvYWQobV9idWlsZGVy
LCByZWZlcmVuY2UpOyB9CiAgICAgTFZhbHVlIHNldChMVmFsdWUgdmFsdWUsIExWYWx1ZSByZWZl
cmVuY2UpIHsgcmV0dXJuIGJ1aWxkU3RvcmUobV9idWlsZGVyLCB2YWx1ZSwgcmVmZXJlbmNlKTsg
fQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJj
ZS5jcHAJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
VmFsdWVTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwyMSBAQCB2b2lkIFZh
bHVlU291cmNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgY2FzZSBTb3VyY2VOb3RTZXQ6
CiAgICAgICAgIG91dC5wcmludCgiU291cmNlTm90U2V0Iik7CiAgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFZhbHVlSW5Mb2NhbDoKKyAgICAgICAgb3V0LnByaW50KCJWYWx1ZUluTG9jYWwiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50MzJJbkxvY2FsOgorICAgICAgICBvdXQucHJp
bnQoIkludDMySW5Mb2NhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ1MkluTG9j
YWw6CisgICAgICAgIG91dC5wcmludCgiSW50NTJJbkxvY2FsIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEJvb2xlYW5JbkxvY2FsOgorICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW5Jbkxv
Y2FsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZUluTG9jYWw6CisgICAgICAg
IG91dC5wcmludCgiRG91YmxlSW5Mb2NhbCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBW
YWx1ZUluSlNTdGFjazoKICAgICAgICAgb3V0LnByaW50KCJWYWx1ZUluSlNTdGFjazoiLCB2aXJ0
dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRlICJERkdGbHVzaGVk
QXQuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtMzgsNiArMzksMTEgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBlbnVtIFZhbHVlU291cmNlS2luZCB7CiAgICAg
U291cmNlTm90U2V0LAorICAgIFZhbHVlSW5Mb2NhbCwKKyAgICBJbnQzMkluTG9jYWwsCisgICAg
SW50NTJJbkxvY2FsLAorICAgIEJvb2xlYW5JbkxvY2FsLAorICAgIERvdWJsZUluTG9jYWwsCiAg
ICAgVmFsdWVJbkpTU3RhY2ssCiAgICAgSW50MzJJbkpTU3RhY2ssCiAgICAgSW50NTJJbkpTU3Rh
Y2ssCkBAIC01Niw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShW
YWx1ZVNvdXJjZUtpbmQga2luZCkKICAgICAgICAgOiBtX2tpbmQoa2luZCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX2tpbmQgPT0gU291cmNlSXNEZWFkKTsKKyAgICAgICAgQVNTRVJUKG1fa2lu
ZCA9PSBTb3VyY2VJc0RlYWQgfHwgbV9raW5kID09IFZhbHVlSW5Mb2NhbCB8fCBtX2tpbmQgPT0g
SW50MzJJbkxvY2FsIHx8IG1fa2luZCA9PSBJbnQ1MkluTG9jYWwgfHwgbV9raW5kID09IEJvb2xl
YW5JbkxvY2FsIHx8IG1fa2luZCA9PSBEb3VibGVJbkxvY2FsKTsKICAgICB9CiAgICAgCiAgICAg
ZXhwbGljaXQgVmFsdWVTb3VyY2UoREZHOjpOb2RlKiBub2RlKQpAQCAtNzIsNiArNzgsMjggQEAg
cHVibGljOgogICAgICAgICBtX3ZhbHVlLnZpcnR1YWxSZWdpc3RlciA9IHJlZy5vZmZzZXQoKTsK
ICAgICB9CiAgICAgCisgICAgc3RhdGljIFZhbHVlU291cmNlIGZsdXNoZWRBdChjb25zdCBERkc6
OkZsdXNoZWRBdCYgZmx1c2gpCisgICAgeworICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgp
KSB7CisgICAgICAgIGNhc2UgREZHOjpGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgY2FzZSBERkc6
OkZsdXNoZWRDZWxsOgorICAgICAgICBjYXNlIERGRzo6Rmx1c2hlZEJvb2xlYW46CisgICAgICAg
ICAgICByZXR1cm4gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ssIGZsdXNoLnZpcnR1YWxSZWdp
c3RlcigpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERGRzo6Rmx1c2hlZERvdWJsZToK
KyAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2ssIGZsdXNoLnZp
cnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERGRzo6Rmx1c2hl
ZEludDMyOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrLCBm
bHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBERkc6
OkZsdXNoZWRJbnQ1MjoKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShJbnQ1MkluSlNT
dGFjaywgZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKICAgICBWYWx1ZVNvdXJjZUtpbmQga2luZCgpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gbV9raW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRHVtcENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRHVtcENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw3ICsyOCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotRHVtcENvbnRleHQ6OkR1bXBD
b250ZXh0KCkgeyB9CitEdW1wQ29udGV4dDo6RHVtcENvbnRleHQoKQorICAgIDogZ3JhcGgoMCkK
K3sKK30KKwogRHVtcENvbnRleHQ6On5EdW1wQ29udGV4dCgpIHsgfQogCiBib29sIER1bXBDb250
ZXh0Ojppc0VtcHR5KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0R1bXBDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRHVtcENvbnRleHQuaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRHVtcENvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIERGRyB7IGNsYXNzIEdyYXBoOyB9CisK
IHN0cnVjdCBEdW1wQ29udGV4dCB7CiAgICAgRHVtcENvbnRleHQoKTsKICAgICB+RHVtcENvbnRl
eHQoKTsKQEAgLTQxLDYgKzQzLDcgQEAgc3RydWN0IER1bXBDb250ZXh0IHsKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXggPSAiIikgY29uc3Q7CiAgICAgCiAg
ICAgU3RyaW5nSGFzaER1bXBDb250ZXh0PFN0cnVjdHVyZT4gc3RydWN0dXJlczsKKyAgICBERkc6
OkdyYXBoKiBncmFwaDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxNTkxNDEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NjksMTMgKzQ2OSwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VzTm9uU3RyaWN0
RXZhbCgpIHsgcmV0dXJuIG1fdXNlc05vblN0cmljdEV2YWw7IH0KICAgICB2b2lkIHNldFVzZXNO
b25TdHJpY3RFdmFsKGJvb2wgdXNlc05vblN0cmljdEV2YWwpIHsgbV91c2VzTm9uU3RyaWN0RXZh
bCA9IHVzZXNOb25TdHJpY3RFdmFsOyB9CiAKLSAgICBpbnQgY2FwdHVyZVN0YXJ0KCkgeyByZXR1
cm4gbV9jYXB0dXJlU3RhcnQ7IH0KKyAgICBpbnQgY2FwdHVyZVN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9jYXB0dXJlU3RhcnQ7IH0KICAgICB2b2lkIHNldENhcHR1cmVTdGFydChpbnQgY2FwdHVy
ZVN0YXJ0KSB7IG1fY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZVN0YXJ0OyB9CiAKLSAgICBpbnQgY2Fw
dHVyZUVuZCgpIHsgcmV0dXJuIG1fY2FwdHVyZUVuZDsgfQorICAgIGludCBjYXB0dXJlRW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9jYXB0dXJlRW5kOyB9CiAgICAgdm9pZCBzZXRDYXB0dXJlRW5kKGlu
dCBjYXB0dXJlRW5kKSB7IG1fY2FwdHVyZUVuZCA9IGNhcHR1cmVFbmQ7IH0KIAotICAgIGludCBj
YXB0dXJlQ291bnQoKSB7IHJldHVybiAtKG1fY2FwdHVyZUVuZCAtIG1fY2FwdHVyZVN0YXJ0KTsg
fQorICAgIGludCBjYXB0dXJlQ291bnQoKSBjb25zdCB7IHJldHVybiAtKG1fY2FwdHVyZUVuZCAt
IG1fY2FwdHVyZVN0YXJ0KTsgfQogCiAgICAgaW50IHBhcmFtZXRlckNvdW50KCkgeyByZXR1cm4g
bV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9CiAgICAgaW50IHBhcmFtZXRlckNv
dW50SW5jbHVkaW5nVGhpcygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlz
OyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216998</attachid>
            <date>2013-11-14 16:37:50 -0800</date>
            <delta_ts>2013-11-15 13:10:23 -0800</delta_ts>
            <desc>making some progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>100542</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1OTE0MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtOTEsNiArOTEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdBcnJheU1vZGUuY3Bw
CiAgICAgZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCisgICAgZGZnL0RGR0F2YWlsYWJp
bGl0eS5jcHAKICAgICBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKICAgICBk
ZmcvREZHQmFzaWNCbG9jay5jcHAKICAgICBkZmcvREZHQmluYXJ5U3dpdGNoLmNwcApAQCAtMTM5
LDYgKzE0MCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0xvbmdM
aXZlZFN0YXRlLmNwcAogICAgIGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAK
ICAgICBkZmcvREZHTWluaWZpZWROb2RlLmNwcAorICAgIGRmZy9ERkdNb3ZIaW50Q291bnRpbmdQ
aGFzZS5jcHAKICAgICBkZmcvREZHTmF0dXJhbExvb3BzLmNwcAogICAgIGRmZy9ERkdOb2RlLmNw
cAogICAgIGRmZy9ERkdOb2RlRmxhZ3MuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMCArMTAw
LDExIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQXJyYXlQcm9maWxlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eVZhbEluZm8uaCBcCi0gICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
QmFzaWNCbG9jay5jcHAgXAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUJhc2ljQmxvY2suaCBcCi0gICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaCBcCkBAIC0xMzIs
NiArMTMzLDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4aXRLaW5kLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeHBy
ZXNzaW9uUmFuZ2VJbmZvLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxs
Qnl0ZWNvZGVMaXZlbmVzcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
U3RhdHVzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5o
IFwKQEAgLTIwNyw2ICsyMDksOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmNwcCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAgXApAQCAtMzE4LDYgKzMyMiw4IEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWluaWZpZWRJRC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVk
Tm9kZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludENvdW50aW5nUGhhc2UuY3Bw
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNlLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTMzOCw2ICszMzgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCIgLz4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5LmNwcCIgLz4NCiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2suY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPg0K
QEAgLTM4NCw2ICszODUsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xv
bmdMaXZlZFN0YXRlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZE5vZGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR05hdHVyYWxMb29wcy5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdOb2RlRmxhZ3MuY3BwIiAvPg0KQEAgLTc0NSw2ICs3NDcsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnlWYWxJbmZvLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzSW5saW5lLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcQ2FsbExpbmtJbmZvLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcQ2FsbExpbmtTdGF0dXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIiAvPg0KQEAgLTc2
Miw2ICs3NjUsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhlY3V0
aW9uQ291bnRlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV4
aXRLaW5kLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhwcmVz
c2lvblJhbmdlSW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XEZ1bGxCeXRlY29kZUxpdmVuc3MuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxHZXRCeUlkU3RhdHVzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcSGFuZGxlckluZm8uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxJbmxpbmVDYWxsRnJhbWVTZXQuaCIgLz4NCkBAIC04MTIsNiArODE2LDcgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9y
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRl
LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F2YWlsYWJpbGl0eS5o
IiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdh
dGlvblBoYXNlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2lj
QmxvY2suaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9j
a0lubGluZXMuaCIgLz4NCkBAIC04NzMsNiArODc4LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZEdyYXBoLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR01pbmlmaWVkSUQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHTWluaWZpZWROb2RlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR05hdHVyYWxMb29wcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdOb2RlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R05vZGVBbGxvY2F0b3IuaCIgLz4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw2ICsyNjAs
MTIgQEAKIAkJMEY2Mzk0NzgxNURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2Mzk0ODQx
NUU0ODExODAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ4MTE1RTQ4MTE0MDA2QTU5N0MgLyogREZH
QXJyYXlNb2RlLmNwcCAqLzsgfTsKIAkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0Fy
cmF5TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2Mzk0ODIxNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjY2RUMwMTgzNTY2RjkwMEQw
MTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEg
LyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAv
KiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxp
dmVuZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDMjE4MzU2NzJC
MDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCAqLzsgfTsKKwkJMEY2NjZFQzcxODM1Njcy
QjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQzMxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWls
YWJpbGl0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGNjY2RUM4MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVD
NDE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwICovOyB9Owor
CQkwRjY2NkVDOTE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50aW5nUGhhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUM1MTgz
NTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZCMTRERjNGMTYwMEI3
QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyog
REZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNzAyNUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MDI1
QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgKi87IH07
CkBAIC0xNTQ3LDYgKzE1NTMsMTIgQEAKIAkJMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0ODExNUU0
ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdBcnJheU1vZGUuY3BwOyBwYXRoID0gZGZnL0RGR0FycmF5TW9kZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3
QyAvKiBERkdBcnJheU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
QXJyYXlNb2RlLmg7IHBhdGggPSBkZmcvREZHQXJyYXlNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXNJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bGxCeXRlY29kZUxpdmVuZXNzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjY2RUMyMTgzNTY3MkIwMEQwMTdGMSAvKiBE
RkdBdmFpbGFiaWxpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHQXZhaWxhYmlsaXR5LmNwcDsgcGF0aCA9IGRmZy9ERkdBdmFpbGFiaWxpdHkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZH
QXZhaWxhYmlsaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0F2YWls
YWJpbGl0eS5oOyBwYXRoID0gZGZnL0RGR0F2YWlsYWJpbGl0eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjY2NkVDNDE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50
aW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTW92
SGludENvdW50aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQzUxODM1NjcyQjAwRDAx
N0YxIC8qIERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHTW92SGlu
dENvdW50aW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjgx
NERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQWRqYWNlbmN5TGlzdC5oOyBwYXRoID0gZGZnL0RGR0FkamFjZW5j
eUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjkxNERGM0YxMzAw
QjdCMkU0IC8qIERGR0VkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
RWRnZS5oOyBwYXRoID0gZGZnL0RGR0VkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzM5LDYgKzM3NTEsOCBAQAogCQkJCTBGNjM5
NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLywKIAkJCQlBN0Q5QTI4RjE3
QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCiAJCQkJQTdE
OUEyOTAxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCAqLywKKwkJ
CQkwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCAqLywKKwkJ
CQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggKi8sCiAJCQkJ
MEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
Y3BwICovLAogCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlLmggKi8sCiAJCQkJQTdEODlDRTMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jh
c2ljQmxvY2suY3BwICovLApAQCAtMzg0OSw2ICszODYzLDggQEAKIAkJCQkwRkI0QjUxMDE2QjNB
OTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovLAogCQkJCTBGMkJEQzRDMTUyMjgxODMw
MENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwICovLAogCQkJCTBGMkJEQzNFMTUyMjgwMTcw
MENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCAqLywKKwkJCQkwRjY2NkVDNDE4MzU2NzJCMDBE
MDE3RjEgLyogREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwICovLAorCQkJCTBGNjY2RUM1MTgz
NTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oICovLAogCQkJCUE3Mzc4
MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovLAogCQkJCUE3Mzc4
MTBCMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLywKIAkJCQkwRkI0QjUx
RTE2QjYyNzcyMDAzRjY5NkIgLyogREZHTm9kZS5jcHAgKi8sCkBAIC00MDMxLDE1ICs0MDQ3LDE2
IEBACiAJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQzJGQ0FFMEMxN0E5QzI0RTAwMzRD
NzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi8sCi0JCQkJQzJGQ0FFMEQxN0E5QzI0RTAw
MzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovLAotCQkJCUMyRkNBRTBFMTdBOUMyNEUw
MDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwICovLAotCQkJCUMyRkNBRTBG
MTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLywKIAkJCQkw
RjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgKi8s
CiAJCQkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUu
aCAqLywKIAkJCQkwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCAq
LywKIAkJCQkwRjYzOTQ1MjE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggKi8sCisJ
CQkJQzJGQ0FFMEMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi8s
CisJCQkJQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICov
LAogCQkJCTBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmgg
Ki8sCisJCQkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAgKi8sCisJCQkJQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcy5oICovLAorCQkJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8sCiAJCQkJMEY4MDIzRTkxNjEzODMyMzAw
QTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovLAogCQkJCTBGMEI4M0FFMTRCQ0Y3MTQwMDg4NUI0RiAv
KiBDYWxsTGlua0luZm8uY3BwICovLAogCQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4NUI0RiAvKiBD
YWxsTGlua0luZm8uaCAqLywKQEAgLTQwNjgsNiArNDA4NSw3IEBACiAJCQkJMEZCMTA1ODIxNjc1
NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCAqLywKIAkJCQkwRkIxMDU4MzE2NzU0ODBDMDBG
OEFCNkUgLyogRXhpdEtpbmQuaCAqLywKIAkJCQkwRjBCODNBQTE0QkNGNUI5MDA4ODVCNEYgLyog
RXhwcmVzc2lvblJhbmdlSW5mby5oICovLAorCQkJCTBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAv
KiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovLAogCQkJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjND
NiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYzQzYg
LyogR2V0QnlJZFN0YXR1cy5oICovLAogCQkJCTBGMEI4M0E4MTRCQ0Y1NUUwMDg4NUI0RiAvKiBI
YW5kbGVySW5mby5oICovLApAQCAtNDQ1NSw2ICs0NDczLDcgQEAKIAkJCQkyQTZGNDYyNjE3RTk1
OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGOTc0
NDcxMzhDODUzRTAwREExQzY3IC8qIEhlYXBSb290VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzI0RDMxRTMxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFw
VGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwRjBFMTZGNUNE
MDBCMzQ0NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCkBAIC00NTY0LDYgKzQ1ODMs
NyBAQAogCQkJCTdDMTg0RTFGMTdCRUUyMkUwMDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDM0JBMjk1MTdDMDM5NTYwMDcyRERDOSAvKiBKU1Byb21p
c2VSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0REVGOTYxODJEOTkxNDAwNTIyQzIy
IC8qIEpTTWFwSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjY2RUM5MTgzNTY3MkIw
MEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0MzQkEyOTcxN0MwMzk1NjAwNzJEREM5IC8qIEpTUHJvbWlzZVJlc29sdmVyQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDM0JBMjk5MTdDMDM5NTYwMDcyRERDOSAvKiBKU1Byb21p
c2VSZXNvbHZlclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYyNTUzRDIxNjEzNkUx
QTAwOUYxN0QwIC8qIEpTUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtNDY5Niw2ICs0NzE2LDcg
QEAKIAkJCQk5NUNENDU3NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTEwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGVOb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlBNTE2NkFEMzUxMDAwRjVCQTMgLyogUHJvZmls
ZXJCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0Yx
IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUI5MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVT
ZXF1ZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8q
IFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNDgwNSw2ICs0ODI2LDcg
QEAKIAkJCQlBN0E4QUYzRjE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdBOEFGNDAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVGMDhDRjE0NkM3NjMzMDAwNDcyQTkgLyogVW5jb25k
aXRpb25hbEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjZFQzcxODM1NjcyQjAw
RDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCNjAxODIx
NjM5RkQyQTAwMzcyQkEzIC8qIFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJFODkyQzE2RDAyOEFEMDA5RTRGRDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC01MjY4LDYgKzUyOTAsNyBAQAogCQkJCTE0N0YzOUMwMTA3RUMzNzYwMDQy
N0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0MDE3
RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0ODE2RTFCMTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjY2NkVDODE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50aW5n
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NjMxMDdFQzExQTAwMTNFN0IyIC8q
IEJvb2xlYW5Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg2NDEwN0VD
MTFBMDAxM0U3QjIgLyogQm9vbGVhbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4
MDg2NTEwN0VDMTFBMDAxM0U3QjIgLyogQm9vbGVhblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTU2OTAsNiArNTcxMyw3IEBACiAJCQkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8q
IFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjJFMTcxRTNFMjMw
MEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ5NEYzMDE3MUUz
RTIzMDBCRTc3QTQgLyogV2F0Y2hkb2dNYWMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NjZF
QzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQUNGNzM3NzE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNEU4NEY5RTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
QmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUJhc2ljQmxvY2suaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw4ICszNiw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiAKLXR5
cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgRmFzdEJpdFZlY3RvciwgV1RGOjpJbnRIYXNoPHVuc2ln
bmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4gPiBCeXRl
Y29kZVRvQml0bWFwTWFwOwotCiBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2sgOiBwdWJsaWMgUmVm
Q291bnRlZDxCeXRlY29kZUJhc2ljQmxvY2s+IHsKIHB1YmxpYzoKICAgICBlbnVtIFNwZWNpYWxC
bG9ja1R5cGUgeyBFbnRyeUJsb2NrLCBFeGl0QmxvY2sgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oIgogCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNz
LmgiCiAjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpA
QCAtMzgsNDQgKzQwLDIzIEBAIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVMaXZl
bmUKICAgICBjb21wdXRlKCk7CiB9CiAKLXN0YXRpYyBpbnQgbnVtYmVyT2ZDYXB0dXJlZFZhcmlh
YmxlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBpZiAoIWNvZGVCbG9jay0+c3ltYm9s
VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+c3ltYm9s
VGFibGUoKS0+Y2FwdHVyZUNvdW50KCk7Ci19Ci0KLXN0YXRpYyBpbnQgY2FwdHVyZVN0YXJ0KENv
ZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5jYXB0dXJlU3RhcnQoKTsKLX0KLQotc3RhdGljIGludCBjYXB0dXJlRW5kKENvZGVCbG9jayog
Y29kZUJsb2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJl
RW5kKCk7Ci19Ci0KIHN0YXRpYyBib29sIGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKENvZGVC
bG9jayogY29kZUJsb2NrLCBpbnQgb3BlcmFuZCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZyhvcGVyYW5kKTsKICAgICByZXR1cm4gIWNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lz
dGVySW5kZXgob3BlcmFuZCkgLy8gRG9uJ3QgY2FyZSBhYm91dCBjb25zdGFudHMuCiAgICAgICAg
ICYmIHZpcnR1YWxSZWcuaXNMb2NhbCgpIC8vIERvbid0IGNhcmUgYWJvdXQgYXJndW1lbnRzLgot
ICAgICAgICAmJiAoIW51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMoY29kZUJsb2NrKSAvLyBJZiB3
ZSBoYXZlIG5vIGNhcHR1cmVkIHZhcmlhYmxlcywgd2UncmUgZ29vZCB0byBnby4KLSAgICAgICAg
ICAgIHx8ICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY2FwdHVyZVN0YXJ0KGNvZGVCbG9jaykgfHwg
KHZpcnR1YWxSZWcub2Zmc2V0KCkgPD0gY2FwdHVyZUVuZChjb2RlQmxvY2spKSkpOworICAgICAg
ICAmJiAoIWNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkgLy8gSWYgd2UgaGF2ZSBubyBjYXB0dXJl
ZCB2YXJpYWJsZXMsIHdlJ3JlIGdvb2QgdG8gZ28uCisgICAgICAgICAgICB8fCAodmlydHVhbFJl
Zy5vZmZzZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkgfHwgKHZpcnR1YWxSZWcub2Zm
c2V0KCkgPD0gY29kZUJsb2NrLT5jYXB0dXJlRW5kKCkpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNl
dEZvck9wZXJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZhc3RCaXRWZWN0b3ImIGJpdHMsIGlu
dCBvcGVyYW5kKQogewogICAgIEFTU0VSVChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2Rl
QmxvY2ssIG9wZXJhbmQpKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5k
KTsKLSAgICBpZiAodmlydHVhbFJlZy5vZmZzZXQoKSA+IGNhcHR1cmVTdGFydChjb2RlQmxvY2sp
KQorICAgIGlmICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQo
KSkKICAgICAgICAgYml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkpOwogICAgIGVsc2UKLSAg
ICAgICAgYml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkgLSBudW1iZXJPZkNhcHR1cmVkVmFy
aWFibGVzKGNvZGVCbG9jaykpOworICAgICAgICBiaXRzLnNldCh2aXJ0dWFsUmVnLnRvTG9jYWwo
KSAtIGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkpOwogfQogCiBzdGF0aWMgdm9pZCBjb21wdXRl
VXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgdXNlcykKQEAgLTMwMyw4ICsyODQsOCBAQCBzdGF0
aWMgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0CiAgICAgICAgIGludCBiYXNlID0g
aW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICBpbnQgY291bnQgPSBpbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykg
ewotICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywg
YmFzZSArIGkpKQotICAgICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2Vz
LCBiYXNlICsgaSk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mo
Y29kZUJsb2NrLCBiYXNlIC0gaSkpCisgICAgICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2Rl
QmxvY2ssIHVzZXMsIGJhc2UgLSBpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMzE1LDExICsyOTYsMTEgQEAgc3RhdGljIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29k
ZU9mZnNldAogICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKQogICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChj
b2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgIGludCBh
cmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgICAgICBpbnQgcmVnaXN0ZXJP
ZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwogICAgICAgICBpbnQgbGFzdEFyZyA9
IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsKICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAo
aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBsYXN0QXJnIC0gaSkpCi0gICAg
ICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGxhc3RBcmcgLSBpKTsK
KyAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGxh
c3RBcmcgKyBpKSkKKyAgICAgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNl
cywgbGFzdEFyZyArIGkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0z
MzIsOCArMzEzLDcgQEAgc3RhdGljIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldAog
ICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpKQogICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ss
IHVzZXMsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgfQorICAgIH0gfQogfQogCiBzdGF0aWMgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2Rl
T2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFz
dEJpdFZlY3RvciYgZGVmcykKQEAgLTQ4NSw4ICs0NjUsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRl
RGVmc0ZvckJ5dGVjb2RlT2Zmc2V0CiAgICAgY2FzZSBvcF9lbnRlcjogewogICAgICAgICBkZWZz
LnNldEFsbCgpOwogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIH0KKyAgICB9IH0KIH0KIAog
c3RhdGljIHVuc2lnbmVkIGdldExlYWRlck9mZnNldEZvckJhc2ljQmxvY2soUmVmUHRyPEJ5dGVj
b2RlQmFzaWNCbG9jaz4qIGJhc2ljQmxvY2spCkBAIC01MzMsMTMgKzUxMiwzMiBAQCBzdGF0aWMg
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiBmaW5kQmFzaWNCbG9jCiAgICAgcmV0dXJuIGJhc2ljQmxvY2tb
MV0uZ2V0KCk7CiB9CiAKK3N0YXRpYyB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPj4mIGJhc2ljQmxv
Y2tzLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgdXNlcywgRmFzdEJp
dFZlY3RvciYgZGVmcywgRmFzdEJpdFZlY3RvciYgb3V0KQoreworICAgIHVzZXMuY2xlYXJBbGwo
KTsKKyAgICBkZWZzLmNsZWFyQWxsKCk7CisgICAgCisgICAgY29tcHV0ZVVzZXNGb3JCeXRlY29k
ZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCB1c2VzKTsKKyAgICBjb21wdXRlRGVm
c0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQsIGRlZnMpOworICAg
IAorICAgIG91dC5leGNsdWRlKGRlZnMpOworICAgIG91dC5tZXJnZSh1c2VzKTsKKyAgICAKKyAg
ICAvLyBJZiB3ZSBoYXZlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCB3ZSB3YW50IHRoZSBsaXZlLWlu
IHZhcmlhYmxlcyBvZiB0aGUgCisgICAgLy8gZXhjZXB0aW9uIGhhbmRsZXIgYmxvY2sgdG8gYmUg
aW5jbHVkZWQgaW4gdGhlIGxpdmUtaW4gb2YgdGhpcyBwYXJ0aWN1bGFyIGJ5dGVjb2RlLgorICAg
IGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkgeworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGhh
bmRsZXJCbG9jayA9IGZpbmRCYXNpY0Jsb2NrV2l0aExlYWRlck9mZnNldChiYXNpY0Jsb2Nrcywg
aGFuZGxlci0+dGFyZ2V0KTsKKyAgICAgICAgQVNTRVJUKGhhbmRsZXJCbG9jayk7CisgICAgICAg
IG91dC5tZXJnZShoYW5kbGVyQmxvY2stPmluKCkpOworICAgIH0KK30KKwogc3RhdGljIHZvaWQg
Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaywgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2lj
QmxvY2s+ID4mIGJhc2ljQmxvY2tzLCB1bnNpZ25lZCB0YXJnZXRPZmZzZXQsIEZhc3RCaXRWZWN0
b3ImIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9jaygpKTsKICAgICBB
U1NFUlQoIWJsb2NrLT5pc0VudHJ5QmxvY2soKSk7CiAKICAgICBGYXN0Qml0VmVjdG9yIG91dCA9
IGJsb2NrLT5vdXQoKTsKLSAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IDA7CiAKICAgICBGYXN0
Qml0VmVjdG9yIHVzZXM7CiAgICAgRmFzdEJpdFZlY3RvciBkZWZzOwpAQCAtNTUwLDIzICs1NDgs
OCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjCiAgICAgICAgIHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0cygpW2ldOwogICAg
ICAgICBpZiAodGFyZ2V0T2Zmc2V0ID4gYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICB1c2VzLmNsZWFyQWxsKCk7Ci0gICAgICAgIGRlZnMuY2xlYXJBbGwoKTsK
LQotICAgICAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNv
ZGVPZmZzZXQsIHVzZXMpOwotICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KGNv
ZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQsIGRlZnMpOwotCi0gICAgICAgIG91dC5leGNsdWRlKGRl
ZnMpOwotICAgICAgICBvdXQubWVyZ2UodXNlcyk7Ci0KLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBh
biBleGNlcHRpb24gaGFuZGxlciwgd2Ugd2FudCB0aGUgbGl2ZS1pbiB2YXJpYWJsZXMgb2YgdGhl
IAotICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9jayB0byBiZSBpbmNsdWRlZCBpbiB0
aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgYnl0ZWNvZGUuCi0gICAgICAgIGlmICgoaGFu
ZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0
KSkpIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogaGFuZGxlckJsb2NrID0gZmlu
ZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGJhc2ljQmxvY2tzLCBoYW5kbGVyLT50YXJnZXQp
OwotICAgICAgICAgICAgQVNTRVJUKGhhbmRsZXJCbG9jayk7Ci0gICAgICAgICAgICBvdXQubWVy
Z2UoaGFuZGxlckJsb2NrLT5pbigpKTsKLSAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3Rl
cE92ZXJJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGJhc2ljQmxvY2tzLCBieXRlY29kZU9mZnNldCwg
dXNlcywgZGVmcywgb3V0KTsKICAgICB9CiAKICAgICByZXN1bHQuc2V0KG91dCk7CkBAIC01ODMs
NyArNTY2LDcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OnJ1bkxpdmVuZQogewog
ICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IG1fY29kZUJsb2NrLT51
bmxpbmtlZENvZGVCbG9jaygpOwogICAgIHVuc2lnbmVkIG51bWJlck9mVmFyaWFibGVzID0gdW5s
aW5rZWRDb2RlQmxvY2stPm1fbnVtVmFycyArIAotICAgICAgICB1bmxpbmtlZENvZGVCbG9jay0+
bV9udW1DYWxsZWVSZWdpc3RlcnMgLSBudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVzKG1fY29kZUJs
b2NrKTsKKyAgICAgICAgdW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIC0g
bV9jb2RlQmxvY2stPmNhcHR1cmVDb3VudCgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYmFzaWNCbG9ja3Muc2l6ZSgpOyBpKyspIHsKICAgICAgICAgQnl0ZWNvZGVCYXNpY0Js
b2NrKiBibG9jayA9IG1fYmFzaWNCbG9ja3NbaV0uZ2V0KCk7CkBAIC02MjIsMzYgKzYwNSwzMCBA
QCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lCiAKIGJvb2wgQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzOjpvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9mZnNldChpbnQgb3Bl
cmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7Ci0gICAgaW50IG51bUNhcHR1cmVkVmFy
cyA9IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9jb2RlQmxvY2spOwotICAgIGlmIChWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNBcmd1bWVudCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBpZiAob3BlcmFuZCA8PSBjYXB0dXJlU3RhcnQobV9jb2RlQmxvY2spICYmIG9wZXJhbmQg
PiBjYXB0dXJlRW5kKG1fY29kZUJsb2NrKSkKKyAgICBpZiAob3BlcmFuZElzQWx3YXlzTGl2ZSht
X2NvZGVCbG9jaywgb3BlcmFuZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIEZhc3RCaXRW
ZWN0b3IgcmVzdWx0OwogICAgIGdldExpdmVuZXNzSW5mb0Zvck5vbkNhcHR1cmVkVmFyc0F0Qnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5n
ZXQob3BlcmFuZCAtIG51bUNhcHR1cmVkVmFycyk7CisgICAgcmV0dXJuIG9wZXJhbmRUaGF0SXNO
b3RBbHdheXNMaXZlSXNMaXZlKG1fY29kZUJsb2NrLCByZXN1bHQsIG9wZXJhbmQpOwogfQogCi1G
YXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRC
eXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0Zhc3RCaXRWZWN0b3IgZ2V0
TGl2ZW5lc3NJbmZvKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBv
dXQpCiB7Ci0gICAgRmFzdEJpdFZlY3RvciB0ZW1wOwogICAgIEZhc3RCaXRWZWN0b3IgcmVzdWx0
OwogCi0gICAgZ2V0TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNl
dChieXRlY29kZU9mZnNldCwgdGVtcCk7Ci0KLSAgICB1bnNpZ25lZCBudW1DYXB0dXJlZFZhcnMg
PSBudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVzKG1fY29kZUJsb2NrKTsKKyAgICB1bnNpZ25lZCBu
dW1DYXB0dXJlZFZhcnMgPSBjb2RlQmxvY2stPmNhcHR1cmVDb3VudCgpOwogICAgIGlmIChudW1D
YXB0dXJlZFZhcnMpIHsKLSAgICAgICAgaW50IGZpcnN0Q2FwdHVyZWRMb2NhbCA9IFZpcnR1YWxS
ZWdpc3RlcihjYXB0dXJlU3RhcnQobV9jb2RlQmxvY2spKS50b0xvY2FsKCk7Ci0gICAgICAgIHJl
c3VsdC5yZXNpemUodGVtcC5udW1CaXRzKCkgKyBudW1DYXB0dXJlZFZhcnMpOworICAgICAgICBp
bnQgZmlyc3RDYXB0dXJlZExvY2FsID0gVmlydHVhbFJlZ2lzdGVyKGNvZGVCbG9jay0+Y2FwdHVy
ZVN0YXJ0KCkpLnRvTG9jYWwoKTsKKyAgICAgICAgcmVzdWx0LnJlc2l6ZShvdXQubnVtQml0cygp
ICsgbnVtQ2FwdHVyZWRWYXJzKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bUNhcHR1cmVkVmFyczsgKytpKQogICAgICAgICAgICAgcmVzdWx0LnNldChmaXJzdENhcHR1cmVk
TG9jYWwgKyBpKTsKICAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0LnJlc2l6ZSh0ZW1wLm51bUJp
dHMoKSk7CisgICAgICAgIHJlc3VsdC5yZXNpemUob3V0Lm51bUJpdHMoKSk7CiAKLSAgICBpbnQg
dGVtcExlbmd0aCA9IHRlbXAubnVtQml0cygpOwotICAgIEFTU0VSVCh0ZW1wTGVuZ3RoID49IDAp
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVtcExlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlm
ICghdGVtcC5nZXQoaSkpCisgICAgaW50IG91dExlbmd0aCA9IG91dC5udW1CaXRzKCk7CisgICAg
QVNTRVJUKG91dExlbmd0aCA+PSAwKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG91dExlbmd0
aDsgaSsrKSB7CisgICAgICAgIGlmICghb3V0LmdldChpKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIGlmICghbnVtQ2FwdHVyZWRWYXJzKSB7CkBAIC02NTksNyArNjM2LDcgQEAg
RmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OgogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
aSkub2Zmc2V0KCkgPiBjYXB0dXJlU3RhcnQobV9jb2RlQmxvY2spKQorICAgICAgICBpZiAodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkub2Zmc2V0KCkgPiBjb2RlQmxvY2stPmNhcHR1cmVTdGFy
dCgpKQogICAgICAgICAgICAgcmVzdWx0LnNldChpKTsKICAgICAgICAgZWxzZSAKICAgICAgICAg
ICAgIHJlc3VsdC5zZXQobnVtQ2FwdHVyZWRWYXJzICsgaSk7CkBAIC02NjcsNiArNjQ0LDM5IEBA
IEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjoKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCitGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAg
ICBGYXN0Qml0VmVjdG9yIG91dDsKKyAgICBnZXRMaXZlbmVzc0luZm9Gb3JOb25DYXB0dXJlZFZh
cnNBdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgIHJldHVybiBnZXRM
aXZlbmVzc0luZm8obV9jb2RlQmxvY2ssIG91dCk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1
bHQpCit7CisgICAgRmFzdEJpdFZlY3RvciBvdXQ7CisgICAgRmFzdEJpdFZlY3RvciB1c2VzOwor
ICAgIEZhc3RCaXRWZWN0b3IgZGVmczsKKyAgICAKKyAgICByZXN1bHQubV9jb2RlQmxvY2sgPSBt
X2NvZGVCbG9jazsKKyAgICByZXN1bHQubV9tYXAuY2xlYXIoKTsKKyAgICAKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2Jhc2ljQmxvY2tzLnNpemUoKTsgaS0tOykgeworICAgICAgICBCeXRlY29k
ZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9iYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKKyAgICAgICAgaWYg
KGJsb2NrLT5pc0VudHJ5QmxvY2soKSB8fCBibG9jay0+aXNFeGl0QmxvY2soKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgb3V0ID0gYmxvY2stPm91dCgpOworICAg
ICAgICB1c2VzLnJlc2l6ZShvdXQubnVtQml0cygpKTsKKyAgICAgICAgZGVmcy5yZXNpemUob3V0
Lm51bUJpdHMoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+
Ynl0ZWNvZGVPZmZzZXRzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IGJsb2NrLT5ieXRlY29kZU9mZnNldHMoKVtpXTsKKyAgICAgICAgICAg
IHN0ZXBPdmVySW5zdHJ1Y3Rpb24obV9jb2RlQmxvY2ssIG1fYmFzaWNCbG9ja3MsIGJ5dGVjb2Rl
T2Zmc2V0LCB1c2VzLCBkZWZzLCBvdXQpOworICAgICAgICAgICAgcmVzdWx0Lm1fbWFwLmFkZChi
eXRlY29kZU9mZnNldCwgb3V0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKCkKIHsKICAgICBJbnRlcnByZXRlciogaW50
ZXJwcmV0ZXIgPSBtX2NvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEz
ICszNCwxNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEZ1
bGxCeXRlY29kZUxpdmVuZXNzOwogCiBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgewog
cHVibGljOgogICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2RlQmxvY2sqKTsKLQorICAg
IAogICAgIGJvb2wgb3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9wZXJhbmQsIHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5m
b0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIAorICAgIHZv
aWQgY29tcHV0ZUZ1bGxMaXZlbmVzcyhGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgcmVzdWx0KTsKIAog
cHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGUoKTsKQEAgLTUzLDYgKzU2LDEyIEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+ID4gbV9iYXNpY0Jsb2NrczsK
IH07CiAKK2lubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGludCBvcGVyYW5kKTsKK2lubGluZSBib29sIG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZl
SXNMaXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGlu
dCBvcGVyYW5kKTsKK2lubGluZSBib29sIG9wZXJhbmRJc0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpOworCitGYXN0Qml0VmVj
dG9yIGdldExpdmVuZXNzSW5mbyhDb2RlQmxvY2sqLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQp
OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXNfaAorI2RlZmluZSBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzX2gKKworI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywg
aW50IG9wZXJhbmQpCit7CisgICAgaWYgKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0FyZ3Vt
ZW50KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBvcGVyYW5kIDw9IGNvZGVC
bG9jay0+Y2FwdHVyZVN0YXJ0KCkgJiYgb3BlcmFuZCA+IGNvZGVCbG9jay0+Y2FwdHVyZUVuZCgp
OworfQorCitpbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkK
K3sKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKKyAgICBpZiAodmly
dHVhbFJlZy5vZmZzZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkpCisgICAgICAgIHJl
dHVybiBvdXQuZ2V0KHZpcnR1YWxSZWcudG9Mb2NhbCgpKTsKKyAgICBzaXplX3QgaW5kZXggPSB2
aXJ0dWFsUmVnLnRvTG9jYWwoKSAtIGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCk7CisgICAgaWYg
KGluZGV4ID49IG91dC5udW1CaXRzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gb3V0LmdldChpbmRleCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhbmRJc0xpdmUoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpCit7
CisgICAgcmV0dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUoY29kZUJsb2NrLCBvcGVyYW5kKSB8fCBv
cGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShjb2RlQmxvY2ssIG91dCwgb3BlcmFuZCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDYgKzM1NCwyNyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9uZWVkc0FjdGl2YXRpb247CiAgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIGNhcHR1cmVDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoIXN5bWJvbFRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgpOworICAgIH0KKyAgICAKKyAgICBpbnQgY2Fw
dHVyZVN0YXJ0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghc3ltYm9sVGFibGUoKSkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+Y2FwdHVy
ZVN0YXJ0KCk7CisgICAgfQorICAgIAorICAgIGludCBjYXB0dXJlRW5kKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghc3ltYm9sVGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOworICAgIH0KIAogICAgIGJv
b2wgaXNDYXB0dXJlZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgSW5saW5lQ2FsbEZyYW1lKiA9
IDApIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2
LDcgQEAgdm9pZCBJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRleHQoUHJpbgogICAgIGVsc2UK
ICAgICAgICAgb3V0LnByaW50KCIsIGtub3duIGNhbGxlZTogIiwgaW5Db250ZXh0KGNhbGxlZVJl
Y292ZXJ5LmNvbnN0YW50KCksIGNvbnRleHQpKTsKICAgICBvdXQucHJpbnQoIiwgbnVtQXJncyt0
aGlzID0gIiwgYXJndW1lbnRzLnNpemUoKSk7Ci0gICAgb3V0LnByaW50KCIsIHN0YWNrID49IHIi
LCBzdGFja09mZnNldCk7CisgICAgb3V0LnByaW50KCIsIHN0YWNrIDwgbG9jIiwgVmlydHVhbFJl
Z2lzdGVyKHN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOwogICAgIG91dC5wcmludCgiPiIpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZ1bGxCeXRlY29kZUxpdmVuZXNzX2gKKyNkZWZp
bmUgRnVsbEJ5dGVjb2RlTGl2ZW5lc3NfaAorCisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsK
KwordHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBGYXN0Qml0VmVjdG9yLCBXVEY6OkludEhhc2g8
dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPiA+
IEJ5dGVjb2RlVG9CaXRtYXBNYXA7CisKK2NsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKK3B1
YmxpYzoKKyAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcygpIDogbV9jb2RlQmxvY2soMCkgeyB9Cisg
ICAgCisgICAgLy8gV2Ugc2F5ICJvdXQiIHRvIHJlZmVyIHRvIHRoZSBiaXR2ZWN0b3IgdGhhdCBj
b250YWlucyByYXcgcmVzdWx0cyBmb3IgYSBieXRlY29kZQorICAgIC8vIGluc3RydWN0aW9uLgor
ICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGdldE91dCh1bnNpZ25lZCBieXRlY29kZUluZGV4KSBj
b25zdAorICAgIHsKKyAgICAgICAgQnl0ZWNvZGVUb0JpdG1hcE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IG1fbWFwLmZpbmQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VSVChpdGVyICE9
IG1fbWFwLmVuZCgpKTsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworICAgIH0KKyAgICAK
KyAgICBib29sIG9wZXJhbmRJc0xpdmUoaW50IG9wZXJhbmQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShtX2Nv
ZGVCbG9jaywgb3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUobV9j
b2RlQmxvY2ssIGdldE91dChieXRlY29kZUluZGV4KSwgb3BlcmFuZCk7CisgICAgfQorICAgIAor
ICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3ModW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRMaXZlbmVzc0luZm8obV9jb2RlQmxvY2ssIGdl
dE91dChieXRlY29kZUluZGV4KSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworICAgIAorICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2s7CisgICAgQnl0ZWNvZGVUb0JpdG1hcE1hcCBtX21hcDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRnVsbEJ5dGVjb2RlTGl2ZW5lc3NfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0F2
YWlsYWJpbGl0eS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdWYXJp
YWJsZUFjY2Vzc0RhdGFEdW1wLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
Kwordm9pZCBBdmFpbGFiaWxpdHk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBkdW1wSW5Db250ZXh0KG91dCwgMCk7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5OjpkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorewor
ICAgIG91dC5wcmludChtX2ZsdXNoZWRBdCwgIi8iKTsKKyAgICAKKyAgICBHcmFwaCogZ3JhcGgg
PSBjb250ZXh0ID8gY29udGV4dC0+Z3JhcGggOiAwOworICAgIAorICAgIGlmICh2YXJpYWJsZUlz
VW5kZWNpZGVkKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJVbmRlY2lkZWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAodmFyaWFibGVJc1VuYXZhaWxhYmxlKCkpIHsK
KyAgICAgICAgb3V0LnByaW50KCJVbmF2YWlsYWJsZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIGlmIChncmFwaCkgeworICAgICAgICBvdXQucHJpbnQoVmFyaWFibGVBY2Nl
c3NEYXRhRHVtcCgqZ3JhcGgsIG1fdmFyaWFibGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihtX3ZhcmlhYmxlKSk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQXZhaWxhYmlsaXR5X2gKKyNkZWZpbmUgREZH
QXZhaWxhYmlsaXR5X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRmx1
c2hlZEF0LmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQXZhaWxhYmlsaXR5IHsKK3B1YmxpYzoK
KyAgICBBdmFpbGFiaWxpdHkoKQorICAgICAgICA6IG1fdmFyaWFibGUoMCkKKyAgICAgICAgLCBt
X2ZsdXNoZWRBdChEZWFkRmx1c2gpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBB
dmFpbGFiaWxpdHkoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSkKKyAgICAgICAgOiBtX3Zh
cmlhYmxlKHZhcmlhYmxlKQorICAgICAgICAsIG1fZmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgQXZhaWxhYmlsaXR5IHVuYXZhaWxhYmxl
KCkKKyAgICB7CisgICAgICAgIEF2YWlsYWJpbGl0eSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X3ZhcmlhYmxlID0gdW5hdmFpbGFibGVNYXJrZXIoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgQXZhaWxhYmlsaXR5IHdpdGhGbHVzaChGbHVzaGVkQXQgZmx1c2gp
CisgICAgeworICAgICAgICBBdmFpbGFiaWxpdHkgcmVzdWx0ID0gKnRoaXM7CisgICAgICAgIHJl
c3VsdC5tX2ZsdXNoZWRBdCA9IGZsdXNoOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBib29sIHZhcmlhYmxlSXNVbmRlY2lkZWQoKSBjb25zdCB7IHJldHVybiBtX3Zh
cmlhYmxlID09IDA7IH0KKyAgICBib29sIHZhcmlhYmxlSXNVbmF2YWlsYWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFyaWFibGUgPT0gdW5hdmFpbGFibGVNYXJrZXIoKTsgfQorICAgIAorICAgIGJv
b2wgaGFzVmFyaWFibGUoKSBjb25zdCB7IHJldHVybiAhdmFyaWFibGVJc1VuZGVjaWRlZCgpICYm
ICF2YXJpYWJsZUlzVW5hdmFpbGFibGUoKTsgfQorICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCF2YXJpYWJsZUlzVW5k
ZWNpZGVkKCkpOworICAgICAgICBBU1NFUlQoIXZhcmlhYmxlSXNVbmF2YWlsYWJsZSgpKTsKKyAg
ICAgICAgcmV0dXJuIG1fdmFyaWFibGU7CisgICAgfQorICAgIAorICAgIEZsdXNoZWRBdCBmbHVz
aGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2ZsdXNoZWRBdDsgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gdmFyaWFibGVJc1VuYXZhaWxhYmxlKCkgJiYgIWZsdXNo
ZWRBdCgpOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXZhaWxhYmlsaXR5JiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlID09IG90aGVyLm1fdmFy
aWFibGUKKyAgICAgICAgICAgICYmIG1fZmx1c2hlZEF0ID09IG90aGVyLm1fZmx1c2hlZEF0Owor
ICAgIH0KKyAgICAKKyAgICBBdmFpbGFiaWxpdHkgbWVyZ2UoY29uc3QgQXZhaWxhYmlsaXR5JiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIEF2YWlsYWJpbGl0eSByZXN1bHQ7CisgICAgICAg
IAorICAgICAgICBpZiAodmFyaWFibGVJc1VuZGVjaWRlZCgpKQorICAgICAgICAgICAgcmVzdWx0
ID0gb3RoZXI7CisgICAgICAgIGVsc2UgaWYgKG90aGVyLnZhcmlhYmxlSXNVbmRlY2lkZWQoKSkK
KyAgICAgICAgICAgIHJlc3VsdCA9ICp0aGlzOworICAgICAgICBlbHNlIGlmIChtX3ZhcmlhYmxl
ID09IG90aGVyLm1fdmFyaWFibGUpCisgICAgICAgICAgICByZXN1bHQgPSAqdGhpczsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gdW5hdmFpbGFibGUoKTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiByZXN1bHQud2l0aEZsdXNoKGZsdXNoZWRBdCgpLm1lcmdlKG90aGVyLmZs
dXNoZWRBdCgpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0Kikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFZhcmlhYmxlQWNjZXNzRGF0YSogdW5hdmFp
bGFibGVNYXJrZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxWYXJpYWJs
ZUFjY2Vzc0RhdGEqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMSkpOworICAgIH0KKyAgICAKKyAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG1fdmFyaWFibGU7CisgICAgRmx1c2hlZEF0IG1fZmx1c2hl
ZEF0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBdmFpbGFiaWxpdHlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTU5MTQxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Fi
c3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHkuaCIKICNpbmNsdWRlICJE
RkdCcmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdGbHVzaGVkQXQuaCIKICNpbmNsdWRl
ICJERkdOb2RlLmgiCkBAIC0xNDAsOCArMTQxLDggQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZD
b3VudGVkPEJhc2ljQmxvYwogICAgIHN0cnVjdCBTU0FEYXRhIHsKICAgICAgICAgT3BlcmFuZHM8
Rmx1c2hlZEF0PiBmbHVzaEF0SGVhZDsKICAgICAgICAgT3BlcmFuZHM8Rmx1c2hlZEF0PiBmbHVz
aEF0VGFpbDsKLSAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0eUF0SGVhZDsKLSAg
ICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAgT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPEF2
YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5QXRUYWlsOwogICAgICAgICBIYXNoU2V0PE5vZGUqPiBs
aXZlQXRIZWFkOwogICAgICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlQXRUYWlsOwogICAgICAgICBI
YXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24g
MTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNzMsNiArMzA3Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRX
aXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXMuc3RydWN0dXJlU2V0KCkuc2lu
Z2xldG9uU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
Z2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1
ZSBzcGVjaWZpY1ZhbHVlID0gc3RhdHVzLnNwZWNpZmljVmFsdWUoKSkKICAgICAgICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBjZWxsQ29uc3RhbnQoc3BlY2lmaWNWYWx1
ZS5hc0NlbGwoKSkpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTMwODEsNiArMzA4Miw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFu
dG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIFN5bWJv
bFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldCh1aWQp
OwogICAgICAgICAgICAgICAgIGlmICghZW50cnkuY291bGRCZVdhdGNoZWQoKSB8fCAhbV9ncmFw
aC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChlbnRyeS53YXRjaHBvaW50U2V0KCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChH
ZXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CkBAIC0z
MTMxLDYgKzMxMzMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBOb2RlKiBiYXNlID0gY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKGdsb2Jh
bE9iamVjdCwgc3RhdHVzLm9sZFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAgICAgICAgICAgICAg
ICAgaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgc3RhdGljX2Nhc3Q8
UHJvcGVydHlPZmZzZXQ+KG9wZXJhbmQpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSkpOwog
ICAgICAgICAgICAgICAgIC8vIEtlZXAgc2NvcGUgYWxpdmUgdW50aWwgYWZ0ZXIgcHV0LgogICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29w
ZSkpKTsKQEAgLTMxMzgsNiArMzE0MSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgog
ICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3Bl
KSkpOwogICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmpl
Y3QtPnN5bWJvbFRhYmxlKCktPmdldCh1aWQpOwogICAgICAgICAgICAgICAgIEFTU0VSVCghZW50
cnkuY291bGRCZVdhdGNoZWQoKSB8fCAhbV9ncmFwaC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxp
ZChlbnRyeS53YXRjaHBvaW50U2V0KCkpKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1
dEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNw
cAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNh
c3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIERpc2Fzc2VtYmxlcjo6RGlzYXNzZW1ibGVyKEdyYXBoJiBn
cmFwaCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgpCiB7CisgICAgbV9kdW1wQ29udGV4dC5ncmFwaCA9
ICZtX2dyYXBoOwogICAgIG1fbGFiZWxGb3JCbG9ja0luZGV4LnJlc2l6ZShncmFwaC5udW1CbG9j
a3MoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3Jt
YXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hG
b3JtYXQuY3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZsdXNoRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsOSBAQCB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRmx1CiAgICAgY2FzZSBGbHVzaGVkSlNW
YWx1ZToKICAgICAgICAgb3V0LnByaW50KCJGbHVzaGVkSlNWYWx1ZSIpOwogICAgICAgICByZXR1
cm47CisgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgorICAgICAgICBvdXQucHJpbnQoIkNvbmZs
aWN0aW5nRmx1c2giKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
bHVzaEZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rmx1c2hGb3JtYXQuaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGbHVzaEZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw4IEBAIGVu
dW0gRmx1c2hGb3JtYXQgewogICAgIEZsdXNoZWREb3VibGUsCiAgICAgRmx1c2hlZENlbGwsCiAg
ICAgRmx1c2hlZEJvb2xlYW4sCi0gICAgRmx1c2hlZEpTVmFsdWUKKyAgICBGbHVzaGVkSlNWYWx1
ZSwKKyAgICBDb25mbGljdGluZ0ZsdXNoCiB9OwogCiBpbmxpbmUgTm9kZUZsYWdzIHJlc3VsdEZv
cihGbHVzaEZvcm1hdCBmb3JtYXQpCkBAIC01NCw2ICs1NSw3IEBAIGlubGluZSBOb2RlRmxhZ3Mg
cmVzdWx0Rm9yKEZsdXNoRm9ybWF0IGYKICAgICBjYXNlIERlYWRGbHVzaDoKICAgICBjYXNlIEZs
dXNoZWRKU1ZhbHVlOgogICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgY2FzZSBDb25mbGljdGlu
Z0ZsdXNoOgogICAgICAgICByZXR1cm4gTm9kZVJlc3VsdEpTOwogICAgIGNhc2UgRmx1c2hlZElu
dDMyOgogICAgICAgICByZXR1cm4gTm9kZVJlc3VsdEludDMyOwpAQCAtNzMsNiArNzUsNyBAQCBp
bmxpbmUgVXNlS2luZCB1c2VLaW5kRm9yKEZsdXNoRm9ybWF0IGZvCiAgICAgc3dpdGNoIChmb3Jt
YXQpIHsKICAgICBjYXNlIERlYWRGbHVzaDoKICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAg
IGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKICAgICAgICAgcmV0dXJuIFVudHlwZWRVc2U7CiAgICAg
Y2FzZSBGbHVzaGVkQ2VsbDoKICAgICAgICAgcmV0dXJuIENlbGxVc2U7CkBAIC05Myw2ICs5Niw3
IEBAIGlubGluZSBEYXRhRm9ybWF0IGRhdGFGb3JtYXRGb3IoRmx1c2hGb3IKIHsKICAgICBzd2l0
Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgRGVhZEZsdXNoOgorICAgIGNhc2UgQ29uZmxpY3RpbmdG
bHVzaDoKICAgICAgICAgcmV0dXJuIERhdGFGb3JtYXREZWFkOwogICAgIGNhc2UgRmx1c2hlZEpT
VmFsdWU6CiAgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SlM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuY3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEZs
dXNoZWRBdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIGlmIChtX2Zvcm1h
dCA9PSBEZWFkRmx1c2gpCisgICAgaWYgKG1fZm9ybWF0ID09IERlYWRGbHVzaCB8fCBtX2Zvcm1h
dCA9PSBDb25mbGljdGluZ0ZsdXNoKQogICAgICAgICBvdXQucHJpbnQobV9mb3JtYXQpOwogICAg
IGVsc2UKICAgICAgICAgb3V0LnByaW50KCJyIiwgbV92aXJ0dWFsUmVnaXN0ZXIsICI6IiwgbV9m
b3JtYXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5oCShy
ZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRB
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMiBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KICAgICAKKyAgICBleHBsaWNpdCBGbHVzaGVkQXQoRmx1c2hGb3JtYXQgZm9ybWF0KQorICAg
ICAgICA6IG1fZm9ybWF0KGZvcm1hdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChmb3JtYXQgPT0g
RGVhZEZsdXNoIHx8IGZvcm1hdCA9PSBDb25mbGljdGluZ0ZsdXNoKTsKKyAgICB9CisgICAgCiAg
ICAgRmx1c2hlZEF0KEZsdXNoRm9ybWF0IGZvcm1hdCwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlcikKICAgICAgICAgOiBtX2Zvcm1hdChmb3JtYXQpCiAgICAgICAgICwgbV92aXJ0dWFs
UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKQpAQCAtNjUsNiArNzEsMTcgQEAgcHVibGljOgogICAg
IAogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbHVzaGVkQXQmIG90aGVyKSBjb25zdCB7IHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsgfQogICAgIAorICAgIEZsdXNoZWRBdCBtZXJnZShjb25z
dCBGbHVzaGVkQXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcykKKyAg
ICAgICAgICAgIHJldHVybiBvdGhlcjsKKyAgICAgICAgaWYgKCFvdGhlcikKKyAgICAgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICAgICAgaWYgKCp0aGlzID09IG90aGVyKQorICAgICAgICAgICAg
cmV0dXJuICp0aGlzOworICAgICAgICByZXR1cm4gRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gp
OworICAgIH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2
b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE1
OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOTMsNiArMzkzLDcgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFBy
aW50U3RyZWFtJgogdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4
dCogY29udGV4dCkKIHsKICAgICBEdW1wQ29udGV4dCBteUNvbnRleHQ7CisgICAgbXlDb250ZXh0
LmdyYXBoID0gdGhpczsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIGNvbnRleHQgPSAmbXlD
b250ZXh0OwogICAgIApAQCAtNjQzLDYgKzY0NCw1OSBAQCB2b2lkIEdyYXBoOjppbml0aWFsaXpl
Tm9kZU93bmVycygpCiAgICAgICAgICAgICBibG9jay0+YXQobm9kZUluZGV4KS0+bWlzYy5vd25l
ciA9IGJsb2NrOwogICAgIH0KIH0KKworRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZl
bmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBIYXNoTWFwPENvZGVCbG9jayos
IHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+OjppdGVyYXRvciBpdGVyID0g
bV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKKyAgICBpZiAoaXRlciAhPSBtX2J5
dGVjb2RlTGl2ZW5lc3MuZW5kKCkpCisgICAgICAgIHJldHVybiAqaXRlci0+dmFsdWU7CisgICAg
CisgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPiBsaXZlbmVzcyA9IHN0
ZDo6bWFrZV91bmlxdWU8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+KCk7CisgICAgY29kZUJsb2NrLT5s
aXZlbmVzc0FuYWx5c2lzKCkuY29tcHV0ZUZ1bGxMaXZlbmVzcygqbGl2ZW5lc3MpOworICAgIEZ1
bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQgPSAqbGl2ZW5lc3M7CisgICAgbV9ieXRlY29kZUxp
dmVuZXNzLmFkZChjb2RlQmxvY2ssIHN0ZDo6bW92ZShsaXZlbmVzcykpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK0Z1bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3IoSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIGxpdmVuZXNzRm9y
KGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSkpOworfQorCitib29sIEdyYXBo
Ojppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4pCit7CisgICAgZm9yICg7OykgeworICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQo
KSA8IGNvZGVPcmlnaW4uc3RhY2tPZmZzZXQoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNp
emUpIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBWaXJ0dWFsUmVnaXN0ZXIo
CisgICAgICAgICAgICAgICAgb3BlcmFuZC5vZmZzZXQoKSAtIGNvZGVPcmlnaW4uc3RhY2tPZmZz
ZXQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHJlZy5vZmZzZXQoKSA+PSBKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJTaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5p
c0Nsb3N1cmVDYWxsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJlZy5vZmZzZXQoKSA9PSBKU1N0YWNrOjpD
YWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAg
IGlmIChyZWcub2Zmc2V0KCkgPT0gSlNTdGFjazo6U2NvcGVDaGFpbikKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1
cm4gbGl2ZW5lc3NGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpLm9wZXJhbmRJc0xpdmUo
CisgICAgICAgICAgICAgICAgcmVnLm9mZnNldCgpLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjb2RlT3JpZ2lu
ID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIHRydWU7Cit9CiAgICAgCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NiArNDEsNyBAQAogI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJERkdQ
bGFuLmgiCiAjaW5jbHVkZSAiREZHVmFyaWFkaWNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkZ1bGxC
eXRlY29kZUxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCiAjaW5j
bHVkZSAiSlNTdGFjay5oIgogI2luY2x1ZGUgIk1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUu
aCIKQEAgLTQxNiw2ICs0MTcsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXhlY3V0YWJs
ZUZvcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAgIAorICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUpCisgICAgeworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJl
dHVybiBtX3Byb2ZpbGVkQmxvY2s7CisgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zv
cklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOworICAgIH0KKyAgICAKICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4p
CiAgICAgewogICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNl
bGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBtX3Byb2ZpbGVkQmxvY2spOwpAQCAtNzc2LDYgKzc4
NCwxMCBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFdhdGNocG9pbnRzJiB3YXRjaHBvaW50cygpIHsg
cmV0dXJuIG1fcGxhbi53YXRjaHBvaW50czsgfQogICAgIERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMm
IGNoYWlucygpIHsgcmV0dXJuIG1fcGxhbi5jaGFpbnM7IH0KICAgICAKKyAgICBGdWxsQnl0ZWNv
ZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spOworICAgIEZ1bGxC
eXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSk7CisgICAgYm9vbCBpc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pOworICAgIAogICAgIFZNJiBtX3ZtOwogICAgIFBsYW4m
IG1fcGxhbjsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtNzk3LDYgKzgwOSw3IEBA
IHB1YmxpYzoKICAgICBTZWdtZW50ZWRWZWN0b3I8U3dpdGNoRGF0YSwgND4gbV9zd2l0Y2hEYXRh
OwogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRh
OwogICAgIE93blB0cjxJbmxpbmVDYWxsRnJhbWVTZXQ+IG1faW5saW5lQ2FsbEZyYW1lczsKKyAg
ICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVz
cz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAgICBib29sIG1faGFzQXJndW1lbnRzOwogICAgIEhh
c2hTZXQ8RXhlY3V0YWJsZUJhc2UqPiBtX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVk
OwogICAgIEJpdFZlY3RvciBtX2xhenlWYXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHTW92SGludENvdW50aW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2lu
Y2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVk
ZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIE1vdkhpbnRDb3VudGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBN
b3ZIaW50Q291bnRpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgs
ICJNb3ZIaW50IGNvdW50aW5nIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAK
KyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgd2UgaGF2ZW4ndCBkb25lIHRoaXMgYWxyZWFkeS4KKyAg
ICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9ICZtX2dyYXBoLm1fdmFyaWFi
bGVBY2Nlc3NEYXRhW2ldOworICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmlzUm9vdCgp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
IXZhcmlhYmxlLT5tb3ZIaW50Q291bnQoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJp
YWJsZS0+c2luZ2xlTW92SGludCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAg
ICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPmNvdW50TW92SGludChub2RlLT5jaGlsZDEoKS5ub2RlKCkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPmNvdW50TW92SGludChub2RlKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2Ug
Wm9tYmllSGludDoKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPmNvdW50TW92SGludCgwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworYm9vbCBwZXJmb3Jt
TW92SGludENvdW50aW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiREZHIE1vdkhpbnQgQ291bnRpbmciKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8
TW92SGludENvdW50aW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTW92SGludENvdW50aW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR01vdkhpbnRDb3VudGluZ1BoYXNl
X2gKKyNkZWZpbmUgREZHTW92SGludENvdW50aW5nUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisv
LyBDb21wdXRlcyBWYXJpYWJsZUFjY2Vzc0RhdGE6Om1fbW92SGludENvdW50LiBWYXJpYWJsZXMg
dGhhdCBhcmUgYXNzaWduZWQgb25seSBvbmNlIGNhbiBnZXQKKy8vIHRyZWF0ZWQgc3BlY2lhbGx5
LiBGb3IgZXhhbXBsZSwgT1NSIGV4aXQgaW4gdGhlIEZUTCBjYW4gYWxsb3cgdGhlIGZvcm1hdCB1
c2VkIGZvciBzdWNoCisvLyBub2RlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRpeUF0SGVh
ZC9UYWlsLiBUaGlzIGlzIGEgZm9yd2FyZCBmbG93IHR5cGUgaW5mZXJlbmNlCisvLyBvdmVyIE1v
dkhpbnRzLiBBdCB0aGUgdGltZSB3aGVuIE1vdkhpbnRzIGFyZSBpbnRyb2R1Y2VkLCB3ZSB3ZXJl
IGNlcnRhaW4gdGhhdCBhdCBhbnkKKy8vIHBvaW50IGluIHRoZSBwcm9ncmFtIHdoZXJlIGEgYnl0
ZWNvZGUgdmFyaWFibGUgaGFkIGJlZW4gbGl2ZSwgYWxsIG9mIHRoZSBNb3ZIaW50cyB0aGF0Cisv
LyBmbG93ZWQgaW50byB0aGF0IHBvaW50IGZvciB0aGF0IHZhcmlhYmxlIGhhZCB0aGUgc2FtZSBG
bHVzaEZvcm1hdC4gVGhpcyBhbmFseXNpcyB3aWxsIHRlbGwKKy8vIHlvdSB3aGF0IHRoYXQgZm9y
bWF0IHdvdWxkIGhhdmUgYmVlbi4KKworYm9vbCBwZXJmb3JtTW92SGludENvdW50aW5nKEdyYXBo
Jik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHTW92SGludENvdW50aW5nUGhhc2VfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDc3ICs0Nyw5MCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQo
bV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKICAgICAgICAgCi0gICAgICAgIFZlY3RvcjxCYXNpY0Js
b2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RP
cmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBt
X2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYmxvY2stPnNz
YS0+YXZhaWxhYmlsaXR5QXRIZWFkLmZpbGwoQXZhaWxhYmlsaXR5KCkpOworICAgICAgICAgICAg
YmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLmZpbGwoQXZhaWxhYmlsaXR5KCkpOworICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhG
aXJzdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBkZXB0
aEZpcnN0W2ldOwotICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmZp
bGwoMCk7Ci0gICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwuZmlsbCgw
KTsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGguYmxvY2soMCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgYXJndW1lbnQgPSByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5u
dW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykgeworICAgICAgICAgICAgcm9vdC0+c3Nh
LT5hdmFpbGFiaWxpdHlBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpID0KKyAgICAgICAgICAgICAg
ICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkud2l0aEZsdXNoKAorICAgICAgICAgICAgICAg
ICAgICBGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGFyZ3VtZW50KSkpOwogICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSBy
b290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5udW1iZXJPZkxvY2FscygpOyBsb2NhbC0tOykK
KyAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmxvY2FsKGxvY2FsKSA9
IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IGRlcHRoRmlyc3RbaV07Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIFdlIGVkaXQgYXZhaWxhYmlsaXR5QXRUYWlsIGluLXBsYWNlLCBidXQgZmlyc3QgaW5p
dGlhbGl6ZSBpdCB0bwotICAgICAgICAgICAgLy8gYXZhaWxhYmlsaXR5QXRIZWFkLgotICAgICAg
ICAgICAgT3BlcmFuZHM8Tm9kZSo+JiBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFi
aWxpdHlBdFRhaWw7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFp
bGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
bm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsK
LSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBT
ZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5
Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3VtZW50OiB7Ci0gICAgICAgICAgICAgICAgICAg
IGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgIGlmIChtX2dyYXBoLm1fcGxhbi5tb2RlID09IEZUTEZv
ck9TUkVudHJ5TW9kZSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IG1fZ3Jh
cGgubV9wcm9maWxlZEJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsgbG9jYWwtLTspIHsKKyAg
ICAgICAgICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2NhbCkg
PQorICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkud2l0aEZs
dXNoKAorICAgICAgICAgICAgICAgICAgICAgICAgRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbCkpKTsKICAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgZWZmaWNpZW50
IGJ5IHByb2Nlc3NpbmcgYmxvY2tzIGluIHJldmVyc2UgcG9zdG9yZGVyLgorICAgICAgICBPcGVy
YW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eTsKKyAgICAgICAgYm9vbCBjaGFuZ2VkOwor
ICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGot
LTspIHsKLSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3Vj
Y2Vzc29yKGopOwotICAgICAgICAgICAgICAgIE9wZXJhbmRzPE5vZGUqPiYgc3VjY2Vzc29yQXZh
aWxhYmlsaXR5ID0gc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKLSAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSBhdmFpbGFiaWxpdHkuc2l6ZSgpOyBrLS07KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIE5vZGUqIG15Tm9kZSA9IGF2YWlsYWJpbGl0eVtrXTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFteU5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghc3Vj
Y2Vzc29yLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMobXlOb2RlKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IG92ZXJ3cml0ZSBhdmFpbGFiaWxpdHkgd2l0aCBh
IGJvZ3VzIG5vZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gYXQgbWVyZ2UgcG9pbnRzLiBUaGlz
IGlzIGZpbmUsIHNpbmNlIG1lcmdlIHBvaW50cyBoYXZlCi0gICAgICAgICAgICAgICAgICAgIC8v
IE1vdkhpbnQoUGhpKSdzIHRvIHdvcmsgYXJvdW5kIHRoaXMuIFRoZSBvdXRjb21lIG9mIHRoaXMg
aXMKLSAgICAgICAgICAgICAgICAgICAgLy8geW91IG1pZ2h0IGhhdmUgYSBwcm9ncmFtIGluIHdo
aWNoIGEgbm9kZSBoYXBwZW5zIHRvIHJlbWFpbgotICAgICAgICAgICAgICAgICAgICAvLyBsaXZl
IGludG8gc29tZSBibG9jayBCLCBhbmQgc2VwYXJhdGVseSAoZHVlIHRvIGNvcHkKLSAgICAgICAg
ICAgICAgICAgICAgLy8gcHJvcGFnYXRpb24pIGp1c3Qgb25lIG9mIHRoZSBwcmVkZWNlc3NvcnMg
b2YgQiBpc3N1ZWQgYQotICAgICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50IHB1dHRpbmcgdGhh
dCBub2RlIGludG8gc29tZSBsb2NhbC4gVGhlbiBpbiBCIHdlIG1pZ2h0Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIHRoaW5rIHRoYXQgdGhhdCBub2RlIGlzIGEgdmFsaWQgdmFsdWUgZm9yIHRoYXQg
bG9jYWwuIE9mCi0gICAgICAgICAgICAgICAgICAgIC8vIGNvdXJzZSBpZiB0aGF0IGxvY2FsIHdh
cyBhY3R1YWxseSBsaXZlIGluIEIsIEIgd291bGQgaGF2ZSBhCi0gICAgICAgICAgICAgICAgICAg
IC8vIFBoaSBmb3IgaXQuIFNvIGVzc2VudGlhbGx5IHdlJ2xsIGhhdmUgT1NSIGV4aXQgZHJvcHBp
bmcgdGhpcwotICAgICAgICAgICAgICAgICAgICAvLyBub2RlJ3MgdmFsdWUgaW50byB0aGUgbG9j
YWwgd2hlbiB3ZSBvdGhlcndpc2UgKGluIHRoZSBERkcpCi0gICAgICAgICAgICAgICAgICAgIC8v
IHdvdWxkIGhhdmUgZHJvcHBlZCB1bmRlZmluZWQgaW50byB0aGUgbG9jYWwuIFRoaXMgc2VlbXMK
LSAgICAgICAgICAgICAgICAgICAgLy8gaGFybWxlc3MuCi0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3JBdmFpbGFiaWxpdHlba10gPSBteU5vZGU7Cisg
ICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxh
YmlsaXR5QXRIZWFkOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgR2V0QXJndW1lbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KHZh
cmlhYmxlKS53aXRoRmx1c2godmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAg
ICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogeworICAgICAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpID0gQXZhaWxhYmlsaXR5KHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWls
YWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkgPT0gYmxvY2stPnNzYS0+YXZhaWxhYmls
aXR5QXRUYWlsKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwgPSBhdmFp
bGFiaWxpdHk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2Nr
LT5udW1TdWNjZXNzb3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7CisgICAgICAgICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhdmFpbGFiaWxpdHku
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+
YXZhaWxhYmlsaXR5QXRIZWFkW2ldID0gYXZhaWxhYmlsaXR5W2ldLm1lcmdlKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0p
OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOwogICAgICAgICAKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHJldmlz
aW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiwxMSBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdyYXBoOwogCi0vLyBDb21wdXRl
cyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRpeUF0SGVhZC9UYWlsLiBUaGlzIHJlbGllcyBv
biBsaXZlbmVzcwotLy8gYW5hbHlzaXMgcGhhc2UgaGF2aW5nIGJlZW4gcnVuIGFuZCB0aGUgZ3Jh
cGggbm90IGhhdmluZyBiZWVuIHRyYW5zZm9ybWVkCi0vLyBhZnRlciB0aGF0LgorLy8gQ29tcHV0
ZXMgQmFzaWNCbG9jazo6c3NhLT5hdmFpbGFiaWx0aXlBdEhlYWQvVGFpbC4gVGhpcyBpcyBhIGZv
cndhcmQgZmxvdyB0eXBlIGluZmVyZW5jZQorLy8gb3ZlciBNb3ZIaW50cy4gQXQgdGhlIHRpbWUg
d2hlbiBNb3ZIaW50cyBhcmUgaW50cm9kdWNlZCwgd2Ugd2VyZSBjZXJ0YWluIHRoYXQgYXQgYW55
CisvLyBwb2ludCBpbiB0aGUgcHJvZ3JhbSB3aGVyZSBhIGJ5dGVjb2RlIHZhcmlhYmxlIGhhZCBi
ZWVuIGxpdmUsIGFsbCBvZiB0aGUgTW92SGludHMgdGhhdAorLy8gZmxvd2VkIGludG8gdGhhdCBw
b2ludCBmb3IgdGhhdCB2YXJpYWJsZSBoYWQgdGhlIHNhbWUgRmx1c2hGb3JtYXQuIFRoaXMgYW5h
bHlzaXMgd2lsbCB0ZWxsCisvLyB5b3Ugd2hhdCB0aGF0IGZvcm1hdCB3b3VsZCBoYXZlIGJlZW4u
CiAKIGJvb2wgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKEdyYXBoJik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTU5MTQxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIkRGR0xJQ01QaGFzZS5oIgogI2luY2x1ZGUgIkRGR0xp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0xvb3BQcmVIZWFkZXJDcmVhdGlv
blBoYXNlLmgiCisjaW5jbHVkZSAiREZHTW92SGludENvdW50aW5nUGhhc2UuaCIKICNpbmNsdWRl
ICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50
cnlwb2ludENyZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuaCIKQEAgLTI3Miw2ICsyNzMsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6
Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1TdGFja0xheW91dChkZmcpOwogICAgICAgICBw
ZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAgICBwZXJmb3JtRmx1c2hMaXZlbmVz
c0FuYWx5c2lzKGRmZyk7CisgICAgICAgIHBlcmZvcm1Nb3ZIaW50Q291bnRpbmcoZGZnKTsKICAg
ICAgICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZv
cm1XYXRjaHBvaW50Q29sbGVjdGlvbihkZmcpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE1OTE0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5wcmVkZWNlc3Nv
cnMuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW2pdOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByZWRlY2Vzc29yLT5hcHBlbmROb25UZXJtaW5hbCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFVwc2lsb24sIGJsb2NrLT5s
YXN0KCktPmNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIFNwZWNOb25lLCBVcHNpbG9uLCBwcmVkZWNlc3Nvci0+bGFzdCgpLT5jb2RlT3JpZ2luLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obm9kZSksIEVkZ2UocHJlZGVj
ZXNzb3ItPnZhcmlhYmxlc0F0VGFpbFtpXSwgdXNlS2luZCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
NSw2ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewog
ICAgICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgog
ICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgICAgIGNh
c2UgRmx1c2hlZEpTVmFsdWU6CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoVmFsdWVJ
bkpTU3RhY2ssIHdoZXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFfaAogI2RlZmlu
ZSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFfaAogCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5j
bHVkZSAiREZHRG91YmxlRm9ybWF0U3RhdGUuaCIKICNpbmNsdWRlICJERkdGbHVzaEZvcm1hdC5o
IgogI2luY2x1ZGUgIkRGR0ZsdXNoZWRBdC5oIgpAQCAtMzksNiArNDAsOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3N0cnVjdCBOb2RlOworCiBlbnVtIERvdWJsZUJh
bGxvdCB7IFZvdGVWYWx1ZSwgVm90ZURvdWJsZSB9OwogCiBjbGFzcyBWYXJpYWJsZUFjY2Vzc0Rh
dGEgOiBwdWJsaWMgVW5pb25GaW5kPFZhcmlhYmxlQWNjZXNzRGF0YT4gewpAQCAtNTYsNiArNTks
OCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9pc1Byb2ZpdGFibGVUb1VuYm94KGZhbHNlKQogICAg
ICAgICAsIG1faXNMb2FkZWRGcm9tKGZhbHNlKQogICAgICAgICAsIG1fZG91YmxlRm9ybWF0U3Rh
dGUoRW1wdHlEb3VibGVGb3JtYXRTdGF0ZSkKKyAgICAgICAgLCBtX21vdkhpbnRDb3VudCgwKQor
ICAgICAgICAsIG1fc2luZ2xlTW92SGludCgwKQogICAgIHsKICAgICAgICAgY2xlYXJWb3Rlcygp
OwogICAgIH0KQEAgLTcyLDYgKzc3LDggQEAgcHVibGljOgogICAgICAgICAsIG1fY2hlY2tBcnJh
eUhvaXN0aW5nRmFpbGVkKGZhbHNlKQogICAgICAgICAsIG1faXNQcm9maXRhYmxlVG9VbmJveChm
YWxzZSkKICAgICAgICAgLCBtX2RvdWJsZUZvcm1hdFN0YXRlKEVtcHR5RG91YmxlRm9ybWF0U3Rh
dGUpCisgICAgICAgICwgbV9tb3ZIaW50Q291bnQoMCkKKyAgICAgICAgLCBtX3NpbmdsZU1vdkhp
bnQoMCkKICAgICB7CiAgICAgICAgIGNsZWFyVm90ZXMoKTsKICAgICB9CkBAIC0zNTIsNiArMzU5
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEZsdXNoZWRBdChmbHVzaEZvcm1hdCgpLCBt
YWNoaW5lTG9jYWwoKSk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaXNTaW5nbHlBc3NpZ25lZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbW92SGludENvdW50ID09IDE7IH0KKyAgICB2b2lkIGNvdW50TW92
SGludChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX21vdkhpbnRDb3VudCsrKQor
ICAgICAgICAgICAgbV9zaW5nbGVNb3ZIaW50ID0gbm9kZTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9zaW5nbGVNb3ZIaW50ID0gMDsKKyAgICB9CisgICAgdW5zaWduZWQgbW92SGludENv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9tb3ZIaW50Q291bnQ7IH0KKyAgICBOb2RlKiBzaW5nbGVN
b3ZIaW50KCkgY29uc3QgeyByZXR1cm4gbV9zaW5nbGVNb3ZIaW50OyB9CisgICAgCiBwcml2YXRl
OgogICAgIC8vIFRoaXMgaXMgc2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2llbnQsIHNpbmNlIGFueXRo
aW5nIHdlJ3JlIHVuaWZpZWQgd2l0aAogICAgIC8vIHdpbGwgaGF2ZSB0aGUgc2FtZSBvcGVyYW5k
IGFuZCBzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcmVkaWN0aW9uLiBCdXQKQEAgLTM3NCw2ICszOTIs
OSBAQCBwcml2YXRlOgogCiAgICAgZmxvYXQgbV92b3Rlc1syXTsgLy8gVXNlZCBwcmltYXJpbHkg
Zm9yIGRvdWJsZSB2b3RpbmcgYnV0IG1heSBiZSByZXVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLgog
ICAgIERvdWJsZUZvcm1hdFN0YXRlIG1fZG91YmxlRm9ybWF0U3RhdGU7CisgICAgCisgICAgdW5z
aWduZWQgbV9tb3ZIaW50Q291bnQ7CisgICAgTm9kZSogbV9zaW5nbGVNb3ZIaW50OwogfTsKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwCShyZXZpc2lvbiAx
NTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw5IEBAIHZvaWQgVmFyaWFibGVB
Y2Nlc3NEYXRhRHVtcDo6ZHVtcChQcmludFMKICAgICAgICAgb3V0LnByaW50KCJ+Iik7CiAKICAg
ICBvdXQucHJpbnQoQWJicmV2aWF0ZWRTcGVjdWxhdGlvbkR1bXAobV9kYXRhLT5wcmVkaWN0aW9u
KCkpLCAiLyIsIG1fZGF0YS0+Zmx1c2hGb3JtYXQoKSk7CisgICAgCisgICAgaWYgKE5vZGUqIG5v
ZGUgPSBtX2RhdGEtPnNpbmdsZU1vdkhpbnQoKSkKKyAgICAgICAgb3V0LnByaW50KCI9PiIsIG5v
ZGUpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU5MTQx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Z0bFN0
YXRlKHN0YXRlKQogICAgICAgICAsIG1faGVhcHMoc3RhdGUuY29udGV4dCkKICAgICAgICAgLCBt
X291dChzdGF0ZS5jb250ZXh0KQorICAgICAgICAsIG1fYm9vbGVhbkxvY2FscyhPcGVyYW5kc0xp
a2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9p
bnQzMkxvY2FscyhPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNB
dEhlYWQpCisgICAgICAgICwgbV9pbnQ2NExvY2FscyhPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9kb3VibGVMb2NhbHMoT3Bl
cmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAg
ICAsIG1fdmFsdWVTb3VyY2VzKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZh
cmlhYmxlc0F0SGVhZCkKICAgICAgICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgICAgICAs
IG1faW50ZXJwcmV0ZXIoc3RhdGUuZ3JhcGgsIG1fc3RhdGUpCkBAIC0xMDEsNiArMTA1LDEwIEBA
IHB1YmxpYzoKICAgICAgICAgbV9wcm9sb2d1ZSA9IGFwcGVuZEJhc2ljQmxvY2sobV9mdGxTdGF0
ZS5jb250ZXh0LCBtX2Z0bFN0YXRlLmZ1bmN0aW9uKTsKICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bV9wcm9sb2d1ZSk7CiAgICAgICAgIGNyZWF0ZVBoaVZhcmlhYmxlcygpOworICAgICAgICBjcmVh
dGVTaGFkb3dMb2NhbHMobV9ib29sZWFuTG9jYWxzLCBtX291dC5ib29sZWFuKTsKKyAgICAgICAg
Y3JlYXRlU2hhZG93TG9jYWxzKG1faW50MzJMb2NhbHMsIG1fb3V0LmludDMyKTsKKyAgICAgICAg
Y3JlYXRlU2hhZG93TG9jYWxzKG1faW50NjRMb2NhbHMsIG1fb3V0LmludDY0KTsKKyAgICAgICAg
Y3JlYXRlU2hhZG93TG9jYWxzKG1fZG91YmxlTG9jYWxzLCBtX291dC5kb3VibGVUeXBlKTsKICAg
ICAgICAgCiAgICAgICAgIG1fY2FsbEZyYW1lID0gbV9vdXQucGFyYW0oMCk7CiAgICAgICAgIG1f
dGFnVHlwZU51bWJlciA9IG1fb3V0LmNvbnN0SW50NjQoVGFnVHlwZU51bWJlcik7CkBAIC0xNjgs
NiArMTc2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdm9pZCBj
cmVhdGVTaGFkb3dMb2NhbHMoT3BlcmFuZHM8TFZhbHVlPiYgb3BlcmFuZHMsIExUeXBlIHR5cGUp
CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvcGVyYW5kcy5zaXplKCk7IGktLTsp
CisgICAgICAgICAgICBvcGVyYW5kc1tpXSA9IG1fb3V0LmFsbG9jYSh0eXBlKTsKKyAgICB9Cisg
ICAgCiAgICAgdm9pZCBjb21waWxlQmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAg
ICAgICBpZiAoIWJsb2NrKQpAQCAtMjA0LDggKzIxOCw2IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBpbml0aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2soKTsKICAgICAgICAgCi0gICAg
ICAgIG1fbGl2ZSA9IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQ7Ci0gICAgICAgIAogICAgICAgICBt
X3N0YXRlLnJlc2V0KCk7CiAgICAgICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1faGlnaEJs
b2NrKTsKICAgICAgICAgCkBAIC00NzUsMTIgKzQ4Nyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSkKLSAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgs
IG1fbm9kZSwgdXNlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmFkanVzdGVkUmVm
Q291bnQoKSkKLSAgICAgICAgICAgIG1fbGl2ZS5hZGQobV9ub2RlKTsKLSAgICAgICAgCiAgICAg
ICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0cykKICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIu
ZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsKICAgICAgICAgCkBAIC01NjcsMjEgKzU3MywzMSBA
QCBwcml2YXRlOgogICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNz
Rm9yKG9wZXJhbmQpKTsKIAogICAgICAgICBzd2l0Y2ggKHVzZUtpbmRGb3IodmFyaWFibGUtPmZs
dXNoRm9ybWF0KCkpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgIGNhc2UgSW50
MzJVc2U6IHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVW
YWx1ZShqc1ZhbHVlKSwgbV9ub2RlLCBpc05vdEludDMyKGpzVmFsdWUpKTsKLSAgICAgICAgICAg
IHNldEludDMyKHVuYm94SW50MzIoanNWYWx1ZSkpOworICAgICAgICAgICAgTFZhbHVlIGludFZh
bHVlID0gdW5ib3hJbnQzMihqc1ZhbHVlKTsKKyAgICAgICAgICAgIHNldEludDMyKGludFZhbHVl
KTsKKyAgICAgICAgICAgIG1fb3V0LnNldChpbnRWYWx1ZSwgbV9pbnQzMkxvY2Fscy5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
ZWxsVXNlOgorICAgICAgICB9CisgICAgICAgIGNhc2UgQ2VsbFVzZTogewogICAgICAgICAgICAg
c3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBtX25vZGUs
IGlzTm90Q2VsbChqc1ZhbHVlKSk7CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKGpzVmFsdWUpOwor
ICAgICAgICAgICAgbV9vdXQuc2V0KGpzVmFsdWUsIG1faW50NjRMb2NhbHMub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm9vbGVh
blVzZToKKyAgICAgICAgfQorICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6IHsKICAgICAgICAgICAg
IHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbV9ub2Rl
LCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbih1bmJveEJv
b2xlYW4oanNWYWx1ZSkpOworICAgICAgICAgICAgTFZhbHVlIGJvb2xlYW5WYWx1ZSA9IHVuYm94
Qm9vbGVhbihqc1ZhbHVlKTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oYm9vbGVhblZhbHVlKTsK
KyAgICAgICAgICAgIG1fb3V0LnNldChib29sZWFuVmFsdWUsIG1fYm9vbGVhbkxvY2Fscy5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBVbnR5cGVkVXNlOgorICAgICAgICB9CisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewogICAg
ICAgICAgICAgc2V0SlNWYWx1ZShqc1ZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0LnNldChqc1Zh
bHVlLCBtX2ludDY0TG9jYWxzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC02MTIsNDMg
KzYyOCwzOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZVNldExvY2FsKCkKICAg
ICB7Ci0gICAgICAgIG9ic2VydmVNb3ZIaW50KG1fbm9kZSk7CisgICAgICAgIG9ic2VydmVNb3ZI
aW50KCk7CiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+
Zmx1c2hGb3JtYXQoKSkgewogICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOiB7CiAgICAgICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9j
YWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZTogewogICAgICAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgbV9vdXQuc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVM
b2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSA9IFZhbHVlU291cmNlKERvdWJsZUluSlNTdGFjaywgdmFyaWFibGUtPm1hY2hpbmVM
b2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6IHsKICAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZvcih2YXJpYWJsZS0+bWFjaGluZUxvY2Fs
KCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwo
KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOiB7CiAgICAgICAgICAgICBM
VmFsdWUgdmFsdWUgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1f
b3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7
Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
IFZhbHVlU291cmNlKEludDUySW5KU1N0YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpOwot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOiB7CiAgICAgICAgICAgICBMVmFsdWUg
dmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3Rv
cmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAg
ICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVT
b3VyY2UoVmFsdWVJbkpTU3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46IHsKQEAgLTY1NiwyMCArNjY3LDI1IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAogICAgICAgICAgICAgICAgIGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKICAgICAg
ICAgICAgICAgICBhZGRyZXNzRm9yKHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAg
ICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNv
dXJjZShWYWx1ZUluSlNTdGFjaywgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBEZWFkRmx1c2g6CisgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGVt
aXRNb3ZIaW50KCk7CisgICAgICAgIAorICAgICAgICAvLyBEbyB0aGlzIGxhc3Qgc28gdGhhdCB3
ZSBkb24ndCBsZWF2ZSBtX3ZhbHVlU291cmNlcyBjbGFpbWluZyB0aGF0IHdlIGhhdmUgdG8KKyAg
ICAgICAgLy8gbG9hZCB0aGlzIHZhcmlhYmxlJ3MgdmFsdWUgZnJvbSB0aGUgc2hhZG93IGxvY2Fs
cy4gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24uCisgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpID0KKyAgICAgICAgICAgIFZhbHVlU291cmNlOjpmbHVzaGVk
QXQodmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
TW92SGludCgpCiAgICAgewotICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOworICAgICAg
ICBlbWl0TW92SGludCgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVab21iaWVIaW50
KCkKQEAgLTY4MCw4ICs2OTYsOSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZU1v
dkhpbnRBbmRDaGVjaygpCiAgICAgewotICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOwor
ICAgICAgICBvYnNlcnZlTW92SGludCgpOwogICAgICAgICBzcGVjdWxhdGUobV9ub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIGVtaXRNb3ZIaW50KCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29t
cGlsZVBoYW50b20oKQpAQCAtMjU1Nyw3ICsyNTc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAg
ICAgICAgIEV4aXRBcmd1bWVudExpc3QgYXJndW1lbnRzOwogICAgICAgICAKLSAgICAgICAgYnVp
bGRFeGl0QXJndW1lbnRzKGV4aXQsIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUoKSk7CisgICAg
ICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0LCBhcmd1bWVudHMsIEZvcm1hdHRlZFZhbHVlKCks
IGV4aXQubV9jb2RlT3JpZ2luKTsKICAgICAgICAgY2FsbFN0YWNrbWFwKGV4aXQsIGFyZ3VtZW50
cyk7CiAgICAgICAgIAogICAgICAgICBpbmZvLm1faXNJbnZhbGlkYXRpb25Qb2ludCA9IHRydWU7
CkBAIC0zODIyLDI1ICszODM5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNMaXZlKE5v
ZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbV9saXZlLmNvbnRhaW5zKG5vZGUpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIHVzZShFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBBU1NF
UlQoZWRnZS0+aGFzUmVzdWx0KCkpOwotICAgICAgICBpZiAoIWVkZ2UuZG9lc0tpbGwoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9saXZlLnJlbW92ZShlZGdlLm5vZGUoKSk7Ci0g
ICAgfQotICAgIAotICAgIC8vIFdyYXBwZXIgdXNlZCBvbmx5IGZvciBERkdfTk9ERV9ET19UT19D
SElMRFJFTgotICAgIHZvaWQgdXNlKE5vZGUqLCBFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICB1
c2UoZWRnZSk7Ci0gICAgfQotICAgIAogICAgIExCYXNpY0Jsb2NrIGxvd0Jsb2NrKEJhc2ljQmxv
Y2sqIGJsb2NrKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYmxvY2tzLmdldChibG9jayk7CkBA
IC0zODQ5LDE3ICszODQ3LDQ4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplT1NSRXhp
dFN0YXRlRm9yQmxvY2soKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YWx1
ZVNvdXJjZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBt
X2hpZ2hCbG9jay0+c3NhLT5mbHVzaEF0SGVhZFtpXTsKKyAgICAgICAgICAgIEF2YWlsYWJpbGl0
eSBhdmFpbGFiaWxpdHkgPSBtX2hpZ2hCbG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV07
CisgICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBhdmFpbGFiaWxpdHkuZmx1c2hlZEF0KCk7
CiAgICAgICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgpKSB7Ci0gICAgICAgICAgICBjYXNl
IERlYWRGbHVzaDogewotICAgICAgICAgICAgICAgIC8vIE11c3QgY29uc2lkZXIgYXZhaWxhYmxl
IG5vZGVzIGluc3RlYWQuCi0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2Nr
LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUp
IHsKKyAgICAgICAgICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAgICAgICAgY2FzZSBDb25mbGlj
dGluZ0ZsdXNoOiB7CisgICAgICAgICAgICAgICAgLy8gTXVzdCBjb25zaWRlciBhdmFpbGFibGUg
dmFyaWFibGVzIGluc3RlYWQuCisgICAgICAgICAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHkuaGFz
VmFyaWFibGUoKSkgewogICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZh
bHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX3ZhbHVl
U291cmNlc1tpXSA9IFZhbHVlU291cmNlKG5vZGUpOworICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBhdmFpbGFiaWxpdHkudmFyaWFibGUoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoTm9kZSogbm9kZSA9IHZhcmlhYmxlLT5zaW5nbGVNb3ZIaW50KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBPU1IgZXhpdCBzaG91bGQg
anVzdCB0cnkgdG8gbGF6aWx5IGZpZ3VyZSBvdXQgaG93CisgICAgICAgICAgICAgICAgICAgIC8v
IHRvIHJlYWQgYW5kIGRlY29kZSB3aGF0ZXZlciBub2RlIHRoaXMgdmFyaWFibGUgb3JpZ2luYXRl
ZCBmcm9tLgorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291
cmNlKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRo
ZSB2YXJpYWJsZSBpcyBtdWx0aXBseS1hc3NpZ25lZCBhbmQgd2Ugd2lsbCBlbnN1cmUgdGhhdAor
ICAgICAgICAgICAgICAgIC8vIGluIGVhY2ggcGxhY2Ugd2hlcmUgd2UgYXNzaWduIGl0LCB3ZSB3
aWxsIHVzZSB0aGUgc2FtZSByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVk
SlNWYWx1ZToKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZERv
dWJsZToKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJj
ZShEb3VibGVJbkxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzW2ldID0gVmFsdWVTb3VyY2UoSW50MzJJbkxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6CisgICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoSW50NTJJbkxvY2FsKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9v
bGVhbjoKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJj
ZShCb29sZWFuSW5Mb2NhbCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
QEAgLTM5MjQsMTAgKzM5NTMsMjIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEV4aXRBcmd1
bWVudExpc3QgYXJndW1lbnRzOwogICAgICAgICAKLSAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRz
KGV4aXQsIGFyZ3VtZW50cywgbG93VmFsdWUpOworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBleGl0Lm1fY29kZU9yaWdpbjsKICAgICAgICAgCi0gICAgICAgIGlmIChkaXJlY3Rpb24g
PT0gRm9yd2FyZFNwZWN1bGF0aW9uKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9ub2RlKTsKKyAg
ICAgICAgaWYgKGRpcmVjdGlvbiA9PSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgICAgICAgICAg
YnVpbGRFeGl0QXJndW1lbnRzKGV4aXQsIGFyZ3VtZW50cywgbG93VmFsdWUsIGNvZGVPcmlnaW4p
OworICAgICAgICBlbHNlIGlmIChkaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKSB7Cisg
ICAgICAgICAgICBpZiAoIXJlY292ZXJ5KSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBub2RlSW5kZXggPSBtX25vZGVJbmRleDsgbm9kZUluZGV4IDwgbV9oaWdoQmxvY2stPnNpemUo
KTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGln
aEJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y29k
ZU9yaWdpbkZvckV4aXRUYXJnZXQgPT0gY29kZU9yaWdpbikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luID0gbm9kZS0+Y29k
ZU9yaWdpbkZvckV4aXRUYXJnZXQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYnVp
bGRFeGl0QXJndW1lbnRzKGV4aXQsIGFyZ3VtZW50cywgbG93VmFsdWUsIGNvZGVPcmlnaW4pOwog
ICAgICAgICAgICAgZXhpdC5jb252ZXJ0VG9Gb3J3YXJkKG1faGlnaEJsb2NrLCBtX25vZGUsIG1f
bm9kZUluZGV4LCByZWNvdmVyeSwgYXJndW1lbnRzKTsKICAgICAgICAgfQogICAgICAgICAKQEAg
LTM5MzUsMTYgKzM5NzYsNDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgdm9pZCBidWls
ZEV4aXRBcmd1bWVudHMoCi0gICAgICAgIE9TUkV4aXQmIGV4aXQsIEV4aXRBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUpCisgICAgICAgIE9TUkV4aXQmIGV4
aXQsIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUs
CisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CisgICAgICAgIGlmICh2ZXJi
b3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIFVz
aW5nIGxpdmVuZXNzIGF0ICIsIGNvZGVPcmlnaW4sICJcbiIpOworICAgICAgICAKICAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChtX2NhbGxGcmFtZSk7CiAgICAgICAgIGlmICghIWxvd1ZhbHVlKQog
ICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAg
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3BlcmFuZEZv
ckluZGV4KGkpOworICAgICAgICAgICAgYm9vbCBpc0xpdmUgPSBtX2dyYXBoLmlzTGl2ZUluQnl0
ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3JpZ2luKTsKKyAgICAgICAgICAg
IGlmICghaXNMaXZlKSB7CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRW
YWx1ZTo6ZGVhZCgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBWYWx1ZVNvdXJjZSBzb3VyY2UgPSBtX3ZhbHVlU291
cmNlc1tpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChzb3VyY2Uua2luZCgp
KSB7CisgICAgICAgICAgICBjYXNlIFZhbHVlSW5Mb2NhbDoKKyAgICAgICAgICAgICAgICBhZGRF
eGl0QXJndW1lbnRGb3JMb2NhbCgKKyAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRz
LCBpLCBWYWx1ZUZvcm1hdEpTVmFsdWUsIG1faW50NjRMb2NhbHNbaV0pOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEb3VibGVJbkxvY2FsOgorICAgICAgICAgICAg
ICAgIGFkZEV4aXRBcmd1bWVudEZvckxvY2FsKAorICAgICAgICAgICAgICAgICAgICBleGl0LCBh
cmd1bWVudHMsIGksIFZhbHVlRm9ybWF0RG91YmxlLCBtX2RvdWJsZUxvY2Fsc1tpXSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEludDMySW5Mb2NhbDoKKyAgICAg
ICAgICAgICAgICBhZGRFeGl0QXJndW1lbnRGb3JMb2NhbCgKKyAgICAgICAgICAgICAgICAgICAg
ZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1hdEludDMyLCBtX2ludDMyTG9jYWxzW2ldKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW50NTJJbkxvY2FsOgor
ICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudEZvckxvY2FsKAorICAgICAgICAgICAgICAg
ICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0SW50NTIsIG1faW50NjRMb2NhbHNb
aV0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCb29sZWFuSW5M
b2NhbDoKKyAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnRGb3JMb2NhbCgKKyAgICAgICAg
ICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1hdEJvb2xlYW4sIG1fYm9v
bGVhbkxvY2Fsc1tpXSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IFZhbHVlSW5KU1N0YWNrOgogICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0
VmFsdWU6OmluSlNTdGFjayhzb3VyY2UudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMzk1OCw3ICs0MDMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0RvdWJsZShzb3VyY2Uu
dmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBTb3VyY2VJc0RlYWQ6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4
aXRWYWx1ZTo6ZGVhZCgpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEhhdmVOb2Rl
OgogICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudEZvck5vZGUoZXhpdCwgYXJndW1lbnRz
LCBpLCBzb3VyY2Uubm9kZSgpKTsKQEAgLTM5OTEsNTMgKzQwNjMsNiBAQCBwcml2YXRlOgogICAg
ICAgICBpZiAodHJ5VG9TZXRDb25zdGFudEV4aXRBcmd1bWVudChleGl0LCBpbmRleCwgbm9kZSkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBpZiAoIWlzTGl2ZShub2Rl
KSkgewotICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAocGVybWl0c09TUkJhY2t3YXJkUmV3aXJpbmcobm9kZS0+b3AoKSkpIHsKLSAg
ICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAg
ICAgIGlmICh0cnlUb1NldENvbnN0YW50RXhpdEFyZ3VtZW50KGV4aXQsIGluZGV4LCBub2RlKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmIChpc0xpdmUo
bm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICAgICAgICAg
IE5vZGUqIGJlc3ROb2RlID0gMDsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBiZXN0U2NvcmUg
PSAwOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+Ojpp
dGVyYXRvciBpdGVyID0gbV9saXZlLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgSGFzaFNldDxO
b2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1fbGl2ZS5lbmQoKTsKLSAgICAgICAgICAgICAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5k
aWRhdGUgPSAqaXRlcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+ZmxhZ3Mo
KSAmIE5vZGVIYXNWYXJBcmdzKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlLT5jaGlsZDEoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRl
LT5jaGlsZDEoKSAhPSBub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG15U2NvcmUgPSBmb3J3YXJkUmV3aXJpbmdTZWxl
Y3Rpb25TY29yZShjYW5kaWRhdGUtPm9wKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAobXlT
Y29yZSA8PSBiZXN0U2NvcmUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICAgICAgYmVzdE5vZGUgPSBjYW5kaWRhdGU7Ci0gICAgICAgICAgICAgICAg
ICAgIGJlc3RTY29yZSA9IG15U2NvcmU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmIChiZXN0Tm9kZSkgewotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoaXNMaXZlKGJlc3ROb2RlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBi
ZXN0Tm9kZTsKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFmb3Vu
ZCkgewotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaW5kZXhdID0gRXhpdFZhbHVlOjpk
ZWFkKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoaXNMaXZlKG5vZGUpKTsKLQogICAgICAgICBMb3dl
cmVkTm9kZVZhbHVlIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQobm9kZSk7CiAgICAgICAgIGlm
IChpc1ZhbGlkKHZhbHVlKSkgewogICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFy
Z3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0SW50MzIsIHZhbHVlLnZhbHVlKCkpOwpAQCAtNDA5
OSw2ICs0MTI0LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdm9p
ZCBhZGRFeGl0QXJndW1lbnRGb3JMb2NhbCgKKyAgICAgICAgT1NSRXhpdCYgZXhpdCwgRXhpdEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCB1bnNpZ25lZCBpbmRleCwgVmFsdWVGb3JtYXQgZm9ybWF0
LAorICAgICAgICBMVmFsdWUgbG9jYWwpCisgICAgeworICAgICAgICBhZGRFeGl0QXJndW1lbnQo
ZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgZm9ybWF0LCBtX291dC5nZXQobG9jYWwpKTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCBhZGRFeGl0QXJndW1lbnQoCiAgICAgICAgIE9TUkV4aXQmIGV4aXQs
IEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgdW5zaWduZWQgaW5kZXgsIFZhbHVlRm9ybWF0
IGZvcm1hdCwKICAgICAgICAgTFZhbHVlIHZhbHVlKQpAQCAtNDEwNywxNCArNDEzOSw3NyBAQCBw
cml2YXRlOgogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBvYnNlcnZlTW92SGludChOb2RlKiBub2RlKQorICAgIC8vIE5vdGlmaWVzIG91ciBs
b2NhbCB2YWx1ZSBzb3VyY2VzIHRoYXQgdGhlIGdpdmVuIHZhcmlhYmxlIGlzIGF2YWlsYWJsZSB2
aWEgdGhlIGdpdmVuCisgICAgLy8gbm9kZS4KKyAgICB2b2lkIG9ic2VydmVNb3ZIaW50KCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChub2RlLT5jb250YWluc01vdkhpbnQoKSk7Ci0gICAgICAgIEFT
U0VSVChub2RlLT5vcCgpICE9IFpvbWJpZUhpbnQpOworICAgICAgICBBU1NFUlQobV9ub2RlLT5j
b250YWluc01vdkhpbnQoKSk7CisgICAgICAgIEFTU0VSVChtX25vZGUtPm9wKCkgIT0gWm9tYmll
SGludCk7CiAgICAgICAgIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUt
PmxvY2FsKCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbV9ub2RlLT5sb2Nh
bCgpOwogICAgICAgICAKLSAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChvcGVyYW5kKSA9
IFZhbHVlU291cmNlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzLm9wZXJhbmQob3BlcmFuZCkgPSBWYWx1ZVNvdXJjZShtX25vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CisgICAgfQorICAgIAorICAgIC8vIEZvciBzaW5nbHktYXNzaWduZWQgdmFyaWFibGVzLCB0
aGlzIGp1c3Qgb2JzZXJ2ZXMgdGhhdCB0aGUgdmFyaWFibGUgaXMgYXZhaWxhYmxlIHZpYQorICAg
IC8vIHRoZSBhcHByb3ByaWF0ZSBub2RlLiBGb3IgbXVsdGlwbHktYXNzaWduZWQgdmFyaWFibGVz
LCB0aGlzIHN0b3JlcyB0aGUgdmFyaWFibGVzIHZhbHVlCisgICAgLy8gaW50byBvdXIgYnl0ZWNv
ZGUgc2hhZG93IGxvY2FscyBhbmQgbm90ZXMgdGhpcyBpbiBtX3ZhbHVlU291cmNlcy4KKyAgICB2
b2lkIGVtaXRNb3ZIaW50KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX25vZGUtPmNvbnRhaW5z
TW92SGludCgpKTsKKyAgICAgICAgQVNTRVJUKG1fbm9kZS0+b3AoKSAhPSBab21iaWVIaW50KTsK
KyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIGlmIChkYXRhLT5pc1NpbmdseUFzc2lnbmVkKCkp
IHsKKyAgICAgICAgICAgIG9ic2VydmVNb3ZIaW50KCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoZGF0YS0+Zmx1c2hGb3JtYXQoKSkg
eworICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6CisgICAgICAgICAgICBtX291dC5zZXQoCisg
ICAgICAgICAgICAgICAgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbiksCisgICAgICAgICAgICAgICAgbV9kb3VibGVMb2NhbHMub3BlcmFuZChkYXRh
LT5sb2NhbCgpKSk7CisgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKGRhdGEtPmxv
Y2FsKCkpID0gVmFsdWVTb3VyY2UoRG91YmxlSW5Mb2NhbCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgIG1f
b3V0LnNldCgKKyAgICAgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pLAorICAgICAgICAgICAgICAgIG1faW50MzJMb2NhbHMub3Bl
cmFuZChkYXRhLT5sb2NhbCgpKSk7CisgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5k
KGRhdGEtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJbkxvY2FsKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgorICAgICAg
ICAgICAgbV9vdXQuc2V0KAorICAgICAgICAgICAgICAgIGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQx
KCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiksCisgICAgICAgICAgICAgICAgbV9pbnQ2NExv
Y2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2Vz
Lm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQ1MkluTG9jYWwpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoK
KyAgICAgICAgICAgIG1fb3V0LnNldCgKKyAgICAgICAgICAgICAgICBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiksCisgICAgICAgICAgICAgICAgbV9p
bnQ2NExvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG1fdmFsdWVT
b3VyY2VzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWwp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVk
Qm9vbGVhbjoKKyAgICAgICAgICAgIG1fb3V0LnNldCgKKyAgICAgICAgICAgICAgICBsb3dCb29s
ZWFuKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiksCisgICAgICAg
ICAgICAgICAgbV9ib29sZWFuTG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkpOworICAgICAg
ICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVlU291cmNl
KEJvb2xlYW5JbkxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgICAgICBtX291dC5zZXQobG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMSgpKSwgbV9pbnQ2NExvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkp
KTsKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkgPSBW
YWx1ZVNvdXJjZShWYWx1ZUluTG9jYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2
b2lkIHNldEludDMyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKQEAgLTQyNzIsNyArNDM2Nywx
MiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fYm9v
bGVhblZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX3N0b3Jh
Z2VWYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9kb3VibGVW
YWx1ZXM7Ci0gICAgSGFzaFNldDxOb2RlKj4gbV9saXZlOworICAgIAorICAgIC8vIEJ5dGVjb2Rl
IHNoYWRvdyBsb2NhbHMuCisgICAgT3BlcmFuZHM8TFZhbHVlPiBtX2Jvb2xlYW5Mb2NhbHM7Cisg
ICAgT3BlcmFuZHM8TFZhbHVlPiBtX2ludDMyTG9jYWxzOworICAgIE9wZXJhbmRzPExWYWx1ZT4g
bV9pbnQ2NExvY2FsczsKKyAgICBPcGVyYW5kczxMVmFsdWU+IG1fZG91YmxlTG9jYWxzOwogICAg
IAogICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9waGlzOwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw3ICs3Myw3IEBAIHZvaWQgT1NSRXhpdDo6Y29udmVydFRvRm9yd2FyZCgKICAgICBBU1NF
UlQobm9kZS0+Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CiAgICAgCiAg
ICAgbV9jb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKLSAgICAKKwogICAgIGlmICghdmFs
dWUpCiAgICAgICAgIHJldHVybjsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPdXRwdXQuaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSw3IEBAIHB1YmxpYzoK
ICAgICBMVmFsdWUgaW50VG9QdHIoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBi
dWlsZEludFRvUHRyKG1fYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9CiAgICAgTFZhbHVlIGJpdENh
c3QoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBidWlsZEJpdENhc3QobV9idWls
ZGVyLCB2YWx1ZSwgdHlwZSk7IH0KICAgICAKKyAgICBMVmFsdWUgYWxsb2NhKExUeXBlIHR5cGUp
IHsgcmV0dXJuIGJ1aWxkQWxsb2NhKG1fYnVpbGRlciwgdHlwZSk7IH0KICAgICBMVmFsdWUgZ2V0
KExWYWx1ZSByZWZlcmVuY2UpIHsgcmV0dXJuIGJ1aWxkTG9hZChtX2J1aWxkZXIsIHJlZmVyZW5j
ZSk7IH0KICAgICBMVmFsdWUgc2V0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHJlZmVyZW5jZSkgeyBy
ZXR1cm4gYnVpbGRTdG9yZShtX2J1aWxkZXIsIHZhbHVlLCByZWZlcmVuY2UpOyB9CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAkocmV2
aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDIxIEBAIHZvaWQgVmFsdWVTb3VyY2U6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICBjYXNlIFNvdXJjZU5vdFNldDoKICAgICAgICAg
b3V0LnByaW50KCJTb3VyY2VOb3RTZXQiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFs
dWVJbkxvY2FsOgorICAgICAgICBvdXQucHJpbnQoIlZhbHVlSW5Mb2NhbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbnQzMkluTG9jYWw6CisgICAgICAgIG91dC5wcmludCgiSW50MzJJ
bkxvY2FsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDUySW5Mb2NhbDoKKyAgICAg
ICAgb3V0LnByaW50KCJJbnQ1MkluTG9jYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Qm9vbGVhbkluTG9jYWw6CisgICAgICAgIG91dC5wcmludCgiQm9vbGVhbkluTG9jYWwiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91YmxlSW5Mb2NhbDoKKyAgICAgICAgb3V0LnByaW50
KCJEb3VibGVJbkxvY2FsIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFZhbHVlSW5KU1N0
YWNrOgogICAgICAgICBvdXQucHJpbnQoIlZhbHVlSW5KU1N0YWNrOiIsIHZpcnR1YWxSZWdpc3Rl
cigpKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExWYWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMTU5MTQxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAorI2luY2x1ZGUgIkRGR0ZsdXNoZWRBdC5oIgogI2lu
Y2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0zOCw2ICszOSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CiAKIGVudW0gVmFsdWVTb3VyY2VLaW5kIHsKICAgICBTb3VyY2VOb3RT
ZXQsCisgICAgVmFsdWVJbkxvY2FsLAorICAgIEludDMySW5Mb2NhbCwKKyAgICBJbnQ1MkluTG9j
YWwsCisgICAgQm9vbGVhbkluTG9jYWwsCisgICAgRG91YmxlSW5Mb2NhbCwKICAgICBWYWx1ZUlu
SlNTdGFjaywKICAgICBJbnQzMkluSlNTdGFjaywKICAgICBJbnQ1MkluSlNTdGFjaywKQEAgLTU2
LDcgKzYyLDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKFZhbHVlU291cmNl
S2luZCBraW5kKQogICAgICAgICA6IG1fa2luZChraW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fa2luZCA9PSBTb3VyY2VJc0RlYWQpOworICAgICAgICBBU1NFUlQobV9raW5kID09IFNvdXJj
ZUlzRGVhZCB8fCBtX2tpbmQgPT0gVmFsdWVJbkxvY2FsIHx8IG1fa2luZCA9PSBJbnQzMkluTG9j
YWwgfHwgbV9raW5kID09IEludDUySW5Mb2NhbCB8fCBtX2tpbmQgPT0gQm9vbGVhbkluTG9jYWwg
fHwgbV9raW5kID09IERvdWJsZUluTG9jYWwpOwogICAgIH0KICAgICAKICAgICBleHBsaWNpdCBW
YWx1ZVNvdXJjZShERkc6Ok5vZGUqIG5vZGUpCkBAIC03Miw2ICs3OCwyOCBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fdmFsdWUudmlydHVhbFJlZ2lzdGVyID0gcmVnLm9mZnNldCgpOwogICAgIH0KICAg
ICAKKyAgICBzdGF0aWMgVmFsdWVTb3VyY2UgZmx1c2hlZEF0KGNvbnN0IERGRzo6Rmx1c2hlZEF0
JiBmbHVzaCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZmx1c2guZm9ybWF0KCkpIHsKKyAgICAg
ICAgY2FzZSBERkc6OkZsdXNoZWRKU1ZhbHVlOgorICAgICAgICBjYXNlIERGRzo6Rmx1c2hlZENl
bGw6CisgICAgICAgIGNhc2UgREZHOjpGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVy
biBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywgZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgREZHOjpGbHVzaGVkRG91YmxlOgorICAgICAgICAg
ICAgcmV0dXJuIFZhbHVlU291cmNlKERvdWJsZUluSlNTdGFjaywgZmx1c2gudmlydHVhbFJlZ2lz
dGVyKCkpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgREZHOjpGbHVzaGVkSW50MzI6Cisg
ICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2ssIGZsdXNoLnZpcnR1
YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERGRzo6Rmx1c2hlZElu
dDUyOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEludDUySW5KU1N0YWNrLCBmbHVz
aC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOworICAgICAgICB9Cisg
ICAgfQorICAgIAogICAgIFZhbHVlU291cmNlS2luZCBraW5kKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2tpbmQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
dW1wQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRHVtcENvbnRleHQuY3BwCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EdW1wQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4
LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1EdW1wQ29udGV4dDo6RHVtcENvbnRleHQoKSB7
IH0KK0R1bXBDb250ZXh0OjpEdW1wQ29udGV4dCgpCisgICAgOiBncmFwaCgwKQoreworfQorCiBE
dW1wQ29udGV4dDo6fkR1bXBDb250ZXh0KCkgeyB9CiAKIGJvb2wgRHVtcENvbnRleHQ6OmlzRW1w
dHkoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRHVtcENvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EdW1wQ29u
dGV4dC5oCShyZXZpc2lvbiAxNTkxNDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EdW1wQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCituYW1lc3BhY2UgREZHIHsgY2xhc3MgR3JhcGg7IH0KKwogc3RydWN0IER1
bXBDb250ZXh0IHsKICAgICBEdW1wQ29udGV4dCgpOwogICAgIH5EdW1wQ29udGV4dCgpOwpAQCAt
NDEsNiArNDMsNyBAQCBzdHJ1Y3QgRHVtcENvbnRleHQgewogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCA9ICIiKSBjb25zdDsKICAgICAKICAgICBTdHJpbmdI
YXNoRHVtcENvbnRleHQ8U3RydWN0dXJlPiBzdHJ1Y3R1cmVzOworICAgIERGRzo6R3JhcGgqIGdy
YXBoOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE1OTE0MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
OSwxMyArNDY5LDEzIEBAIHB1YmxpYzoKICAgICBib29sIHVzZXNOb25TdHJpY3RFdmFsKCkgeyBy
ZXR1cm4gbV91c2VzTm9uU3RyaWN0RXZhbDsgfQogICAgIHZvaWQgc2V0VXNlc05vblN0cmljdEV2
YWwoYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCkgeyBtX3VzZXNOb25TdHJpY3RFdmFsID0gdXNlc05v
blN0cmljdEV2YWw7IH0KIAotICAgIGludCBjYXB0dXJlU3RhcnQoKSB7IHJldHVybiBtX2NhcHR1
cmVTdGFydDsgfQorICAgIGludCBjYXB0dXJlU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1
cmVTdGFydDsgfQogICAgIHZvaWQgc2V0Q2FwdHVyZVN0YXJ0KGludCBjYXB0dXJlU3RhcnQpIHsg
bV9jYXB0dXJlU3RhcnQgPSBjYXB0dXJlU3RhcnQ7IH0KIAotICAgIGludCBjYXB0dXJlRW5kKCkg
eyByZXR1cm4gbV9jYXB0dXJlRW5kOyB9CisgICAgaW50IGNhcHR1cmVFbmQoKSBjb25zdCB7IHJl
dHVybiBtX2NhcHR1cmVFbmQ7IH0KICAgICB2b2lkIHNldENhcHR1cmVFbmQoaW50IGNhcHR1cmVF
bmQpIHsgbV9jYXB0dXJlRW5kID0gY2FwdHVyZUVuZDsgfQogCi0gICAgaW50IGNhcHR1cmVDb3Vu
dCgpIHsgcmV0dXJuIC0obV9jYXB0dXJlRW5kIC0gbV9jYXB0dXJlU3RhcnQpOyB9CisgICAgaW50
IGNhcHR1cmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIC0obV9jYXB0dXJlRW5kIC0gbV9jYXB0dXJl
U3RhcnQpOyB9CiAKICAgICBpbnQgcGFyYW1ldGVyQ291bnQoKSB7IHJldHVybiBtX3BhcmFtZXRl
ckNvdW50SW5jbHVkaW5nVGhpcyAtIDE7IH0KICAgICBpbnQgcGFyYW1ldGVyQ291bnRJbmNsdWRp
bmdUaGlzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217073</attachid>
            <date>2013-11-15 13:10:23 -0800</date>
            <delta_ts>2013-11-15 16:30:30 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>121238</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MSBA
QAorMjAxMy0xMS0xNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgaGF2ZSBhbiBleHBsaWNpdCBub3Rpb24gb2YgYnl0ZWNvZGUgbGl2ZW5lc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDE4MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
VGhpcyBtYWtlcyBGVEwgT1NSIGV4aXQgdXNlIGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lzIHRv
IGRldGVybWluZSB3aGljaCB2YXJpYWJsZXMKKyAgICAgICAgdG8gaW5jbHVkZSB2YWx1ZXMgZm9y
LiBUaGUgZGVjaXNpb24gb2YgaG93IHRvIGdldCB0aGUgdmFsdWVzIG9mIHZhcmlhYmxlcyBpcyBi
YXNlZCBvbgorICAgICAgICBmb3J3YXJkIHByb3BhZ2F0aW9uIG9mIE1vdkhpbnRzIGFuZCBTZXRM
b2NhbHMuCisgICAgICAgIAorICAgICAgICBUaGlzIGZpeGVzIGEgYnVuY2ggb2YgYnVncyAobGlr
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MTM4IGJ1dAorICAg
ICAgICBhbHNvIG90aGVycyB0aGF0IEkgbm90aWNlZCB3aGVuIEkgc3RhcnRlZCB3cml0aW5nIG1v
cmUgdGFyZ2V0dGVkIHRlc3RzKSBhbmQgYWxsb3dzIHVzCisgICAgICAgIHRvIHJlbW92ZSBzb21l
IHNrZXRjaHkgY29kZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmg6
CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAg
ICAgKEpTQzo6aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpzZXRG
b3JPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6
CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpzdGVwT3Zlckluc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZUxvY2FsTGl2
ZW5lc3NGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpczo6cnVuTGl2ZW5lc3NGaXhwb2ludCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpczo6b3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpnZXRMaXZlbmVzc0luZm8pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MpOgorICAgICAgICAq
IGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOgorICAgICAgICAoSlNDOjpvcGVyYW5kVGhhdElzTm90QWx3
YXlzTGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xpdmUpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhcHR1cmVD
b3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FwdHVyZVN0YXJ0KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpjYXB0dXJlRW5kKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3Jp
Z2luLmNwcDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpkdW1wSW5Db250ZXh0KToK
KyAgICAgICAgKiBieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzKToKKyAg
ICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OmdldE91dCk6CisgICAgICAgIChKU0M6
OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlKToKKyAgICAgICAgKEpTQzo6RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M6OmdldExpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHQXZhaWxh
YmlsaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5OjpkdW1w
KToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OmR1bXBJbkNvbnRleHQpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6
QXZhaWxhYmlsaXR5OjpBdmFpbGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJp
bGl0eTo6dW5hdmFpbGFibGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6d2l0
aEZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OnZhcmlhYmxlSXNVbmRl
Y2lkZWQpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6dmFyaWFibGVJc1VuYXZh
aWxhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6Omhhc1ZhcmlhYmxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OnZhcmlhYmxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBdmFpbGFiaWxpdHk6OmZsdXNoZWRBdCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5OjptZXJnZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZU1hcmtlcik6CisgICAg
ICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToK
KyAgICAgICAgKiBkZmcvREZHRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpE
aXNhc3NlbWJsZXI6OkRpc2Fzc2VtYmxlcik6CisgICAgICAgICogZGZnL0RGR0ZsdXNoRm9ybWF0
LmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR0Zs
dXNoRm9ybWF0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6cmVzdWx0Rm9yKToKKyAgICAgICAgKEpT
Qzo6REZHOjp1c2VLaW5kRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpkYXRhRm9ybWF0Rm9yKToK
KyAgICAgICAgKiBkZmcvREZHRmx1c2hlZEF0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGbHVz
aGVkQXQ6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdGbHVzaGVkQXQuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpGbHVzaGVkQXQ6OkZsdXNoZWRBdCk6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1c2hl
ZEF0OjptZXJnZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxpdmVuZXNzRm9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZlSW5CeXRlY29kZSk6CisgICAgICAg
ICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKToKKyAgICAgICAgKiBkZmcvREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpNb3ZIaW50Q291bnRpbmdQaGFzZTo6TW92SGludENv
dW50aW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6Ok1vdkhpbnRDb3VudGluZ1BoYXNlOjpy
dW4pOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1Nb3ZIaW50Q291bnRpbmcpOgorICAgICAg
ICAqIGRmZy9ERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcv
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6UmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlOjpSZXN1cnJlY3Rp
b25Gb3JWYWxpZGF0aW9uUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlJlc3VycmVjdGlvbkZv
clZhbGlkYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtUmVzdXJy
ZWN0aW9uRm9yVmFsaWRhdGlvbik6CisgICAgICAgICogZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZh
bGlkYXRpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgICogZGZnL0RGR1ZhbHVlU291cmNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVT
b3VyY2U6OmZvckZsdXNoRm9ybWF0KToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NE
YXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFj
Y2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6aXNTaW5n
bHlBc3NpZ25lZCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpjb3Vu
dE1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6bW92SGlu
dENvdW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNpbmdsZU1v
dkhpbnQpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wOjpkdW1wKToKKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpMb3dlckRGR1RvTExWTSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y3JlYXRlU2hh
ZG93TG9jYWxzKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QXJndW1lbnQpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTW92SGludCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNb3ZIaW50QW5kQ2hlY2spOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSW52YWxpZGF0aW9uUG9pbnQp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppbml0aWFsaXplT1NSRXhpdFN0
YXRlRm9yQmxvY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjplbWl0T1NS
RXhpdENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpidWlsZEV4aXRB
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphZGRFeGl0QXJn
dW1lbnRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6b2JzZXJ2
ZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjplbWl0TW92SGlu
dCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9T
UkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFsbG9jYSk6CisgICAgICAgICogZnRsL0ZUTFZhbHVl
U291cmNlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAg
ICAgICogZnRsL0ZUTFZhbHVlU291cmNlLmg6CisgICAgICAgIChKU0M6OkZUTDo6VmFsdWVTb3Vy
Y2U6OlZhbHVlU291cmNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6Zmx1c2hl
ZEF0KToKKyAgICAgICAgKiBydW50aW1lL0R1bXBDb250ZXh0LmNwcDoKKyAgICAgICAgKEpTQzo6
RHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KToKKyAgICAgICAgKiBydW50aW1lL0R1bXBDb250ZXh0
Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9TeW1i
b2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6Y2FwdHVyZVN0YXJ0
KToKKyAgICAgICAgKEpTQzo6U2hhcmVkU3ltYm9sVGFibGU6OmNhcHR1cmVFbmQpOgorICAgICAg
ICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6Y2FwdHVyZUNvdW50KToKKwogMjAxMy0xMS0xNCAg
TWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIC1kZWFs
bG9jIGNhbGxiYWNrcyBmcm9tIHdyYXBwZWQgT2JqZWN0aXZlLUMgb2JqZWN0cyBjYW4gaGFwcGVu
IGF0IGJhZCB0aW1lcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VT
CiAgICAgZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RG
R0FycmF5TW9kZS5jcHAKICAgICBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAKKyAgICBk
ZmcvREZHQXZhaWxhYmlsaXR5LmNwcAogICAgIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmNwcAogICAgIGRmZy9ERkdCYXNpY0Jsb2NrLmNwcAogICAgIGRmZy9ERkdCaW5hcnlTd2l0
Y2guY3BwCkBAIC0xMzksNiArMTQwLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAg
ICBkZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCiAgICAgZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVh
dGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdNaW5pZmllZE5vZGUuY3BwCisgICAgZGZnL0RGR01v
dkhpbnRDb3VudGluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCiAgICAg
ZGZnL0RGR05vZGUuY3BwCiAgICAgZGZnL0RGR05vZGVGbGFncy5jcHAKQEAgLTE1OCw2ICsxNjAs
NyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdQbGFuLmNwcAogICAg
IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0
aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKICAgICBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNp
b24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMCArMTAwLDExIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaCBcCi0gICAgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgXAotICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaCBcCi0gICAgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAg
XAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNC
bG9jay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2lj
QmxvY2suaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaCBcCkBAIC0xMzIsNiArMTMzLDcgQEAgamF2YXNjcmlwdGNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeHByZXNzaW9uUmFuZ2VJbmZvLmggXAorCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oIFwKQEAgLTIwNyw2ICsyMDksOCBAQCBqYXZh
c2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXZhaWxhYmlsaXR5LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFi
aWxpdHkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdh
dGlvblBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5jcHAgXApAQCAtMzE4LDYgKzMyMiw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRJRC5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTmF0dXJhbExvb3BzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
YXR1cmFsTG9vcHMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcCBc
CkBAIC0zNTgsNiArMzY0LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2Uu
Y3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlk
YXRpb25QaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYW5lU3RyaW5nR2V0QnlWYWxT
bG93UGF0aEdlbmVyYXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3Jl
Qm9hcmQuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJl
dmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw2ICsz
MzgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0FyZ3VtZW50c1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBcnJheU1vZGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQXZhaWxhYmlsaXR5LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2suY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPg0KQEAgLTM4NCw2ICszODUsNyBA
QAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xvbmdMaXZlZFN0YXRlLmNwcCIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9vcFByZUhlYWRlckNyZWF0
aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5p
ZmllZE5vZGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNb3ZI
aW50Q291bnRpbmdQaGFzZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR05hdHVyYWxMb29wcy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR05vZGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2Rl
RmxhZ3MuY3BwIiAvPg0KQEAgLTQwMyw2ICs0MDUsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1BsYW4uY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25Q
aGFzZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0
aXZlSklULmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1NwZWN1bGF0aXZlSklUNjQuY3BwIiAvPg0KQEAgLTc0NSw2ICs3NDgsNyBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnlWYWxJbmZvLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzSW5saW5lLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcQ2FsbExpbmtJbmZvLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcQ2FsbExpbmtTdGF0dXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIiAvPg0KQEAgLTc2Miw2ICs3
NjYsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhlY3V0aW9uQ291
bnRlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV4aXRLaW5k
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhwcmVzc2lvblJh
bmdlSW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEZ1bGxC
eXRlY29kZUxpdmVuc3MuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxHZXRCeUlkU3RhdHVzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcSGFuZGxlckluZm8uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxJbmxpbmVDYWxsRnJhbWVTZXQuaCIgLz4NCkBAIC04MTIsNiArODE3LDcgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F2YWlsYWJpbGl0eS5oIiAvPg0K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2su
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9ja0lubGlu
ZXMuaCIgLz4NCkBAIC04NzMsNiArODc5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdNaW5pZmllZEdyYXBoLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR01pbmlmaWVkSUQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHTWluaWZpZWROb2RlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R01vdkhpbnRDb3VudGluZ1BoYXNlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR05hdHVyYWxMb29wcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdOb2RlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVB
bGxvY2F0b3IuaCIgLz4NCkBAIC04OTUsNiArOTAyLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIiAvPg0KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlckJhbmsuaCIgLz4NCiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVnaXN0ZXJTZXQuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NhZmVUb0V4ZWN1dGUuaCIgLz4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xv
d1BhdGhHZW5lcmF0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
U2NvcmVCb2FyZC5oIiAvPg0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjYwLDYgKzI2MCwxNCBA
QAogCQkwRjYzOTQ3ODE1RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0
NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYzOTQ4NDE1RTQ4
MTE4MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJh
eU1vZGUuY3BwICovOyB9OwogCQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0MgLyogREZHQXJyYXlN
b2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYz
OTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0Yx
IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2NjZFQzExODM1NjZGOTAwRDAxN0YxIC8qIEZ1
bGxCeXRlY29kZUxpdmVuZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjY2NkVDNjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUMyMTgzNTY3MkIwMEQw
MTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwICovOyB9OworCQkwRjY2NkVDNzE4MzU2NzJCMDBE
MDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmls
aXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEY2NjZFQzgxODM1NjcyQjAwRDAxN0YxIC8qIERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUM0MTgz
NTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5jcHAgKi87IH07CisJCTBG
NjY2RUM5MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQzUxODM1Njcy
QjAwRDAxN0YxIC8qIERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2NjZFQ0MxODM2QjM3RTAwRDAxN0Yx
IC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDQTE4MzZCMzdFMDBEMDE3RjEg
LyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEY2NjZF
Q0QxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQ0Ix
ODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZC
MTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyog
REZHQWRqYWNlbmN5TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEz
MDBCN0IyRTQgLyogREZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNzAyNUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHAgKi87IH07CkBAIC0xNTUwLDYgKzE1NTgsMTQgQEAKIAkJMEY2Mzk0NzYxNURDRTM0NzAw
NkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2Mzk0ODExNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBcnJheU1vZGUuY3BwOyBwYXRoID0gZGZnL0RG
R0FycmF5TW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM5NDgyMTVF
NDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQXJyYXlNb2RlLmg7IHBhdGggPSBkZmcvREZHQXJyYXlNb2RlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxp
dmVuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bGxCeXRlY29kZUxp
dmVuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjY2RUMyMTgzNTY3MkIw
MEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHQXZhaWxhYmlsaXR5LmNwcDsgcGF0aCA9IGRmZy9ERkdBdmFpbGFiaWxp
dHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2NkVDMzE4MzU2NzJCMDBE
MDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0F2YWlsYWJpbGl0eS5oOyBwYXRoID0gZGZnL0RGR0F2YWlsYWJpbGl0eS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2NkVDNDE4MzU2NzJCMDBEMDE3RjEgLyogREZH
TW92SGludENvdW50aW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR01vdkhpbnRD
b3VudGluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQzUx
ODM1NjcyQjAwRDAxN0YxIC8qIERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmg7IHBhdGggPSBk
ZmcvREZHTW92SGludENvdW50aW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NjZFQ0ExODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRp
b25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdSZXN1
cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1Jlc3VycmVjdGlv
bkZvclZhbGlkYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUmVzdXJyZWN0aW9uRm9y
VmFsaWRhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlv
blBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY4MTRERjNGMTMw
MEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9IGRmZy9ERkdBZGphY2VuY3lMaXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAv
KiBERkdFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0VkZ2UuaDsg
cGF0aCA9IGRmZy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzAy
NUE3MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMzc0NCw2ICszNzYwLDggQEAKIAkJCQkwRjYzOTQ4MjE1RTQ4
MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8sCiAJCQkJQTdEOUEyOEYxN0EwQkM3NDAw
RUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwICovLAogCQkJCUE3RDlBMjkwMTdB
MEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggKi8sCisJCQkJMEY2NjZF
QzIxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgKi8sCisJCQkJMEY2NjZF
QzMxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oICovLAogCQkJCTBGNzE0Q0Ex
MTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLywK
IAkJCQkwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25Q
aGFzZS5oICovLAogCQkJCUE3RDg5Q0UzMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2Nr
LmNwcCAqLywKQEAgLTM4NTQsNiArMzg3Miw4IEBACiAJCQkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2
OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLywKIAkJCQkwRjJCREM0QzE1MjI4MTgzMDBDRDg5MTAg
LyogREZHTWluaWZpZWROb2RlLmNwcCAqLywKIAkJCQkwRjJCREMzRTE1MjI4MDE3MDBDRDg5MTAg
LyogREZHTWluaWZpZWROb2RlLmggKi8sCisJCQkJMEY2NjZFQzQxODM1NjcyQjAwRDAxN0YxIC8q
IERGR01vdkhpbnRDb3VudGluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjY2NkVDNTE4MzU2NzJCMDBE
MDE3RjEgLyogREZHTW92SGludENvdW50aW5nUGhhc2UuaCAqLywKIAkJCQlBNzM3ODEwQTE3OTlF
QTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLywKIAkJCQlBNzM3ODEwQjE3OTlF
QTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmggKi8sCiAJCQkJMEZCNEI1MUUxNkI2Mjc3
MjAwM0Y2OTZCIC8qIERGR05vZGUuY3BwICovLApAQCAtMzg5NCw2ICszOTE0LDggQEAKIAkJCQkw
RkZGQzk1MTE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwICovLAogCQkJCTBGRkZDOTUyMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5oICovLAogCQkJCTg2RUM5REMxMTMyOERGODIwMDJCMkFENyAvKiBERkdS
ZWdpc3RlckJhbmsuaCAqLywKKwkJCQkwRjY2NkVDQTE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVz
dXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjY2NkVDQjE4MzZCMzdF
MDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi8sCiAJCQkJ
QTc3QTQyM0MxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCAqLywKIAkJCQlB
NzQxMDE3RTE3OURBRjgwMDAyRUI4QkEgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhH
ZW5lcmF0b3IuaCAqLywKIAkJCQk4NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVC
b2FyZC5oICovLApAQCAtNDAzNiwxNSArNDA1OCwxNiBAQAogCQk5NjlBMDc4RjBFRDFEM0FFMDBG
MUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAotCQkJCUMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2su
Y3BwICovLAotCQkJCUMyRkNBRTBEMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxv
Y2suaCAqLywKLQkJCQlDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzLmNwcCAqLywKLQkJCQlDMkZDQUUwRjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8sCiAJCQkJMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8q
IEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwICovLAogCQkJCTBGODMzNUI1MTYzOUMxRTMwMDE0
NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi8sCiAJCQkJMEY2Mzk0NTExNUQwNzA1
MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgKi8sCiAJCQkJMEY2Mzk0NTIxNUQwNzA1MTAw
NkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oICovLAorCQkJCUMyRkNBRTBDMTdBOUMyNEUwMDM0Qzcz
NSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovLAorCQkJCUMyRkNBRTBEMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLywKIAkJCQkwRjIxQzI3RTE0QkVBQTgwMDBB
REM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovLAorCQkJCUMyRkNBRTBFMTdBOUMyNEUw
MDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwICovLAorCQkJCUMyRkNBRTBG
MTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLywKKwkJCQkw
RjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5l
cy5oICovLAogCQkJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLywK
IAkJCQkwRjBCODNBRTE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCAqLywKIAkJ
CQkwRjBCODNBRjE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggKi8sCkBAIC00MDcz
LDYgKzQwOTYsNyBAQAogCQkJCTBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBFeGl0S2luZC5j
cHAgKi8sCiAJCQkJMEZCMTA1ODMxNjc1NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5kLmggKi8sCiAJ
CQkJMEYwQjgzQUExNEJDRjVCOTAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCAqLywK
KwkJCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCAq
LywKIAkJCQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgKi8s
CiAJCQkJMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuaCAqLywKIAkJ
CQkwRjBCODNBODE0QkNGNTVFMDA4ODVCNEYgLyogSGFuZGxlckluZm8uaCAqLywKQEAgLTQ0NjEs
NiArNDQ4NSw3IEBACiAJCQkJMkE2RjQ2MjYxN0U5NTlDRTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFw
Um9vdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyNEQzMUUzMTYxQ0Q2OTUwMDJBQTRE
QiAvKiBIZWFwU3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjZFQzExODM1NjZG
OTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MkU1MjZCRTE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MEYwRTE2RjVDRDAwQjM0NDYwIC8qIElkZW50aWZpZXIuaCBp
biBIZWFkZXJzICovLApAQCAtNDU3MCw2ICs0NTk1LDcgQEAKIAkJCQk3QzE4NEUxRjE3QkVFMjJF
MDA3Q0I2M0EgLyogSlNQcm9taXNlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzNC
QTI5NTE3QzAzOTU2MDA3MkREQzkgLyogSlNQcm9taXNlUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3NERFRjk2MTgyRDk5MTQwMDUyMkMyMiAvKiBKU01hcEl0ZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjY2NkVDOTE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50
aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDM0JBMjk3MTdDMDM5NTYwMDcyRERDOSAv
KiBKU1Byb21pc2VSZXNvbHZlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzNC
QTI5OTE3QzAzOTU2MDA3MkREQzkgLyogSlNQcm9taXNlUmVzb2x2ZXJQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEwMDlGMTdEMCAvKiBKU1Byb3h5LmggaW4g
SGVhZGVycyAqLywKQEAgLTQ3MDMsNiArNDcyOSw3IEBACiAJCQkJOTVDRDQ1NzcwRTFDNEZERDAw
ODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUx
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
NzI5QTUxNjZBRDM1MTAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMg
LyogUHJvZmlsZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTM5MTJBMTY3NzFD
MzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRjcyOUJBMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmggaW4g
SGVhZGVycyAqLywKQEAgLTQ4MTMsNiArNDg0MCw3IEBACiAJCQkJQTdBOEFGM0YxN0FEQjVGMzAw
NUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjQwMTdBREI1
RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNjY2RUM3MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHku
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjYwMTgyMTYzOUZEMkEwMDM3MkJBMyAvKiBVbmxpbmtl
ZENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRTg5MkMxNkQwMjhBRDAwOUU0RkQy
IC8qIFVudXNlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTYzQjM4MTNGQzZGRTkw
MDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtNDg0Myw2ICs0ODcx
LDcgQEAKIAkJCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9y
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY4OENCMTYwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDUxNTM5QjkxMkRDOTk0NTAwRUY3QUM0IC8q
IFlhcnIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjY2RUNEMTgzNkIzN0UwMEQwMTdGMSAvKiBE
RkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2NzA0Qjg3MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRl
cnMgKi8sCkBAIC01Mjc2LDYgKzUzMDUsNyBAQAogCQkJCTE0N0YzOUMwMTA3RUMzNzYwMDQyN0E0
OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0MDE3RUE5
RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
ODE2RTFCMTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjY2NkVDODE4MzU2NzJCMDBEMDE3RjEgLyogREZHTW92SGludENvdW50aW5nUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NjMxMDdFQzExQTAwMTNFN0IyIC8qIEJv
b2xlYW5Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg2NDEwN0VDMTFB
MDAxM0U3QjIgLyogQm9vbGVhbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg2
NTEwN0VDMTFBMDAxM0U3QjIgLyogQm9vbGVhblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTU2MzAsNiArNTY2MCw3IEBACiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFBy
b2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBG
NUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyRkNB
RTEwMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEY2NjZFQ0MxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZh
bGlkYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4QjE2NzU0ODMxMDBG
OEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThE
MTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxlclByb2ZpbGVkQnl0ZWNv
ZGVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTY5OCw2ICs1NzI5LDcgQEAKIAkJCQkwRkM4MTUx
NjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkVEOTRGMkUxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZFRDk0RjMwMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjY2NkVDNjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI1MTU4NTNDRTAwMDRBNEU3RCAvKiBXYXRj
aHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQ0Y3Mzc3MTcxQ0E2RkIwMEM5QkIxRSAv
KiBXZWFrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RTg0RjlFMTRFRTFBQ0MwMEQ2RDVENCAv
KiBXZWFrQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNTkz
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIENvZGVCbG9jazsKIAotdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBGYXN0Qml0VmVjdG9y
LCBXVEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPHVuc2lnbmVkPiA+IEJ5dGVjb2RlVG9CaXRtYXBNYXA7Ci0KIGNsYXNzIEJ5dGVjb2RlQmFz
aWNCbG9jayA6IHB1YmxpYyBSZWZDb3VudGVkPEJ5dGVjb2RlQmFzaWNCbG9jaz4gewogcHVibGlj
OgogICAgIGVudW0gU3BlY2lhbEJsb2NrVHlwZSB7IEVudHJ5QmxvY2ssIEV4aXRCbG9jayB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCiAKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAi
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zOCw0NCArNDAsMjMgQEAgQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzOjpCeXRlY29kZUxpdmVuZQogICAgIGNvbXB1dGUoKTsKIH0KIAotc3RhdGljIGludCBu
dW1iZXJPZkNhcHR1cmVkVmFyaWFibGVzKENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIGlm
ICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291bnQoKTsKLX0KLQotc3RhdGlj
IGludCBjYXB0dXJlU3RhcnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgaWYgKCFjb2Rl
QmxvY2stPnN5bWJvbFRhYmxlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb2Rl
QmxvY2stPnN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpOwotfQotCi1zdGF0aWMgaW50IGNh
cHR1cmVFbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgaWYgKCFjb2RlQmxvY2stPnN5
bWJvbFRhYmxlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb2RlQmxvY2stPnN5
bWJvbFRhYmxlKCktPmNhcHR1cmVFbmQoKTsKLX0KLQogc3RhdGljIGJvb2wgaXNWYWxpZFJlZ2lz
dGVyRm9yTGl2ZW5lc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGludCBvcGVyYW5kKQogewogICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnKG9wZXJhbmQpOwogICAgIHJldHVybiAhY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChvcGVyYW5kKSAvLyBEb24ndCBjYXJlIGFib3V0
IGNvbnN0YW50cy4KICAgICAgICAgJiYgdmlydHVhbFJlZy5pc0xvY2FsKCkgLy8gRG9uJ3QgY2Fy
ZSBhYm91dCBhcmd1bWVudHMuCi0gICAgICAgICYmICghbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxl
cyhjb2RlQmxvY2spIC8vIElmIHdlIGhhdmUgbm8gY2FwdHVyZWQgdmFyaWFibGVzLCB3ZSdyZSBn
b29kIHRvIGdvLgotICAgICAgICAgICAgfHwgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPiBjYXB0dXJl
U3RhcnQoY29kZUJsb2NrKSB8fCAodmlydHVhbFJlZy5vZmZzZXQoKSA8PSBjYXB0dXJlRW5kKGNv
ZGVCbG9jaykpKSk7CisgICAgICAgICYmICghY29kZUJsb2NrLT5jYXB0dXJlQ291bnQoKSAvLyBJ
ZiB3ZSBoYXZlIG5vIGNhcHR1cmVkIHZhcmlhYmxlcywgd2UncmUgZ29vZCB0byBnby4KKyAgICAg
ICAgICAgIHx8ICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQo
KSB8fCAodmlydHVhbFJlZy5vZmZzZXQoKSA8PSBjb2RlQmxvY2stPmNhcHR1cmVFbmQoKSkpKTsK
IH0KIAogc3RhdGljIHZvaWQgc2V0Rm9yT3BlcmFuZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgRmFz
dEJpdFZlY3RvciYgYml0cywgaW50IG9wZXJhbmQpCiB7CiAgICAgQVNTRVJUKGlzVmFsaWRSZWdp
c3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgb3BlcmFuZCkpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnKG9wZXJhbmQpOwotICAgIGlmICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY2Fw
dHVyZVN0YXJ0KGNvZGVCbG9jaykpCisgICAgaWYgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPiBjb2Rl
QmxvY2stPmNhcHR1cmVTdGFydCgpKQogICAgICAgICBiaXRzLnNldCh2aXJ0dWFsUmVnLnRvTG9j
YWwoKSk7CiAgICAgZWxzZQotICAgICAgICBiaXRzLnNldCh2aXJ0dWFsUmVnLnRvTG9jYWwoKSAt
IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMoY29kZUJsb2NrKSk7CisgICAgICAgIGJpdHMuc2V0
KHZpcnR1YWxSZWcudG9Mb2NhbCgpIC0gY29kZUJsb2NrLT5jYXB0dXJlQ291bnQoKSk7CiB9CiAK
IHN0YXRpYyB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiB1c2VzKQpAQCAt
MzAzLDggKzI4NCw4IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQK
ICAgICAgICAgaW50IGJhc2UgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgIGlu
dCBjb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9y
TGl2ZW5lc3MoY29kZUJsb2NrLCBiYXNlICsgaSkpCi0gICAgICAgICAgICAgICAgc2V0Rm9yT3Bl
cmFuZChjb2RlQmxvY2ssIHVzZXMsIGJhc2UgKyBpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlk
UmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGJhc2UgLSBpKSkKKyAgICAgICAgICAgICAg
ICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgYmFzZSAtIGkpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMTUsMTEgKzI5NiwxMSBAQCBzdGF0aWMgdm9pZCBj
b21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0CiAgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJG
b3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCiAgICAgICAg
ICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKICAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwot
ICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Cisg
ICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1pbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAg
ICAgICAgIGludCBsYXN0QXJnID0gcmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKysp
IHsKLSAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ss
IGxhc3RBcmcgLSBpKSkKLSAgICAgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywg
dXNlcywgbGFzdEFyZyAtIGkpOworICAgICAgICBmb3IgKGludCBpID0gb3Bjb2RlSUQgPT0gb3Bf
Y29uc3RydWN0ID8gMSA6IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBpZiAo
aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBsYXN0QXJnICsgaSkpCisgICAg
ICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGxhc3RBcmcgKyBpKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzMzLDEwICszMTQsOSBAQCBz
dGF0aWMgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0CiAgICAgICAgICAgICBzZXRG
b3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSNkZWZpbmUgTExJTlRfSEVMUEVSX09QQ09ERVMob3Bjb2Rl
LCBsZW5ndGgpIGNhc2Ugb3Bjb2RlOgotICAgIEZPUl9FQUNIX0xMSU5UX09QQ09ERV9FWFRFTlNJ
T04oTExJTlRfSEVMUEVSX09QQ09ERVMpCi0gICAgICAgIHJldHVybjsKLSN1bmRlZiBMTElOVF9I
RUxQRVJfT1BDT0RFUworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtNDkyLDggKzQ3Miw3IEBA
IHN0YXRpYyB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQKICAgICBjYXNlIG9wX2Vu
dGVyOiB7CiAgICAgICAgIGRlZnMuc2V0QWxsKCk7CiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgfQorICAgIH0gfQogfQogCiBzdGF0aWMgdW5zaWduZWQgZ2V0TGVhZGVyT2Zmc2V0Rm9yQmFz
aWNCbG9jayhSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiogYmFzaWNCbG9jaykKQEAgLTU0MCwx
MyArNTE5LDMyIEBAIHN0YXRpYyBCeXRlY29kZUJhc2ljQmxvY2sqIGZpbmRCYXNpY0Jsb2MKICAg
ICByZXR1cm4gYmFzaWNCbG9ja1sxXS5nZXQoKTsKIH0KIAorc3RhdGljIHZvaWQgc3RlcE92ZXJJ
bnN0cnVjdGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJh
c2ljQmxvY2s+PiYgYmFzaWNCbG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0
VmVjdG9yJiB1c2VzLCBGYXN0Qml0VmVjdG9yJiBkZWZzLCBGYXN0Qml0VmVjdG9yJiBvdXQpCit7
CisgICAgdXNlcy5jbGVhckFsbCgpOworICAgIGRlZnMuY2xlYXJBbGwoKTsKKyAgICAKKyAgICBj
b21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQsIHVz
ZXMpOworICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29k
ZU9mZnNldCwgZGVmcyk7CisgICAgCisgICAgb3V0LmV4Y2x1ZGUoZGVmcyk7CisgICAgb3V0Lm1l
cmdlKHVzZXMpOworICAgIAorICAgIC8vIElmIHdlIGhhdmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIs
IHdlIHdhbnQgdGhlIGxpdmUtaW4gdmFyaWFibGVzIG9mIHRoZSAKKyAgICAvLyBleGNlcHRpb24g
aGFuZGxlciBibG9jayB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRp
Y3VsYXIgYnl0ZWNvZGUuCisgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2Nr
LT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSB7CisgICAgICAgIEJ5
dGVjb2RlQmFzaWNCbG9jayogaGFuZGxlckJsb2NrID0gZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVy
T2Zmc2V0KGJhc2ljQmxvY2tzLCBoYW5kbGVyLT50YXJnZXQpOworICAgICAgICBBU1NFUlQoaGFu
ZGxlckJsb2NrKTsKKyAgICAgICAgb3V0Lm1lcmdlKGhhbmRsZXJCbG9jay0+aW4oKSk7CisgICAg
fQorfQorCiBzdGF0aWMgdm9pZCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0
KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrLCBWZWN0b3I8
UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiYgYmFzaWNCbG9ja3MsIHVuc2lnbmVkIHRhcmdl
dE9mZnNldCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KQogewogICAgIEFTU0VSVCghYmxvY2stPmlz
RXhpdEJsb2NrKCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygpKTsKIAogICAg
IEZhc3RCaXRWZWN0b3Igb3V0ID0gYmxvY2stPm91dCgpOwotICAgIEhhbmRsZXJJbmZvKiBoYW5k
bGVyID0gMDsKIAogICAgIEZhc3RCaXRWZWN0b3IgdXNlczsKICAgICBGYXN0Qml0VmVjdG9yIGRl
ZnM7CkBAIC01NTcsMjMgKzU1NSw4IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9yQnl0ZWMKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+Ynl0ZWNv
ZGVPZmZzZXRzKClbaV07CiAgICAgICAgIGlmICh0YXJnZXRPZmZzZXQgPiBieXRlY29kZU9mZnNl
dCkKICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHVzZXMuY2xlYXJBbGwoKTsKLSAgICAg
ICAgZGVmcy5jbGVhckFsbCgpOwotCi0gICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZz
ZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgdXNlcyk7Ci0gICAgICAgIGNvbXB1dGVEZWZz
Rm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgZGVmcyk7Ci0KLSAg
ICAgICAgb3V0LmV4Y2x1ZGUoZGVmcyk7Ci0gICAgICAgIG91dC5tZXJnZSh1c2VzKTsKLQotICAg
ICAgICAvLyBJZiB3ZSBoYXZlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCB3ZSB3YW50IHRoZSBsaXZl
LWluIHZhcmlhYmxlcyBvZiB0aGUgCi0gICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGVyIGJsb2Nr
IHRvIGJlIGluY2x1ZGVkIGluIHRoZSBsaXZlLWluIG9mIHRoaXMgcGFydGljdWxhciBieXRlY29k
ZS4KLSAgICAgICAgaWYgKChoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSkgewotICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBoYW5kbGVyQmxvY2sgPSBmaW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoYmFzaWNCbG9j
a3MsIGhhbmRsZXItPnRhcmdldCk7Ci0gICAgICAgICAgICBBU1NFUlQoaGFuZGxlckJsb2NrKTsK
LSAgICAgICAgICAgIG91dC5tZXJnZShoYW5kbGVyQmxvY2stPmluKCkpOwotICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGNvZGVCbG9jaywgYmFzaWNCbG9j
a3MsIGJ5dGVjb2RlT2Zmc2V0LCB1c2VzLCBkZWZzLCBvdXQpOwogICAgIH0KIAogICAgIHJlc3Vs
dC5zZXQob3V0KTsKQEAgLTU5MCw3ICs1NzMsNyBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6cnVuTGl2ZW5lCiB7CiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJs
b2NrID0gbV9jb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgbnVt
YmVyT2ZWYXJpYWJsZXMgPSB1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzICsgCi0gICAgICAg
IHVubGlua2VkQ29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAtIG51bWJlck9mQ2FwdHVy
ZWRWYXJpYWJsZXMobV9jb2RlQmxvY2spOworICAgICAgICB1bmxpbmtlZENvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnMgLSBtX2NvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCk7CiAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9iYXNpY0Jsb2Nrcy5zaXplKCk7IGkrKykgewogICAg
ICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9iYXNpY0Jsb2Nrc1tpXS5nZXQoKTsK
QEAgLTYyOSwzNiArNjEyLDMwIEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRM
aXZlbmUKIAogYm9vbCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6Om9wZXJhbmRJc0xpdmVBdEJ5
dGVjb2RlT2Zmc2V0KGludCBvcGVyYW5kLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsKLSAg
ICBpbnQgbnVtQ2FwdHVyZWRWYXJzID0gbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhtX2NvZGVC
bG9jayk7Ci0gICAgaWYgKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0FyZ3VtZW50KCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChvcGVyYW5kIDw9IGNhcHR1cmVTdGFydChtX2Nv
ZGVCbG9jaykgJiYgb3BlcmFuZCA+IGNhcHR1cmVFbmQobV9jb2RlQmxvY2spKQorICAgIGlmIChv
cGVyYW5kSXNBbHdheXNMaXZlKG1fY29kZUJsb2NrLCBvcGVyYW5kKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgRmFzdEJpdFZlY3RvciByZXN1bHQ7CiAgICAgZ2V0TGl2ZW5lc3NJbmZvRm9y
Tm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgcmVzdWx0KTsK
LSAgICByZXR1cm4gcmVzdWx0LmdldChvcGVyYW5kIC0gbnVtQ2FwdHVyZWRWYXJzKTsKKyAgICBy
ZXR1cm4gb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUobV9jb2RlQmxvY2ssIHJlc3Vs
dCwgb3BlcmFuZCk7CiB9CiAKLUZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
OjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
KQorRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm8oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNv
bnN0IEZhc3RCaXRWZWN0b3ImIG91dCkKIHsKLSAgICBGYXN0Qml0VmVjdG9yIHRlbXA7CiAgICAg
RmFzdEJpdFZlY3RvciByZXN1bHQ7CiAKLSAgICBnZXRMaXZlbmVzc0luZm9Gb3JOb25DYXB0dXJl
ZFZhcnNBdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCB0ZW1wKTsKLQotICAgIHVuc2ln
bmVkIG51bUNhcHR1cmVkVmFycyA9IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9jb2RlQmxv
Y2spOworICAgIHVuc2lnbmVkIG51bUNhcHR1cmVkVmFycyA9IGNvZGVCbG9jay0+Y2FwdHVyZUNv
dW50KCk7CiAgICAgaWYgKG51bUNhcHR1cmVkVmFycykgewotICAgICAgICBpbnQgZmlyc3RDYXB0
dXJlZExvY2FsID0gVmlydHVhbFJlZ2lzdGVyKGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykpLnRv
TG9jYWwoKTsKLSAgICAgICAgcmVzdWx0LnJlc2l6ZSh0ZW1wLm51bUJpdHMoKSArIG51bUNhcHR1
cmVkVmFycyk7CisgICAgICAgIGludCBmaXJzdENhcHR1cmVkTG9jYWwgPSBWaXJ0dWFsUmVnaXN0
ZXIoY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSkudG9Mb2NhbCgpOworICAgICAgICByZXN1bHQu
cmVzaXplKG91dC5udW1CaXRzKCkgKyBudW1DYXB0dXJlZFZhcnMpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtQ2FwdHVyZWRWYXJzOyArK2kpCiAgICAgICAgICAgICByZXN1
bHQuc2V0KGZpcnN0Q2FwdHVyZWRMb2NhbCArIGkpOwogICAgIH0gZWxzZQotICAgICAgICByZXN1
bHQucmVzaXplKHRlbXAubnVtQml0cygpKTsKKyAgICAgICAgcmVzdWx0LnJlc2l6ZShvdXQubnVt
Qml0cygpKTsKIAotICAgIGludCB0ZW1wTGVuZ3RoID0gdGVtcC5udW1CaXRzKCk7Ci0gICAgQVNT
RVJUKHRlbXBMZW5ndGggPj0gMCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZW1wTGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgaWYgKCF0ZW1wLmdldChpKSkKKyAgICBpbnQgb3V0TGVuZ3RoID0g
b3V0Lm51bUJpdHMoKTsKKyAgICBBU1NFUlQob3V0TGVuZ3RoID49IDApOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgb3V0TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKCFvdXQuZ2V0KGkpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKCFudW1DYXB0dXJlZFZhcnMpIHsK
QEAgLTY2Niw3ICs2NDMsNyBAQCBGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
czo6CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChpKS5vZmZzZXQoKSA+IGNhcHR1cmVTdGFydChtX2NvZGVCbG9j
aykpCisgICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKS5vZmZzZXQoKSA+IGNv
ZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkpCiAgICAgICAgICAgICByZXN1bHQuc2V0KGkpOwogICAg
ICAgICBlbHNlIAogICAgICAgICAgICAgcmVzdWx0LnNldChudW1DYXB0dXJlZFZhcnMgKyBpKTsK
QEAgLTY3NCw2ICs2NTEsMzkgQEAgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXM6OgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0Zhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KQoreworICAgIEZhc3RCaXRWZWN0b3Igb3V0OworICAgIGdldExpdmVuZXNz
SW5mb0Zvck5vbkNhcHR1cmVkVmFyc0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIG91
dCk7CisgICAgcmV0dXJuIGdldExpdmVuZXNzSW5mbyhtX2NvZGVCbG9jaywgb3V0KTsKK30KKwor
dm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MoRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MmIHJlc3VsdCkKK3sKKyAgICBGYXN0Qml0VmVjdG9yIG91dDsKKyAgICBG
YXN0Qml0VmVjdG9yIHVzZXM7CisgICAgRmFzdEJpdFZlY3RvciBkZWZzOworICAgIAorICAgIHJl
c3VsdC5tX2NvZGVCbG9jayA9IG1fY29kZUJsb2NrOworICAgIHJlc3VsdC5tX21hcC5jbGVhcigp
OworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IG1fYmFzaWNCbG9ja3Muc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jhc2ljQmxvY2tzW2ld
LmdldCgpOworICAgICAgICBpZiAoYmxvY2stPmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLT5pc0V4
aXRCbG9jaygpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBvdXQg
PSBibG9jay0+b3V0KCk7CisgICAgICAgIHVzZXMucmVzaXplKG91dC5udW1CaXRzKCkpOworICAg
ICAgICBkZWZzLnJlc2l6ZShvdXQubnVtQml0cygpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGJsb2NrLT5ieXRlY29kZU9mZnNldHMoKS5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0
cygpW2ldOworICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihtX2NvZGVCbG9jaywgbV9i
YXNpY0Jsb2NrcywgYnl0ZWNvZGVPZmZzZXQsIHVzZXMsIGRlZnMsIG91dCk7CisgICAgICAgICAg
ICByZXN1bHQubV9tYXAuYWRkKGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgICAgICB9CisgICAg
fQorfQorCiB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMoKQogewog
ICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fY29kZUJsb2NrLT52bSgpLT5pbnRlcnBy
ZXRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDE2IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
Q29kZUJsb2NrOworY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3M7CiAKIGNsYXNzIEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcyB7CiBwdWJsaWM6CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
KENvZGVCbG9jayopOwotCisgICAgCiAgICAgYm9vbCBvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9m
ZnNldChpbnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogICAgIEZhc3RCaXRW
ZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCk7CisgICAgCisgICAgdm9pZCBjb21wdXRlRnVsbExpdmVuZXNzKEZ1bGxCeXRlY29kZUxp
dmVuZXNzJiByZXN1bHQpOwogCiBwcml2YXRlOgogICAgIHZvaWQgY29tcHV0ZSgpOwpAQCAtNTMs
NiArNTYsMTIgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9j
az4gPiBtX2Jhc2ljQmxvY2tzOwogfTsKIAoraW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2
ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50IG9wZXJhbmQpOworaW5saW5lIGJvb2wgb3BlcmFu
ZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZh
c3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpOworaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2
ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3Bl
cmFuZCk7CisKK0Zhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvKENvZGVCbG9jayosIGNvbnN0
IEZhc3RCaXRWZWN0b3ImIG91dCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5s
aW5lc19oCisjZGVmaW5lIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXNfaAorCisjaW5j
bHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgYm9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKENv
ZGVCbG9jayogY29kZUJsb2NrLCBpbnQgb3BlcmFuZCkKK3sKKyAgICBpZiAoVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLmlzQXJndW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIG9wZXJhbmQgPD0gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSAmJiBvcGVyYW5kID4gY29k
ZUJsb2NrLT5jYXB0dXJlRW5kKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhbmRUaGF0SXNOb3RB
bHdheXNMaXZlSXNMaXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9y
JiBvdXQsIGludCBvcGVyYW5kKQoreworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnKG9w
ZXJhbmQpOworICAgIGlmICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY29kZUJsb2NrLT5jYXB0dXJl
U3RhcnQoKSkKKyAgICAgICAgcmV0dXJuIG91dC5nZXQodmlydHVhbFJlZy50b0xvY2FsKCkpOwor
ICAgIHNpemVfdCBpbmRleCA9IHZpcnR1YWxSZWcudG9Mb2NhbCgpIC0gY29kZUJsb2NrLT5jYXB0
dXJlQ291bnQoKTsKKyAgICBpZiAoaW5kZXggPj0gb3V0Lm51bUJpdHMoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBvdXQuZ2V0KGluZGV4KTsKK30KKworaW5saW5lIGJvb2wg
b3BlcmFuZElzTGl2ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYg
b3V0LCBpbnQgb3BlcmFuZCkKK3sKKyAgICByZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShjb2Rl
QmxvY2ssIG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvZGVC
bG9jaywgb3V0LCBvcGVyYW5kKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNTQsNiArMzU0LDI3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX25lZWRz
QWN0aXZhdGlvbjsKICAgICB9CisgICAgCisgICAgdW5zaWduZWQgY2FwdHVyZUNvdW50KCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmICghc3ltYm9sVGFibGUoKSkKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50KCk7CisgICAg
fQorICAgIAorICAgIGludCBjYXB0dXJlU3RhcnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCFzeW1ib2xUYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBz
eW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKTsKKyAgICB9CisgICAgCisgICAgaW50IGNhcHR1
cmVFbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5k
KCk7CisgICAgfQogCiAgICAgYm9vbCBpc0NhcHR1cmVkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBJbmxpbmVDYWxsRnJhbWUqID0gMCkgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCShyZXZpc2lvbiAxNTkzNTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIElubGluZUNhbGxGcmFtZTo6ZHVtcEluQ29u
dGV4dChQcmluCiAgICAgZWxzZQogICAgICAgICBvdXQucHJpbnQoIiwga25vd24gY2FsbGVlOiAi
LCBpbkNvbnRleHQoY2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKSwgY29udGV4dCkpOwogICAgIG91
dC5wcmludCgiLCBudW1BcmdzK3RoaXMgPSAiLCBhcmd1bWVudHMuc2l6ZSgpKTsKLSAgICBvdXQu
cHJpbnQoIiwgc3RhY2sgPj0gciIsIHN0YWNrT2Zmc2V0KTsKKyAgICBvdXQucHJpbnQoIiwgc3Rh
Y2sgPCBsb2MiLCBWaXJ0dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CiAgICAg
b3V0LnByaW50KCI+Iik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnVsbEJ5dGVj
b2RlTGl2ZW5lc3NfaAorI2RlZmluZSBGdWxsQnl0ZWNvZGVMaXZlbmVzc19oCisKKyNpbmNsdWRl
IDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzOworCit0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIEZhc3RCaXRW
ZWN0b3IsIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhh
c2hUcmFpdHM8dW5zaWduZWQ+ID4gQnl0ZWNvZGVUb0JpdG1hcE1hcDsKKworY2xhc3MgRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MgeworcHVibGljOgorICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzKCkgOiBt
X2NvZGVCbG9jaygwKSB7IH0KKyAgICAKKyAgICAvLyBXZSBzYXkgIm91dCIgdG8gcmVmZXIgdG8g
dGhlIGJpdHZlY3RvciB0aGF0IGNvbnRhaW5zIHJhdyByZXN1bHRzIGZvciBhIGJ5dGVjb2RlCisg
ICAgLy8gaW5zdHJ1Y3Rpb24uCisgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgZ2V0T3V0KHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBCeXRlY29kZVRvQml0bWFw
TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9tYXAuZW5kKCkpOworICAgICAgICByZXR1cm4gaXRlci0+
dmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmFuZElzTGl2ZShpbnQgb3BlcmFuZCwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvcGVy
YW5kSXNBbHdheXNMaXZlKG1fY29kZUJsb2NrLCBvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90
QWx3YXlzTGl2ZUlzTGl2ZShtX2NvZGVCbG9jaywgZ2V0T3V0KGJ5dGVjb2RlSW5kZXgpLCBvcGVy
YW5kKTsKKyAgICB9CisgICAgCisgICAgRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzcyh1bnNpZ25l
ZCBieXRlY29kZUluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldExpdmVuZXNz
SW5mbyhtX2NvZGVCbG9jaywgZ2V0T3V0KGJ5dGVjb2RlSW5kZXgpKTsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CisgICAg
CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBCeXRlY29kZVRvQml0bWFwTWFwIG1f
bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBGdWxsQnl0ZWNvZGVM
aXZlbmVzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmls
aXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWls
YWJpbGl0eS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0F2YWlsYWJpbGl0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEF2YWlsYWJpbGl0eTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKK30KKwordm9pZCBB
dmFpbGFiaWxpdHk6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQq
IGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fZmx1c2hlZEF0LCAiLyIpOworICAg
IAorICAgIEdyYXBoKiBncmFwaCA9IGNvbnRleHQgPyBjb250ZXh0LT5ncmFwaCA6IDA7CisgICAg
CisgICAgaWYgKHZhcmlhYmxlSXNVbmRlY2lkZWQoKSkgeworICAgICAgICBvdXQucHJpbnQoIlVu
ZGVjaWRlZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICh2YXJpYWJs
ZUlzVW5hdmFpbGFibGUoKSkgeworICAgICAgICBvdXQucHJpbnQoIlVuYXZhaWxhYmxlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGdyYXBoKSB7CisgICAgICAgIG91
dC5wcmludChWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCpncmFwaCwgbV92YXJpYWJsZSkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludChSYXdQb2ludGVyKG1fdmFy
aWFibGUpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxh
YmlsaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFp
bGFiaWxpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXZhaWxhYmlsaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBdmFpbGFi
aWxpdHlfaAorI2RlZmluZSBERkdBdmFpbGFiaWxpdHlfaAorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdGbHVzaGVkQXQuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBdmFp
bGFiaWxpdHkgeworcHVibGljOgorICAgIEF2YWlsYWJpbGl0eSgpCisgICAgICAgIDogbV92YXJp
YWJsZSgwKQorICAgICAgICAsIG1fZmx1c2hlZEF0KERlYWRGbHVzaCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGV4cGxpY2l0IEF2YWlsYWJpbGl0eShWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlKQorICAgICAgICA6IG1fdmFyaWFibGUodmFyaWFibGUpCisgICAgICAgICwgbV9mbHVzaGVk
QXQoQ29uZmxpY3RpbmdGbHVzaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBBdmFp
bGFiaWxpdHkgdW5hdmFpbGFibGUoKQorICAgIHsKKyAgICAgICAgQXZhaWxhYmlsaXR5IHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSB1bmF2YWlsYWJsZU1hcmtlcigpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBBdmFpbGFiaWxpdHkgd2l0aEZs
dXNoKEZsdXNoZWRBdCBmbHVzaCkKKyAgICB7CisgICAgICAgIEF2YWlsYWJpbGl0eSByZXN1bHQg
PSAqdGhpczsKKyAgICAgICAgcmVzdWx0Lm1fZmx1c2hlZEF0ID0gZmx1c2g7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgdmFyaWFibGVJc1VuZGVjaWRlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFibGUgPT0gMDsgfQorICAgIGJvb2wgdmFyaWFibGVJc1Vu
YXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZSA9PSB1bmF2YWlsYWJsZU1hcmtl
cigpOyB9CisgICAgCisgICAgYm9vbCBoYXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuICF2YXJp
YWJsZUlzVW5kZWNpZGVkKCkgJiYgIXZhcmlhYmxlSXNVbmF2YWlsYWJsZSgpOyB9CisgICAgCisg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoIXZhcmlhYmxlSXNVbmRlY2lkZWQoKSk7CisgICAgICAgIEFTU0VSVCghdmFyaWFibGVJ
c1VuYXZhaWxhYmxlKCkpOworICAgICAgICByZXR1cm4gbV92YXJpYWJsZTsKKyAgICB9CisgICAg
CisgICAgRmx1c2hlZEF0IGZsdXNoZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmx1c2hlZEF0OyB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiB2YXJpYWJsZUlzVW5h
dmFpbGFibGUoKSAmJiAhZmx1c2hlZEF0KCk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBBdmFpbGFiaWxpdHkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFy
aWFibGUgPT0gb3RoZXIubV92YXJpYWJsZQorICAgICAgICAgICAgJiYgbV9mbHVzaGVkQXQgPT0g
b3RoZXIubV9mbHVzaGVkQXQ7CisgICAgfQorICAgIAorICAgIEF2YWlsYWJpbGl0eSBtZXJnZShj
b25zdCBBdmFpbGFiaWxpdHkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgQXZhaWxhYmls
aXR5IHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIGlmICh2YXJpYWJsZUlzVW5kZWNpZGVkKCkp
CisgICAgICAgICAgICByZXN1bHQgPSBvdGhlcjsKKyAgICAgICAgZWxzZSBpZiAob3RoZXIudmFy
aWFibGVJc1VuZGVjaWRlZCgpKQorICAgICAgICAgICAgcmVzdWx0ID0gKnRoaXM7CisgICAgICAg
IGVsc2UgaWYgKG1fdmFyaWFibGUgPT0gb3RoZXIubV92YXJpYWJsZSkKKyAgICAgICAgICAgIHJl
c3VsdCA9ICp0aGlzOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSB1bmF2YWls
YWJsZSgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdC53aXRoRmx1c2goZmx1c2hl
ZEF0KCkubWVyZ2Uob3RoZXIuZmx1c2hlZEF0KCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB1bmF2YWlsYWJsZU1hcmtlcigpCisgICAgeworICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PFZhcmlhYmxlQWNjZXNzRGF0YSo+KHN0YXRpY19jYXN0PGludHB0cl90Pigx
KSk7CisgICAgfQorICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbV92YXJpYWJsZTsKKyAg
ICBGbHVzaGVkQXQgbV9mbHVzaGVkQXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0F2YWlsYWJpbGl0
eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShy
ZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklU
KQogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR0F2YWlsYWJp
bGl0eS5oIgogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0Zs
dXNoZWRBdC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKQEAgLTE0MCw4ICsxNDEsOCBAQCBzdHJ1
Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgc3RydWN0IFNTQURhdGEg
ewogICAgICAgICBPcGVyYW5kczxGbHVzaGVkQXQ+IGZsdXNoQXRIZWFkOwogICAgICAgICBPcGVy
YW5kczxGbHVzaGVkQXQ+IGZsdXNoQXRUYWlsOwotICAgICAgICBPcGVyYW5kczxOb2RlKj4gYXZh
aWxhYmlsaXR5QXRIZWFkOwotICAgICAgICBPcGVyYW5kczxOb2RlKj4gYXZhaWxhYmlsaXR5QXRU
YWlsOworICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0SGVhZDsK
KyAgICAgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHlBdFRhaWw7CiAgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdEhlYWQ7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxp
dmVBdFRhaWw7CiAgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0
SGVhZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA3Myw2ICszMDczLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTm9kZSog
YmFzZSA9IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1
cy5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAg
ICAgICAgICAgIGlmIChKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBzdGF0dXMuc3BlY2lmaWNWYWx1
ZSgpKQogICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGNlbGxD
b25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7CiAgICAgICAgICAgICAgICAgZWxzZQpA
QCAtMzA4MSw2ICszMDgyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAg
ICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAg
ICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3lt
Ym9sVGFibGUoKS0+Z2V0KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbnRyeS5jb3VsZEJl
V2F0Y2hlZCgpIHx8ICFtX2dyYXBoLndhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlkKGVudHJ5Lndh
dGNocG9pbnRTZXQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihkc3QpLCBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8o
cHJlZGljdGlvbikpKTsKQEAgLTMxMzEsNiArMzEzMyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRo
U3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXMub2xkU3RydWN0dXJlKCkpOworICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29w
ZSkpKTsKICAgICAgICAgICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVy
TnVtYmVyLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eU9mZnNldD4ob3BlcmFuZCksIGdldChWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUpKSk7CiAgICAgICAgICAgICAgICAgLy8gS2VlcCBzY29wZSBhbGl2ZSB1
bnRpbCBhZnRlciBwdXQuCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQo
VmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwpAQCAtMzEzOCw2ICszMTQxLDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRy
eSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHVpZCk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpIHx8ICFtX2dyYXBoLndhdGNo
cG9pbnRzKCkuaXNTdGlsbFZhbGlkKGVudHJ5LndhdGNocG9pbnRTZXQoKSkpOwogICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoUHV0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIGdldChWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYg
KzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogRGlzYXNzZW1ibGVyOjpE
aXNhc3NlbWJsZXIoR3JhcGgmIGdyYXBoKQogICAgIDogbV9ncmFwaChncmFwaCkKIHsKKyAgICBt
X2R1bXBDb250ZXh0LmdyYXBoID0gJm1fZ3JhcGg7CiAgICAgbV9sYWJlbEZvckJsb2NrSW5kZXgu
cmVzaXplKGdyYXBoLm51bUJsb2NrcygpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw2ICs1Niw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBGbHUK
ICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRKU1Zh
bHVlIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CisgICAg
ICAgIG91dC5wcmludCgiQ29uZmxpY3RpbmdGbHVzaCIpOworICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDggQEAgZW51bSBGbHVzaEZvcm1hdCB7CiAgICAgRmx1c2hlZERvdWJsZSwK
ICAgICBGbHVzaGVkQ2VsbCwKICAgICBGbHVzaGVkQm9vbGVhbiwKLSAgICBGbHVzaGVkSlNWYWx1
ZQorICAgIEZsdXNoZWRKU1ZhbHVlLAorICAgIENvbmZsaWN0aW5nRmx1c2gKIH07CiAKIGlubGlu
ZSBOb2RlRmxhZ3MgcmVzdWx0Rm9yKEZsdXNoRm9ybWF0IGZvcm1hdCkKQEAgLTU0LDYgKzU1LDcg
QEAgaW5saW5lIE5vZGVGbGFncyByZXN1bHRGb3IoRmx1c2hGb3JtYXQgZgogICAgIGNhc2UgRGVh
ZEZsdXNoOgogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CiAgICAgY2FzZSBGbHVzaGVkQ2VsbDoK
KyAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAgICAgIHJldHVybiBOb2RlUmVzdWx0SlM7
CiAgICAgY2FzZSBGbHVzaGVkSW50MzI6CiAgICAgICAgIHJldHVybiBOb2RlUmVzdWx0SW50MzI7
CkBAIC03Myw2ICs3NSw3IEBAIGlubGluZSBVc2VLaW5kIHVzZUtpbmRGb3IoRmx1c2hGb3JtYXQg
Zm8KICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgRGVhZEZsdXNoOgogICAgIGNhc2Ug
Rmx1c2hlZEpTVmFsdWU6CisgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgogICAgICAgICByZXR1
cm4gVW50eXBlZFVzZTsKICAgICBjYXNlIEZsdXNoZWRDZWxsOgogICAgICAgICByZXR1cm4gQ2Vs
bFVzZTsKQEAgLTkzLDYgKzk2LDcgQEAgaW5saW5lIERhdGFGb3JtYXQgZGF0YUZvcm1hdEZvcihG
bHVzaEZvcgogewogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBEZWFkRmx1c2g6Cisg
ICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgogICAgICAgICByZXR1cm4gRGF0YUZvcm1hdERlYWQ7
CiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRKUzsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAJKHJldmlz
aW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKIHZvaWQgRmx1c2hlZEF0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiB7Ci0gICAgaWYgKG1fZm9ybWF0ID09IERlYWRGbHVzaCkKKyAgICBpZiAobV9mb3JtYXQgPT0g
RGVhZEZsdXNoIHx8IG1fZm9ybWF0ID09IENvbmZsaWN0aW5nRmx1c2gpCiAgICAgICAgIG91dC5w
cmludChtX2Zvcm1hdCk7CiAgICAgZWxzZQogICAgICAgICBvdXQucHJpbnQoInIiLCBtX3ZpcnR1
YWxSZWdpc3RlciwgIjoiLCBtX2Zvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZsdXNoZWRBdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRmx1c2hlZEF0LmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDEyIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAorICAgIGV4cGxpY2l0IEZsdXNoZWRBdChGbHVz
aEZvcm1hdCBmb3JtYXQpCisgICAgICAgIDogbV9mb3JtYXQoZm9ybWF0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGZvcm1hdCA9PSBEZWFkRmx1c2ggfHwgZm9ybWF0ID09IENvbmZsaWN0aW5nRmx1
c2gpOworICAgIH0KKyAgICAKICAgICBGbHVzaGVkQXQoRmx1c2hGb3JtYXQgZm9ybWF0LCBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgICAgICA6IG1fZm9ybWF0KGZvcm1hdCkK
ICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpCkBAIC02NSw2ICs3
MSwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZsdXNoZWRB
dCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAgICAgCisgICAg
Rmx1c2hlZEF0IG1lcmdlKGNvbnN0IEZsdXNoZWRBdCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoISp0aGlzKQorICAgICAgICAgICAgcmV0dXJuIG90aGVyOworICAgICAgICBpZiAo
IW90aGVyKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICBpZiAoKnRoaXMgPT0g
b3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIHJldHVybiBGbHVzaGVk
QXQoQ29uZmxpY3RpbmdGbHVzaCk7CisgICAgfQorICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBD
b250ZXh0KikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlclNldC5oIgpAQCAt
MzkzLDYgKzM5NCw3IEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYK
IHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQp
CiB7CiAgICAgRHVtcENvbnRleHQgbXlDb250ZXh0OworICAgIG15Q29udGV4dC5ncmFwaCA9IHRo
aXM7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICBjb250ZXh0ID0gJm15Q29udGV4dDsKICAg
ICAKQEAgLTY0Myw2ICs2NDUsNTkgQEAgdm9pZCBHcmFwaDo6aW5pdGlhbGl6ZU5vZGVPd25lcnMo
KQogICAgICAgICAgICAgYmxvY2stPmF0KG5vZGVJbmRleCktPm1pc2Mub3duZXIgPSBibG9jazsK
ICAgICB9CiB9CisKK0Z1bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3IoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1
ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9IG1fYnl0ZWNvZGVM
aXZlbmVzcy5maW5kKGNvZGVCbG9jayk7CisgICAgaWYgKGl0ZXIgIT0gbV9ieXRlY29kZUxpdmVu
ZXNzLmVuZCgpKQorICAgICAgICByZXR1cm4gKml0ZXItPnZhbHVlOworICAgIAorICAgIHN0ZDo6
dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4gbGl2ZW5lc3MgPSBzdGQ6Om1ha2VfdW5p
cXVlPEZ1bGxCeXRlY29kZUxpdmVuZXNzPigpOworICAgIGNvZGVCbG9jay0+bGl2ZW5lc3NBbmFs
eXNpcygpLmNvbXB1dGVGdWxsTGl2ZW5lc3MoKmxpdmVuZXNzKTsKKyAgICBGdWxsQnl0ZWNvZGVM
aXZlbmVzcyYgcmVzdWx0ID0gKmxpdmVuZXNzOworICAgIG1fYnl0ZWNvZGVMaXZlbmVzcy5hZGQo
Y29kZUJsb2NrLCBzdGQ6Om1vdmUobGl2ZW5lc3MpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lKQoreworICAgIHJldHVybiBsaXZlbmVzc0ZvcihiYXNlbGluZUNv
ZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpKTsKK30KKworYm9vbCBHcmFwaDo6aXNMaXZlSW5C
eXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQor
eworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3Jp
Z2luLnN0YWNrT2Zmc2V0KCkgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKSB7CisgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gVmlydHVhbFJlZ2lzdGVyKAorICAgICAgICAg
ICAgICAgIG9wZXJhbmQub2Zmc2V0KCkgLSBjb2RlT3JpZ2luLnN0YWNrT2Zmc2V0KCkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAocmVnLmlzQXJndW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChyZWcub2Zmc2V0KCkgPj0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2Fs
bCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmIChyZWcub2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAocmVnLm9m
ZnNldCgpID09IEpTU3RhY2s6OlNjb3BlQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGxpdmVuZXNz
Rm9yKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKS5vcGVyYW5kSXNMaXZlKAorICAgICAgICAg
ICAgICAgIHJlZy5vZmZzZXQoKSwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY29kZU9yaWdpbiA9IGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVl
OworfQogICAgIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAK
ICNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgogI2lu
Y2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZl
bmVzcy5oIgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZVNldC5oIgogI2luY2x1ZGUgIkpTU3Rh
Y2suaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCkBAIC00MTYs
NiArNDE3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGVGb3IoY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KICAgICAKKyAgICBDb2RlQmxvY2sqIGJhc2Vs
aW5lQ29kZUJsb2NrRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsK
KyAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4gbV9wcm9m
aWxlZEJsb2NrOworICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxs
RnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICB9CisgICAgCiAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9ja0Zvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxv
Y2soY29kZU9yaWdpbiwgbV9wcm9maWxlZEJsb2NrKTsKQEAgLTc3Niw2ICs3ODQsMTAgQEAgcHVi
bGljOgogICAgIERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2ludHMoKSB7IHJldHVybiBtX3Bs
YW4ud2F0Y2hwb2ludHM7IH0KICAgICBEZXNpcmVkU3RydWN0dXJlQ2hhaW5zJiBjaGFpbnMoKSB7
IHJldHVybiBtX3BsYW4uY2hhaW5zOyB9CiAgICAgCisgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mm
IGxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKTsKKyAgICBGdWxsQnl0ZWNvZGVMaXZl
bmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpOworICAg
IGJvb2wgaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luKTsKKyAgICAKICAgICBWTSYgbV92bTsKICAgICBQbGFuJiBtX3BsYW47CiAg
ICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKQEAgLTc5Nyw2ICs4MDksNyBAQCBwdWJsaWM6CiAg
ICAgU2VnbWVudGVkVmVjdG9yPFN3aXRjaERhdGEsIDQ+IG1fc3dpdGNoRGF0YTsKICAgICBWZWN0
b3I8SW5saW5lVmFyaWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBPd25Q
dHI8SW5saW5lQ2FsbEZyYW1lU2V0PiBtX2lubGluZUNhbGxGcmFtZXM7CisgICAgSGFzaE1hcDxD
b2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVj
b2RlTGl2ZW5lc3M7CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKICAgICBIYXNoU2V0PEV4ZWN1
dGFibGVCYXNlKj4gbV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZDsKICAgICBCaXRW
ZWN0b3IgbV9sYXp5VmFyczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92
SGludENvdW50aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR01vdkhpbnRD
b3VudGluZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jh
c2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJ
bnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBNb3ZIaW50
Q291bnRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgTW92SGludENvdW50
aW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiTW92SGludCBj
b3VudGluZyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAgICAgIC8v
IEFzc2VydCB0aGF0IHdlIGhhdmVuJ3QgZG9uZSB0aGlzIGFscmVhZHkuCisgICAgICAgIGlmICgh
QVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBo
Lm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0
YVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlLT5pc1Jvb3QoKSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+
bW92SGludENvdW50KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPnNpbmds
ZU1vdkhpbnQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJ
bmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5k
ZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRM
b2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICAgICAgY2Fz
ZSBNb3ZIaW50QW5kQ2hlY2s6CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5jb3VudE1vdkhpbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNhc2UgR2V0QXJndW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5jb3VudE1vdkhpbnQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5jb3VudE1v
dkhpbnQoMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK2Jvb2wgcGVyZm9ybU1vdkhpbnRDb3Vu
dGluZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBNb3ZIaW50IENvdW50aW5nIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPE1vdkhpbnRDb3Vu
dGluZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01vdkhpbnRDb3VudGluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdNb3ZIaW50Q291bnRpbmdQaGFzZV9oCisjZGVmaW5l
IERGR01vdkhpbnRDb3VudGluZ1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ29tcHV0ZXMg
VmFyaWFibGVBY2Nlc3NEYXRhOjptX21vdkhpbnRDb3VudC4gVmFyaWFibGVzIHRoYXQgYXJlIGFz
c2lnbmVkIG9ubHkgb25jZSBjYW4gZ2V0CisvLyB0cmVhdGVkIHNwZWNpYWxseS4gRm9yIGV4YW1w
bGUsIE9TUiBleGl0IGluIHRoZSBGVEwgY2FuIGFsbG93IHRoZSBmb3JtYXQgdXNlZCBmb3Igc3Vj
aAorLy8gbm9kZXMgQmFzaWNCbG9jazo6c3NhLT5hdmFpbGFiaWx0aXlBdEhlYWQvVGFpbC4gVGhp
cyBpcyBhIGZvcndhcmQgZmxvdyB0eXBlIGluZmVyZW5jZQorLy8gb3ZlciBNb3ZIaW50cy4gQXQg
dGhlIHRpbWUgd2hlbiBNb3ZIaW50cyBhcmUgaW50cm9kdWNlZCwgd2Ugd2VyZSBjZXJ0YWluIHRo
YXQgYXQgYW55CisvLyBwb2ludCBpbiB0aGUgcHJvZ3JhbSB3aGVyZSBhIGJ5dGVjb2RlIHZhcmlh
YmxlIGhhZCBiZWVuIGxpdmUsIGFsbCBvZiB0aGUgTW92SGludHMgdGhhdAorLy8gZmxvd2VkIGlu
dG8gdGhhdCBwb2ludCBmb3IgdGhhdCB2YXJpYWJsZSBoYWQgdGhlIHNhbWUgRmx1c2hGb3JtYXQu
IFRoaXMgYW5hbHlzaXMgd2lsbCB0ZWxsCisvLyB5b3Ugd2hhdCB0aGF0IGZvcm1hdCB3b3VsZCBo
YXZlIGJlZW4uCisKK2Jvb2wgcGVyZm9ybU1vdkhpbnRDb3VudGluZyhHcmFwaCYpOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR01vdkhpbnRDb3VudGluZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3NyArNDcsOTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9m
b3JtID09IFNTQSk7CiAgICAgICAgIAotICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRo
Rmlyc3Q7Ci0gICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhG
aXJzdCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1C
bG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJp
bGl0eUF0SGVhZC5maWxsKEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2Et
PmF2YWlsYWJpbGl0eUF0VGFpbC5maWxsKEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhGaXJzdFtpXTsK
LSAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5maWxsKDApOwotICAg
ICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLmZpbGwoMCk7CisgICAgICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBtX2dyYXBoLmJsb2NrKDApOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGFyZ3VtZW50ID0gcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubnVtYmVyT2ZBcmd1
bWVudHMoKTsgYXJndW1lbnQtLTspIHsKKyAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmls
aXR5QXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSA9CisgICAgICAgICAgICAgICAgQXZhaWxhYmls
aXR5Ojp1bmF2YWlsYWJsZSgpLndpdGhGbHVzaCgKKyAgICAgICAgICAgICAgICAgICAgRmx1c2hl
ZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkp
KTsKICAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gcm9vdC0+c3NhLT5h
dmFpbGFiaWxpdHlBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspCisgICAgICAgICAg
ICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2NhbCkgPSBBdmFpbGFiaWxp
dHk6OnVuYXZhaWxhYmxlKCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBkZXB0aEZpcnN0W2ldOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSBl
ZGl0IGF2YWlsYWJpbGl0eUF0VGFpbCBpbi1wbGFjZSwgYnV0IGZpcnN0IGluaXRpYWxpemUgaXQg
dG8KLSAgICAgICAgICAgIC8vIGF2YWlsYWJpbGl0eUF0SGVhZC4KLSAgICAgICAgICAgIE9wZXJh
bmRzPE5vZGUqPiYgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWls
OwotICAgICAgICAgICAgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9
IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7Ci0gICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAgICAgIGNhc2UgTW92SGlu
dEFuZENoZWNrOiB7Ci0gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICAgICAgICAgICAgICBhdmFpbGFi
aWxpdHkub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgY2FzZSBHZXRBcmd1bWVudDogewotICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxp
dHkub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQorICAgICAgICBpZiAobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeU1v
ZGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSBtX2dyYXBoLm1fcHJvZmls
ZWRCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7IGxvY2FsLS07KSB7CisgICAgICAgICAgICAg
ICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubG9jYWwobG9jYWwpID0KKyAgICAgICAg
ICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpLndpdGhGbHVzaCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwobG9jYWwpKSk7CiAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGVmZmljaWVudCBieSBwcm9jZXNz
aW5nIGJsb2NrcyBpbiByZXZlcnNlIHBvc3RvcmRlci4KKyAgICAgICAgT3BlcmFuZHM8QXZhaWxh
YmlsaXR5PiBhdmFpbGFiaWxpdHk7CisgICAgICAgIGJvb2wgY2hhbmdlZDsKKyAgICAgICAgZG8g
eworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBqLS07KSB7Ci0gICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihqKTsK
LSAgICAgICAgICAgICAgICBPcGVyYW5kczxOb2RlKj4mIHN1Y2Nlc3NvckF2YWlsYWJpbGl0eSA9
IHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBrID0gYXZhaWxhYmlsaXR5LnNpemUoKTsgay0tOykgewotICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBteU5vZGUgPSBhdmFpbGFiaWxpdHlba107Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghbXlOb2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3Nvci0+c3Nh
LT5saXZlQXRIZWFkLmNvbnRhaW5zKG15Tm9kZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIE5v
dGUgdGhhdCB0aGlzIG1heSBvdmVyd3JpdGUgYXZhaWxhYmlsaXR5IHdpdGggYSBib2d1cyBub2Rl
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGF0IG1lcmdlIHBvaW50cy4gVGhpcyBpcyBmaW5lLCBz
aW5jZSBtZXJnZSBwb2ludHMgaGF2ZQotICAgICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50KFBo
aSkncyB0byB3b3JrIGFyb3VuZCB0aGlzLiBUaGUgb3V0Y29tZSBvZiB0aGlzIGlzCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHlvdSBtaWdodCBoYXZlIGEgcHJvZ3JhbSBpbiB3aGljaCBhIG5vZGUg
aGFwcGVucyB0byByZW1haW4KLSAgICAgICAgICAgICAgICAgICAgLy8gbGl2ZSBpbnRvIHNvbWUg
YmxvY2sgQiwgYW5kIHNlcGFyYXRlbHkgKGR1ZSB0byBjb3B5Ci0gICAgICAgICAgICAgICAgICAg
IC8vIHByb3BhZ2F0aW9uKSBqdXN0IG9uZSBvZiB0aGUgcHJlZGVjZXNzb3JzIG9mIEIgaXNzdWVk
IGEKLSAgICAgICAgICAgICAgICAgICAgLy8gTW92SGludCBwdXR0aW5nIHRoYXQgbm9kZSBpbnRv
IHNvbWUgbG9jYWwuIFRoZW4gaW4gQiB3ZSBtaWdodAotICAgICAgICAgICAgICAgICAgICAvLyB0
aGluayB0aGF0IHRoYXQgbm9kZSBpcyBhIHZhbGlkIHZhbHVlIGZvciB0aGF0IGxvY2FsLiBPZgot
ICAgICAgICAgICAgICAgICAgICAvLyBjb3Vyc2UgaWYgdGhhdCBsb2NhbCB3YXMgYWN0dWFsbHkg
bGl2ZSBpbiBCLCBCIHdvdWxkIGhhdmUgYQotICAgICAgICAgICAgICAgICAgICAvLyBQaGkgZm9y
IGl0LiBTbyBlc3NlbnRpYWxseSB3ZSdsbCBoYXZlIE9TUiBleGl0IGRyb3BwaW5nIHRoaXMKLSAg
ICAgICAgICAgICAgICAgICAgLy8gbm9kZSdzIHZhbHVlIGludG8gdGhlIGxvY2FsIHdoZW4gd2Ug
b3RoZXJ3aXNlIChpbiB0aGUgREZHKQotICAgICAgICAgICAgICAgICAgICAvLyB3b3VsZCBoYXZl
IGRyb3BwZWQgdW5kZWZpbmVkIGludG8gdGhlIGxvY2FsLiBUaGlzIHNlZW1zCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGhhcm1sZXNzLgotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgc3VjY2Vzc29yQXZhaWxhYmlsaXR5W2tdID0gbXlOb2RlOworICAgICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJ
bmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIEdldEFyZ3VtZW50OiB7CisgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSh2YXJpYWJsZSkud2l0
aEZsdXNoKHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBNb3ZIaW50QW5kQ2hlY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
IEF2YWlsYWJpbGl0eSh2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVu
YXZhaWxhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAoYXZhaWxhYmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gYXZhaWxhYmlsaXR5Owor
ICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vz
c29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICBCYXNpY0Js
b2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYXZhaWxhYmlsaXR5LnNpemUoKTsgaS0t
OykgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0
eUF0SGVhZFtpXSA9IGF2YWlsYWJpbGl0eVtpXS5tZXJnZSgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ldKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
fQorICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAxNTkzNTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBHcmFwaDsKIAotLy8gQ29tcHV0ZXMgQmFzaWNCbG9j
azo6c3NhLT5hdmFpbGFiaWx0aXlBdEhlYWQvVGFpbC4gVGhpcyByZWxpZXMgb24gbGl2ZW5lc3MK
LS8vIGFuYWx5c2lzIHBoYXNlIGhhdmluZyBiZWVuIHJ1biBhbmQgdGhlIGdyYXBoIG5vdCBoYXZp
bmcgYmVlbiB0cmFuc2Zvcm1lZAotLy8gYWZ0ZXIgdGhhdC4KKy8vIENvbXB1dGVzIEJhc2ljQmxv
Y2s6OnNzYS0+YXZhaWxhYmlsdGl5QXRIZWFkL1RhaWwuIFRoaXMgaXMgYSBmb3J3YXJkIGZsb3cg
dHlwZSBpbmZlcmVuY2UKKy8vIG92ZXIgTW92SGludHMuIEF0IHRoZSB0aW1lIHdoZW4gTW92SGlu
dHMgYXJlIGludHJvZHVjZWQsIHdlIHdlcmUgY2VydGFpbiB0aGF0IGF0IGFueQorLy8gcG9pbnQg
aW4gdGhlIHByb2dyYW0gd2hlcmUgYSBieXRlY29kZSB2YXJpYWJsZSBoYWQgYmVlbiBsaXZlLCBh
bGwgb2YgdGhlIE1vdkhpbnRzIHRoYXQKKy8vIGZsb3dlZCBpbnRvIHRoYXQgcG9pbnQgZm9yIHRo
YXQgdmFyaWFibGUgaGFkIHRoZSBzYW1lIEZsdXNoRm9ybWF0LiBUaGlzIGFuYWx5c2lzIHdpbGwg
dGVsbAorLy8geW91IHdoYXQgdGhhdCBmb3JtYXQgd291bGQgaGF2ZSBiZWVuLgogCiBib29sIHBl
cmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhHcmFwaCYpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEwICs0Niwx
MiBAQAogI2luY2x1ZGUgIkRGR0xJQ01QaGFzZS5oIgogI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5h
bHlzaXNQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgi
CisjaW5jbHVkZSAiREZHTW92SGludENvdW50aW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRG
R1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1NTQUNvbnZl
cnNpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0YWNrTGF5b3V0UGhhc2UuaCIKICNpbmNsdWRl
ICJERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmgiCkBAIC0yNjgsMTAgKzI3MCwxMyBAQCBQ
bGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1M
SUNNKGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAg
IHBlcmZvcm1DRkEoZGZnKTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhp
dExpdmVuZXNzKCkpCisgICAgICAgICAgICBwZXJmb3JtUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlv
bihkZmcpOwogICAgICAgICBwZXJmb3JtRENFKGRmZyk7IC8vIFdlIHJlbHkgb24gdGhpcyB0byBj
b252ZXJ0IGRlYWQgU2V0TG9jYWxzIGludG8gdGhlIGFwcHJvcHJpYXRlIGhpbnQsIGFuZCB0byBr
aWxsIGRlYWQgY29kZSB0aGF0IHdvbid0IGJlIHJlY29nbml6ZWQgYXMgZGVhZCBieSBMTFZNLgog
ICAgICAgICBwZXJmb3JtU3RhY2tMYXlvdXQoZGZnKTsKICAgICAgICAgcGVyZm9ybUxpdmVuZXNz
QW5hbHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUZsdXNoTGl2ZW5lc3NBbmFseXNpcyhkZmcp
OworICAgICAgICBwZXJmb3JtTW92SGludENvdW50aW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1P
U1JBdmFpbGFiaWxpdHlBbmFseXNpcyhkZmcpOwogICAgICAgICBwZXJmb3JtV2F0Y2hwb2ludENv
bGxlY3Rpb24oZGZnKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1cnJl
Y3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFz
ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0
LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgUmVzdXJyZWN0aW9uRm9yVmFs
aWRhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBSZXN1cnJlY3Rpb25G
b3JWYWxpZGF0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAi
cmVzdXJyZWN0aW9uIGZvciB2YWxpZGF0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJv
b2wgcnVuKCkKKyAgICB7CisgICAgICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9ncmFw
aCk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFub2RlLT5oYXNSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQaGFudG9tLCBub2Rl
LT5jb2RlT3JpZ2luLCBFZGdlKG5vZGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1SZXN1
cnJlY3Rpb25Gb3JWYWxpZGF0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lv
biBzYW1wbGluZ1JlZ2lvbigiREZHIFJlc3VycmVjdGlvbiBGb3IgVmFsaWRhdGlvbiBQaGFzZSIp
OworICAgIHJldHVybiBydW5QaGFzZTxSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2U+KGdy
YXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdXJyZWN0
aW9uRm9yVmFsaWRhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlv
blBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1Jlc3VycmVjdGlvbkZv
clZhbGlkYXRpb25QaGFzZV9oCisjZGVmaW5lIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25Q
aGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFBsYWNlcyBhIFBoYW50b20gYWZ0ZXIgZXZlcnkg
dmFsdWUtcHJvZHVjaW5nIG5vZGUsIHRoZXJlYnkgZGlzYWJsaW5nIERDRSBmcm9tIGtpbGxpbmcg
aXQuCisvLyBUaGlzIGlzIHVzZWZ1bCBmb3IgdmFsaWRhdGluZyBvdXIgT1NSIGV4aXQgbWFjaGlu
ZXJ5IGJ5IGluc3RpdHV0aW5nIHRoZSByZXF1aXJlbWVudCB0aGF0CisvLyBhbnkgbGl2ZS1pbi1i
eXRlY29kZSB2YXJpYWJsZSBzaG91bGQgYmUgT1NSLWF2YWlsYWJsZS4gV2l0aG91dCB0aGlzIHBo
YXNlLCBpdCdzIGltcG9zc2libGUKKy8vIHRvIG1ha2Ugc3VjaCBhbiBhc3NlcnRpb24gYmVjYXVz
ZSBvdXIgRENFIGlzIG1vcmUgYWdncmVzc2l2ZSB0aGFuIHRoZSBieXRlY29kZSBsaXZlbmVzcwor
Ly8gYW5hbHlzaXMuCisKK2Jvb2wgcGVyZm9ybVJlc3VycmVjdGlvbkZvclZhbGlkYXRpb24oR3Jh
cGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2VfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJz
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCwxMyAr
MTU4LDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLTspIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNb
al07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3ItPmFwcGVuZE5vblRl
cm1pbmFsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9u
ZSwgVXBzaWxvbiwgYmxvY2stPmxhc3QoKS0+Y29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFVwc2lsb24sIHByZWRlY2Vzc29yLT5s
YXN0KCktPmNvZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhub2RlKSwgRWRnZShwcmVkZWNlc3Nvci0+dmFyaWFibGVzQXRUYWlsW2ldLCB1c2VLaW5kKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPmNvZGVPcmln
aW4sIE9wSW5mbyh2YXJpYWJsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShu
b2RlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJj
ZS5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bHVlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICAgICBjYXNlIERlYWRGbHVzaDoK
KyAgICAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgogICAgICAgICAgICAgcmV0dXJuIFZhbHVl
U291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CiAgICAg
ICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ssIHdoZXJlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRl
ZiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFfaAogI2RlZmluZSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFf
aAogCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHRG91YmxlRm9ybWF0U3Rh
dGUuaCIKICNpbmNsdWRlICJERkdGbHVzaEZvcm1hdC5oIgogI2luY2x1ZGUgIkRGR0ZsdXNoZWRB
dC5oIgpAQCAtMzksNiArNDAsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKK3N0cnVjdCBOb2RlOworCiBlbnVtIERvdWJsZUJhbGxvdCB7IFZvdGVWYWx1ZSwgVm90ZURv
dWJsZSB9OwogCiBjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGEgOiBwdWJsaWMgVW5pb25GaW5kPFZh
cmlhYmxlQWNjZXNzRGF0YT4gewpAQCAtNTYsNiArNTksOCBAQCBwdWJsaWM6CiAgICAgICAgICwg
bV9pc1Byb2ZpdGFibGVUb1VuYm94KGZhbHNlKQogICAgICAgICAsIG1faXNMb2FkZWRGcm9tKGZh
bHNlKQogICAgICAgICAsIG1fZG91YmxlRm9ybWF0U3RhdGUoRW1wdHlEb3VibGVGb3JtYXRTdGF0
ZSkKKyAgICAgICAgLCBtX21vdkhpbnRDb3VudCgwKQorICAgICAgICAsIG1fc2luZ2xlTW92SGlu
dCgwKQogICAgIHsKICAgICAgICAgY2xlYXJWb3RlcygpOwogICAgIH0KQEAgLTcyLDYgKzc3LDgg
QEAgcHVibGljOgogICAgICAgICAsIG1fY2hlY2tBcnJheUhvaXN0aW5nRmFpbGVkKGZhbHNlKQog
ICAgICAgICAsIG1faXNQcm9maXRhYmxlVG9VbmJveChmYWxzZSkKICAgICAgICAgLCBtX2RvdWJs
ZUZvcm1hdFN0YXRlKEVtcHR5RG91YmxlRm9ybWF0U3RhdGUpCisgICAgICAgICwgbV9tb3ZIaW50
Q291bnQoMCkKKyAgICAgICAgLCBtX3NpbmdsZU1vdkhpbnQoMCkKICAgICB7CiAgICAgICAgIGNs
ZWFyVm90ZXMoKTsKICAgICB9CkBAIC0zNTIsNiArMzU5LDE3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIEZsdXNoZWRBdChmbHVzaEZvcm1hdCgpLCBtYWNoaW5lTG9jYWwoKSk7CiAgICAgfQog
ICAgIAorICAgIGJvb2wgaXNTaW5nbHlBc3NpZ25lZCgpIGNvbnN0IHsgcmV0dXJuIG1fbW92SGlu
dENvdW50ID09IDE7IH0KKyAgICB2b2lkIGNvdW50TW92SGludChOb2RlKiBub2RlKQorICAgIHsK
KyAgICAgICAgaWYgKCFtX21vdkhpbnRDb3VudCsrKQorICAgICAgICAgICAgbV9zaW5nbGVNb3ZI
aW50ID0gbm9kZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zaW5nbGVNb3ZIaW50ID0g
MDsKKyAgICB9CisgICAgdW5zaWduZWQgbW92SGludENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9t
b3ZIaW50Q291bnQ7IH0KKyAgICBOb2RlKiBzaW5nbGVNb3ZIaW50KCkgY29uc3QgeyByZXR1cm4g
bV9zaW5nbGVNb3ZIaW50OyB9CisgICAgCiBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgc2xpZ2h0
bHkgc3BhY2UtaW5lZmZpY2llbnQsIHNpbmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZpZWQgd2l0aAog
ICAgIC8vIHdpbGwgaGF2ZSB0aGUgc2FtZSBvcGVyYW5kIGFuZCBzaG91bGQgaGF2ZSB0aGUgc2Ft
ZSBwcmVkaWN0aW9uLiBCdXQKQEAgLTM3NCw2ICszOTIsOSBAQCBwcml2YXRlOgogCiAgICAgZmxv
YXQgbV92b3Rlc1syXTsgLy8gVXNlZCBwcmltYXJpbHkgZm9yIGRvdWJsZSB2b3RpbmcgYnV0IG1h
eSBiZSByZXVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLgogICAgIERvdWJsZUZvcm1hdFN0YXRlIG1f
ZG91YmxlRm9ybWF0U3RhdGU7CisgICAgCisgICAgdW5zaWduZWQgbV9tb3ZIaW50Q291bnQ7Cisg
ICAgTm9kZSogbV9zaW5nbGVNb3ZIaW50OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OSw2ICs2OSw5IEBAIHZvaWQgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcDo6ZHVtcChQcmlu
dFMKICAgICAgICAgb3V0LnByaW50KCJ+Iik7CiAKICAgICBvdXQucHJpbnQoQWJicmV2aWF0ZWRT
cGVjdWxhdGlvbkR1bXAobV9kYXRhLT5wcmVkaWN0aW9uKCkpLCAiLyIsIG1fZGF0YS0+Zmx1c2hG
b3JtYXQoKSk7CisgICAgCisgICAgaWYgKE5vZGUqIG5vZGUgPSBtX2RhdGEtPnNpbmdsZU1vdkhp
bnQoKSkKKyAgICAgICAgb3V0LnByaW50KCI9PiIsIG5vZGUpOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcw
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Z0bFN0YXRlKHN0YXRlKQogICAgICAgICAsIG1f
aGVhcHMoc3RhdGUuY29udGV4dCkKICAgICAgICAgLCBtX291dChzdGF0ZS5jb250ZXh0KQorICAg
ICAgICAsIG1fYm9vbGVhbkxvY2FscyhPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDAp
LT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9pbnQzMkxvY2FscyhPcGVyYW5kc0xpa2Us
IHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9pbnQ2
NExvY2FscyhPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhl
YWQpCisgICAgICAgICwgbV9kb3VibGVMb2NhbHMoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5i
bG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fdmFsdWVTb3VyY2VzKE9wZXJh
bmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKICAgICAgICAg
LCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgICAgICAsIG1faW50ZXJwcmV0ZXIoc3RhdGUuZ3Jh
cGgsIG1fc3RhdGUpCkBAIC0xMDEsNiArMTA1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9wcm9s
b2d1ZSA9IGFwcGVuZEJhc2ljQmxvY2sobV9mdGxTdGF0ZS5jb250ZXh0LCBtX2Z0bFN0YXRlLmZ1
bmN0aW9uKTsKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1ZSk7CiAgICAgICAgIGNy
ZWF0ZVBoaVZhcmlhYmxlcygpOworICAgICAgICBjcmVhdGVTaGFkb3dMb2NhbHMobV9ib29sZWFu
TG9jYWxzLCBtX291dC5ib29sZWFuKTsKKyAgICAgICAgY3JlYXRlU2hhZG93TG9jYWxzKG1faW50
MzJMb2NhbHMsIG1fb3V0LmludDMyKTsKKyAgICAgICAgY3JlYXRlU2hhZG93TG9jYWxzKG1faW50
NjRMb2NhbHMsIG1fb3V0LmludDY0KTsKKyAgICAgICAgY3JlYXRlU2hhZG93TG9jYWxzKG1fZG91
YmxlTG9jYWxzLCBtX291dC5kb3VibGVUeXBlKTsKICAgICAgICAgCiAgICAgICAgIG1fY2FsbEZy
YW1lID0gbV9vdXQucGFyYW0oMCk7CiAgICAgICAgIG1fdGFnVHlwZU51bWJlciA9IG1fb3V0LmNv
bnN0SW50NjQoVGFnVHlwZU51bWJlcik7CkBAIC0xNjgsNiArMTc2LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdm9pZCBjcmVhdGVTaGFkb3dMb2NhbHMoT3BlcmFu
ZHM8TFZhbHVlPiYgb3BlcmFuZHMsIExUeXBlIHR5cGUpCisgICAgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBvcGVyYW5kcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBvcGVyYW5kc1tp
XSA9IG1fb3V0LmFsbG9jYSh0eXBlKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb21waWxlQmxv
Y2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICBpZiAoIWJsb2NrKQpAQCAtMjA0
LDggKzIxOCw2IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpbml0aWFsaXplT1NSRXhp
dFN0YXRlRm9yQmxvY2soKTsKICAgICAgICAgCi0gICAgICAgIG1fbGl2ZSA9IGJsb2NrLT5zc2Et
PmxpdmVBdEhlYWQ7Ci0gICAgICAgIAogICAgICAgICBtX3N0YXRlLnJlc2V0KCk7CiAgICAgICAg
IG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1faGlnaEJsb2NrKTsKICAgICAgICAgCkBAIC00NzUs
MTIgKzQ4Nyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAg
IERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG1fbm9kZSwgdXNlKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChtX25vZGUtPmFkanVzdGVkUmVmQ291bnQoKSkKLSAgICAgICAgICAgIG1f
bGl2ZS5hZGQobV9ub2RlKTsKLSAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZm
ZWN0cykKICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4
KTsKICAgICAgICAgCkBAIC01NjcsMjEgKzU3MywzMSBAQCBwcml2YXRlOgogICAgICAgICBMVmFs
dWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsKIAogICAgICAg
ICBzd2l0Y2ggKHVzZUtpbmRGb3IodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSB7Ci0gICAgICAg
IGNhc2UgSW50MzJVc2U6CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgICAgIHNw
ZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbV9ub2RlLCBp
c05vdEludDMyKGpzVmFsdWUpKTsKLSAgICAgICAgICAgIHNldEludDMyKHVuYm94SW50MzIoanNW
YWx1ZSkpOworICAgICAgICAgICAgTFZhbHVlIGludFZhbHVlID0gdW5ib3hJbnQzMihqc1ZhbHVl
KTsKKyAgICAgICAgICAgIHNldEludDMyKGludFZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0LnNl
dChpbnRWYWx1ZSwgbV9pbnQzMkxvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICB9CisgICAg
ICAgIGNhc2UgQ2VsbFVzZTogewogICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlw
ZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBtX25vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7CiAg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGpzVmFsdWUpOworICAgICAgICAgICAgbV9vdXQuc2V0KGpz
VmFsdWUsIG1faW50NjRMb2NhbHMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIEJvb2xlYW5Vc2U6IHsKICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbV9ub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkp
OwotICAgICAgICAgICAgc2V0Qm9vbGVhbih1bmJveEJvb2xlYW4oanNWYWx1ZSkpOworICAgICAg
ICAgICAgTFZhbHVlIGJvb2xlYW5WYWx1ZSA9IHVuYm94Qm9vbGVhbihqc1ZhbHVlKTsKKyAgICAg
ICAgICAgIHNldEJvb2xlYW4oYm9vbGVhblZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0LnNldChi
b29sZWFuVmFsdWUsIG1fYm9vbGVhbkxvY2Fscy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICB9
CisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewogICAgICAgICAgICAgc2V0SlNWYWx1ZShqc1Zh
bHVlKTsKKyAgICAgICAgICAgIG1fb3V0LnNldChqc1ZhbHVlLCBtX2ludDY0TG9jYWxzLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC02MTIsNDMgKzYyOCwzOCBAQCBwcml2YXRlOgogICAg
IAogICAgIHZvaWQgY29tcGlsZVNldExvY2FsKCkKICAgICB7Ci0gICAgICAgIG9ic2VydmVNb3ZI
aW50KG1fbm9kZSk7CisgICAgICAgIG9ic2VydmVNb3ZIaW50KCk7CiAgICAgICAgIAogICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkgewogICAgICAg
ICBjYXNlIEZsdXNoZWRKU1ZhbHVlOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1
ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1f
dmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFs
dWVJbkpTU3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgRmx1c2hlZERvdWJsZTogewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91
YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUodmFs
dWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBt
X3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKERv
dWJsZUluSlNTdGFjaywgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBGbHVzaGVkSW50MzI6IHsKICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwg
cGF5bG9hZEZvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFs
dWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJ
bkpTU3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgRmx1c2hlZEludDUyOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQ1Miht
X25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJl
c3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291
cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDUySW5KU1N0
YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZs
dXNoZWRDZWxsOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2
YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ssIHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2hlZEJv
b2xlYW46IHsKQEAgLTY1NiwyMCArNjY3LDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291
dC5zdG9yZTY0KAogICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKICAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywgdmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBEZWFkRmx1c2g6
CisgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGVtaXRNb3ZIaW50KCk7CisgICAgICAgIAor
ICAgICAgICAvLyBEbyB0aGlzIGxhc3Qgc28gdGhhdCB3ZSBkb24ndCBsZWF2ZSBtX3ZhbHVlU291
cmNlcyBjbGFpbWluZyB0aGF0IHdlIGhhdmUgdG8KKyAgICAgICAgLy8gbG9hZCB0aGlzIHZhcmlh
YmxlJ3MgdmFsdWUgZnJvbSB0aGUgc2hhZG93IGxvY2Fscy4gVGhpcyBpcyBhbiBvcHRpbWl6YXRp
b24uCisgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0K
KyAgICAgICAgICAgIFZhbHVlU291cmNlOjpmbHVzaGVkQXQodmFyaWFibGUtPmZsdXNoZWRBdCgp
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlTW92SGludCgpCiAgICAgewotICAgICAg
ICBvYnNlcnZlTW92SGludChtX25vZGUpOworICAgICAgICBlbWl0TW92SGludCgpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIGNvbXBpbGVab21iaWVIaW50KCkKQEAgLTY4MCw4ICs2OTYsOSBAQCBw
cml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZU1vdkhpbnRBbmRDaGVjaygpCiAgICAgewot
ICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOworICAgICAgICBvYnNlcnZlTW92SGludCgp
OwogICAgICAgICBzcGVjdWxhdGUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGVtaXRNb3ZI
aW50KCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVBoYW50b20oKQpAQCAtMjU1Nyw3
ICsyNTc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIEV4aXRBcmd1bWVudExpc3Qg
YXJndW1lbnRzOwogICAgICAgICAKLSAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXQsIGFy
Z3VtZW50cywgRm9ybWF0dGVkVmFsdWUoKSk7CisgICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhl
eGl0LCBhcmd1bWVudHMsIEZvcm1hdHRlZFZhbHVlKCksIGV4aXQubV9jb2RlT3JpZ2luKTsKICAg
ICAgICAgY2FsbFN0YWNrbWFwKGV4aXQsIGFyZ3VtZW50cyk7CiAgICAgICAgIAogICAgICAgICBp
bmZvLm1faXNJbnZhbGlkYXRpb25Qb2ludCA9IHRydWU7CkBAIC0zODIyLDI1ICszODM5LDYgQEAg
cHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNMaXZlKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9saXZlLmNvbnRhaW5zKG5vZGUpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHVz
ZShFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBBU1NFUlQoZWRnZS0+aGFzUmVzdWx0KCkpOwot
ICAgICAgICBpZiAoIWVkZ2UuZG9lc0tpbGwoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgbV9saXZlLnJlbW92ZShlZGdlLm5vZGUoKSk7Ci0gICAgfQotICAgIAotICAgIC8vIFdyYXBw
ZXIgdXNlZCBvbmx5IGZvciBERkdfTk9ERV9ET19UT19DSElMRFJFTgotICAgIHZvaWQgdXNlKE5v
ZGUqLCBFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICB1c2UoZWRnZSk7Ci0gICAgfQotICAgIAog
ICAgIExCYXNpY0Jsb2NrIGxvd0Jsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fYmxvY2tzLmdldChibG9jayk7CkBAIC0zODQ5LDE3ICszODQ3LDQ4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2soKQogICAgIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YWx1ZVNvdXJjZXMuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBtX2hpZ2hCbG9jay0+c3NhLT5mbHVzaEF0
SGVhZFtpXTsKKyAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBtX2hpZ2hC
bG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV07CisgICAgICAgICAgICBGbHVzaGVkQXQg
Zmx1c2ggPSBhdmFpbGFiaWxpdHkuZmx1c2hlZEF0KCk7CiAgICAgICAgICAgICBzd2l0Y2ggKGZs
dXNoLmZvcm1hdCgpKSB7Ci0gICAgICAgICAgICBjYXNlIERlYWRGbHVzaDogewotICAgICAgICAg
ICAgICAgIC8vIE11c3QgY29uc2lkZXIgYXZhaWxhYmxlIG5vZGVzIGluc3RlYWQuCi0gICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZFtpXTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRGVh
ZEZsdXNoOgorICAgICAgICAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOiB7CisgICAgICAgICAg
ICAgICAgLy8gTXVzdCBjb25zaWRlciBhdmFpbGFibGUgdmFyaWFibGVzIGluc3RlYWQuCisgICAg
ICAgICAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHkuaGFzVmFyaWFibGUoKSkgewogICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNl
KG5vZGUpOworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBh
dmFpbGFiaWxpdHkudmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoTm9kZSogbm9kZSA9
IHZhcmlhYmxlLT5zaW5nbGVNb3ZIaW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBtZWFucyB0aGF0IHRoZSBPU1IgZXhpdCBzaG91bGQganVzdCB0cnkgdG8gbGF6aWx5IGZpZ3Vy
ZSBvdXQgaG93CisgICAgICAgICAgICAgICAgICAgIC8vIHRvIHJlYWQgYW5kIGRlY29kZSB3aGF0
ZXZlciBub2RlIHRoaXMgdmFyaWFibGUgb3JpZ2luYXRlZCBmcm9tLgorICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKG5vZGUpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSBpcyBtdWx0aXBseS1h
c3NpZ25lZCBhbmQgd2Ugd2lsbCBlbnN1cmUgdGhhdAorICAgICAgICAgICAgICAgIC8vIGluIGVh
Y2ggcGxhY2Ugd2hlcmUgd2UgYXNzaWduIGl0LCB3ZSB3aWxsIHVzZSB0aGUgc2FtZSByZXByZXNl
bnRhdGlvbi4KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgp
KSB7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgICAgICAg
ICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tp
XSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJbkxvY2FsKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6
CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoSW50
MzJJbkxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBGbHVzaGVkSW50NTI6CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ld
ID0gVmFsdWVTb3VyY2UoSW50NTJJbkxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShCb29sZWFuSW5Mb2NhbCk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTM5MjQsMTAgKzM5NTMsMjIgQEAg
cHJpdmF0ZToKICAgICB7CiAgICAgICAgIEV4aXRBcmd1bWVudExpc3QgYXJndW1lbnRzOwogICAg
ICAgICAKLSAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXQsIGFyZ3VtZW50cywgbG93VmFs
dWUpOworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsK
ICAgICAgICAgCi0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKSB7
Ci0gICAgICAgICAgICBBU1NFUlQobV9ub2RlKTsKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBC
YWNrd2FyZFNwZWN1bGF0aW9uKQorICAgICAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXQs
IGFyZ3VtZW50cywgbG93VmFsdWUsIGNvZGVPcmlnaW4pOworICAgICAgICBlbHNlIGlmIChkaXJl
Y3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKSB7CisgICAgICAgICAgICBpZiAoIXJlY292ZXJ5
KSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBtX25vZGVJbmRl
eDsgbm9kZUluZGV4IDwgbV9oaWdoQmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPT0g
Y29kZU9yaWdpbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQ7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXQsIGFy
Z3VtZW50cywgbG93VmFsdWUsIGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgZXhpdC5jb252ZXJ0
VG9Gb3J3YXJkKG1faGlnaEJsb2NrLCBtX25vZGUsIG1fbm9kZUluZGV4LCByZWNvdmVyeSwgYXJn
dW1lbnRzKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTM5MzUsMTYgKzM5NzYsNDggQEAgcHJp
dmF0ZToKICAgICB9CiAgICAgCiAgICAgdm9pZCBidWlsZEV4aXRBcmd1bWVudHMoCi0gICAgICAg
IE9TUkV4aXQmIGV4aXQsIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFs
dWUgbG93VmFsdWUpCisgICAgICAgIE9TUkV4aXQmIGV4aXQsIEV4aXRBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsCisgICAgICAgIENvZGVPcmlnaW4gY29k
ZU9yaWdpbikKICAgICB7CisgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkp
CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIFVzaW5nIGxpdmVuZXNzIGF0ICIsIGNvZGVP
cmlnaW4sICJcbiIpOworICAgICAgICAKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX2NhbGxG
cmFtZSk7CiAgICAgICAgIGlmICghIWxvd1ZhbHVlKQogICAgICAgICAgICAgYXJndW1lbnRzLmFw
cGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpbnQg
b3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAg
Ym9vbCBpc0xpdmUgPSBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpLCBjb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIGlmICghaXNMaXZlKSB7CisgICAgICAg
ICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAg
ICBWYWx1ZVNvdXJjZSBzb3VyY2UgPSBtX3ZhbHVlU291cmNlc1tpXTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgc3dpdGNoIChzb3VyY2Uua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIFZh
bHVlSW5Mb2NhbDoKKyAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoCisgICAgICAgICAg
ICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXRKU1ZhbHVlLCBtX291dC5n
ZXQobV9pbnQ2NExvY2Fsc1tpXSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBEb3VibGVJbkxvY2FsOgorICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudCgK
KyAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1hdERvdWJs
ZSwgbV9vdXQuZ2V0KG1fZG91YmxlTG9jYWxzW2ldKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEludDMySW5Mb2NhbDoKKyAgICAgICAgICAgICAgICBhZGRFeGl0
QXJndW1lbnQoCisgICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVG
b3JtYXRJbnQzMiwgbV9vdXQuZ2V0KG1faW50MzJMb2NhbHNbaV0pKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW50NTJJbkxvY2FsOgorICAgICAgICAgICAgICAg
IGFkZEV4aXRBcmd1bWVudCgKKyAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRzLCBp
LCBWYWx1ZUZvcm1hdEludDUyLCBtX291dC5nZXQobV9pbnQ2NExvY2Fsc1tpXSkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCb29sZWFuSW5Mb2NhbDoKKyAgICAg
ICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoCisgICAgICAgICAgICAgICAgICAgIGV4aXQsIGFy
Z3VtZW50cywgaSwgVmFsdWVGb3JtYXRCb29sZWFuLAorICAgICAgICAgICAgICAgICAgICBtX291
dC56ZXJvRXh0KG1fb3V0LmdldChtX2Jvb2xlYW5Mb2NhbHNbaV0pLCBtX291dC5pbnQzMikpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZUluSlNTdGFjazoK
ICAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2so
c291cmNlLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM5
NTgsNiArNDAzMSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNb
aV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKHNvdXJjZS52aXJ0dWFsUmVnaXN0ZXIo
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNvdXJjZUlzRGVh
ZDoKKyAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5l
c3MoKSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJFeHBlY3RlZCByIiwgb3BlcmFu
ZCwgIiB0byBiZSBhdmFpbGFibGUgYnV0IGl0IHdhc24ndC5cbiIpOworICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIERG
RydzIERDRSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgZGVhZCBpbiBieXRlY29kZQorICAgICAg
ICAgICAgICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBieXRlY29kZSBsaXZlbmVzcyBhbmFseXNpcyB0
aGlua3MgaXQncyBsaXZlLiBUaGlzIGlzCisgICAgICAgICAgICAgICAgLy8gYWNjZXB0YWJsZSBz
aW5jZSB0aGUgREZHJ3MgRENFIGlzIGJ5IGRlc2lnbiBtb3JlIGFnZ3Jlc3NpdmUgd2hpbGUgc3Rp
bGwKKyAgICAgICAgICAgICAgICAvLyBiZWluZyBzb3VuZC4KICAgICAgICAgICAgICAgICBleGl0
Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEhhdmVOb2RlOgpAQCAtMzk5MSw1MyArNDA3Myw2IEBAIHByaXZh
dGU6CiAgICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50RXhpdEFyZ3VtZW50KGV4aXQsIGluZGV4
LCBub2RlKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGlmICghaXNM
aXZlKG5vZGUpKSB7Ci0gICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhub2RlLT5vcCgp
KSkgewotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRFeGl0QXJndW1lbnQoZXhpdCwgaW5kZXgs
IG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYg
KGlzTGl2ZShub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAg
ICAgICAgICAgTm9kZSogYmVzdE5vZGUgPSAwOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJl
c3RTY29yZSA9IDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgSGFzaFNldDxO
b2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2xpdmUuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBI
YXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9saXZlLmVuZCgpOwotICAgICAgICAgICAg
ICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5v
ZGUqIGNhbmRpZGF0ZSA9ICppdGVyOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRl
LT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUtPmNoaWxkMSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
YW5kaWRhdGUtPmNoaWxkMSgpICE9IG5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbXlTY29yZSA9IGZvcndhcmRSZXdp
cmluZ1NlbGVjdGlvblNjb3JlKGNhbmRpZGF0ZS0+b3AoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChteVNjb3JlIDw9IGJlc3RTY29yZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgICAgICBiZXN0Tm9kZSA9IGNhbmRpZGF0ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYmVzdFNjb3JlID0gbXlTY29yZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGJlc3ROb2RlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChpc0xpdmUoYmVzdE5vZGUpKTsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IGJlc3ROb2RlOwotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpbmRleF0gPSBFeGl0
VmFsdWU6OmRlYWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChpc0xpdmUobm9kZSkpOwotCiAgICAg
ICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChub2RlKTsKICAg
ICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CiAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQo
ZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRJbnQzMiwgdmFsdWUudmFsdWUoKSk7
CkBAIC00MTA3LDE0ICs0MTQyLDc3IEBAIHByaXZhdGU6CiAgICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQodmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIG9ic2VydmVNb3ZIaW50KE5vZGUqIG5v
ZGUpCisgICAgLy8gTm90aWZpZXMgb3VyIGxvY2FsIHZhbHVlIHNvdXJjZXMgdGhhdCB0aGUgZ2l2
ZW4gdmFyaWFibGUgaXMgYXZhaWxhYmxlIHZpYSB0aGUgZ2l2ZW4KKyAgICAvLyBub2RlLgorICAg
IHZvaWQgb2JzZXJ2ZU1vdkhpbnQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbm9kZS0+Y29u
dGFpbnNNb3ZIaW50KCkpOworICAgICAgICBBU1NFUlQobV9ub2RlLT5vcCgpICE9IFpvbWJpZUhp
bnQpOworICAgICAgICAKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBtX25vZGUt
PmxvY2FsKCk7CisgICAgICAgIAorICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKG9wZXJh
bmQpID0gVmFsdWVTb3VyY2UobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgIH0KKyAgICAK
KyAgICAvLyBGb3Igc2luZ2x5LWFzc2lnbmVkIHZhcmlhYmxlcywgdGhpcyBqdXN0IG9ic2VydmVz
IHRoYXQgdGhlIHZhcmlhYmxlIGlzIGF2YWlsYWJsZSB2aWEKKyAgICAvLyB0aGUgYXBwcm9wcmlh
dGUgbm9kZS4gRm9yIG11bHRpcGx5LWFzc2lnbmVkIHZhcmlhYmxlcywgdGhpcyBzdG9yZXMgdGhl
IHZhcmlhYmxlcyB2YWx1ZQorICAgIC8vIGludG8gb3VyIGJ5dGVjb2RlIHNoYWRvdyBsb2NhbHMg
YW5kIG5vdGVzIHRoaXMgaW4gbV92YWx1ZVNvdXJjZXMuCisgICAgdm9pZCBlbWl0TW92SGludCgp
CiAgICAgewotICAgICAgICBBU1NFUlQobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpOwotICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSAhPSBab21iaWVIaW50KTsKKyAgICAgICAgQVNTRVJUKG1fbm9k
ZS0+Y29udGFpbnNNb3ZIaW50KCkpOworICAgICAgICBBU1NFUlQobV9ub2RlLT5vcCgpICE9IFpv
bWJpZUhpbnQpOwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBu
b2RlLT5sb2NhbCgpOworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX25vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBpZiAoZGF0YS0+aXNTaW5nbHlBc3NpZ25l
ZCgpKSB7CisgICAgICAgICAgICBvYnNlcnZlTW92SGludCgpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKG9w
ZXJhbmQpID0gVmFsdWVTb3VyY2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgc3dp
dGNoIChkYXRhLT5mbHVzaEZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToK
KyAgICAgICAgICAgIG1fb3V0LnNldCgKKyAgICAgICAgICAgICAgICBsb3dEb3VibGUobV9ub2Rl
LT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICBt
X2RvdWJsZUxvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG1fdmFs
dWVTb3VyY2VzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkxv
Y2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1
c2hlZEludDMyOgorICAgICAgICAgICAgbV9vdXQuc2V0KAorICAgICAgICAgICAgICAgIGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiksCisgICAgICAg
ICAgICAgICAgbV9pbnQzMkxvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpKTsKKyAgICAgICAg
ICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJ
bnQzMkluTG9jYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBGbHVzaGVkSW50NTI6CisgICAgICAgICAgICBtX291dC5zZXQoCisgICAgICAgICAgICAg
ICAgbG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwK
KyAgICAgICAgICAgICAgICBtX2ludDY0TG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkpOwor
ICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVl
U291cmNlKEludDUySW5Mb2NhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgbV9vdXQuc2V0KAorICAgICAg
ICAgICAgICAgIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uKSwKKyAgICAgICAgICAgICAgICBtX2ludDY0TG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwo
KSkpOworICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9
IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICAgICAgbV9vdXQuc2V0
KAorICAgICAgICAgICAgICAgIGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICBtX2Jvb2xlYW5Mb2NhbHMub3BlcmFu
ZChkYXRhLT5sb2NhbCgpKSk7CisgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKGRh
dGEtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoQm9vbGVhbkluTG9jYWwpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAg
ICAgICAgIG1fb3V0LnNldChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2ludDY0TG9j
YWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMu
b3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0SW50MzIoTm9kZSogbm9kZSwgTFZhbHVl
IHZhbHVlKQpAQCAtNDI3Miw3ICs0MzcwLDEyIEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2Rl
KiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9ib29sZWFuVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSos
IExvd2VyZWROb2RlVmFsdWU+IG1fc3RvcmFnZVZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBM
b3dlcmVkTm9kZVZhbHVlPiBtX2RvdWJsZVZhbHVlczsKLSAgICBIYXNoU2V0PE5vZGUqPiBtX2xp
dmU7CisgICAgCisgICAgLy8gQnl0ZWNvZGUgc2hhZG93IGxvY2Fscy4KKyAgICBPcGVyYW5kczxM
VmFsdWU+IG1fYm9vbGVhbkxvY2FsczsKKyAgICBPcGVyYW5kczxMVmFsdWU+IG1faW50MzJMb2Nh
bHM7CisgICAgT3BlcmFuZHM8TFZhbHVlPiBtX2ludDY0TG9jYWxzOworICAgIE9wZXJhbmRzPExW
YWx1ZT4gbV9kb3VibGVMb2NhbHM7CiAgICAgCiAgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBt
X3BoaXM7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5j
cHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBPU1JFeGl0Ojpj
b252ZXJ0VG9Gb3J3YXJkKAogICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnRO
b2RlLT5jb2RlT3JpZ2luKTsKICAgICAKICAgICBtX2NvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3Jp
Z2luOwotICAgIAorCiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAxNTkzNTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTksNiArMTk5LDcgQEAgcHVibGljOgogICAgIExWYWx1ZSBpbnRUb1B0cihMVmFsdWUgdmFs
dWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkSW50VG9QdHIobV9idWlsZGVyLCB2YWx1ZSwg
dHlwZSk7IH0KICAgICBMVmFsdWUgYml0Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsg
cmV0dXJuIGJ1aWxkQml0Q2FzdChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIAorICAg
IExWYWx1ZSBhbGxvY2EoTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRBbGxvY2EobV9idWlsZGVy
LCB0eXBlKTsgfQogICAgIExWYWx1ZSBnZXQoTFZhbHVlIHJlZmVyZW5jZSkgeyByZXR1cm4gYnVp
bGRMb2FkKG1fYnVpbGRlciwgcmVmZXJlbmNlKTsgfQogICAgIExWYWx1ZSBzZXQoTFZhbHVlIHZh
bHVlLCBMVmFsdWUgcmVmZXJlbmNlKSB7IHJldHVybiBidWlsZFN0b3JlKG1fYnVpbGRlciwgdmFs
dWUsIHJlZmVyZW5jZSk7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVmFsdWVTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVmFsdWVTb3VyY2UuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsMjEgQEAgdm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgIGNh
c2UgU291cmNlTm90U2V0OgogICAgICAgICBvdXQucHJpbnQoIlNvdXJjZU5vdFNldCIpOwogICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZUluTG9jYWw6CisgICAgICAgIG91dC5wcmludCgi
VmFsdWVJbkxvY2FsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDMySW5Mb2NhbDoK
KyAgICAgICAgb3V0LnByaW50KCJJbnQzMkluTG9jYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW50NTJJbkxvY2FsOgorICAgICAgICBvdXQucHJpbnQoIkludDUySW5Mb2NhbCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBCb29sZWFuSW5Mb2NhbDoKKyAgICAgICAgb3V0LnBy
aW50KCJCb29sZWFuSW5Mb2NhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGVJ
bkxvY2FsOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUluTG9jYWwiKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgVmFsdWVJbkpTU3RhY2s6CiAgICAgICAgIG91dC5wcmludCgiVmFsdWVJ
bkpTU3RhY2s6IiwgdmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICByZXR1cm47CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oCShyZXZpc2lvbiAxNTkz
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5j
bHVkZSAiREZHRmx1c2hlZEF0LmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTM4LDYg
KzM5LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogZW51bSBWYWx1ZVNv
dXJjZUtpbmQgewogICAgIFNvdXJjZU5vdFNldCwKKyAgICBWYWx1ZUluTG9jYWwsCisgICAgSW50
MzJJbkxvY2FsLAorICAgIEludDUySW5Mb2NhbCwKKyAgICBCb29sZWFuSW5Mb2NhbCwKKyAgICBE
b3VibGVJbkxvY2FsLAogICAgIFZhbHVlSW5KU1N0YWNrLAogICAgIEludDMySW5KU1N0YWNrLAog
ICAgIEludDUySW5KU1N0YWNrLApAQCAtNTYsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGlj
aXQgVmFsdWVTb3VyY2UoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCiAgICAgICAgIDogbV9raW5kKGtp
bmQpCiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFNvdXJjZUlzRGVhZCk7CisgICAg
ICAgIEFTU0VSVChtX2tpbmQgPT0gU291cmNlSXNEZWFkIHx8IG1fa2luZCA9PSBWYWx1ZUluTG9j
YWwgfHwgbV9raW5kID09IEludDMySW5Mb2NhbCB8fCBtX2tpbmQgPT0gSW50NTJJbkxvY2FsIHx8
IG1fa2luZCA9PSBCb29sZWFuSW5Mb2NhbCB8fCBtX2tpbmQgPT0gRG91YmxlSW5Mb2NhbCk7CiAg
ICAgfQogICAgIAogICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKERGRzo6Tm9kZSogbm9kZSkKQEAg
LTcyLDYgKzc4LDI4IEBAIHB1YmxpYzoKICAgICAgICAgbV92YWx1ZS52aXJ0dWFsUmVnaXN0ZXIg
PSByZWcub2Zmc2V0KCk7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBWYWx1ZVNvdXJjZSBmbHVz
aGVkQXQoY29uc3QgREZHOjpGbHVzaGVkQXQmIGZsdXNoKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChmbHVzaC5mb3JtYXQoKSkgeworICAgICAgICBjYXNlIERGRzo6Rmx1c2hlZEpTVmFsdWU6Cisg
ICAgICAgIGNhc2UgREZHOjpGbHVzaGVkQ2VsbDoKKyAgICAgICAgY2FzZSBERkc6OkZsdXNoZWRC
b29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCBm
bHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBERkc6
OkZsdXNoZWREb3VibGU6CisgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoRG91YmxlSW5K
U1N0YWNrLCBmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBERkc6OkZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShJ
bnQzMkluSlNTdGFjaywgZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgREZHOjpGbHVzaGVkSW50NTI6CisgICAgICAgICAgICByZXR1cm4gVmFsdWVT
b3VyY2UoSW50NTJJbkpTU3RhY2ssIGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKFNv
dXJjZUlzRGVhZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgVmFsdWVTb3VyY2VLaW5k
IGtpbmQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fa2luZDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EdW1wQ29udGV4dC5jcHAJKHJldmlzaW9uIDE1
OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUR1
bXBDb250ZXh0OjpEdW1wQ29udGV4dCgpIHsgfQorRHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KCkK
KyAgICA6IGdyYXBoKDApCit7Cit9CisKIER1bXBDb250ZXh0Ojp+RHVtcENvbnRleHQoKSB7IH0K
IAogYm9vbCBEdW1wQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EdW1wQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSBERkcgeyBj
bGFzcyBHcmFwaDsgfQorCiBzdHJ1Y3QgRHVtcENvbnRleHQgewogICAgIER1bXBDb250ZXh0KCk7
CiAgICAgfkR1bXBDb250ZXh0KCk7CkBAIC00MSw2ICs0Myw3IEBAIHN0cnVjdCBEdW1wQ29udGV4
dCB7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4ID0gIiIp
IGNvbnN0OwogICAgIAogICAgIFN0cmluZ0hhc2hEdW1wQ29udGV4dDxTdHJ1Y3R1cmU+IHN0cnVj
dHVyZXM7CisgICAgREZHOjpHcmFwaCogZ3JhcGg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE1
OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw3IEBAIHR5cGVkZWYgT3B0aW9uUmFuZ2Ugb3B0aW9uUmFu
Z2U7CiAgICAgdihib29sLCBlbmFibGVMTFZNRmFzdElTZWwsIGZhbHNlKSBcCiAgICAgdihib29s
LCB1c2VMTFZNU21hbGxDb2RlTW9kZWwsIGZhbHNlKSBcCiAgICAgdihib29sLCBkdW1wTExWTUlS
LCBmYWxzZSkgXAorICAgIHYoYm9vbCwgdmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MsIGZhbHNl
KSBcCiAgICAgdihib29sLCBsbHZtQWx3YXlzRmFpbHNCZWZvcmVDb21waWxlLCBmYWxzZSkgXAog
ICAgIHYoYm9vbCwgbGx2bUFsd2F5c0ZhaWxzQmVmb3JlTGluaywgZmFsc2UpIFwKICAgICB2KGJv
b2wsIGxsdm1TaW1wbGVPcHQsIHRydWUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDEz
ICs0NjksMTMgQEAgcHVibGljOgogICAgIGJvb2wgdXNlc05vblN0cmljdEV2YWwoKSB7IHJldHVy
biBtX3VzZXNOb25TdHJpY3RFdmFsOyB9CiAgICAgdm9pZCBzZXRVc2VzTm9uU3RyaWN0RXZhbChi
b29sIHVzZXNOb25TdHJpY3RFdmFsKSB7IG1fdXNlc05vblN0cmljdEV2YWwgPSB1c2VzTm9uU3Ry
aWN0RXZhbDsgfQogCi0gICAgaW50IGNhcHR1cmVTdGFydCgpIHsgcmV0dXJuIG1fY2FwdHVyZVN0
YXJ0OyB9CisgICAgaW50IGNhcHR1cmVTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZVN0
YXJ0OyB9CiAgICAgdm9pZCBzZXRDYXB0dXJlU3RhcnQoaW50IGNhcHR1cmVTdGFydCkgeyBtX2Nh
cHR1cmVTdGFydCA9IGNhcHR1cmVTdGFydDsgfQogCi0gICAgaW50IGNhcHR1cmVFbmQoKSB7IHJl
dHVybiBtX2NhcHR1cmVFbmQ7IH0KKyAgICBpbnQgY2FwdHVyZUVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FwdHVyZUVuZDsgfQogICAgIHZvaWQgc2V0Q2FwdHVyZUVuZChpbnQgY2FwdHVyZUVuZCkg
eyBtX2NhcHR1cmVFbmQgPSBjYXB0dXJlRW5kOyB9CiAKLSAgICBpbnQgY2FwdHVyZUNvdW50KCkg
eyByZXR1cm4gLShtX2NhcHR1cmVFbmQgLSBtX2NhcHR1cmVTdGFydCk7IH0KKyAgICBpbnQgY2Fw
dHVyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gLShtX2NhcHR1cmVFbmQgLSBtX2NhcHR1cmVTdGFy
dCk7IH0KIAogICAgIGludCBwYXJhbWV0ZXJDb3VudCgpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291
bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQogICAgIGludCBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1Ro
aXMoKSB7IHJldHVybiBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsgfQpJbmRleDogVG9v
bHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5
MzUzKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTMtMTEtMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBG
VEwgc2hvdWxkIGhhdmUgYW4gZXhwbGljaXQgbm90aW9uIG9mIGJ5dGVjb2RlIGxpdmVuZXNzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQxODEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMv
cnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTMtMTEtMTUgIFRpbSBIb3J0b24gIDx0aW1vdGh5
X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgYnVpbGQud2Via2l0Lm9yZy9kYXNoYm9hcmQg
c2hvdWxkIHByb3ZpZGUgYSB3YXkgdG8gZm9jdXMgb24gYSBzdWJzZXQgb2YgYm90cwpJbmRleDog
VG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShyZXZpc2lvbiAxNTkzNTIpCisrKyBUb29scy9T
Y3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC00MTMsNiArNDEz
LDEwIEBAIGRlZiBydW5GVExOb0NKSVQKICAgICBydW4oImZ0bC1uby1jaml0IiwgIi0tZW5hYmxl
Q29uY3VycmVudEpJVD1mYWxzZSIsICItLXVzZUV4cGVyaW1lbnRhbEZUTD10cnVlIikKIGVuZAog
CitkZWYgcnVuRlRMTm9DSklUT1NSVmFsaWRhdGlvbgorICAgIHJ1bigiZnRsLW5vLWNqaXQtb3Ny
LXZhbGlkYXRpb24iLCAiLS1lbmFibGVDb25jdXJyZW50SklUPWZhbHNlIiwgIi0tdXNlRXhwZXJp
bWVudGFsRlRMPXRydWUiLCAiLS12YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcz10cnVlIikKK2Vu
ZAorCiBkZWYgcnVuREZHRWFnZXIKICAgICBydW4oImRmZy1lYWdlciIsICpFQUdFUl9PUFRJT05T
KQogZW5kCkBAIC00MjksNiArNDMzLDEwIEBAIGRlZiBydW5GVExFYWdlck5vQ0pJVAogICAgIHJ1
bigiZnRsLWVhZ2VyLW5vLWNqaXQiLCAiLS11c2VFeHBlcmltZW50YWxGVEw9dHJ1ZSIsICItLWVu
YWJsZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAqRUFHRVJfT1BUSU9OUykKIGVuZAogCitkZWYgcnVu
RlRMRWFnZXJOb0NKSVRPU1JWYWxpZGF0aW9uCisgICAgcnVuKCJmdGwtZWFnZXItbm8tY2ppdC1v
c3ItdmFsaWRhdGlvbiIsICItLXVzZUV4cGVyaW1lbnRhbEZUTD10cnVlIiwgIi0tZW5hYmxlQ29u
Y3VycmVudEpJVD1mYWxzZSIsICItLXZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzPXRydWUiLCAq
RUFHRVJfT1BUSU9OUykKK2VuZAorCiBkZWYgcnVuQWx3YXlzVHJpZ2dlckNvcHlQaGFzZQogICAg
IHJ1bigiYWx3YXlzLXRyaWdnZXItY29weS1waGFzZSIsICItLW1pbkhlYXBVdGlsaXphdGlvbj0y
LjAiLCAiLS1taW5Db3BpZWRCbG9ja1V0aWxpemF0aW9uPTIuMCIpCiBlbmQKQEAgLTQ0Myw4ICs0
NTEsMTAgQEAgZGVmIGRlZmF1bHRSdW4KICAgICBpZiAkZW5hYmxlRlRMCiAgICAgICAgIHJ1bkRl
ZmF1bHRGVEwKICAgICAgICAgcnVuRlRMTm9DSklUCisgICAgICAgIHJ1bkZUTE5vQ0pJVE9TUlZh
bGlkYXRpb24KICAgICAgICAgcnVuRlRMRWFnZXIKICAgICAgICAgcnVuRlRMRWFnZXJOb0NKSVQK
KyAgICAgICAgcnVuRlRMRWFnZXJOb0NKSVRPU1JWYWxpZGF0aW9uCiAgICAgZW5kCiBlbmQKIAo=
</data>
<flag name="commit-queue"
          id="240155"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217111</attachid>
            <date>2013-11-15 17:58:37 -0800</date>
            <delta_ts>2013-11-15 21:38:21 -0800</delta_ts>
            <desc>work in progress - new approach</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>116672</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MSBA
QAorMjAxMy0xMS0xNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgaGF2ZSBhbiBleHBsaWNpdCBub3Rpb24gb2YgYnl0ZWNvZGUgbGl2ZW5lc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDE4MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
VGhpcyBtYWtlcyBGVEwgT1NSIGV4aXQgdXNlIGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lzIHRv
IGRldGVybWluZSB3aGljaCB2YXJpYWJsZXMKKyAgICAgICAgdG8gaW5jbHVkZSB2YWx1ZXMgZm9y
LiBUaGUgZGVjaXNpb24gb2YgaG93IHRvIGdldCB0aGUgdmFsdWVzIG9mIHZhcmlhYmxlcyBpcyBi
YXNlZCBvbgorICAgICAgICBmb3J3YXJkIHByb3BhZ2F0aW9uIG9mIE1vdkhpbnRzIGFuZCBTZXRM
b2NhbHMuCisgICAgICAgIAorICAgICAgICBUaGlzIGZpeGVzIGEgYnVuY2ggb2YgYnVncyAobGlr
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MTM4IGJ1dAorICAg
ICAgICBhbHNvIG90aGVycyB0aGF0IEkgbm90aWNlZCB3aGVuIEkgc3RhcnRlZCB3cml0aW5nIG1v
cmUgdGFyZ2V0dGVkIHRlc3RzKSBhbmQgYWxsb3dzIHVzCisgICAgICAgIHRvIHJlbW92ZSBzb21l
IHNrZXRjaHkgY29kZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmg6
CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAg
ICAgKEpTQzo6aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpzZXRG
b3JPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6
CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpzdGVwT3Zlckluc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZUxvY2FsTGl2
ZW5lc3NGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpczo6cnVuTGl2ZW5lc3NGaXhwb2ludCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpczo6b3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpnZXRMaXZlbmVzc0luZm8pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MpOgorICAgICAgICAq
IGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOgorICAgICAgICAoSlNDOjpvcGVyYW5kVGhhdElzTm90QWx3
YXlzTGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xpdmUpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhcHR1cmVD
b3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FwdHVyZVN0YXJ0KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpjYXB0dXJlRW5kKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3Jp
Z2luLmNwcDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpkdW1wSW5Db250ZXh0KToK
KyAgICAgICAgKiBieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzKToKKyAg
ICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OmdldE91dCk6CisgICAgICAgIChKU0M6
OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlKToKKyAgICAgICAgKEpTQzo6RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M6OmdldExpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHQXZhaWxh
YmlsaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5OjpkdW1w
KToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OmR1bXBJbkNvbnRleHQpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6
QXZhaWxhYmlsaXR5OjpBdmFpbGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJp
bGl0eTo6dW5hdmFpbGFibGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6d2l0
aEZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OnZhcmlhYmxlSXNVbmRl
Y2lkZWQpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6dmFyaWFibGVJc1VuYXZh
aWxhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6Omhhc1ZhcmlhYmxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OnZhcmlhYmxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBdmFpbGFiaWxpdHk6OmZsdXNoZWRBdCk6CisgICAgICAgIChKU0M6OkRGRzo6QXZh
aWxhYmlsaXR5OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5OjptZXJnZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZU1hcmtlcik6CisgICAg
ICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToK
KyAgICAgICAgKiBkZmcvREZHRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpE
aXNhc3NlbWJsZXI6OkRpc2Fzc2VtYmxlcik6CisgICAgICAgICogZGZnL0RGR0ZsdXNoRm9ybWF0
LmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR0Zs
dXNoRm9ybWF0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6cmVzdWx0Rm9yKToKKyAgICAgICAgKEpT
Qzo6REZHOjp1c2VLaW5kRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpkYXRhRm9ybWF0Rm9yKToK
KyAgICAgICAgKiBkZmcvREZHRmx1c2hlZEF0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGbHVz
aGVkQXQ6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdGbHVzaGVkQXQuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpGbHVzaGVkQXQ6OkZsdXNoZWRBdCk6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1c2hl
ZEF0OjptZXJnZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmxpdmVuZXNzRm9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZlSW5CeXRlY29kZSk6CisgICAgICAg
ICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKToKKyAgICAgICAgKiBkZmcvREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpNb3ZIaW50Q291bnRpbmdQaGFzZTo6TW92SGludENv
dW50aW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6Ok1vdkhpbnRDb3VudGluZ1BoYXNlOjpy
dW4pOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1Nb3ZIaW50Q291bnRpbmcpOgorICAgICAg
ICAqIGRmZy9ERkdNb3ZIaW50Q291bnRpbmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcv
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6UmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlOjpSZXN1cnJlY3Rp
b25Gb3JWYWxpZGF0aW9uUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlJlc3VycmVjdGlvbkZv
clZhbGlkYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtUmVzdXJy
ZWN0aW9uRm9yVmFsaWRhdGlvbik6CisgICAgICAgICogZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZh
bGlkYXRpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgICogZGZnL0RGR1ZhbHVlU291cmNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVT
b3VyY2U6OmZvckZsdXNoRm9ybWF0KToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NE
YXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFj
Y2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6aXNTaW5n
bHlBc3NpZ25lZCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpjb3Vu
dE1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6bW92SGlu
dENvdW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNpbmdsZU1v
dkhpbnQpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wOjpkdW1wKToKKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpMb3dlckRGR1RvTExWTSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y3JlYXRlU2hh
ZG93TG9jYWxzKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QXJndW1lbnQpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTW92SGludCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNb3ZIaW50QW5kQ2hlY2spOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSW52YWxpZGF0aW9uUG9pbnQp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppbml0aWFsaXplT1NSRXhpdFN0
YXRlRm9yQmxvY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjplbWl0T1NS
RXhpdENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpidWlsZEV4aXRB
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphZGRFeGl0QXJn
dW1lbnRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6b2JzZXJ2
ZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjplbWl0TW92SGlu
dCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9T
UkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFsbG9jYSk6CisgICAgICAgICogZnRsL0ZUTFZhbHVl
U291cmNlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAg
ICAgICogZnRsL0ZUTFZhbHVlU291cmNlLmg6CisgICAgICAgIChKU0M6OkZUTDo6VmFsdWVTb3Vy
Y2U6OlZhbHVlU291cmNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6Zmx1c2hl
ZEF0KToKKyAgICAgICAgKiBydW50aW1lL0R1bXBDb250ZXh0LmNwcDoKKyAgICAgICAgKEpTQzo6
RHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KToKKyAgICAgICAgKiBydW50aW1lL0R1bXBDb250ZXh0
Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9TeW1i
b2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6Y2FwdHVyZVN0YXJ0
KToKKyAgICAgICAgKEpTQzo6U2hhcmVkU3ltYm9sVGFibGU6OmNhcHR1cmVFbmQpOgorICAgICAg
ICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6Y2FwdHVyZUNvdW50KToKKwogMjAxMy0xMS0xNCAg
TWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIC1kZWFs
bG9jIGNhbGxiYWNrcyBmcm9tIHdyYXBwZWQgT2JqZWN0aXZlLUMgb2JqZWN0cyBjYW4gaGFwcGVu
IGF0IGJhZCB0aW1lcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VT
CiAgICAgZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RG
R0FycmF5TW9kZS5jcHAKICAgICBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAKKyAgICBk
ZmcvREZHQXZhaWxhYmlsaXR5LmNwcAogICAgIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmNwcAogICAgIGRmZy9ERkdCYXNpY0Jsb2NrLmNwcAogICAgIGRmZy9ERkdCaW5hcnlTd2l0
Y2guY3BwCkBAIC0xMzksNiArMTQwLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAg
ICBkZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwCiAgICAgZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVh
dGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdNaW5pZmllZE5vZGUuY3BwCisgICAgZGZnL0RGR01v
dkhpbnRDb3VudGluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCiAgICAg
ZGZnL0RGR05vZGUuY3BwCiAgICAgZGZnL0RGR05vZGVGbGFncy5jcHAKQEAgLTE1OCw2ICsxNjAs
NyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdQbGFuLmNwcAogICAg
IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0
aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKICAgICBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNp
b24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMCArMTAwLDExIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaCBcCi0gICAgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgXAotICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaCBcCi0gICAgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAg
XAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNC
bG9jay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2lj
QmxvY2suaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaCBcCkBAIC0xMzIsNiArMTMzLDcgQEAgamF2YXNjcmlwdGNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeHByZXNzaW9uUmFuZ2VJbmZvLmggXAorCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oIFwKQEAgLTIwNyw2ICsyMDksOCBAQCBqYXZh
c2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXZhaWxhYmlsaXR5LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFi
aWxpdHkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdh
dGlvblBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5jcHAgXApAQCAtMzE4LDYgKzMyMiw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRJRC5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTW92SGludENvdW50aW5nUGhhc2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR01vdkhpbnRDb3VudGluZ1BoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTmF0dXJhbExvb3BzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
YXR1cmFsTG9vcHMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcCBc
CkBAIC0zNTgsNiArMzY0LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2Uu
Y3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlk
YXRpb25QaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYW5lU3RyaW5nR2V0QnlWYWxT
bG93UGF0aEdlbmVyYXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3Jl
Qm9hcmQuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJl
dmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw2ICsz
MzgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0FyZ3VtZW50c1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBcnJheU1vZGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQXZhaWxhYmlsaXR5LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2suY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPg0KQEAgLTM4NCw2ICszODUsNyBA
QAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xvbmdMaXZlZFN0YXRlLmNwcCIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9vcFByZUhlYWRlckNyZWF0
aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5p
ZmllZE5vZGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNb3ZI
aW50Q291bnRpbmdQaGFzZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR05hdHVyYWxMb29wcy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR05vZGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2Rl
RmxhZ3MuY3BwIiAvPg0KQEAgLTQwMyw2ICs0MDUsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1BsYW4uY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25Q
aGFzZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0
aXZlSklULmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1NwZWN1bGF0aXZlSklUNjQuY3BwIiAvPg0KQEAgLTc0NSw2ICs3NDgsNyBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnlWYWxJbmZvLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzSW5saW5lLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcQ2FsbExpbmtJbmZvLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcQ2FsbExpbmtTdGF0dXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIiAvPg0KQEAgLTc2Miw2ICs3
NjYsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhlY3V0aW9uQ291
bnRlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV4aXRLaW5k
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhwcmVzc2lvblJh
bmdlSW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEZ1bGxC
eXRlY29kZUxpdmVuc3MuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxHZXRCeUlkU3RhdHVzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcSGFuZGxlckluZm8uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxJbmxpbmVDYWxsRnJhbWVTZXQuaCIgLz4NCkBAIC04MTIsNiArODE3LDcgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F2YWlsYWJpbGl0eS5oIiAvPg0K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2su
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9ja0lubGlu
ZXMuaCIgLz4NCkBAIC04NzMsNiArODc5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdNaW5pZmllZEdyYXBoLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR01pbmlmaWVkSUQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHTWluaWZpZWROb2RlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R01vdkhpbnRDb3VudGluZ1BoYXNlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR05hdHVyYWxMb29wcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdOb2RlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVB
bGxvY2F0b3IuaCIgLz4NCkBAIC04OTUsNiArOTAyLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIiAvPg0KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlckJhbmsuaCIgLz4NCiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVnaXN0ZXJTZXQuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NhZmVUb0V4ZWN1dGUuaCIgLz4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xv
d1BhdGhHZW5lcmF0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
U2NvcmVCb2FyZC5oIiAvPg0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw2IEBA
CiAJCTBGMjM1QkUyMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExUaHVua3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkNDMTcxNzhFMUMwMDY5MEM3
RiAvKiBGVExUaHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjIzNUJFMzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQ0Qx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmNwcCAqLzsgfTsKIAkJMEYyMzVCRTQx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDRTE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
VmFsdWVGb3JtYXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkwRjIzNUJFNTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQ0YxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmNwcCAqLzsgfTsKLQkJMEYyMzVCRTYxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJEMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFs
dWVTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjIzNUJFQjE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCRTcxNzE3OEU3
MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmNwcCAqLzsgfTsKIAkJMEYyMzVCRUMxNzE3OEU3
MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJFODE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhp
dEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjIzNUJFRDE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkU5MTcx
NzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwICovOyB9OwpAQCAtMjYw
LDYgKzI1OCwxMiBAQAogCQkwRjYzOTQ3ODE1RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFs
dWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjYzOTQ4NDE1RTQ4MTE4MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDgxMTVFNDgxMTQwMDZBNTk3
QyAvKiBERkdBcnJheU1vZGUuY3BwICovOyB9OwogCQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0Mg
LyogREZHQXJyYXlNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2NjZFQzAxODM1
NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUJFMTgzNTY2Rjkw
MEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2NjZFQzExODM1NjZGOTAw
RDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjY2NkVDNjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUMy
MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwICovOyB9OworCQkwRjY2NkVD
NzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyog
REZHQXZhaWxhYmlsaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY2NjZFQ0MxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZv
clZhbGlkYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2NkVDQTE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9y
VmFsaWRhdGlvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEY2NjZFQ0QxODM2QjM3RTAwRDAxN0YxIC8q
IERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERG
R1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBE
RkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZD
MTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzAy
NUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MDI1QTcxNzE0QjBG
ODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgKi87IH07CkBAIC0xMzk1
LDggKzEzOTksNiBAQAogCQkwRjIzNUJDQzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFRodW5rcy5oOyBwYXRoID0gZnRs
L0ZUTFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIzNUJDRDE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRlRMVmFsdWVGb3JtYXQuY3BwOyBwYXRoID0gZnRsL0ZUTFZhbHVlRm9y
bWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCQ0UxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEZUTFZhbHVlRm9ybWF0Lmg7IHBhdGggPSBmdGwvRlRMVmFsdWVGb3JtYXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyMzVCQ0YxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZh
bHVlU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFZh
bHVlU291cmNlLmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1ZVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGMjM1QkQwMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNv
dXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExWYWx1ZVNvdXJjZS5o
OyBwYXRoID0gZnRsL0ZUTFZhbHVlU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMjM1QkU3MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0QmFzZS5jcHA7IHBhdGgg
PSBkZmcvREZHT1NSRXhpdEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjIzNUJFODE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdEJhc2UuaDsgcGF0aCA9IGRmZy9ERkdPU1JF
eGl0QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIzNUJFOTE3MTc4RTcz
MDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHA7IHBhdGggPSBkZmcv
REZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE1NTAsNiArMTU1MiwxMiBAQAogCQkwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzOTQ4MTE1RTQ4MTE0
MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0FycmF5TW9kZS5jcHA7IHBhdGggPSBkZmcvREZHQXJyYXlNb2RlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0ODIxNUU0ODExNDAwNkE1OTdDIC8q
IERGR0FycmF5TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJh
eU1vZGUuaDsgcGF0aCA9IGRmZy9ERkdBcnJheU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQzIxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2
YWlsYWJpbGl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdB
dmFpbGFiaWxpdHkuY3BwOyBwYXRoID0gZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjY2RUMzMTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFp
bGFiaWxpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQXZhaWxhYmls
aXR5Lmg7IHBhdGggPSBkZmcvREZHQXZhaWxhYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNjY2RUNBMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JW
YWxpZGF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdSZXN1
cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRh
dGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Jlc3VycmVj
dGlvbkZvclZhbGlkYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZh
bGlkYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2ODE0
REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5
TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2OTE0REYzRjEzMDBC
N0IyRTQgLyogREZHRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdF
ZGdlLmg7IHBhdGggPSBkZmcvREZHRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjcwMjVBNzE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4NDQsOCArMjg1Miw2IEBACiAJCQkJMEYyMzVC
Q0QxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmNwcCAqLywKIAkJCQkwRjIzNUJD
RTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuaCAqLywKIAkJCQkwRkRCMkNDODE3
M0RBNTFFMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCAqLywKLQkJCQkwRjIzNUJDRjE3
MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuY3BwICovLAotCQkJCTBGMjM1QkQwMTcx
NzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBm
dGw7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzc0NCw2ICszNzUwLDggQEAKIAkJ
CQkwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8sCiAJCQkJQTdE
OUEyOEYxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwICovLAog
CQkJCUE3RDlBMjkwMTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgg
Ki8sCisJCQkJMEY2NjZFQzIxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAg
Ki8sCisJCQkJMEY2NjZFQzMxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oICov
LAogCQkJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlLmNwcCAqLywKIAkJCQkwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5oICovLAogCQkJCUE3RDg5Q0UzMTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdCYXNpY0Jsb2NrLmNwcCAqLywKQEAgLTM4OTQsNiArMzkwMiw4IEBACiAJCQkJMEZGRkM5
NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCAq
LywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0
ZXJCYW5rLmggKi8sCisJCQkJMEY2NjZFQ0ExODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVj
dGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAgKi8sCisJCQkJMEY2NjZFQ0IxODM2QjM3RTAwRDAx
N0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oICovLAogCQkJCUE3N0E0
MjNDMTdBMEJCRkQwMEE4REI4MSAvKiBERkdTYWZlVG9FeGVjdXRlLmggKi8sCiAJCQkJQTc0MTAx
N0UxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJh
dG9yLmggKi8sCiAJCQkJODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQu
aCAqLywKQEAgLTQwMzYsMTUgKzQwNDYsMTYgQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgx
IC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
LQkJCQlDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAq
LywKLQkJCQlDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmgg
Ki8sCi0JCQkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAgKi8sCi0JCQkJQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcy5oICovLAogCQkJCTBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJh
eUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLywKIAkJCQkwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUg
LyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovLAogCQkJCTBGNjM5NDUxMTVEMDcwNTEwMDZB
NTk3QyAvKiBBcnJheVByb2ZpbGUuY3BwICovLAogCQkJCTBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3
QyAvKiBBcnJheVByb2ZpbGUuaCAqLywKKwkJCQlDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUgLyog
Qnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAqLywKKwkJCQlDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUg
LyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEYyMUMyN0UxNEJFQUE4MDAwQURDNjRC
IC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCAqLywKKwkJCQlDMkZDQUUwRTE3QTlDMjRFMDAzNEM3
MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLywKKwkJCQlDMkZDQUUwRjE3QTlD
MjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8sCisJCQkJMEY2NjZF
QkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAq
LywKIAkJCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8sCiAJCQkJ
MEYwQjgzQUUxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgKi8sCiAJCQkJMEYw
QjgzQUYxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oICovLApAQCAtNDA3Myw2ICs0
MDg0LDcgQEAKIAkJCQkwRkIxMDU4MjE2NzU0ODBDMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwICov
LAogCQkJCTBGQjEwNTgzMTY3NTQ4MEMwMEY4QUI2RSAvKiBFeGl0S2luZC5oICovLAogCQkJCTBG
MEI4M0FBMTRCQ0Y1QjkwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZvLmggKi8sCisJCQkJ
MEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi8sCiAJ
CQkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwICovLAogCQkJ
CTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmggKi8sCiAJCQkJMEYw
QjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmggKi8sCkBAIC00NDMxLDcgKzQ0
NDMsNiBAQAogCQkJCTBGRUEwQTIwMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExUeXBlZFBvaW50ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkU0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1
ZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8q
IEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjIzNUJFNjE3MTc4RTFD
MDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDA0
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkYwRjFBMDE2QjcyQTFBMDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MDUwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9u
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTQ0NjEsNiArNDQ3Miw3IEBACiAJCQkJMkE2
RjQ2MjYxN0U5NTlDRTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyNEQzMUUzMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjZFQzExODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRl
Y29kZUxpdmVuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkU1MjZCRTE1OTBFRjAwMDA1NEU0
OEQgLyogSGVhcFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBENTE0QkJEMjRCMDBC
RkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
MEYwRTE2RjVDRDAwQjM0NDYwIC8qIElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNDcw
Myw2ICs0NzE1LDcgQEAKIAkJCQk5NUNENDU3NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTEwRTE2RjVDRDAwQjM0NDYwIC8q
IFByb2ZpbGVOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlBNTE2NkFEMzUxMDAwRjVC
QTMgLyogUHJvZmlsZXJCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjZFQzAxODM1
NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjcyOUI5MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2Zp
bGVyQnl0ZWNvZGVTZXF1ZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2
MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNDgx
Myw2ICs0ODI2LDcgQEAKIAkJCQlBN0E4QUYzRjE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJh
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGNDAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4
Q2xhbXBlZEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVGMDhDRjE0NkM3NjMzMDAwNDcy
QTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjZF
QzcxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdCNjAxODIxNjM5RkQyQTAwMzcyQkEzIC8qIFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJFODkyQzE2RDAyOEFEMDA5RTRGRDIgLyogVW51c2VkUG9pbnRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJv
ZmlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC00ODQzLDYgKzQ4NTcsNyBAQAogCQkJCTBGQzgxNTBB
MTQwNDNCRjUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk5Njg4Q0IxNjBFRDEyQjRFMDAxRDY0OUYgLyogWDg2QXNzZW1ibGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY2NjZFQ0QxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZh
bGlkYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlG
RTdCIC8qIFlhcnJJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODcxMkRC
QTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg4MTJE
QkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTU0NTEsNyAr
NTQ2Niw2IEBACiAJCQkJMEZFQTBBMTYxNzA2QkI5MDAwQkI3MjJDIC8qIEZUTFN0YXRlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMjM1QkUxMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRTMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZh
bHVlRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGMjM1QkU1MTcxNzhFMUMwMDY5MEM3
RiAvKiBGVExWYWx1ZVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDQjEwN0VD
Mzc2MDA0MjdBNDggLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkYwRjE5RjE2QjcyQTE3MDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDQzEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Q
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01NjMwLDYgKzU2NDQsNyBAQAogCQkJCTBG
RjcyOUIzMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkY3MjlCNDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkZDQUUxMDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNv
ZGVCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjY2RUNDMTgzNkIzN0UwMEQw
MTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4RDE2NzU0ODM3MDBGOEFCNkUgLyogUHJvZmlsZXJP
U1JFeGl0U2l0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyQjE2NzcxQzNBMDA5Q0NC
MDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU2
OTgsNiArNTcxMyw3IEBACiAJCQkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNw
ZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjJFMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ5NEYzMDE3MUUzRTIzMDBCRTc3
QTQgLyogV2F0Y2hkb2dNYWMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NjZFQzYxODM1Njcy
QjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkx
OUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQUNGNzM3NzE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNEU4NEY5RTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUJhc2ljQmxvY2suaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICsz
Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiAKLXR5cGVkZWYgSGFz
aE1hcDx1bnNpZ25lZCwgRmFzdEJpdFZlY3RvciwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwgV1RG
OjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4gPiBCeXRlY29kZVRvQml0
bWFwTWFwOwotCiBjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxC
eXRlY29kZUJhc2ljQmxvY2s+IHsKIHB1YmxpYzoKICAgICBlbnVtIFNwZWNpYWxCbG9ja1R5cGUg
eyBFbnRyeUJsb2NrLCBFeGl0QmxvY2sgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCShy
ZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
IgogCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIgogI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNzLmgiCiAjaW5j
bHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzgsNDQg
KzQwLDIzIEBAIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVMaXZlbmUKICAgICBj
b21wdXRlKCk7CiB9CiAKLXN0YXRpYyBpbnQgbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBpZiAoIWNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+
Y2FwdHVyZUNvdW50KCk7Ci19Ci0KLXN0YXRpYyBpbnQgY2FwdHVyZVN0YXJ0KENvZGVCbG9jayog
Y29kZUJsb2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJl
U3RhcnQoKTsKLX0KLQotc3RhdGljIGludCBjYXB0dXJlRW5kKENvZGVCbG9jayogY29kZUJsb2Nr
KQotewotICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7Ci19
Ci0KIHN0YXRpYyBib29sIGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKENvZGVCbG9jayogY29k
ZUJsb2NrLCBpbnQgb3BlcmFuZCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhv
cGVyYW5kKTsKICAgICByZXR1cm4gIWNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
b3BlcmFuZCkgLy8gRG9uJ3QgY2FyZSBhYm91dCBjb25zdGFudHMuCiAgICAgICAgICYmIHZpcnR1
YWxSZWcuaXNMb2NhbCgpIC8vIERvbid0IGNhcmUgYWJvdXQgYXJndW1lbnRzLgotICAgICAgICAm
JiAoIW51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMoY29kZUJsb2NrKSAvLyBJZiB3ZSBoYXZlIG5v
IGNhcHR1cmVkIHZhcmlhYmxlcywgd2UncmUgZ29vZCB0byBnby4KLSAgICAgICAgICAgIHx8ICh2
aXJ0dWFsUmVnLm9mZnNldCgpID4gY2FwdHVyZVN0YXJ0KGNvZGVCbG9jaykgfHwgKHZpcnR1YWxS
ZWcub2Zmc2V0KCkgPD0gY2FwdHVyZUVuZChjb2RlQmxvY2spKSkpOworICAgICAgICAmJiAoIWNv
ZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkgLy8gSWYgd2UgaGF2ZSBubyBjYXB0dXJlZCB2YXJpYWJs
ZXMsIHdlJ3JlIGdvb2QgdG8gZ28uCisgICAgICAgICAgICB8fCAodmlydHVhbFJlZy5vZmZzZXQo
KSA+IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkgfHwgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPD0g
Y29kZUJsb2NrLT5jYXB0dXJlRW5kKCkpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldEZvck9wZXJh
bmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZhc3RCaXRWZWN0b3ImIGJpdHMsIGludCBvcGVyYW5k
KQogewogICAgIEFTU0VSVChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIG9w
ZXJhbmQpKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKLSAgICBp
ZiAodmlydHVhbFJlZy5vZmZzZXQoKSA+IGNhcHR1cmVTdGFydChjb2RlQmxvY2spKQorICAgIGlm
ICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSkKICAgICAg
ICAgYml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkpOwogICAgIGVsc2UKLSAgICAgICAgYml0
cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkgLSBudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVzKGNv
ZGVCbG9jaykpOworICAgICAgICBiaXRzLnNldCh2aXJ0dWFsUmVnLnRvTG9jYWwoKSAtIGNvZGVC
bG9jay0+Y2FwdHVyZUNvdW50KCkpOwogfQogCiBzdGF0aWMgdm9pZCBjb21wdXRlVXNlc0ZvckJ5
dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCwgRmFzdEJpdFZlY3RvciYgdXNlcykKQEAgLTMwMyw4ICsyODQsOCBAQCBzdGF0aWMgdm9pZCBj
b21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0CiAgICAgICAgIGludCBiYXNlID0gaW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwogICAgICAgICBpbnQgY291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAg
ICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgYmFzZSArIGkp
KQotICAgICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBiYXNlICsg
aSk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2Nr
LCBiYXNlIC0gaSkpCisgICAgICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVz
ZXMsIGJhc2UgLSBpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzE1
LDExICsyOTYsMTEgQEAgc3RhdGljIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldAog
ICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpKQogICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ss
IHVzZXMsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgIGludCBhcmdDb3VudCA9
IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0g
aW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAt
aW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwogICAgICAgICBpbnQgbGFzdEFyZyA9IHJlZ2lzdGVy
T2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZFJl
Z2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBsYXN0QXJnIC0gaSkpCi0gICAgICAgICAgICAg
ICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGxhc3RBcmcgLSBpKTsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IDEgOiAwOyBpIDwgYXJnQ291
bnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNv
ZGVCbG9jaywgbGFzdEFyZyArIGkpKQorICAgICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29k
ZUJsb2NrLCB1c2VzLCBsYXN0QXJnICsgaSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTMzMywxMCArMzE0LDkgQEAgc3RhdGljIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRl
Y29kZU9mZnNldAogICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGlu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0jZGVmaW5l
IExMSU5UX0hFTFBFUl9PUENPREVTKG9wY29kZSwgbGVuZ3RoKSBjYXNlIG9wY29kZToKLSAgICBG
T1JfRUFDSF9MTElOVF9PUENPREVfRVhURU5TSU9OKExMSU5UX0hFTFBFUl9PUENPREVTKQotICAg
ICAgICByZXR1cm47Ci0jdW5kZWYgTExJTlRfSEVMUEVSX09QQ09ERVMKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAg
ICB9CiB9CiAKQEAgLTQ5Miw4ICs0NzIsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlRGVmc0ZvckJ5
dGVjb2RlT2Zmc2V0CiAgICAgY2FzZSBvcF9lbnRlcjogewogICAgICAgICBkZWZzLnNldEFsbCgp
OwogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIH0KKyAgICB9IH0KIH0KIAogc3RhdGljIHVu
c2lnbmVkIGdldExlYWRlck9mZnNldEZvckJhc2ljQmxvY2soUmVmUHRyPEJ5dGVjb2RlQmFzaWNC
bG9jaz4qIGJhc2ljQmxvY2spCkBAIC01NDAsMTMgKzUxOSwzMiBAQCBzdGF0aWMgQnl0ZWNvZGVC
YXNpY0Jsb2NrKiBmaW5kQmFzaWNCbG9jCiAgICAgcmV0dXJuIGJhc2ljQmxvY2tbMV0uZ2V0KCk7
CiB9CiAKK3N0YXRpYyB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPj4mIGJhc2ljQmxvY2tzLCB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgdXNlcywgRmFzdEJpdFZlY3RvciYg
ZGVmcywgRmFzdEJpdFZlY3RvciYgb3V0KQoreworICAgIHVzZXMuY2xlYXJBbGwoKTsKKyAgICBk
ZWZzLmNsZWFyQWxsKCk7CisgICAgCisgICAgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldChj
b2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCB1c2VzKTsKKyAgICBjb21wdXRlRGVmc0ZvckJ5dGVj
b2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQsIGRlZnMpOworICAgIAorICAgIG91
dC5leGNsdWRlKGRlZnMpOworICAgIG91dC5tZXJnZSh1c2VzKTsKKyAgICAKKyAgICAvLyBJZiB3
ZSBoYXZlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCB3ZSB3YW50IHRoZSBsaXZlLWluIHZhcmlhYmxl
cyBvZiB0aGUgCisgICAgLy8gZXhjZXB0aW9uIGhhbmRsZXIgYmxvY2sgdG8gYmUgaW5jbHVkZWQg
aW4gdGhlIGxpdmUtaW4gb2YgdGhpcyBwYXJ0aWN1bGFyIGJ5dGVjb2RlLgorICAgIGlmIChIYW5k
bGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0KSkgeworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGhhbmRsZXJCbG9j
ayA9IGZpbmRCYXNpY0Jsb2NrV2l0aExlYWRlck9mZnNldChiYXNpY0Jsb2NrcywgaGFuZGxlci0+
dGFyZ2V0KTsKKyAgICAgICAgQVNTRVJUKGhhbmRsZXJCbG9jayk7CisgICAgICAgIG91dC5tZXJn
ZShoYW5kbGVyQmxvY2stPmluKCkpOworICAgIH0KK30KKwogc3RhdGljIHZvaWQgY29tcHV0ZUxv
Y2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNv
ZGVCYXNpY0Jsb2NrKiBibG9jaywgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+ID4m
IGJhc2ljQmxvY2tzLCB1bnNpZ25lZCB0YXJnZXRPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHJlc3Vs
dCkKIHsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9jaygpKTsKICAgICBBU1NFUlQoIWJs
b2NrLT5pc0VudHJ5QmxvY2soKSk7CiAKICAgICBGYXN0Qml0VmVjdG9yIG91dCA9IGJsb2NrLT5v
dXQoKTsKLSAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IDA7CiAKICAgICBGYXN0Qml0VmVjdG9y
IHVzZXM7CiAgICAgRmFzdEJpdFZlY3RvciBkZWZzOwpAQCAtNTU3LDIzICs1NTUsOCBAQCBzdGF0
aWMgdm9pZCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjCiAgICAgICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0cygpW2ldOwogICAgICAgICBpZiAo
dGFyZ2V0T2Zmc2V0ID4gYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICB1c2VzLmNsZWFyQWxsKCk7Ci0gICAgICAgIGRlZnMuY2xlYXJBbGwoKTsKLQotICAgICAg
ICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQs
IHVzZXMpOwotICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywg
Ynl0ZWNvZGVPZmZzZXQsIGRlZnMpOwotCi0gICAgICAgIG91dC5leGNsdWRlKGRlZnMpOwotICAg
ICAgICBvdXQubWVyZ2UodXNlcyk7Ci0KLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBleGNlcHRp
b24gaGFuZGxlciwgd2Ugd2FudCB0aGUgbGl2ZS1pbiB2YXJpYWJsZXMgb2YgdGhlIAotICAgICAg
ICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9jayB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbGl2ZS1p
biBvZiB0aGlzIHBhcnRpY3VsYXIgYnl0ZWNvZGUuCi0gICAgICAgIGlmICgoaGFuZGxlciA9IGNv
ZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkpIHsKLSAg
ICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogaGFuZGxlckJsb2NrID0gZmluZEJhc2ljQmxv
Y2tXaXRoTGVhZGVyT2Zmc2V0KGJhc2ljQmxvY2tzLCBoYW5kbGVyLT50YXJnZXQpOwotICAgICAg
ICAgICAgQVNTRVJUKGhhbmRsZXJCbG9jayk7Ci0gICAgICAgICAgICBvdXQubWVyZ2UoaGFuZGxl
ckJsb2NrLT5pbigpKTsKLSAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RlcE92ZXJJbnN0
cnVjdGlvbihjb2RlQmxvY2ssIGJhc2ljQmxvY2tzLCBieXRlY29kZU9mZnNldCwgdXNlcywgZGVm
cywgb3V0KTsKICAgICB9CiAKICAgICByZXN1bHQuc2V0KG91dCk7CkBAIC01OTAsNyArNTczLDcg
QEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OnJ1bkxpdmVuZQogewogICAgIFVubGlu
a2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IG1fY29kZUJsb2NrLT51bmxpbmtlZENv
ZGVCbG9jaygpOwogICAgIHVuc2lnbmVkIG51bWJlck9mVmFyaWFibGVzID0gdW5saW5rZWRDb2Rl
QmxvY2stPm1fbnVtVmFycyArIAotICAgICAgICB1bmxpbmtlZENvZGVCbG9jay0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMgLSBudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVzKG1fY29kZUJsb2NrKTsKKyAg
ICAgICAgdW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIC0gbV9jb2RlQmxv
Y2stPmNhcHR1cmVDb3VudCgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmFz
aWNCbG9ja3Muc2l6ZSgpOyBpKyspIHsKICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fYmFzaWNCbG9ja3NbaV0uZ2V0KCk7CkBAIC02MjksMzYgKzYxMiwzMCBAQCB2b2lkIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lCiAKIGJvb2wgQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzOjpvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9mZnNldChpbnQgb3BlcmFuZCwgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7Ci0gICAgaW50IG51bUNhcHR1cmVkVmFycyA9IG51bWJl
ck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9jb2RlQmxvY2spOwotICAgIGlmIChWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCkuaXNBcmd1bWVudCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAo
b3BlcmFuZCA8PSBjYXB0dXJlU3RhcnQobV9jb2RlQmxvY2spICYmIG9wZXJhbmQgPiBjYXB0dXJl
RW5kKG1fY29kZUJsb2NrKSkKKyAgICBpZiAob3BlcmFuZElzQWx3YXlzTGl2ZShtX2NvZGVCbG9j
aywgb3BlcmFuZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIEZhc3RCaXRWZWN0b3IgcmVz
dWx0OwogICAgIGdldExpdmVuZXNzSW5mb0Zvck5vbkNhcHR1cmVkVmFyc0F0Qnl0ZWNvZGVPZmZz
ZXQoYnl0ZWNvZGVPZmZzZXQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5nZXQob3BlcmFu
ZCAtIG51bUNhcHR1cmVkVmFycyk7CisgICAgcmV0dXJuIG9wZXJhbmRUaGF0SXNOb3RBbHdheXNM
aXZlSXNMaXZlKG1fY29kZUJsb2NrLCByZXN1bHQsIG9wZXJhbmQpOwogfQogCi1GYXN0Qml0VmVj
dG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9m
ZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0Zhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJ
bmZvKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQpCiB7Ci0g
ICAgRmFzdEJpdFZlY3RvciB0ZW1wOwogICAgIEZhc3RCaXRWZWN0b3IgcmVzdWx0OwogCi0gICAg
Z2V0TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCwgdGVtcCk7Ci0KLSAgICB1bnNpZ25lZCBudW1DYXB0dXJlZFZhcnMgPSBudW1iZXJP
ZkNhcHR1cmVkVmFyaWFibGVzKG1fY29kZUJsb2NrKTsKKyAgICB1bnNpZ25lZCBudW1DYXB0dXJl
ZFZhcnMgPSBjb2RlQmxvY2stPmNhcHR1cmVDb3VudCgpOwogICAgIGlmIChudW1DYXB0dXJlZFZh
cnMpIHsKLSAgICAgICAgaW50IGZpcnN0Q2FwdHVyZWRMb2NhbCA9IFZpcnR1YWxSZWdpc3Rlcihj
YXB0dXJlU3RhcnQobV9jb2RlQmxvY2spKS50b0xvY2FsKCk7Ci0gICAgICAgIHJlc3VsdC5yZXNp
emUodGVtcC5udW1CaXRzKCkgKyBudW1DYXB0dXJlZFZhcnMpOworICAgICAgICBpbnQgZmlyc3RD
YXB0dXJlZExvY2FsID0gVmlydHVhbFJlZ2lzdGVyKGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkp
LnRvTG9jYWwoKTsKKyAgICAgICAgcmVzdWx0LnJlc2l6ZShvdXQubnVtQml0cygpICsgbnVtQ2Fw
dHVyZWRWYXJzKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNhcHR1cmVk
VmFyczsgKytpKQogICAgICAgICAgICAgcmVzdWx0LnNldChmaXJzdENhcHR1cmVkTG9jYWwgKyBp
KTsKICAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0LnJlc2l6ZSh0ZW1wLm51bUJpdHMoKSk7Cisg
ICAgICAgIHJlc3VsdC5yZXNpemUob3V0Lm51bUJpdHMoKSk7CiAKLSAgICBpbnQgdGVtcExlbmd0
aCA9IHRlbXAubnVtQml0cygpOwotICAgIEFTU0VSVCh0ZW1wTGVuZ3RoID49IDApOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdGVtcExlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmICghdGVtcC5n
ZXQoaSkpCisgICAgaW50IG91dExlbmd0aCA9IG91dC5udW1CaXRzKCk7CisgICAgQVNTRVJUKG91
dExlbmd0aCA+PSAwKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG91dExlbmd0aDsgaSsrKSB7
CisgICAgICAgIGlmICghb3V0LmdldChpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgIGlmICghbnVtQ2FwdHVyZWRWYXJzKSB7CkBAIC02NjYsNyArNjQzLDcgQEAgRmFzdEJpdFZl
Y3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OgogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkub2Zmc2V0
KCkgPiBjYXB0dXJlU3RhcnQobV9jb2RlQmxvY2spKQorICAgICAgICBpZiAodmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaSkub2Zmc2V0KCkgPiBjb2RlQmxvY2stPmNhcHR1cmVTdGFydCgpKQogICAg
ICAgICAgICAgcmVzdWx0LnNldChpKTsKICAgICAgICAgZWxzZSAKICAgICAgICAgICAgIHJlc3Vs
dC5zZXQobnVtQ2FwdHVyZWRWYXJzICsgaSk7CkBAIC02NzQsNiArNjUxLDM5IEBAIEZhc3RCaXRW
ZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjoKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CitGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZv
QXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBGYXN0Qml0
VmVjdG9yIG91dDsKKyAgICBnZXRMaXZlbmVzc0luZm9Gb3JOb25DYXB0dXJlZFZhcnNBdEJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgIHJldHVybiBnZXRMaXZlbmVzc0lu
Zm8obV9jb2RlQmxvY2ssIG91dCk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
Ojpjb21wdXRlRnVsbExpdmVuZXNzKEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpCit7Cisg
ICAgRmFzdEJpdFZlY3RvciBvdXQ7CisgICAgRmFzdEJpdFZlY3RvciB1c2VzOworICAgIEZhc3RC
aXRWZWN0b3IgZGVmczsKKyAgICAKKyAgICByZXN1bHQubV9jb2RlQmxvY2sgPSBtX2NvZGVCbG9j
azsKKyAgICByZXN1bHQubV9tYXAuY2xlYXIoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2Jhc2ljQmxvY2tzLnNpemUoKTsgaS0tOykgeworICAgICAgICBCeXRlY29kZUJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9iYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKGJsb2NrLT5p
c0VudHJ5QmxvY2soKSB8fCBibG9jay0+aXNFeGl0QmxvY2soKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAKKyAgICAgICAgb3V0ID0gYmxvY2stPm91dCgpOworICAgICAgICB1c2Vz
LnJlc2l6ZShvdXQubnVtQml0cygpKTsKKyAgICAgICAgZGVmcy5yZXNpemUob3V0Lm51bUJpdHMo
KSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+Ynl0ZWNvZGVP
ZmZzZXRzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCA9IGJsb2NrLT5ieXRlY29kZU9mZnNldHMoKVtpXTsKKyAgICAgICAgICAgIHN0ZXBPdmVy
SW5zdHJ1Y3Rpb24obV9jb2RlQmxvY2ssIG1fYmFzaWNCbG9ja3MsIGJ5dGVjb2RlT2Zmc2V0LCB1
c2VzLCBkZWZzLCBvdXQpOworICAgICAgICAgICAgcmVzdWx0Lm1fbWFwLmFkZChieXRlY29kZU9m
ZnNldCwgb3V0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM6OmR1bXBSZXN1bHRzKCkKIHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIg
PSBtX2NvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
CShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEzICszNCwxNiBA
QAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEZ1bGxCeXRlY29k
ZUxpdmVuZXNzOwogCiBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgewogcHVibGljOgog
ICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2RlQmxvY2sqKTsKLQorICAgIAogICAgIGJv
b2wgb3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9wZXJhbmQsIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KTsKICAgICBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIAorICAgIHZvaWQgY29tcHV0
ZUZ1bGxMaXZlbmVzcyhGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgcmVzdWx0KTsKIAogcHJpdmF0ZToK
ICAgICB2b2lkIGNvbXB1dGUoKTsKQEAgLTUzLDYgKzU2LDEyIEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+ID4gbV9iYXNpY0Jsb2NrczsKIH07CiAKK2lu
bGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGludCBv
cGVyYW5kKTsKK2lubGluZSBib29sIG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKENv
ZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5k
KTsKK2lubGluZSBib29sIG9wZXJhbmRJc0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0
IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpOworCitGYXN0Qml0VmVjdG9yIGdldExp
dmVuZXNzSW5mbyhDb2RlQmxvY2sqLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQpOworCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc19oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXNfaAorI2RlZmluZSBCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXNJbmxpbmVzX2gKKworI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5l
IGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50IG9wZXJh
bmQpCit7CisgICAgaWYgKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0FyZ3VtZW50KCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBvcGVyYW5kIDw9IGNvZGVCbG9jay0+Y2Fw
dHVyZVN0YXJ0KCkgJiYgb3BlcmFuZCA+IGNvZGVCbG9jay0+Y2FwdHVyZUVuZCgpOworfQorCitp
bmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK3sKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKKyAgICBpZiAodmlydHVhbFJlZy5v
ZmZzZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkpCisgICAgICAgIHJldHVybiBvdXQu
Z2V0KHZpcnR1YWxSZWcudG9Mb2NhbCgpKTsKKyAgICBzaXplX3QgaW5kZXggPSB2aXJ0dWFsUmVn
LnRvTG9jYWwoKSAtIGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCk7CisgICAgaWYgKGluZGV4ID49
IG91dC5udW1CaXRzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gb3V0Lmdl
dChpbmRleCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhbmRJc0xpdmUoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpCit7CisgICAgcmV0
dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUoY29kZUJsb2NrLCBvcGVyYW5kKSB8fCBvcGVyYW5kVGhh
dElzTm90QWx3YXlzTGl2ZUlzTGl2ZShjb2RlQmxvY2ssIG91dCwgb3BlcmFuZCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDYgKzM1NCwyNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gbV9uZWVkc0FjdGl2YXRpb247CiAgICAgfQorICAgIAorICAg
IHVuc2lnbmVkIGNhcHR1cmVDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIXN5bWJv
bFRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHN5bWJvbFRh
YmxlKCktPmNhcHR1cmVDb3VudCgpOworICAgIH0KKyAgICAKKyAgICBpbnQgY2FwdHVyZVN0YXJ0
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghc3ltYm9sVGFibGUoKSkKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCk7
CisgICAgfQorICAgIAorICAgIGludCBjYXB0dXJlRW5kKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghc3ltYm9sVGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOworICAgIH0KIAogICAgIGJvb2wgaXNDYXB0
dXJlZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgSW5saW5lQ2FsbEZyYW1lKiA9IDApIGNvbnN0
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3Jp
Z2luLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgdm9p
ZCBJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRleHQoUHJpbgogICAgIGVsc2UKICAgICAgICAg
b3V0LnByaW50KCIsIGtub3duIGNhbGxlZTogIiwgaW5Db250ZXh0KGNhbGxlZVJlY292ZXJ5LmNv
bnN0YW50KCksIGNvbnRleHQpKTsKICAgICBvdXQucHJpbnQoIiwgbnVtQXJncyt0aGlzID0gIiwg
YXJndW1lbnRzLnNpemUoKSk7Ci0gICAgb3V0LnByaW50KCIsIHN0YWNrID49IHIiLCBzdGFja09m
ZnNldCk7CisgICAgb3V0LnByaW50KCIsIHN0YWNrIDwgbG9jIiwgVmlydHVhbFJlZ2lzdGVyKHN0
YWNrT2Zmc2V0KS50b0xvY2FsKCkpOwogICAgIG91dC5wcmludCgiPiIpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9G
dWxsQnl0ZWNvZGVMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEZ1bGxCeXRlY29kZUxpdmVuZXNzX2gKKyNkZWZpbmUgRnVsbEJ5
dGVjb2RlTGl2ZW5lc3NfaAorCisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKKwordHlwZWRl
ZiBIYXNoTWFwPHVuc2lnbmVkLCBGYXN0Qml0VmVjdG9yLCBXVEY6OkludEhhc2g8dW5zaWduZWQ+
LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPiA+IEJ5dGVjb2Rl
VG9CaXRtYXBNYXA7CisKK2NsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKK3B1YmxpYzoKKyAg
ICBGdWxsQnl0ZWNvZGVMaXZlbmVzcygpIDogbV9jb2RlQmxvY2soMCkgeyB9CisgICAgCisgICAg
Ly8gV2Ugc2F5ICJvdXQiIHRvIHJlZmVyIHRvIHRoZSBiaXR2ZWN0b3IgdGhhdCBjb250YWlucyBy
YXcgcmVzdWx0cyBmb3IgYSBieXRlY29kZQorICAgIC8vIGluc3RydWN0aW9uLgorICAgIGNvbnN0
IEZhc3RCaXRWZWN0b3ImIGdldE91dCh1bnNpZ25lZCBieXRlY29kZUluZGV4KSBjb25zdAorICAg
IHsKKyAgICAgICAgQnl0ZWNvZGVUb0JpdG1hcE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1f
bWFwLmZpbmQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VSVChpdGVyICE9IG1fbWFwLmVu
ZCgpKTsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhbmRJc0xpdmUoaW50IG9wZXJhbmQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShtX2NvZGVCbG9jaywg
b3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUobV9jb2RlQmxvY2ss
IGdldE91dChieXRlY29kZUluZGV4KSwgb3BlcmFuZCk7CisgICAgfQorICAgIAorICAgIEZhc3RC
aXRWZWN0b3IgZ2V0TGl2ZW5lc3ModW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBnZXRMaXZlbmVzc0luZm8obV9jb2RlQmxvY2ssIGdldE91dChieXRl
Y29kZUluZGV4KSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworICAgIAorICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CisgICAgQnl0ZWNvZGVUb0JpdG1hcE1hcCBtX21hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRnVsbEJ5dGVjb2RlTGl2ZW5lc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0
eS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBBdmFpbGFiaWxpdHk6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9mbHVzaGVkQXQsICIv
Iik7CisgICAgCisgICAgaWYgKG5vZGVJc1VuZGVjaWRlZCgpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiVW5kZWNpZGVkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKG5v
ZGVJc1VuYXZhaWxhYmxlKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJVbmF2YWlsYWJsZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludChub2RlKCkpOworfQor
Cit2b2lkIEF2YWlsYWJpbGl0eTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1w
Q29udGV4dCopIGNvbnN0Cit7CisgICAgZHVtcChvdXQpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR0F2YWlsYWJpbGl0eV9oCisjZGVmaW5lIERGR0F2YWlsYWJpbGl0
eV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0ZsdXNoZWRBdC5oIgor
I2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK3N0cnVjdCBOb2RlOworCitjbGFzcyBBdmFpbGFiaWxpdHkgeworcHVi
bGljOgorICAgIEF2YWlsYWJpbGl0eSgpCisgICAgICAgIDogbV9ub2RlKDApCisgICAgICAgICwg
bV9mbHVzaGVkQXQoRGVhZEZsdXNoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQg
QXZhaWxhYmlsaXR5KE5vZGUqIG5vZGUpCisgICAgICAgIDogbV9ub2RlKG5vZGUpCisgICAgICAg
ICwgbV9mbHVzaGVkQXQoQ29uZmxpY3RpbmdGbHVzaCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IGV4cGxpY2l0IEF2YWlsYWJpbGl0eShGbHVzaGVkQXQgZmx1c2hlZEF0KQorICAgICAgICA6IG1f
bm9kZSh1bmF2YWlsYWJsZU1hcmtlcigpKQorICAgICAgICAsIG1fZmx1c2hlZEF0KGZsdXNoZWRB
dCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEF2YWlsYWJpbGl0eShOb2RlKiBub2RlLCBGbHVz
aGVkQXQgZmx1c2hlZEF0KQorICAgICAgICA6IG1fbm9kZShub2RlKQorICAgICAgICAsIG1fZmx1
c2hlZEF0KGZsdXNoZWRBdCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBBdmFpbGFi
aWxpdHkgdW5hdmFpbGFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eSh1
bmF2YWlsYWJsZU1hcmtlcigpLCBGbHVzaGVkQXQoQ29uZmxpY3RpbmdGbHVzaCkpOworICAgIH0K
KyAgICAKKyAgICBBdmFpbGFiaWxpdHkgd2l0aEZsdXNoKEZsdXNoZWRBdCBmbHVzaCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBBdmFpbGFiaWxpdHkobV9ub2RlLCBmbHVzaCk7CisgICAg
fQorICAgIAorICAgIEF2YWlsYWJpbGl0eSB3aXRoTm9kZShOb2RlKiBub2RlKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eShub2RlLCBtX2ZsdXNoZWRBdCk7CisgICAg
fQorICAgIAorICAgIEF2YWlsYWJpbGl0eSB3aXRoVW5hdmFpbGFibGVOb2RlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiB3aXRoTm9kZSh1bmF2YWlsYWJsZU1hcmtlcigpKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBub2RlSXNVbmRlY2lkZWQoKSBjb25zdCB7IHJldHVybiBtX25vZGUg
PT0gMDsgfQorICAgIGJvb2wgbm9kZUlzVW5hdmFpbGFibGUoKSBjb25zdCB7IHJldHVybiBtX25v
ZGUgPT0gdW5hdmFpbGFibGVNYXJrZXIoKTsgfQorICAgIAorICAgIGJvb2wgaGFzTm9kZSgpIGNv
bnN0IHsgcmV0dXJuICFub2RlSXNVbmRlY2lkZWQoKSAmJiAhbm9kZUlzVW5hdmFpbGFibGUoKTsg
fQorICAgIAorICAgIE5vZGUqIG5vZGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFu
b2RlSXNVbmRlY2lkZWQoKSk7CisgICAgICAgIEFTU0VSVCghbm9kZUlzVW5hdmFpbGFibGUoKSk7
CisgICAgICAgIHJldHVybiBtX25vZGU7CisgICAgfQorICAgIAorICAgIEZsdXNoZWRBdCBmbHVz
aGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2ZsdXNoZWRBdDsgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbm9kZUlzVW5hdmFpbGFibGUoKSAmJiAhZmx1c2hlZEF0
KCk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdmFpbGFiaWxpdHkmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbm9kZSA9PSBvdGhlci5tX25vZGUKKyAgICAg
ICAgICAgICYmIG1fZmx1c2hlZEF0ID09IG90aGVyLm1fZmx1c2hlZEF0OworICAgIH0KKyAgICAK
KyAgICBBdmFpbGFiaWxpdHkgbWVyZ2UoY29uc3QgQXZhaWxhYmlsaXR5JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBBdmFpbGFiaWxpdHkoCisgICAgICAgICAgICBtZXJnZU5v
ZGVzKG1fbm9kZSwgb3RoZXIubV9ub2RlKSwKKyAgICAgICAgICAgIG1fZmx1c2hlZEF0Lm1lcmdl
KG90aGVyLm1fZmx1c2hlZEF0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBD
b250ZXh0KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIE5vZGUqIG1lcmdlTm9kZXMo
Tm9kZSogYSwgTm9kZSogYikKKyAgICB7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIHJl
dHVybiBiOworICAgICAgICBpZiAoIWIpCisgICAgICAgICAgICByZXR1cm4gYTsKKyAgICAgICAg
aWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiBhOworICAgICAgICByZXR1cm4gdW5hdmFp
bGFibGVNYXJrZXIoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE5vZGUqIHVuYXZhaWxhYmxl
TWFya2VyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Tm9kZSo+KHN0YXRp
Y19jYXN0PGludHB0cl90PigxKSk7CisgICAgfQorICAgIAorICAgIE5vZGUqIG1fbm9kZTsKKyAg
ICBGbHVzaGVkQXQgbV9mbHVzaGVkQXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0F2YWlsYWJpbGl0
eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShy
ZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklU
KQogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR0F2YWlsYWJp
bGl0eS5oIgogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0Zs
dXNoZWRBdC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKQEAgLTE0MCw4ICsxNDEsOCBAQCBzdHJ1
Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgc3RydWN0IFNTQURhdGEg
ewogICAgICAgICBPcGVyYW5kczxGbHVzaGVkQXQ+IGZsdXNoQXRIZWFkOwogICAgICAgICBPcGVy
YW5kczxGbHVzaGVkQXQ+IGZsdXNoQXRUYWlsOwotICAgICAgICBPcGVyYW5kczxOb2RlKj4gYXZh
aWxhYmlsaXR5QXRIZWFkOwotICAgICAgICBPcGVyYW5kczxOb2RlKj4gYXZhaWxhYmlsaXR5QXRU
YWlsOworICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0SGVhZDsK
KyAgICAgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHlBdFRhaWw7CiAgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdEhlYWQ7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxp
dmVBdFRhaWw7CiAgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0
SGVhZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA3Myw2ICszMDczLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTm9kZSog
YmFzZSA9IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1
cy5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAg
ICAgICAgICAgIGlmIChKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBzdGF0dXMuc3BlY2lmaWNWYWx1
ZSgpKQogICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGNlbGxD
b25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7CiAgICAgICAgICAgICAgICAgZWxzZQpA
QCAtMzA4MSw2ICszMDgyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAg
ICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAg
ICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3lt
Ym9sVGFibGUoKS0+Z2V0KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbnRyeS5jb3VsZEJl
V2F0Y2hlZCgpIHx8ICFtX2dyYXBoLndhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlkKGVudHJ5Lndh
dGNocG9pbnRTZXQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihkc3QpLCBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8o
cHJlZGljdGlvbikpKTsKQEAgLTMxMzEsNiArMzEzMyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRo
U3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXMub2xkU3RydWN0dXJlKCkpOworICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29w
ZSkpKTsKICAgICAgICAgICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVy
TnVtYmVyLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eU9mZnNldD4ob3BlcmFuZCksIGdldChWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUpKSk7CiAgICAgICAgICAgICAgICAgLy8gS2VlcCBzY29wZSBhbGl2ZSB1
bnRpbCBhZnRlciBwdXQuCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQo
VmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwpAQCAtMzEzOCw2ICszMTQxLDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRy
eSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHVpZCk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpIHx8ICFtX2dyYXBoLndhdGNo
cG9pbnRzKCkuaXNTdGlsbFZhbGlkKGVudHJ5LndhdGNocG9pbnRTZXQoKSkpOwogICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoUHV0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIGdldChWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYg
KzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogRGlzYXNzZW1ibGVyOjpE
aXNhc3NlbWJsZXIoR3JhcGgmIGdyYXBoKQogICAgIDogbV9ncmFwaChncmFwaCkKIHsKKyAgICBt
X2R1bXBDb250ZXh0LmdyYXBoID0gJm1fZ3JhcGg7CiAgICAgbV9sYWJlbEZvckJsb2NrSW5kZXgu
cmVzaXplKGdyYXBoLm51bUJsb2NrcygpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3MywxNSBA
QCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgaWYgKCFPcHRpb25z
OjpieXRlY29kZVJhbmdlVG9ERkdDb21waWxlKCkuaXNJblJhbmdlKGNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25Db3VudCgpKSkKICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogICAgIAor
ICAgIGlmIChjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8IDEwMCkKKyAgICAgICAgcmV0
dXJuIENvbXBpbGF0aW9uRmFpbGVkOworICAgIGlmIChjb2RlQmxvY2stPmluc3RydWN0aW9uQ291
bnQoKSA8IDIwMCkKKyAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOworICAgIGlmIChj
b2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA+PSA0MDApCisgICAgICAgIHJldHVybiBDb21w
aWxhdGlvbkZhaWxlZDsKKyAgICBpZiAoY29kZUJsb2NrLT5oYXNoKCkgIT0gQ29kZUJsb2NrSGFz
aCgiRWtJTHpyIikpCisgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKKyAgICAKICAg
ICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkpCiAgICAgICAgIGRhdGFMb2coIkRGRyhEcml2
ZXIpIGNvbXBpbGluZyAiLCAqY29kZUJsb2NrLCAiIHdpdGggIiwgbW9kZSwgIiwgbnVtYmVyIG9m
IGluc3RydWN0aW9ucyA9ICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpLCAiXG4iKTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQu
Y3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zs
dXNoRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsOSBAQCB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRmx1CiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToK
ICAgICAgICAgb3V0LnByaW50KCJGbHVzaGVkSlNWYWx1ZSIpOwogICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgorICAgICAgICBvdXQucHJpbnQoIkNvbmZsaWN0aW5n
Rmx1c2giKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZv
cm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hG
b3JtYXQuaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGbHVzaEZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw4IEBAIGVudW0gRmx1
c2hGb3JtYXQgewogICAgIEZsdXNoZWREb3VibGUsCiAgICAgRmx1c2hlZENlbGwsCiAgICAgRmx1
c2hlZEJvb2xlYW4sCi0gICAgRmx1c2hlZEpTVmFsdWUKKyAgICBGbHVzaGVkSlNWYWx1ZSwKKyAg
ICBDb25mbGljdGluZ0ZsdXNoCiB9OwogCiBpbmxpbmUgTm9kZUZsYWdzIHJlc3VsdEZvcihGbHVz
aEZvcm1hdCBmb3JtYXQpCkBAIC01NCw2ICs1NSw3IEBAIGlubGluZSBOb2RlRmxhZ3MgcmVzdWx0
Rm9yKEZsdXNoRm9ybWF0IGYKICAgICBjYXNlIERlYWRGbHVzaDoKICAgICBjYXNlIEZsdXNoZWRK
U1ZhbHVlOgogICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNo
OgogICAgICAgICByZXR1cm4gTm9kZVJlc3VsdEpTOwogICAgIGNhc2UgRmx1c2hlZEludDMyOgog
ICAgICAgICByZXR1cm4gTm9kZVJlc3VsdEludDMyOwpAQCAtNzMsNiArNzUsNyBAQCBpbmxpbmUg
VXNlS2luZCB1c2VLaW5kRm9yKEZsdXNoRm9ybWF0IGZvCiAgICAgc3dpdGNoIChmb3JtYXQpIHsK
ICAgICBjYXNlIERlYWRGbHVzaDoKICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgIGNhc2Ug
Q29uZmxpY3RpbmdGbHVzaDoKICAgICAgICAgcmV0dXJuIFVudHlwZWRVc2U7CiAgICAgY2FzZSBG
bHVzaGVkQ2VsbDoKICAgICAgICAgcmV0dXJuIENlbGxVc2U7CkBAIC05Myw2ICs5Niw3IEBAIGlu
bGluZSBEYXRhRm9ybWF0IGRhdGFGb3JtYXRGb3IoRmx1c2hGb3IKIHsKICAgICBzd2l0Y2ggKGZv
cm1hdCkgewogICAgIGNhc2UgRGVhZEZsdXNoOgorICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoK
ICAgICAgICAgcmV0dXJuIERhdGFGb3JtYXREZWFkOwogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6
CiAgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SlM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGbHVzaGVkQXQuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEZsdXNoZWRB
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIGlmIChtX2Zvcm1hdCA9PSBE
ZWFkRmx1c2gpCisgICAgaWYgKG1fZm9ybWF0ID09IERlYWRGbHVzaCB8fCBtX2Zvcm1hdCA9PSBD
b25mbGljdGluZ0ZsdXNoKQogICAgICAgICBvdXQucHJpbnQobV9mb3JtYXQpOwogICAgIGVsc2UK
ICAgICAgICAgb3V0LnByaW50KCJyIiwgbV92aXJ0dWFsUmVnaXN0ZXIsICI6IiwgbV9mb3JtYXQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5oCShyZXZpc2lv
biAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAg
ICAKKyAgICBleHBsaWNpdCBGbHVzaGVkQXQoRmx1c2hGb3JtYXQgZm9ybWF0KQorICAgICAgICA6
IG1fZm9ybWF0KGZvcm1hdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGVhZEZs
dXNoIHx8IGZvcm1hdCA9PSBDb25mbGljdGluZ0ZsdXNoKTsKKyAgICB9CisgICAgCiAgICAgRmx1
c2hlZEF0KEZsdXNoRm9ybWF0IGZvcm1hdCwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
cikKICAgICAgICAgOiBtX2Zvcm1hdChmb3JtYXQpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0
ZXIodmlydHVhbFJlZ2lzdGVyKQpAQCAtNjUsNiArNzEsMTcgQEAgcHVibGljOgogICAgIAogICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbHVzaGVkQXQmIG90aGVyKSBjb25zdCB7IHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsgfQogICAgIAorICAgIEZsdXNoZWRBdCBtZXJnZShjb25zdCBGbHVz
aGVkQXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcykKKyAgICAgICAg
ICAgIHJldHVybiBvdGhlcjsKKyAgICAgICAgaWYgKCFvdGhlcikKKyAgICAgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICAgICAgaWYgKCp0aGlzID09IG90aGVyKQorICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICByZXR1cm4gRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpOworICAg
IH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE1OTM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHR3Jh
cGguaCIKIAorI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCIKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgog
I2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKQEAgLTM5Myw2ICszOTQsNyBAQCB2b2lkIEdyYXBo
OjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KQogewogICAgIER1bXBDb250ZXh0IG15Q29u
dGV4dDsKKyAgICBteUNvbnRleHQuZ3JhcGggPSB0aGlzOwogICAgIGlmICghY29udGV4dCkKICAg
ICAgICAgY29udGV4dCA9ICZteUNvbnRleHQ7CiAgICAgCkBAIC02NDMsNiArNjQ1LDU5IEBAIHZv
aWQgR3JhcGg6OmluaXRpYWxpemVOb2RlT3duZXJzKCkKICAgICAgICAgICAgIGJsb2NrLT5hdChu
b2RlSW5kZXgpLT5taXNjLm93bmVyID0gYmxvY2s7CiAgICAgfQogfQorCitGdWxsQnl0ZWNvZGVM
aXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAg
IEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNz
Pj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwor
ICAgIGlmIChpdGVyICE9IG1fYnl0ZWNvZGVMaXZlbmVzcy5lbmQoKSkKKyAgICAgICAgcmV0dXJu
ICppdGVyLT52YWx1ZTsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2
ZW5lc3M+IGxpdmVuZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4o
KTsKKyAgICBjb2RlQmxvY2stPmxpdmVuZXNzQW5hbHlzaXMoKS5jb21wdXRlRnVsbExpdmVuZXNz
KCpsaXZlbmVzcyk7CisgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIHJlc3VsdCA9ICpsaXZlbmVz
czsKKyAgICBtX2J5dGVjb2RlTGl2ZW5lc3MuYWRkKGNvZGVCbG9jaywgc3RkOjptb3ZlKGxpdmVu
ZXNzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdy
YXBoOjpsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKK3sKKyAg
ICByZXR1cm4gbGl2ZW5lc3NGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1l
KSk7Cit9CisKK2Jvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAg
IGlmIChvcGVyYW5kLm9mZnNldCgpIDwgY29kZU9yaWdpbi5zdGFja09mZnNldCgpICsgSlNTdGFj
azo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyA9IFZpcnR1YWxSZWdpc3RlcigKKyAgICAgICAgICAgICAgICBvcGVyYW5kLm9mZnNldCgpIC0g
Y29kZU9yaWdpbi5zdGFja09mZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KHJlZy5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVnLm9mZnNldCgpID49
IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocmVnLm9m
ZnNldCgpID09IEpTU3RhY2s6OkNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgaWYgKHJlZy5vZmZzZXQoKSA9PSBKU1N0YWNrOjpTY29wZUNo
YWluKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiBsaXZlbmVzc0Zvcihjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkub3BlcmFuZElzTGl2ZSgKKyAgICAgICAgICAgICAgICByZWcub2Zmc2V0KCksIGNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICgh
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgICAgIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVy
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KICAgICAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2
aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJERkdWYXJpYWRpY0Z1bmN0aW9u
LmgiCisjaW5jbHVkZSAiRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJJbmxpbmVD
YWxsRnJhbWVTZXQuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtNDE2LDYgKzQxNywxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBleGVjdXRhYmxlRm9yKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAg
ICB9CiAgICAgCisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcihJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIGlmICghaW5saW5lQ2FsbEZy
YW1lKQorICAgICAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9jazsKKyAgICAgICAgcmV0dXJu
IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Cisg
ICAgfQorICAgIAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29uc3QgQ29k
ZU9yaWdpbiYgY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVC
bG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIG1fcHJvZmlsZWRC
bG9jayk7CkBAIC03NzYsNiArNzg0LDEwIEBAIHB1YmxpYzoKICAgICBEZXNpcmVkV2F0Y2hwb2lu
dHMmIHdhdGNocG9pbnRzKCkgeyByZXR1cm4gbV9wbGFuLndhdGNocG9pbnRzOyB9CiAgICAgRGVz
aXJlZFN0cnVjdHVyZUNoYWlucyYgY2hhaW5zKCkgeyByZXR1cm4gbV9wbGFuLmNoYWluczsgfQog
ICAgIAorICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNv
ZGVCbG9jayk7CisgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKTsKKyAgICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbik7CisgICAgCiAgICAg
Vk0mIG1fdm07CiAgICAgUGxhbiYgbV9wbGFuOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CkBAIC03OTcsNiArODA5LDcgQEAgcHVibGljOgogICAgIFNlZ21lbnRlZFZlY3RvcjxTd2l0Y2hE
YXRhLCA0PiBtX3N3aXRjaERhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4g
bV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgT3duUHRyPElubGluZUNhbGxGcmFtZVNldD4gbV9p
bmxpbmVDYWxsRnJhbWVzOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRy
PEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIGJvb2wgbV9o
YXNBcmd1bWVudHM7CiAgICAgSGFzaFNldDxFeGVjdXRhYmxlQmFzZSo+IG1fZXhlY3V0YWJsZXNX
aG9zZUFyZ3VtZW50c0VzY2FwZWQ7CiAgICAgQml0VmVjdG9yIG1fbGF6eVZhcnM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDc3ICs0Nyw5NiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NF
UlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKICAgICAgICAgCi0gICAgICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmly
c3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYmxvY2st
PnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmZpbGwoQXZhaWxhYmlsaXR5KCkpOworICAgICAgICAg
ICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLmZpbGwoQXZhaWxhYmlsaXR5KCkpOwor
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVw
dGhGaXJzdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBk
ZXB0aEZpcnN0W2ldOwotICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFk
LmZpbGwoMCk7Ci0gICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwuZmls
bCgwKTsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGguYmxvY2soMCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZC5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykgeworICAgICAgICAgICAgcm9vdC0+
c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpID0KKyAgICAgICAgICAg
ICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkud2l0aEZsdXNoKAorICAgICAgICAgICAg
ICAgICAgICBGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGFyZ3VtZW50KSkpOwogICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwg
PSByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5udW1iZXJPZkxvY2FscygpOyBsb2NhbC0t
OykKKyAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmxvY2FsKGxvY2Fs
KSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IGRlcHRoRmlyc3RbaV07Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIFdlIGVkaXQgYXZhaWxhYmlsaXR5QXRUYWlsIGluLXBsYWNlLCBidXQgZmlyc3Qg
aW5pdGlhbGl6ZSBpdCB0bwotICAgICAgICAgICAgLy8gYXZhaWxhYmlsaXR5QXRIZWFkLgotICAg
ICAgICAgICAgT3BlcmFuZHM8Tm9kZSo+JiBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFp
bGFiaWxpdHlBdFRhaWw7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5h
dmFpbGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0g
ICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmls
aXR5Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgICAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gMDsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3VtZW50OiB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgIGlmIChtX2dyYXBoLm1fcGxhbi5tb2RlID09IEZU
TEZvck9TUkVudHJ5TW9kZSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IG1f
Z3JhcGgubV9wcm9maWxlZEJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsgbG9jYWwtLTspIHsK
KyAgICAgICAgICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2Nh
bCkgPQorICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkud2l0
aEZsdXNoKAorICAgICAgICAgICAgICAgICAgICAgICAgRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVl
LCB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbCkpKTsKICAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgZWZmaWNp
ZW50IGJ5IHByb2Nlc3NpbmcgYmxvY2tzIGluIHJldmVyc2UgcG9zdG9yZGVyLgorICAgICAgICBP
cGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eTsKKyAgICAgICAgYm9vbCBjaGFuZ2Vk
OworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7
IGotLTspIHsKLSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+
c3VjY2Vzc29yKGopOwotICAgICAgICAgICAgICAgIE9wZXJhbmRzPE5vZGUqPiYgc3VjY2Vzc29y
QXZhaWxhYmlsaXR5ID0gc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSBhdmFpbGFiaWxpdHkuc2l6ZSgpOyBrLS07KSB7
Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG15Tm9kZSA9IGF2YWlsYWJpbGl0eVtrXTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFteU5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICgh
c3VjY2Vzc29yLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMobXlOb2RlKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IG92ZXJ3cml0ZSBhdmFpbGFiaWxpdHkgd2l0
aCBhIGJvZ3VzIG5vZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gYXQgbWVyZ2UgcG9pbnRzLiBU
aGlzIGlzIGZpbmUsIHNpbmNlIG1lcmdlIHBvaW50cyBoYXZlCi0gICAgICAgICAgICAgICAgICAg
IC8vIE1vdkhpbnQoUGhpKSdzIHRvIHdvcmsgYXJvdW5kIHRoaXMuIFRoZSBvdXRjb21lIG9mIHRo
aXMgaXMKLSAgICAgICAgICAgICAgICAgICAgLy8geW91IG1pZ2h0IGhhdmUgYSBwcm9ncmFtIGlu
IHdoaWNoIGEgbm9kZSBoYXBwZW5zIHRvIHJlbWFpbgotICAgICAgICAgICAgICAgICAgICAvLyBs
aXZlIGludG8gc29tZSBibG9jayBCLCBhbmQgc2VwYXJhdGVseSAoZHVlIHRvIGNvcHkKLSAgICAg
ICAgICAgICAgICAgICAgLy8gcHJvcGFnYXRpb24pIGp1c3Qgb25lIG9mIHRoZSBwcmVkZWNlc3Nv
cnMgb2YgQiBpc3N1ZWQgYQotICAgICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50IHB1dHRpbmcg
dGhhdCBub2RlIGludG8gc29tZSBsb2NhbC4gVGhlbiBpbiBCIHdlIG1pZ2h0Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIHRoaW5rIHRoYXQgdGhhdCBub2RlIGlzIGEgdmFsaWQgdmFsdWUgZm9yIHRo
YXQgbG9jYWwuIE9mCi0gICAgICAgICAgICAgICAgICAgIC8vIGNvdXJzZSBpZiB0aGF0IGxvY2Fs
IHdhcyBhY3R1YWxseSBsaXZlIGluIEIsIEIgd291bGQgaGF2ZSBhCi0gICAgICAgICAgICAgICAg
ICAgIC8vIFBoaSBmb3IgaXQuIFNvIGVzc2VudGlhbGx5IHdlJ2xsIGhhdmUgT1NSIGV4aXQgZHJv
cHBpbmcgdGhpcwotICAgICAgICAgICAgICAgICAgICAvLyBub2RlJ3MgdmFsdWUgaW50byB0aGUg
bG9jYWwgd2hlbiB3ZSBvdGhlcndpc2UgKGluIHRoZSBERkcpCi0gICAgICAgICAgICAgICAgICAg
IC8vIHdvdWxkIGhhdmUgZHJvcHBlZCB1bmRlZmluZWQgaW50byB0aGUgbG9jYWwuIFRoaXMgc2Vl
bXMKLSAgICAgICAgICAgICAgICAgICAgLy8gaGFybWxlc3MuCi0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3JBdmFpbGFiaWxpdHlba10gPSBteU5vZGU7
CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZh
aWxhYmlsaXR5QXRIZWFkOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2Rl
SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2Rl
SW5kZXgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgdmFyaWFibGUtPmZsdXNo
ZWRBdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRBcmd1bWVudDogeworICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZSwgdmFyaWFibGUtPmZs
dXNoZWRBdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazog
eworICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXZh
aWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFi
aWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxh
YmxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAoYXZhaWxhYmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gYXZhaWxhYmlsaXR5OworICAgICAg
ICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygp
OyBzdWNjZXNzb3JJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYXZhaWxhYmlsaXR5LnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZFtpXSA9IGF2YWlsYWJpbGl0eVtpXS5tZXJnZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ldKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAg
ICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCiBjbGFzcyBHcmFwaDsKIAotLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3Nh
LT5hdmFpbGFiaWx0aXlBdEhlYWQvVGFpbC4gVGhpcyByZWxpZXMgb24gbGl2ZW5lc3MKLS8vIGFu
YWx5c2lzIHBoYXNlIGhhdmluZyBiZWVuIHJ1biBhbmQgdGhlIGdyYXBoIG5vdCBoYXZpbmcgYmVl
biB0cmFuc2Zvcm1lZAotLy8gYWZ0ZXIgdGhhdC4KKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNz
YS0+YXZhaWxhYmlsdGl5QXRIZWFkL1RhaWwuIFRoaXMgaXMgYSBmb3J3YXJkIGZsb3cgdHlwZSBp
bmZlcmVuY2UKKy8vIG92ZXIgTW92SGludHMuIEF0IHRoZSB0aW1lIHdoZW4gTW92SGludHMgYXJl
IGludHJvZHVjZWQsIHdlIHdlcmUgY2VydGFpbiB0aGF0IGF0IGFueQorLy8gcG9pbnQgaW4gdGhl
IHByb2dyYW0gd2hlcmUgYSBieXRlY29kZSB2YXJpYWJsZSBoYWQgYmVlbiBsaXZlLCBhbGwgb2Yg
dGhlIE1vdkhpbnRzIHRoYXQKKy8vIGZsb3dlZCBpbnRvIHRoYXQgcG9pbnQgZm9yIHRoYXQgdmFy
aWFibGUgaGFkIHRoZSBzYW1lIEZsdXNoRm9ybWF0LiBUaGlzIGFuYWx5c2lzIHdpbGwgdGVsbAor
Ly8geW91IHdoYXQgdGhhdCBmb3JtYXQgd291bGQgaGF2ZSBiZWVuLgogCiBib29sIHBlcmZvcm1P
U1JBdmFpbGFiaWxpdHlBbmFseXNpcyhHcmFwaCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKICNp
bmNsdWRlICJERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNl
LmgiCiAjaW5jbHVkZSAiREZHU1NBQ29udmVyc2lvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3Rh
Y2tMYXlvdXRQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
aCIKQEAgLTI2OCw2ICsyNjksOCBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGls
ZUluVGhyCiAgICAgICAgIHBlcmZvcm1MSUNNKGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVz
c0FuYWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpCisgICAgICAgICAgICBwZXJmb3Jt
UmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvbihkZmcpOwogICAgICAgICBwZXJmb3JtRENFKGRmZyk7
IC8vIFdlIHJlbHkgb24gdGhpcyB0byBjb252ZXJ0IGRlYWQgU2V0TG9jYWxzIGludG8gdGhlIGFw
cHJvcHJpYXRlIGhpbnQsIGFuZCB0byBraWxsIGRlYWQgY29kZSB0aGF0IHdvbid0IGJlIHJlY29n
bml6ZWQgYXMgZGVhZCBieSBMTFZNLgogICAgICAgICBwZXJmb3JtU3RhY2tMYXlvdXQoZGZnKTsK
ICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZh
bGlkYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUmVzdXJyZWN0aW9uRm9y
VmFsaWRhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJE
RkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBSZXN1
cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAg
IFJlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDog
UGhhc2UoZ3JhcGgsICJyZXN1cnJlY3Rpb24gZm9yIHZhbGlkYXRpb24iKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAg
ICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgp
OyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQo
bm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmhhc1Jlc3VsdCgpKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgU3BlY05vbmUs
IFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIEVkZ2Uobm9kZSkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK2Jv
b2wgcGVyZm9ybVJlc3VycmVjdGlvbkZvclZhbGlkYXRpb24oR3JhcGgmIGdyYXBoKQoreworICAg
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgUmVzdXJyZWN0aW9uIEZvciBWYWxp
ZGF0aW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPFJlc3VycmVjdGlvbkZvclZhbGlk
YXRpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1cnJlY3Rp
b25Gb3JWYWxpZGF0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
UmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHUmVzdXJyZWN0aW9u
Rm9yVmFsaWRhdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gUGxhY2VzIGEgUGhhbnRv
bSBhZnRlciBldmVyeSB2YWx1ZS1wcm9kdWNpbmcgbm9kZSwgdGhlcmVieSBkaXNhYmxpbmcgRENF
IGZyb20ga2lsbGluZyBpdC4KKy8vIFRoaXMgaXMgdXNlZnVsIGZvciB2YWxpZGF0aW5nIG91ciBP
U1IgZXhpdCBtYWNoaW5lcnkgYnkgaW5zdGl0dXRpbmcgdGhlIHJlcXVpcmVtZW50IHRoYXQKKy8v
IGFueSBsaXZlLWluLWJ5dGVjb2RlIHZhcmlhYmxlIHNob3VsZCBiZSBPU1ItYXZhaWxhYmxlLiBX
aXRob3V0IHRoaXMgcGhhc2UsIGl0J3MgaW1wb3NzaWJsZQorLy8gdG8gbWFrZSBzdWNoIGFuIGFz
c2VydGlvbiBiZWNhdXNlIG91ciBEQ0UgaXMgbW9yZSBhZ2dyZXNzaXZlIHRoYW4gdGhlIGJ5dGVj
b2RlIGxpdmVuZXNzCisvLyBhbmFseXNpcy4KKworYm9vbCBwZXJmb3JtUmVzdXJyZWN0aW9uRm9y
VmFsaWRhdGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Jlc3VycmVjdGlvbkZvclZhbGlk
YXRpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU4LDEzICsxNTgsMzUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLTspIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2Nr
LT5wcmVkZWNlc3NvcnNbal07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNz
b3ItPmFwcGVuZE5vblRlcm1pbmFsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLCBTcGVjTm9uZSwgVXBzaWxvbiwgYmxvY2stPmxhc3QoKS0+Y29kZU9yaWdpbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFVwc2lsb24s
IHByZWRlY2Vzc29yLT5sYXN0KCktPmNvZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyhub2RlKSwgRWRnZShwcmVkZWNlc3Nvci0+dmFyaWFibGVzQXRUYWls
W2ldLCB1c2VLaW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgU3BlY05vbmUsIE1vdkhpbnQs
IG5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRWRnZShub2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9mbHVz
aGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBEbyBub3RoaW5nLiBGb3IgbXVsdGlwbGUgcmVhc29ucy4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFzb24gIzE6IElm
IHRoZSBsb2NhbCBpcyBmbHVzaGVkIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBib3RoZXIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGEgTW92SGludCBzaW5jZSBldmVyeSBwYXRo
IHRvIHRoaXMgcG9pbnQgaW4gdGhlIGNvZGUgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGhhdmUgZmx1c2hlZCB0aGUgYnl0ZWNvZGUgdmFyaWFibGUgdXNpbmcgYSBTZXRMb2Nh
bCBhbmQgaGVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgQXZhaWxhYmls
aXR5OjpmbHVzaGVkQXQoKSB3aWxsIGFncmVlLCBhbmQgdGhhdCB3aWxsIGJlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gc3VmZmljaWVudCBmb3IgZmlndXJpbmcgb3V0IGhvdyB0byBy
ZWNvdmVyIHRoZSB2YXJpYWJsZSdzIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYXNvbiAjMjogSWYgd2UgaGFkIGlu
c2VydGVkIGEgTW92SGludCBhbmQgdGhlIFBoaSBmdW5jdGlvbiBoYWQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBkaWVkIChiZWNhdXNlIHRoZSBvbmx5IHVzZXIgb2YgdGhlIHZhbHVl
IHdhcyB0aGUgImZsdXNoIiAtIGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBz
b21lIGFzeW5jaHJvbm91cyBydW50aW1lIHRoaW5neSkgdGhlbiB0aGUgTW92SGludCB3b3VsZCB0
dXJuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50byBhIFpvbWJpZUhpbnQsIHdo
aWNoIHdvdWxkIGZvb2wgdXMgaW50byB0aGlua2luZyB0aGF0IHRoZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHZhcmlhYmxlIGlzIGRlYWQuCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVhc29uICMzOiBJZiB3ZSBo
YWQgaW5zZXJ0ZWQgYSBNb3ZIaW50IHRoZW4gZXZlbiBpZiB0aGUgUGhpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gc3RheWVkIGFsaXZlLCB3ZSB3b3VsZCBzdGlsbCBlbmQgdXAgZ2Vu
ZXJhdGluZyBpbmVmZmljaWVudCBjb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
c2luY2Ugd2Ugd291bGQgYmUgdGVsbGluZyB0aGUgT1NSIGV4aXQgY29tcGlsZXIgdG8gdXNlIHNv
bWUgU1NBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgZm9yIHRoZSBieXRl
Y29kZSB2YXJpYWJsZSByYXRoZXIgdGhhbiBqdXN0IHRlbGxpbmcgaXQgdGhhdAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBvbiB0aGUgc3RhY2su
CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5jb2RlT3JpZ2luLCBPcEluZm8o
dmFyaWFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYg
KzE0NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAg
ICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAg
ICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKICAgICAgICAgY2FzZSBG
bHVzaGVkSlNWYWx1ZToKICAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShWYWx1ZUluSlNT
dGFjaywgd2hlcmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2ICsyNiw3IEBACiAjaWZuZGVmIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9oCiAjZGVmaW5lIERG
R1ZhcmlhYmxlQWNjZXNzRGF0YV9oCiAKKyNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRl
ICJERkdEb3VibGVGb3JtYXRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR0ZsdXNoRm9ybWF0LmgiCiAj
aW5jbHVkZSAiREZHRmx1c2hlZEF0LmgiCkBAIC0zOSw2ICs0MCw4IEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAorc3RydWN0IE5vZGU7CisKIGVudW0gRG91YmxlQmFsbG90
IHsgVm90ZVZhbHVlLCBWb3RlRG91YmxlIH07CiAKIGNsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YSA6
IHB1YmxpYyBVbmlvbkZpbmQ8VmFyaWFibGVBY2Nlc3NEYXRhPiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU5
MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJGVExMb3dlcmVkTm9k
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMT3V0cHV0LmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgi
Ci0jaW5jbHVkZSAiRlRMVmFsdWVTb3VyY2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAj
aW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAt
NzAsNyArNjksNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9mdGxTdGF0ZShzdGF0ZSkKICAgICAg
ICAgLCBtX2hlYXBzKHN0YXRlLmNvbnRleHQpCiAgICAgICAgICwgbV9vdXQoc3RhdGUuY29udGV4
dCkKLSAgICAgICAgLCBtX3ZhbHVlU291cmNlcyhPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJs
b2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9hdmFpbGFiaWxpdHkoT3BlcmFu
ZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAs
IG1fc3RhdGUoc3RhdGUuZ3JhcGgpCiAgICAgICAgICwgbV9pbnRlcnByZXRlcihzdGF0ZS5ncmFw
aCwgbV9zdGF0ZSkKICAgICAgICAgLCBtX3N0YWNrbWFwSURzKDApCkBAIC0yMDQsOCArMjAzLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGluaXRpYWxpemVPU1JFeGl0U3RhdGVGb3JC
bG9jaygpOwogICAgICAgICAKLSAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVh
ZDsKLSAgICAgICAgCiAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKICAgICAgICAgbV9zdGF0ZS5i
ZWdpbkJhc2ljQmxvY2sobV9oaWdoQmxvY2spOwogICAgICAgICAKQEAgLTQ3NSwxMiArNDcyLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBpZiAobV9ub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgREZHX05PREVf
RE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbV9ub2RlLCB1c2UpOwotICAgICAgICAKLSAgICAgICAg
aWYgKG1fbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKQotICAgICAgICAgICAgbV9saXZlLmFkZCht
X25vZGUpOwotICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEV4ZWN1dGVFZmZlY3RzKQogICAg
ICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlRWZmZWN0cyhub2RlSW5kZXgpOwogICAgICAg
ICAKQEAgLTYxOSwzNiArNjEwLDMxIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRmx1c2hlZEpT
VmFsdWU6IHsKICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywgdmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaGVkRG91
YmxlOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0Zvcih2
YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrLCB2
YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWRJ
bnQzMjogewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBtX291dC5zdG9yZTMyKHZhbHVlLCBwYXlsb2FkRm9yKHZhcmlh
YmxlLT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjaywgdmFyaWFi
bGUtPm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6
IHsKICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50NTJJbkpTU3RhY2ssIHZhcmlhYmxlLT5t
YWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6IHsKICAg
ICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5tYWNoaW5l
TG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywgdmFyaWFibGUtPm1hY2hpbmVM
b2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjogewpAQCAtNjU2
LDE1ICs2NDIsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCiAgICAg
ICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24pLAogICAgICAgICAgICAgICAgIGFkZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVM
b2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkgPSBBdmFpbGFiaWxpdHkodmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlTW92SGludCgpCkBAIC02NzUsNyArNjYxLDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNvbXBpbGVab21iaWVIaW50KCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1f
dmFsdWVTb3VyY2VzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShTb3VyY2VJ
c0RlYWQpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpID0g
QXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBp
bGVNb3ZIaW50QW5kQ2hlY2soKQpAQCAtMjU0NCwxMiArMjUzMCwxMiBAQCBwcml2YXRlOgogICAg
IHZvaWQgY29tcGlsZUludmFsaWRhdGlvblBvaW50KCkKICAgICB7CiAgICAgICAgIGlmICh2ZXJi
b3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgSW52YWxp
ZGF0aW9uIHBvaW50IHdpdGggdmFsdWUgc291cmNlczogIiwgbV92YWx1ZVNvdXJjZXMsICJcbiIp
OworICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3aXRoIGF2YWls
YWJpbGl0eTogIiwgbV9hdmFpbGFiaWxpdHksICJcbiIpOwogICAgICAgICAKICAgICAgICAgbV9m
dGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAgVW5j
b3VudGFibGVJbnZhbGlkYXRpb24sIEludmFsaWRWYWx1ZUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZSgpLAogICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwg
bV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsCi0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5u
dW1iZXJPZkFyZ3VtZW50cygpLCBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkxvY2FscygpKSk7Cisg
ICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2F2YWlsYWJp
bGl0eS5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5v
c3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAg
ICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBA
IC0yNTU3LDcgKzI1NDMsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgRXhpdEFyZ3Vt
ZW50TGlzdCBhcmd1bWVudHM7CiAgICAgICAgIAotICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMo
ZXhpdCwgYXJndW1lbnRzLCBGb3JtYXR0ZWRWYWx1ZSgpKTsKKyAgICAgICAgYnVpbGRFeGl0QXJn
dW1lbnRzKGV4aXQsIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUoKSwgZXhpdC5tX2NvZGVPcmln
aW4pOwogICAgICAgICBjYWxsU3RhY2ttYXAoZXhpdCwgYXJndW1lbnRzKTsKICAgICAgICAgCiAg
ICAgICAgIGluZm8ubV9pc0ludmFsaWRhdGlvblBvaW50ID0gdHJ1ZTsKQEAgLTM4MjIsMjUgKzM4
MDgsNiBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0xpdmUoTm9kZSogbm9kZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX2xpdmUuY29udGFpbnMobm9kZSk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgdXNlKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChlZGdlLT5oYXNSZXN1
bHQoKSk7Ci0gICAgICAgIGlmICghZWRnZS5kb2VzS2lsbCgpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX2xpdmUucmVtb3ZlKGVkZ2Uubm9kZSgpKTsKLSAgICB9Ci0gICAgCi0gICAg
Ly8gV3JhcHBlciB1c2VkIG9ubHkgZm9yIERGR19OT0RFX0RPX1RPX0NISUxEUkVOCi0gICAgdm9p
ZCB1c2UoTm9kZSosIEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHVzZShlZGdlKTsKLSAgICB9
Ci0gICAgCiAgICAgTEJhc2ljQmxvY2sgbG93QmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAg
ewogICAgICAgICByZXR1cm4gbV9ibG9ja3MuZ2V0KGJsb2NrKTsKQEAgLTM4NDgsNDAgKzM4MTUs
NyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJs
b2NrKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVTb3VyY2VzLnNp
emUoKTsgaS0tOykgewotICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gbV9oaWdoQmxvY2st
PnNzYS0+Zmx1c2hBdEhlYWRbaV07Ci0gICAgICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgp
KSB7Ci0gICAgICAgICAgICBjYXNlIERlYWRGbHVzaDogewotICAgICAgICAgICAgICAgIC8vIE11
c3QgY29uc2lkZXIgYXZhaWxhYmxlIG5vZGVzIGluc3RlYWQuCi0gICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IG1faGlnaEJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXTsKLSAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShub2RlKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgRmx1c2hlZEludDMyOgotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFs
dWVTb3VyY2UoSW50MzJJbkpTU3RhY2ssIGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgRmx1
c2hlZEludDUyOgotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3Vy
Y2UoSW50NTJJbkpTU3RhY2ssIGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZERv
dWJsZToKLSAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKERv
dWJsZUluSlNTdGFjaywgZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoK
LSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICBjYXNlIEZsdXNo
ZWRKU1ZhbHVlOgotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3Vy
Y2UoVmFsdWVJbkpTU3RhY2ssIGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBtX2F2YWlsYWJp
bGl0eSA9IG1faGlnaEJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0KApAQCAtMzg4OSwxNCArMzgyMywxNCBAQCBwcml2YXRl
OgogICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRlZFZhbHVl
IHJlY292ZXJ5KQogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQo
KSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCB3aXRoIHZhbHVlIHNvdXJjZXM6
ICIsIG1fdmFsdWVTb3VyY2VzLCAiXG4iKTsKLSAgICAgICAgCisgICAgICAgICAgICBkYXRhTG9n
KCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCksICIg
d2l0aCBhdmFpbGFiaWxpdHk6ICIsIG1fYXZhaWxhYmlsaXR5LCAiXG4iKTsKKwogICAgICAgICBB
U1NFUlQobV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSA9PSBtX2Z0bFN0YXRlLmZp
bmFsaXplci0+b3NyRXhpdC5zaXplKCkpOwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5q
aXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAga2luZCwgbG93VmFs
dWUuZm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdo
VmFsdWUpLAogICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgbV9jb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGUsCi0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkFy
Z3VtZW50cygpLCBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkxvY2FscygpKSk7CisgICAgICAgICAg
ICBtX2F2YWlsYWJpbGl0eS5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2F2YWlsYWJpbGl0eS5udW1i
ZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFw
cGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAgICAgT1NSRXhp
dCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBAIC0zOTI0LDEw
ICszODU4LDIyIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBFeGl0QXJndW1lbnRMaXN0IGFy
Z3VtZW50czsKICAgICAgICAgCi0gICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0LCBhcmd1
bWVudHMsIGxvd1ZhbHVlKTsKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5t
X2NvZGVPcmlnaW47CiAgICAgICAgIAotICAgICAgICBpZiAoZGlyZWN0aW9uID09IEZvcndhcmRT
cGVjdWxhdGlvbikgewotICAgICAgICAgICAgQVNTRVJUKG1fbm9kZSk7CisgICAgICAgIGlmIChk
aXJlY3Rpb24gPT0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICAgICAgICAgIGJ1aWxkRXhpdEFy
Z3VtZW50cyhleGl0LCBhcmd1bWVudHMsIGxvd1ZhbHVlLCBjb2RlT3JpZ2luKTsKKyAgICAgICAg
ZWxzZSBpZiAoZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikgeworICAgICAgICAgICAg
aWYgKCFyZWNvdmVyeSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4
ID0gbV9ub2RlSW5kZXg7IG5vZGVJbmRleCA8IG1faGlnaEJsb2NrLT5zaXplKCk7ICsrbm9kZUlu
ZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hCbG9jay0+YXQo
bm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW5Gb3JF
eGl0VGFyZ2V0ID09IGNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW5Gb3JF
eGl0VGFyZ2V0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJ1aWxkRXhpdEFyZ3Vt
ZW50cyhleGl0LCBhcmd1bWVudHMsIGxvd1ZhbHVlLCBjb2RlT3JpZ2luKTsKICAgICAgICAgICAg
IGV4aXQuY29udmVydFRvRm9yd2FyZChtX2hpZ2hCbG9jaywgbV9ub2RlLCBtX25vZGVJbmRleCwg
cmVjb3ZlcnksIGFyZ3VtZW50cyk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0zOTM1LDM2ICsz
ODgxLDU5IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIHZvaWQgYnVpbGRFeGl0QXJndW1l
bnRzKAotICAgICAgICBPU1JFeGl0JiBleGl0LCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlKQorICAgICAgICBPU1JFeGl0JiBleGl0LCBFeGl0QXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLAorICAgICAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1f
Y2FsbEZyYW1lKTsKICAgICAgICAgaWYgKCEhbG93VmFsdWUpCiAgICAgICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKGxvd1ZhbHVlLnZhbHVlKCkpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IFZhbHVlU291cmNlIHNvdXJjZSA9IG1fdmFsdWVTb3VyY2VzW2ldOworICAgICAgICAgICAgaW50
IG9wZXJhbmQgPSBleGl0Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAg
IGJvb2wgaXNMaXZlID0gbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kKSwgY29kZU9yaWdpbik7CisgICAgICAgICAgICBpZiAoIWlzTGl2ZSkgeworICAgICAg
ICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgc3dpdGNoIChzb3VyY2Uua2luZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFZhbHVlSW5KU1N0
YWNrOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNT
dGFjayhzb3VyY2UudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBJbnQzMkluSlNTdGFjazoKLSAgICAgICAgICAgICAgICBleGl0Lm1f
dmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDMyKHNvdXJjZS52aXJ0dWFsUmVn
aXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEludDUy
SW5KU1N0YWNrOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6
OmluSlNTdGFja0FzSW50NTIoc291cmNlLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
IEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBtX2F2YWlsYWJpbGl0eVtpXTsKKyAgICAgICAg
ICAgIEZsdXNoZWRBdCBmbHVzaCA9IGF2YWlsYWJpbGl0eS5mbHVzaGVkQXQoKTsKKyAgICAgICAg
ICAgIHN3aXRjaCAoZmx1c2guZm9ybWF0KCkpIHsKKyAgICAgICAgICAgIGNhc2UgRGVhZEZsdXNo
OgorICAgICAgICAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgorICAgICAgICAgICAgICAgIGlm
IChhdmFpbGFiaWxpdHkuaGFzTm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZEV4aXRB
cmd1bWVudEZvck5vZGUoZXhpdCwgYXJndW1lbnRzLCBpLCBhdmFpbGFiaWxpdHkubm9kZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRM
aXZlbmVzcygpKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkV4cGVjdGVkIHIiLCBv
cGVyYW5kLCAiIHRvIGJlIGF2YWlsYWJsZSBidXQgaXQgd2Fzbid0LlxuIik7CisgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0
aGUgREZHJ3MgRENFIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBkZWFkIGluIGJ5dGVjb2RlCisg
ICAgICAgICAgICAgICAgLy8gZXZlbiB0aG91Z2ggdGhlIGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5
c2lzIHRoaW5rcyBpdCdzIGxpdmUuIFRoaXMgaXMKKyAgICAgICAgICAgICAgICAvLyBhY2NlcHRh
YmxlIHNpbmNlIHRoZSBERkcncyBEQ0UgaXMgYnkgZGVzaWduIG1vcmUgYWdncmVzc2l2ZSB3aGls
ZSBzdGlsbAorICAgICAgICAgICAgICAgIC8vIGJlaW5nIHNvdW5kLgorICAgICAgICAgICAgICAg
IGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgRG91YmxlSW5KU1N0YWNrOgotICAgICAgICAgICAgICAg
IGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKHNvdXJjZS52
aXJ0dWFsUmVnaXN0ZXIoKSk7CisKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Cisg
ICAgICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9v
bGVhbjoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpT
U3RhY2soZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBTb3VyY2VJc0RlYWQ6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3Zh
bHVlc1tpXSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9
IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQzMihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEhhdmVOb2RlOgotICAgICAg
ICAgICAgICAgIGFkZEV4aXRBcmd1bWVudEZvck5vZGUoZXhpdCwgYXJndW1lbnRzLCBpLCBzb3Vy
Y2Uubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZElu
dDUyOgorICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNT
dGFja0FzSW50NTIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBGbHVz
aGVkRG91YmxlOgorICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6
OmluSlNTdGFja0FzRG91YmxlKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzk5MSw1MyArMzk2MCw2
IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50RXhpdEFyZ3VtZW50KGV4
aXQsIGluZGV4LCBub2RlKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAg
IGlmICghaXNMaXZlKG5vZGUpKSB7Ci0gICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhu
b2RlLT5vcCgpKSkgewotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRFeGl0QXJndW1lbnQoZXhp
dCwgaW5kZXgsIG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzTGl2ZShub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZvdW5kKSB7
Ci0gICAgICAgICAgICAgICAgTm9kZSogYmVzdE5vZGUgPSAwOwotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGJlc3RTY29yZSA9IDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
SGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2xpdmUuYmVnaW4oKTsKLSAgICAgICAg
ICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9saXZlLmVuZCgpOwotICAg
ICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9ICppdGVyOwotICAgICAgICAgICAgICAgICAgICBpZiAo
Y2FuZGlkYXRlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUtPmNoaWxk
MSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChjYW5kaWRhdGUtPmNoaWxkMSgpICE9IG5vZGUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbXlTY29yZSA9IGZv
cndhcmRSZXdpcmluZ1NlbGVjdGlvblNjb3JlKGNhbmRpZGF0ZS0+b3AoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChteVNjb3JlIDw9IGJlc3RTY29yZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBiZXN0Tm9kZSA9IGNhbmRpZGF0ZTsK
LSAgICAgICAgICAgICAgICAgICAgYmVzdFNjb3JlID0gbXlTY29yZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGJlc3ROb2RlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChpc0xpdmUoYmVzdE5vZGUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IGJlc3ROb2RlOwotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpbmRl
eF0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChpc0xpdmUobm9kZSkp
OwotCiAgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChu
b2RlKTsKICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CiAgICAgICAgICAgICBhZGRFeGl0
QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRJbnQzMiwgdmFsdWUu
dmFsdWUoKSk7CkBAIC00MTE0LDcgKzQwMzYsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT5sb2NhbCgpOwogICAgICAgICAKLSAg
ICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChvcGVyYW5kKSA9IFZhbHVlU291cmNlKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQob3BlcmFu
ZCkgPSBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBzZXRJbnQzMihOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCkBAIC00MjcyLDExICs0
MTk0LDEwIEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4g
bV9ib29sZWFuVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1f
c3RvcmFnZVZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2Rv
dWJsZVZhbHVlczsKLSAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7CiAgICAgCiAgICAgSGFzaE1h
cDxOb2RlKiwgTFZhbHVlPiBtX3BoaXM7CiAgICAgCi0gICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+
IG1fdmFsdWVTb3VyY2VzOworICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9hdmFpbGFiaWxp
dHk7CiAgICAgCiAgICAgSW5QbGFjZUFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICBBYnN0cmFj
dEludGVycHJldGVyPEluUGxhY2VBYnN0cmFjdFN0YXRlPiBtX2ludGVycHJldGVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCShyZXZpc2lvbiAxNTkzNTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgT1NSRXhpdDo6Y29udmVydFRvRm9yd2FyZCgKICAg
ICBBU1NFUlQobm9kZS0+Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CiAg
ICAgCiAgICAgbV9jb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKLSAgICAKKwogICAgIGlm
ICghdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSw3IEBAIHB1
YmxpYzoKICAgICBMVmFsdWUgaW50VG9QdHIoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJl
dHVybiBidWlsZEludFRvUHRyKG1fYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9CiAgICAgTFZhbHVl
IGJpdENhc3QoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBidWlsZEJpdENhc3Qo
bV9idWlsZGVyLCB2YWx1ZSwgdHlwZSk7IH0KICAgICAKKyAgICBMVmFsdWUgYWxsb2NhKExUeXBl
IHR5cGUpIHsgcmV0dXJuIGJ1aWxkQWxsb2NhKG1fYnVpbGRlciwgdHlwZSk7IH0KICAgICBMVmFs
dWUgZ2V0KExWYWx1ZSByZWZlcmVuY2UpIHsgcmV0dXJuIGJ1aWxkTG9hZChtX2J1aWxkZXIsIHJl
ZmVyZW5jZSk7IH0KICAgICBMVmFsdWUgc2V0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHJlZmVyZW5j
ZSkgeyByZXR1cm4gYnVpbGRTdG9yZShtX2J1aWxkZXIsIHZhbHVlLCByZWZlcmVuY2UpOyB9CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNw
cAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1
ZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRlRMVmFsdWVTb3VyY2UuaCIKLQotI2lmIEVOQUJMRShGVExfSklUKQotCi1uYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLXZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2Ug
U291cmNlTm90U2V0OgotICAgICAgICBvdXQucHJpbnQoIlNvdXJjZU5vdFNldCIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBWYWx1ZUluSlNTdGFjazoKLSAgICAgICAgb3V0LnByaW50KCJW
YWx1ZUluSlNTdGFjazoiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIEludDMySW5KU1N0YWNrOgotICAgICAgICBvdXQucHJpbnQoIkludDMySW5KU1N0YWNr
OiIsIHZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW50NTJJ
bkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmludCgiSW50NTJJbkpTU3RhY2s6IiwgdmlydHVhbFJl
Z2lzdGVyKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6Ci0g
ICAgICAgIG91dC5wcmludCgiRG91YmxlSW5KU1N0YWNrOiIsIHZpcnR1YWxSZWdpc3RlcigpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgU291cmNlSXNEZWFkOgotICAgICAgICBvdXQucHJp
bnQoIlNvdXJjZUlzRGVhZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBIYXZlTm9kZToK
LSAgICAgICAgb3V0LnByaW50KCJOb2RlKCIsIG5vZGUoKSwgIikiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12
b2lkIFZhbHVlU291cmNlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250
ZXh0KikgY29uc3QKLXsKLSAgICBkdW1wKG91dCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2lmbmRlZiBGVExWYWx1ZVNvdXJjZV9oCi0jZGVmaW5lIEZUTFZhbHVlU291cmNlX2gK
LQotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNp
bmNsdWRlICJERkdOb2RlLmgiCi0jaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
Ci0KLWVudW0gVmFsdWVTb3VyY2VLaW5kIHsKLSAgICBTb3VyY2VOb3RTZXQsCi0gICAgVmFsdWVJ
bkpTU3RhY2ssCi0gICAgSW50MzJJbkpTU3RhY2ssCi0gICAgSW50NTJJbkpTU3RhY2ssCi0gICAg
RG91YmxlSW5KU1N0YWNrLAotICAgIFNvdXJjZUlzRGVhZCwKLSAgICBIYXZlTm9kZQotfTsKLQot
Y2xhc3MgVmFsdWVTb3VyY2UgewotcHVibGljOgotICAgIFZhbHVlU291cmNlKCkKLSAgICAgICAg
OiBtX2tpbmQoU291cmNlTm90U2V0KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQg
VmFsdWVTb3VyY2UoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCi0gICAgICAgIDogbV9raW5kKGtpbmQp
Ci0gICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFNvdXJjZUlzRGVhZCk7Ci0gICAgfQot
ICAgIAotICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKERGRzo6Tm9kZSogbm9kZSkKLSAgICAgICAg
OiBtX2tpbmQoSGF2ZU5vZGUpCi0gICAgewotICAgICAgICBtX3ZhbHVlLm5vZGUgPSBub2RlOwot
ICAgIH0KLSAgICAKLSAgICBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQga2luZCwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKLSAgICAgICAgOiBtX2tpbmQoa2luZCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtX2tpbmQgPT0gVmFsdWVJbkpTU3RhY2sgfHwgbV9raW5kID09IEludDMySW5KU1N0YWNr
IHx8IG1fa2luZCA9PSBJbnQ1MkluSlNTdGFjayB8fCBtX2tpbmQgPT0gRG91YmxlSW5KU1N0YWNr
KTsKLSAgICAgICAgbV92YWx1ZS52aXJ0dWFsUmVnaXN0ZXIgPSByZWcub2Zmc2V0KCk7Ci0gICAg
fQotICAgIAotICAgIFZhbHVlU291cmNlS2luZCBraW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX2tpbmQ7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4ga2luZCgpID09IFNvdXJjZU5vdFNldDsgfQotICAgIAotICAgIERGRzo6Tm9kZSog
bm9kZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsK
LSAgICAgICAgcmV0dXJuIG1fdmFsdWUubm9kZTsKLSAgICB9Ci0gICAgCi0gICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IFZhbHVlSW5KU1N0YWNrIHx8IGtpbmQoKSA9PSBJbnQzMkluSlNTdGFjayB8fCBraW5k
KCkgPT0gSW50NTJJbkpTU3RhY2sgfHwga2luZCgpID09IERvdWJsZUluSlNTdGFjayk7Ci0gICAg
ICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV92YWx1ZS52aXJ0dWFsUmVnaXN0ZXIpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2b2lkIGR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotCi1wcml2YXRl
OgotICAgIFZhbHVlU291cmNlS2luZCBtX2tpbmQ7Ci0gICAgdW5pb24gewotICAgICAgICBERkc6
Ok5vZGUqIG5vZGU7Ci0gICAgICAgIGludCB2aXJ0dWFsUmVnaXN0ZXI7Ci0gICAgfSBtX3ZhbHVl
OwotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCi0KLSNlbmRpZiAvLyBGVExWYWx1ZVNvdXJjZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EdW1wQ29udGV4dC5jcHAJKHJldmlzaW9uIDE1OTM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUR1bXBDb250
ZXh0OjpEdW1wQ29udGV4dCgpIHsgfQorRHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KCkKKyAgICA6
IGdyYXBoKDApCit7Cit9CisKIER1bXBDb250ZXh0Ojp+RHVtcENvbnRleHQoKSB7IH0KIAogYm9v
bCBEdW1wQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EdW1wQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSBERkcgeyBjbGFzcyBH
cmFwaDsgfQorCiBzdHJ1Y3QgRHVtcENvbnRleHQgewogICAgIER1bXBDb250ZXh0KCk7CiAgICAg
fkR1bXBDb250ZXh0KCk7CkBAIC00MSw2ICs0Myw3IEBAIHN0cnVjdCBEdW1wQ29udGV4dCB7CiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4ID0gIiIpIGNvbnN0
OwogICAgIAogICAgIFN0cmluZ0hhc2hEdW1wQ29udGV4dDxTdHJ1Y3R1cmU+IHN0cnVjdHVyZXM7
CisgICAgREZHOjpHcmFwaCogZ3JhcGg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE1OTM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTI2LDYgKzEyNiw3IEBAIHR5cGVkZWYgT3B0aW9uUmFuZ2Ugb3B0aW9uUmFuZ2U7CiAg
ICAgdihib29sLCBlbmFibGVMTFZNRmFzdElTZWwsIGZhbHNlKSBcCiAgICAgdihib29sLCB1c2VM
TFZNU21hbGxDb2RlTW9kZWwsIGZhbHNlKSBcCiAgICAgdihib29sLCBkdW1wTExWTUlSLCBmYWxz
ZSkgXAorICAgIHYoYm9vbCwgdmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MsIGZhbHNlKSBcCiAg
ICAgdihib29sLCBsbHZtQWx3YXlzRmFpbHNCZWZvcmVDb21waWxlLCBmYWxzZSkgXAogICAgIHYo
Ym9vbCwgbGx2bUFsd2F5c0ZhaWxzQmVmb3JlTGluaywgZmFsc2UpIFwKICAgICB2KGJvb2wsIGxs
dm1TaW1wbGVPcHQsIHRydWUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDEzICs0Njks
MTMgQEAgcHVibGljOgogICAgIGJvb2wgdXNlc05vblN0cmljdEV2YWwoKSB7IHJldHVybiBtX3Vz
ZXNOb25TdHJpY3RFdmFsOyB9CiAgICAgdm9pZCBzZXRVc2VzTm9uU3RyaWN0RXZhbChib29sIHVz
ZXNOb25TdHJpY3RFdmFsKSB7IG1fdXNlc05vblN0cmljdEV2YWwgPSB1c2VzTm9uU3RyaWN0RXZh
bDsgfQogCi0gICAgaW50IGNhcHR1cmVTdGFydCgpIHsgcmV0dXJuIG1fY2FwdHVyZVN0YXJ0OyB9
CisgICAgaW50IGNhcHR1cmVTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZVN0YXJ0OyB9
CiAgICAgdm9pZCBzZXRDYXB0dXJlU3RhcnQoaW50IGNhcHR1cmVTdGFydCkgeyBtX2NhcHR1cmVT
dGFydCA9IGNhcHR1cmVTdGFydDsgfQogCi0gICAgaW50IGNhcHR1cmVFbmQoKSB7IHJldHVybiBt
X2NhcHR1cmVFbmQ7IH0KKyAgICBpbnQgY2FwdHVyZUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fw
dHVyZUVuZDsgfQogICAgIHZvaWQgc2V0Q2FwdHVyZUVuZChpbnQgY2FwdHVyZUVuZCkgeyBtX2Nh
cHR1cmVFbmQgPSBjYXB0dXJlRW5kOyB9CiAKLSAgICBpbnQgY2FwdHVyZUNvdW50KCkgeyByZXR1
cm4gLShtX2NhcHR1cmVFbmQgLSBtX2NhcHR1cmVTdGFydCk7IH0KKyAgICBpbnQgY2FwdHVyZUNv
dW50KCkgY29uc3QgeyByZXR1cm4gLShtX2NhcHR1cmVFbmQgLSBtX2NhcHR1cmVTdGFydCk7IH0K
IAogICAgIGludCBwYXJhbWV0ZXJDb3VudCgpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNs
dWRpbmdUaGlzIC0gMTsgfQogICAgIGludCBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoKSB7
IHJldHVybiBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsgfQpJbmRleDogVG9vbHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MzUyKQor
KysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTMt
MTEtMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBGVEwgc2hv
dWxkIGhhdmUgYW4gZXhwbGljaXQgbm90aW9uIG9mIGJ5dGVjb2RlIGxpdmVuZXNzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQxODEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWpz
Yy1zdHJlc3MtdGVzdHM6CisKIDIwMTMtMTEtMTUgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgYnVpbGQud2Via2l0Lm9yZy9kYXNoYm9hcmQgc2hvdWxk
IHByb3ZpZGUgYSB3YXkgdG8gZm9jdXMgb24gYSBzdWJzZXQgb2YgYm90cwpJbmRleDogVG9vbHMv
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShyZXZpc2lvbiAxNTkzNTIpCisrKyBUb29scy9TY3JpcHRz
L3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC00MTMsNiArNDEzLDEwIEBA
IGRlZiBydW5GVExOb0NKSVQKICAgICBydW4oImZ0bC1uby1jaml0IiwgIi0tZW5hYmxlQ29uY3Vy
cmVudEpJVD1mYWxzZSIsICItLXVzZUV4cGVyaW1lbnRhbEZUTD10cnVlIikKIGVuZAogCitkZWYg
cnVuRlRMTm9DSklUT1NSVmFsaWRhdGlvbgorICAgIHJ1bigiZnRsLW5vLWNqaXQtb3NyLXZhbGlk
YXRpb24iLCAiLS1lbmFibGVDb25jdXJyZW50SklUPWZhbHNlIiwgIi0tdXNlRXhwZXJpbWVudGFs
RlRMPXRydWUiLCAiLS12YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcz10cnVlIikKK2VuZAorCiBk
ZWYgcnVuREZHRWFnZXIKICAgICBydW4oImRmZy1lYWdlciIsICpFQUdFUl9PUFRJT05TKQogZW5k
CkBAIC00MjksNiArNDMzLDEwIEBAIGRlZiBydW5GVExFYWdlck5vQ0pJVAogICAgIHJ1bigiZnRs
LWVhZ2VyLW5vLWNqaXQiLCAiLS11c2VFeHBlcmltZW50YWxGVEw9dHJ1ZSIsICItLWVuYWJsZUNv
bmN1cnJlbnRKSVQ9ZmFsc2UiLCAqRUFHRVJfT1BUSU9OUykKIGVuZAogCitkZWYgcnVuRlRMRWFn
ZXJOb0NKSVRPU1JWYWxpZGF0aW9uCisgICAgcnVuKCJmdGwtZWFnZXItbm8tY2ppdC1vc3ItdmFs
aWRhdGlvbiIsICItLXVzZUV4cGVyaW1lbnRhbEZUTD10cnVlIiwgIi0tZW5hYmxlQ29uY3VycmVu
dEpJVD1mYWxzZSIsICItLXZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzPXRydWUiLCAqRUFHRVJf
T1BUSU9OUykKK2VuZAorCiBkZWYgcnVuQWx3YXlzVHJpZ2dlckNvcHlQaGFzZQogICAgIHJ1bigi
YWx3YXlzLXRyaWdnZXItY29weS1waGFzZSIsICItLW1pbkhlYXBVdGlsaXphdGlvbj0yLjAiLCAi
LS1taW5Db3BpZWRCbG9ja1V0aWxpemF0aW9uPTIuMCIpCiBlbmQKQEAgLTQ0Myw4ICs0NTEsMTAg
QEAgZGVmIGRlZmF1bHRSdW4KICAgICBpZiAkZW5hYmxlRlRMCiAgICAgICAgIHJ1bkRlZmF1bHRG
VEwKICAgICAgICAgcnVuRlRMTm9DSklUCisgICAgICAgIHJ1bkZUTE5vQ0pJVE9TUlZhbGlkYXRp
b24KICAgICAgICAgcnVuRlRMRWFnZXIKICAgICAgICAgcnVuRlRMRWFnZXJOb0NKSVQKKyAgICAg
ICAgcnVuRlRMRWFnZXJOb0NKSVRPU1JWYWxpZGF0aW9uCiAgICAgZW5kCiBlbmQKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217113</attachid>
            <date>2013-11-15 21:38:21 -0800</date>
            <delta_ts>2013-11-15 21:40:37 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>114352</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5Mzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MCBA
QAorMjAxMy0xMS0xNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgaGF2ZSBhbiBleHBsaWNpdCBub3Rpb24gb2YgYnl0ZWNvZGUgbGl2ZW5lc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDE4MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
VGhpcyBtYWtlcyBGVEwgT1NSIGV4aXQgdXNlIGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lzIHRv
IGRldGVybWluZSB3aGljaCB2YXJpYWJsZXMKKyAgICAgICAgdG8gaW5jbHVkZSB2YWx1ZXMgZm9y
LiBUaGUgZGVjaXNpb24gb2YgaG93IHRvIGdldCB0aGUgdmFsdWVzIG9mIHZhcmlhYmxlcyBpcyBi
YXNlZCBvbgorICAgICAgICBmb3J3YXJkIHByb3BhZ2F0aW9uIG9mIE1vdkhpbnRzIGFuZCBTZXRM
b2NhbHMuCisgICAgICAgIAorICAgICAgICBUaGlzIGZpeGVzIGEgYnVuY2ggb2YgYnVncyAobGlr
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MTM4IGJ1dAorICAg
ICAgICBhbHNvIG90aGVycyB0aGF0IEkgbm90aWNlZCB3aGVuIEkgc3RhcnRlZCB3cml0aW5nIG1v
cmUgdGFyZ2V0dGVkIHRlc3RzKSBhbmQgYWxsb3dzIHVzCisgICAgICAgIHRvIHJlbW92ZSBzb21l
IHNrZXRjaHkgY29kZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmg6
CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAg
ICAgKEpTQzo6aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpzZXRG
b3JPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6
CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpzdGVwT3Zlckluc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZUxvY2FsTGl2
ZW5lc3NGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpczo6cnVuTGl2ZW5lc3NGaXhwb2ludCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpczo6b3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpnZXRMaXZlbmVzc0luZm8pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MpOgorICAgICAgICAq
IGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOgorICAgICAgICAoSlNDOjpvcGVyYW5kVGhhdElzTm90QWx3
YXlzTGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xpdmUpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhcHR1cmVD
b3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FwdHVyZVN0YXJ0KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpjYXB0dXJlRW5kKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3Jp
Z2luLmNwcDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpkdW1wSW5Db250ZXh0KToK
KyAgICAgICAgKiBieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzKToKKyAg
ICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OmdldE91dCk6CisgICAgICAgIChKU0M6
OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlKToKKyAgICAgICAgKEpTQzo6RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M6OmdldExpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHQXZhaWxh
YmlsaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5OjpkdW1w
KToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OmR1bXBJbkNvbnRleHQpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6
QXZhaWxhYmlsaXR5OjpBdmFpbGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJp
bGl0eTo6dW5hdmFpbGFibGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6d2l0
aEZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OndpdGhOb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OndpdGhVbmF2YWlsYWJsZU5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6bm9kZUlzVW5kZWNpZGVkKToKKyAgICAgICAg
KEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6Om5vZGVJc1VuYXZhaWxhYmxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBdmFpbGFiaWxpdHk6Omhhc05vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWls
YWJpbGl0eTo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5OjpmbHVzaGVk
QXQpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6b3BlcmF0b3IhKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eTo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0
eTo6bWVyZ2VOb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5Ojp1bmF2YWls
YWJsZU1hcmtlcik6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdEaXNhc3NlbWJsZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxlcjo6RGlzYXNzZW1ibGVyKToKKyAgICAgICAgKiBkZmcv
REZHRmx1c2hGb3JtYXQuY3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBkZmcvREZHRmx1c2hGb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpyZXN1bHRGb3Ip
OgorICAgICAgICAoSlNDOjpERkc6OnVzZUtpbmRGb3IpOgorICAgICAgICAoSlNDOjpERkc6OmRh
dGFGb3JtYXRGb3IpOgorICAgICAgICAqIGRmZy9ERkdGbHVzaGVkQXQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkZsdXNoZWRBdDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0ZsdXNoZWRBdC5o
OgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoZWRBdDo6Rmx1c2hlZEF0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpGbHVzaGVkQXQ6Om1lcmdlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bGl2ZW5lc3NGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0xpdmVJbkJ5dGVj
b2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6YmFzZWxpbmVDb2RlQmxvY2tGb3IpOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdSZXN1cnJl
Y3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2U6OlJlc3VycmVjdGlvbkZvclZhbGlkYXRpb25Q
aGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6UmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1SZXN1cnJlY3Rpb25Gb3JWYWxpZGF0
aW9uKToKKyAgICAgICAgKiBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg6
IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZH
VmFsdWVTb3VyY2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6Zm9yRmx1c2hG
b3JtYXQpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAg
KiBmdGwvRlRMRXhpdFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmR1
bXBJbkNvbnRleHQpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Okxvd2VyREZHVG9MTFZNKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpjb21waWxlWm9tYmllSGludCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6aW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmVtaXRPU1JFeGl0Q2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudEZvck5vZGUpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpvYnNlcnZlTW92SGludCk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQp
OgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OmFsbG9jYSk6CisgICAgICAgICogZnRsL0ZUTFZhbHVlU291cmNlLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBmdGwvRlRMVmFsdWVTb3VyY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsbHZtL0xM
Vk1BUElGdW5jdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL0R1bXBDb250ZXh0LmNwcDoKKyAg
ICAgICAgKEpTQzo6RHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KToKKyAgICAgICAgKiBydW50aW1l
L0R1bXBDb250ZXh0Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICog
cnVudGltZS9TeW1ib2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6
Y2FwdHVyZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6U2hhcmVkU3ltYm9sVGFibGU6OmNhcHR1cmVF
bmQpOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6Y2FwdHVyZUNvdW50KToKKwog
MjAxMy0xMS0xNSAgcGVhdm9Ab3V0bG9vay5jb20gIDxwZWF2b0BvdXRsb29rLmNvbT4KIAogICAg
ICAgICBbV2luXSBKYXZhU2NyaXB0IGNyYXNoZXMgb24gNjQtYml0IHdpdGggSklUIGVuYWJsZWQu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTkzNTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTkxLDYgKzkxLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHQXJyYXlNb2RlLmNw
cAogICAgIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcAorICAgIGRmZy9ERkdBdmFpbGFi
aWxpdHkuY3BwCiAgICAgZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCiAgICAg
ZGZnL0RGR0Jhc2ljQmxvY2suY3BwCiAgICAgZGZnL0RGR0JpbmFyeVN3aXRjaC5jcHAKQEAgLTE1
OCw2ICsxNTksNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdQbGFu
LmNwcAogICAgIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdSZXN1cnJlY3Rpb25G
b3JWYWxpZGF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAK
ICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMCArMTAwLDExIEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVBy
b2ZpbGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxl
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaCBcCi0gICAg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgXAot
ICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaCBc
Ci0gICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAgXAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlQmFzaWNCbG9jay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUJhc2ljQmxvY2suaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaCBcCkBAIC0xMzIsNiArMTMzLDcgQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
aXRLaW5kLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeHByZXNzaW9uUmFuZ2VJbmZvLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oIFwKQEAgLTIwNyw2ICsyMDks
OCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXZhaWxhYmlsaXR5LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5jcHAgXApAQCAtMzU4LDYgKzM2Miw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVn
aXN0ZXJCYW5rLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdXJyZWN0aW9u
Rm9yVmFsaWRhdGlvblBoYXNlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzgsNiArMzM4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCIgLz4NCiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJyYXlNb2RlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAiIC8+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0F2YWlsYWJpbGl0eS5jcHAiIC8+DQogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIiAv
Pg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4N
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQmluYXJ5U3dpdGNoLmNwcCIgLz4N
CkBAIC00MDMsNiArNDA0LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQ
bGFuLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlv
bkluamVjdGlvblBoYXNlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVC5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcCIgLz4NCkBAIC03NDUsNiArNzQ3LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXEJ5VmFsSW5mby5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXEJ5dGVjb2RlQmFzaWNCbG9jay5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGlu
ZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5rSW5m
by5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5rU3Rh
dHVzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbFJldHVy
bk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIgLz4NCkBAIC03NjIsNiArNzY1LDcgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV4ZWN1dGlvbkNvdW50ZXIuaCIgLz4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxFeGl0S2luZC5oIiAvPg0KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV4cHJlc3Npb25SYW5nZUluZm8uaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxGdWxsQnl0ZWNvZGVMaXZlbnNz
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcR2V0QnlJZFN0YXR1
cy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEhhbmRsZXJJbmZv
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSW5saW5lQ2FsbEZy
YW1lU2V0LmgiIC8+DQpAQCAtODEyLDYgKzgxNiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHkuaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiIC8+DQpAQCAt
ODk1LDYgKzkwMCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHUmVnaXN0ZXJCYW5rLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR1JlZ2lzdGVyU2V0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdTYWZlVG9FeGVjdXRlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Njb3JlQm9hcmQuaCIgLz4NCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU5MzUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw4ICsxMDQsNiBAQAogCQkwRjIzNUJFMjE3MTc4RTFD
MDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjIzNUJDQzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyMzVCRTMx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkNEMTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExWYWx1ZUZvcm1hdC5jcHAgKi87IH07CiAJCTBGMjM1QkU0MTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExWYWx1ZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyMzVCQ0UxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYyMzVCRTUxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkNGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExW
YWx1ZVNvdXJjZS5jcHAgKi87IH07Ci0JCTBGMjM1QkU2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExW
YWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyMzVCRDAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyMzVCRUIxNzE3OEU3
MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkU3MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0QmFzZS5jcHAgKi87IH07CiAJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyMzVCRTgxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyMzVCRUQxNzE3OEU3MzAw
NjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJFOTE3MTc4RTczMDA2OTBDN0YgLyogREZH
T1NSRXhpdFByZXBhcmF0aW9uLmNwcCAqLzsgfTsKQEAgLTI2MCw2ICsyNTgsMTIgQEAKIAkJMEY2
Mzk0NzgxNURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDc2MTVEQ0Uz
NDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2Mzk0ODQxNUU0ODExODAwNkE1
OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjYzOTQ4MTE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNw
cCAqLzsgfTsKIAkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0ODIxNUU0
ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNv
ZGVMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2NjZFQzYx
ODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyog
REZHQXZhaWxhYmlsaXR5LmNwcCAqLzsgfTsKKwkJMEY2NjZFQzcxODM1NjcyQjAwRDAxN0YxIC8q
IERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NjZFQzMxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjY2RUND
MTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQ0Ex
ODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAg
Ki87IH07CisJCTBGNjY2RUNEMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JW
YWxpZGF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxp
ZGF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjgxNERG
M0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyog
REZHRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjcwMjVBOTE3MTRCMEZBMDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzAyNUE3MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwICovOyB9OwpAQCAtMTM5NSw4ICsxMzk5LDYgQEAKIAkJMEYy
MzVCQ0MxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGVExUaHVua3MuaDsgcGF0aCA9IGZ0bC9GVExUaHVua3MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCQ0QxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZh
bHVlRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFZh
bHVlRm9ybWF0LmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1ZUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMjM1QkNFMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZv
cm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExWYWx1ZUZvcm1hdC5o
OyBwYXRoID0gZnRsL0ZUTFZhbHVlRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGMjM1QkNGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExWYWx1ZVNvdXJjZS5jcHA7IHBhdGgg
PSBmdGwvRlRMVmFsdWVTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjIzNUJEMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVTb3VyY2UuaDsgcGF0aCA9IGZ0bC9GVExWYWx1
ZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIzNUJFNzE3MTc4RTcz
MDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHT1NSRXhpdEJhc2UuY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRCYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCRTgxNzE3OEU3MzAwNjkw
QzdGIC8qIERGR09TUkV4aXRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR09TUkV4aXRCYXNlLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdEJhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCRTkxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4
aXRQcmVwYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTUwLDYgKzE1NTIsMTIgQEAK
IAkJMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oOyBwYXRoID0gZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0ODExNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5
TW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBcnJheU1v
ZGUuY3BwOyBwYXRoID0gZGZnL0RGR0FycmF5TW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQXJyYXlNb2RlLmg7IHBhdGggPSBkZmcv
REZHQXJyYXlNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjY2RUJFMTgz
NTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQkYxODM1NjZGOTAwRDAx
N0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZ1bGxCeXRlY29kZUxpdmVuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjY2RUMyMTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXZhaWxhYmlsaXR5LmNwcDsgcGF0
aCA9IGRmZy9ERkdBdmFpbGFiaWxpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0F2YWlsYWJpbGl0eS5oOyBwYXRoID0gZGZnL0RG
R0F2YWlsYWJpbGl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2NkVDQTE4
MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1Jlc3VycmVjdGlvbkZvclZh
bGlkYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlv
blBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQ0IxODM2QjM3
RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhh
c2UuaDsgcGF0aCA9IGRmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERG
R0FkamFjZW5jeUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWRq
YWNlbmN5TGlzdC5oOyBwYXRoID0gZGZnL0RGR0FkamFjZW5jeUxpc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRWRnZS5oOyBwYXRoID0gZGZnL0RG
R0VkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MDI1QTcxNzE0QjBGODAw
MzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yODQ0LDggKzI4NTIsNiBAQAogCQkJCTBGMjM1QkNEMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExWYWx1ZUZvcm1hdC5jcHAgKi8sCiAJCQkJMEYyMzVCQ0UxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTFZhbHVlRm9ybWF0LmggKi8sCiAJCQkJMEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZU
TFZhbHVlRnJvbUJsb2NrLmggKi8sCi0JCQkJMEYyMzVCQ0YxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TFZhbHVlU291cmNlLmNwcCAqLywKLQkJCQkwRjIzNUJEMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
VmFsdWVTb3VyY2UuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gZnRsOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKQEAgLTM3NDQsNiArMzc1MCw4IEBACiAJCQkJMEY2Mzk0ODIxNUU0ODExNDAw
NkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovLAogCQkJCUE3RDlBMjhGMTdBMEJDNzQwMEVFMjYx
OCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCAqLywKIAkJCQlBN0Q5QTI5MDE3QTBCQzc0
MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oICovLAorCQkJCTBGNjY2RUMyMTgz
NTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwICovLAorCQkJCTBGNjY2RUMzMTgz
NTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuaCAqLywKIAkJCQkwRjcxNENBMTE2RUE5
MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJ
MEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
aCAqLywKIAkJCQlBN0Q4OUNFMzE3QTBCOENDMDA3NzNBRDggLyogREZHQmFzaWNCbG9jay5jcHAg
Ki8sCkBAIC0zODk0LDYgKzM5MDIsOCBAQAogCQkJCTBGRkZDOTUxMTRFRjkwOTUwMEM3MjUzMiAv
KiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTIxNEVG
OTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggKi8sCiAJCQkJ
ODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAorCQkJCTBG
NjY2RUNBMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhh
c2UuY3BwICovLAorCQkJCTBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rp
b25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLywKIAkJCQlBNzdBNDIzQzE3QTBCQkZEMDBBOERCODEg
LyogREZHU2FmZVRvRXhlY3V0ZS5oICovLAogCQkJCUE3NDEwMTdFMTc5REFGODAwMDJFQjhCQSAv
KiBERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oICovLAogCQkJCTg2RUNB
M0Y5MTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmggKi8sCkBAIC00MDM2LDE1ICs0
MDQ2LDE2IEBACiAJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQzJGQ0FFMEMxN0E5QzI0
RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi8sCi0JCQkJQzJGQ0FFMEQxN0E5
QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovLAotCQkJCUMyRkNBRTBFMTdB
OUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwICovLAotCQkJCUMy
RkNBRTBGMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLywK
IAkJCQkwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5j
cHAgKi8sCiAJCQkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblBy
b2ZpbGUuaCAqLywKIAkJCQkwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxl
LmNwcCAqLywKIAkJCQkwRjYzOTQ1MjE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmgg
Ki8sCisJCQkJQzJGQ0FFMEMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5j
cHAgKi8sCisJCQkJQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9j
ay5oICovLAogCQkJCTBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRp
b25zLmggKi8sCisJCQkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5jcHAgKi8sCisJCQkJQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5oICovLAorCQkJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAv
KiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8sCiAJCQkJMEY4MDIzRTkxNjEz
ODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovLAogCQkJCTBGMEI4M0FFMTRCQ0Y3MTQwMDg4
NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwICovLAogCQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4NUI0
RiAvKiBDYWxsTGlua0luZm8uaCAqLywKQEAgLTQwNzMsNiArNDA4NCw3IEBACiAJCQkJMEZCMTA1
ODIxNjc1NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCAqLywKIAkJCQkwRkIxMDU4MzE2NzU0
ODBDMDBGOEFCNkUgLyogRXhpdEtpbmQuaCAqLywKIAkJCQkwRjBCODNBQTE0QkNGNUI5MDA4ODVC
NEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oICovLAorCQkJCTBGNjY2RUJGMTgzNTY2RjkwMEQw
MTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovLAogCQkJCTBGOTMzMjk1MTRDQTdEQzEw
MDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5NjE0Q0E3REMxMDA4
NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5oICovLAogCQkJCTBGMEI4M0E4MTRCQ0Y1NUUwMDg4NUI0
RiAvKiBIYW5kbGVySW5mby5oICovLApAQCAtNDQzMSw3ICs0NDQzLDYgQEAKIAkJCQkwRkVBMEEy
MDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjIzNUJFNDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMEYyMzVCRTYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVl
U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNDBFMTZGNUNEMDBCMzQ0NjAgLyog
RnVuY3Rpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxQTAxNkI3MkEx
QTAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDA1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvblByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC00NDYxLDYgKzQ0NzIsNyBAQAogCQkJCTJBNkY0NjI2MTdFOTU5Q0UwMEM0NUM5
OCAvKiBIZWFwT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEY5NzQ0NzEzOEM4NTNF
MDBEQTFDNjcgLyogSGVhcFJvb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjREMzFF
MzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0
dXJuVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDBGMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTQ3MDMsNiArNDcxNSw3IEBACiAJCQkJ
OTVDRDQ1NzcwRTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDUxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlTm9kZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNzI5QTUxNjZBRDM1MTAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNv
ZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlC
OTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMTM5MTJBMTY3NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJBMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxl
ckNvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTQ4MTMsNiArNDgyNiw3IEBACiAJCQkJ
QTdBOEFGM0YxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QThBRjQwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjY2RUM3MTgzNTY3MkIwMEQwMTdGMSAv
KiBERkdBdmFpbGFiaWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjYwMTgyMTYzOUZEMkEw
MDM3MkJBMyAvKiBVbmxpbmtlZENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRTg5
MkMxNkQwMjhBRDAwOUU0RkQyIC8qIFVudXNlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICov
LApAQCAtNDg0Myw2ICs0ODU3LDcgQEAKIAkJCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyog
V3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY4OENCMTYwRUQxMkI0
RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDUxNTM5Qjkx
MkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjY2RUNEMTgz
NkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg3MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJy
SklULmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyogWWFy
clBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC01NDUxLDcgKzU0NjYsNiBAQAogCQkJCTBGRUEw
QTE2MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjIzNUJFMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMjM1QkUzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkwRjIzNUJFNTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0IxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0
aW9uQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUYxNkI3MkExNzAw
NURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5Q0MxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNTYzMCw2ICs1NjQ0LDcgQEAKIAkJCQkwRkY3MjlCMzE2NkFEMzVDMDAwRjVC
QTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjQxNjZB
RDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzJGQ0FFMTAxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjY2NkVDQzE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0
aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3
NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmls
ZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01Njk4LDYgKzU3MTMsNyBAQAogCQkJ
CTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkVEOTRGMzAxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nTWFjLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjY2RUM2MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFp
bGFiaWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjUxNTg1M0NFMDAwNEE0RTdE
IC8qIFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFDRjczNzcxNzFDQTZGQjAw
QzlCQjFFIC8qIFdlYWsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRFODRGOUUxNEVFMUFDQzAw
RDZENUQ0IC8qIFdlYWtCbG9jay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmgJKHJldmlz
aW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJh
c2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQ29kZUJsb2NrOwogCi10eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIEZhc3RC
aXRWZWN0b3IsIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dW5zaWduZWQ+ID4gQnl0ZWNvZGVUb0JpdG1hcE1hcDsKLQogY2xhc3MgQnl0
ZWNvZGVCYXNpY0Jsb2NrIDogcHVibGljIFJlZkNvdW50ZWQ8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiB7
CiBwdWJsaWM6CiAgICAgZW51bSBTcGVjaWFsQmxvY2tUeXBlIHsgRW50cnlCbG9jaywgRXhpdEJs
b2NrIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKIAorI2luY2x1ZGUgIkJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNp
bmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFy
Z2V0cy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM4LDQ0ICs0MCwyMyBAQCBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lCiAgICAgY29tcHV0ZSgpOwogfQogCi1zdGF0
aWMgaW50IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17
Ci0gICAgaWYgKCFjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgpOwotfQot
Ci1zdGF0aWMgaW50IGNhcHR1cmVTdGFydChDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBp
ZiAoIWNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCk7Ci19Ci0KLXN0YXRp
YyBpbnQgY2FwdHVyZUVuZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBpZiAoIWNvZGVC
bG9jay0+c3ltYm9sVGFibGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvZGVC
bG9jay0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOwotfQotCiBzdGF0aWMgYm9vbCBpc1Zh
bGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50IG9wZXJhbmQp
CiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWcob3BlcmFuZCk7CiAgICAgcmV0dXJu
ICFjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KG9wZXJhbmQpIC8vIERvbid0IGNh
cmUgYWJvdXQgY29uc3RhbnRzLgogICAgICAgICAmJiB2aXJ0dWFsUmVnLmlzTG9jYWwoKSAvLyBE
b24ndCBjYXJlIGFib3V0IGFyZ3VtZW50cy4KLSAgICAgICAgJiYgKCFudW1iZXJPZkNhcHR1cmVk
VmFyaWFibGVzKGNvZGVCbG9jaykgLy8gSWYgd2UgaGF2ZSBubyBjYXB0dXJlZCB2YXJpYWJsZXMs
IHdlJ3JlIGdvb2QgdG8gZ28uCi0gICAgICAgICAgICB8fCAodmlydHVhbFJlZy5vZmZzZXQoKSA+
IGNhcHR1cmVTdGFydChjb2RlQmxvY2spIHx8ICh2aXJ0dWFsUmVnLm9mZnNldCgpIDw9IGNhcHR1
cmVFbmQoY29kZUJsb2NrKSkpKTsKKyAgICAgICAgJiYgKCFjb2RlQmxvY2stPmNhcHR1cmVDb3Vu
dCgpIC8vIElmIHdlIGhhdmUgbm8gY2FwdHVyZWQgdmFyaWFibGVzLCB3ZSdyZSBnb29kIHRvIGdv
LgorICAgICAgICAgICAgfHwgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPiBjb2RlQmxvY2stPmNhcHR1
cmVTdGFydCgpIHx8ICh2aXJ0dWFsUmVnLm9mZnNldCgpIDw9IGNvZGVCbG9jay0+Y2FwdHVyZUVu
ZCgpKSkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRGb3JPcGVyYW5kKENvZGVCbG9jayogY29kZUJs
b2NrLCBGYXN0Qml0VmVjdG9yJiBiaXRzLCBpbnQgb3BlcmFuZCkKIHsKICAgICBBU1NFUlQoaXNW
YWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBvcGVyYW5kKSk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWcob3BlcmFuZCk7Ci0gICAgaWYgKHZpcnR1YWxSZWcub2Zmc2V0
KCkgPiBjYXB0dXJlU3RhcnQoY29kZUJsb2NrKSkKKyAgICBpZiAodmlydHVhbFJlZy5vZmZzZXQo
KSA+IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkpCiAgICAgICAgIGJpdHMuc2V0KHZpcnR1YWxS
ZWcudG9Mb2NhbCgpKTsKICAgICBlbHNlCi0gICAgICAgIGJpdHMuc2V0KHZpcnR1YWxSZWcudG9M
b2NhbCgpIC0gbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhjb2RlQmxvY2spKTsKKyAgICAgICAg
Yml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkgLSBjb2RlQmxvY2stPmNhcHR1cmVDb3VudCgp
KTsKIH0KIAogc3RhdGljIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldChDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHVz
ZXMpCkBAIC0zMDMsOCArMjg0LDggQEAgc3RhdGljIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29k
ZU9mZnNldAogICAgICAgICBpbnQgYmFzZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAg
ICAgICAgaW50IGNvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVn
aXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGJhc2UgKyBpKSkKLSAgICAgICAgICAgICAgICBz
ZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgYmFzZSArIGkpOworICAgICAgICAgICAgaWYg
KGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgYmFzZSAtIGkpKQorICAgICAg
ICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBiYXNlIC0gaSk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMxNSwxMSArMjk2LDExIEBAIHN0YXRp
YyB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQKICAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkK
ICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwogICAgICAgICBpbnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZDsKKyAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZDsKICAgICAgICAgaW50IGxhc3RBcmcgPSByZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6
dGhpc0FyZ3VtZW50T2Zmc2V0KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnQ291
bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNv
ZGVCbG9jaywgbGFzdEFyZyAtIGkpKQotICAgICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29k
ZUJsb2NrLCB1c2VzLCBsYXN0QXJnIC0gaSk7CisgICAgICAgIGZvciAoaW50IGkgPSBvcGNvZGVJ
RCA9PSBvcF9jb25zdHJ1Y3QgPyAxIDogMDsgaSA8IGFyZ0NvdW50OyBpKyspIHsKKyAgICAgICAg
ICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGxhc3RBcmcgKyBp
KSkKKyAgICAgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgbGFzdEFy
ZyArIGkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMzMsMTAgKzMx
NCw5IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQKICAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQotI2RlZmluZSBMTElOVF9IRUxQRVJfT1BDT0RF
UyhvcGNvZGUsIGxlbmd0aCkgY2FzZSBvcGNvZGU6Ci0gICAgRk9SX0VBQ0hfTExJTlRfT1BDT0RF
X0VYVEVOU0lPTihMTElOVF9IRUxQRVJfT1BDT0RFUykKLSAgICAgICAgcmV0dXJuOwotI3VuZGVm
IExMSU5UX0hFTFBFUl9PUENPREVTCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkBAIC00OTIsOCAr
NDcyLDcgQEAgc3RhdGljIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldAogICAgIGNh
c2Ugb3BfZW50ZXI6IHsKICAgICAgICAgZGVmcy5zZXRBbGwoKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICB9CisgICAgfSB9CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBnZXRMZWFkZXJPZmZz
ZXRGb3JCYXNpY0Jsb2NrKFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+KiBiYXNpY0Jsb2NrKQpA
QCAtNTQwLDEzICs1MTksMzIgQEAgc3RhdGljIEJ5dGVjb2RlQmFzaWNCbG9jayogZmluZEJhc2lj
QmxvYwogICAgIHJldHVybiBiYXNpY0Jsb2NrWzFdLmdldCgpOwogfQogCitzdGF0aWMgdm9pZCBz
dGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9jayogY29kZUJsb2NrLCBWZWN0b3I8UmVmUHRyPEJ5
dGVjb2RlQmFzaWNCbG9jaz4+JiBiYXNpY0Jsb2NrcywgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQs
IEZhc3RCaXRWZWN0b3ImIHVzZXMsIEZhc3RCaXRWZWN0b3ImIGRlZnMsIEZhc3RCaXRWZWN0b3Im
IG91dCkKK3sKKyAgICB1c2VzLmNsZWFyQWxsKCk7CisgICAgZGVmcy5jbGVhckFsbCgpOworICAg
IAorICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9m
ZnNldCwgdXNlcyk7CisgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ss
IGJ5dGVjb2RlT2Zmc2V0LCBkZWZzKTsKKyAgICAKKyAgICBvdXQuZXhjbHVkZShkZWZzKTsKKyAg
ICBvdXQubWVyZ2UodXNlcyk7CisgICAgCisgICAgLy8gSWYgd2UgaGF2ZSBhbiBleGNlcHRpb24g
aGFuZGxlciwgd2Ugd2FudCB0aGUgbGl2ZS1pbiB2YXJpYWJsZXMgb2YgdGhlIAorICAgIC8vIGV4
Y2VwdGlvbiBoYW5kbGVyIGJsb2NrIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBsaXZlLWluIG9mIHRo
aXMgcGFydGljdWxhciBieXRlY29kZS4KKyAgICBpZiAoSGFuZGxlckluZm8qIGhhbmRsZXIgPSBj
b2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkpIHsKKyAg
ICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBoYW5kbGVyQmxvY2sgPSBmaW5kQmFzaWNCbG9ja1dp
dGhMZWFkZXJPZmZzZXQoYmFzaWNCbG9ja3MsIGhhbmRsZXItPnRhcmdldCk7CisgICAgICAgIEFT
U0VSVChoYW5kbGVyQmxvY2spOworICAgICAgICBvdXQubWVyZ2UoaGFuZGxlckJsb2NrLT5pbigp
KTsKKyAgICB9Cit9CisKIHN0YXRpYyB2b2lkIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNv
ZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2ss
IFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiA+JiBiYXNpY0Jsb2NrcywgdW5zaWdu
ZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKCFi
bG9jay0+aXNFeGl0QmxvY2soKSk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNFbnRyeUJsb2NrKCkp
OwogCiAgICAgRmFzdEJpdFZlY3RvciBvdXQgPSBibG9jay0+b3V0KCk7Ci0gICAgSGFuZGxlcklu
Zm8qIGhhbmRsZXIgPSAwOwogCiAgICAgRmFzdEJpdFZlY3RvciB1c2VzOwogICAgIEZhc3RCaXRW
ZWN0b3IgZGVmczsKQEAgLTU1NywyMyArNTU1LDggQEAgc3RhdGljIHZvaWQgY29tcHV0ZUxvY2Fs
TGl2ZW5lc3NGb3JCeXRlYwogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2Nr
LT5ieXRlY29kZU9mZnNldHMoKVtpXTsKICAgICAgICAgaWYgKHRhcmdldE9mZnNldCA+IGJ5dGVj
b2RlT2Zmc2V0KQogICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgdXNlcy5jbGVhckFsbCgp
OwotICAgICAgICBkZWZzLmNsZWFyQWxsKCk7Ci0KLSAgICAgICAgY29tcHV0ZVVzZXNGb3JCeXRl
Y29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCB1c2VzKTsKLSAgICAgICAgY29t
cHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCBkZWZz
KTsKLQotICAgICAgICBvdXQuZXhjbHVkZShkZWZzKTsKLSAgICAgICAgb3V0Lm1lcmdlKHVzZXMp
OwotCi0gICAgICAgIC8vIElmIHdlIGhhdmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIHdlIHdhbnQg
dGhlIGxpdmUtaW4gdmFyaWFibGVzIG9mIHRoZSAKLSAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRs
ZXIgYmxvY2sgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGxpdmUtaW4gb2YgdGhpcyBwYXJ0aWN1bGFy
IGJ5dGVjb2RlLgotICAgICAgICBpZiAoKGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JC
eXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkpKSB7Ci0gICAgICAgICAgICBCeXRlY29kZUJh
c2ljQmxvY2sqIGhhbmRsZXJCbG9jayA9IGZpbmRCYXNpY0Jsb2NrV2l0aExlYWRlck9mZnNldChi
YXNpY0Jsb2NrcywgaGFuZGxlci0+dGFyZ2V0KTsKLSAgICAgICAgICAgIEFTU0VSVChoYW5kbGVy
QmxvY2spOwotICAgICAgICAgICAgb3V0Lm1lcmdlKGhhbmRsZXJCbG9jay0+aW4oKSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBi
YXNpY0Jsb2NrcywgYnl0ZWNvZGVPZmZzZXQsIHVzZXMsIGRlZnMsIG91dCk7CiAgICAgfQogCiAg
ICAgcmVzdWx0LnNldChvdXQpOwpAQCAtNTkwLDcgKzU3Myw3IEBAIHZvaWQgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpydW5MaXZlbmUKIHsKICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5r
ZWRDb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKICAgICB1bnNp
Z25lZCBudW1iZXJPZlZhcmlhYmxlcyA9IHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZhcnMgKyAK
LSAgICAgICAgdW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIC0gbnVtYmVy
T2ZDYXB0dXJlZFZhcmlhYmxlcyhtX2NvZGVCbG9jayk7CisgICAgICAgIHVubGlua2VkQ29kZUJs
b2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAtIG1fY29kZUJsb2NrLT5jYXB0dXJlQ291bnQoKTsK
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jhc2ljQmxvY2tzLnNpemUoKTsgaSsr
KSB7CiAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jhc2ljQmxvY2tzW2ld
LmdldCgpOwpAQCAtNjI5LDM2ICs2MTIsMzAgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXM6OmdldExpdmVuZQogCiBib29sIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6b3BlcmFuZElz
TGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9wZXJhbmQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
KQogewotICAgIGludCBudW1DYXB0dXJlZFZhcnMgPSBudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVz
KG1fY29kZUJsb2NrKTsKLSAgICBpZiAoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlzQXJndW1l
bnQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKG9wZXJhbmQgPD0gY2FwdHVyZVN0
YXJ0KG1fY29kZUJsb2NrKSAmJiBvcGVyYW5kID4gY2FwdHVyZUVuZChtX2NvZGVCbG9jaykpCisg
ICAgaWYgKG9wZXJhbmRJc0Fsd2F5c0xpdmUobV9jb2RlQmxvY2ssIG9wZXJhbmQpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICBGYXN0Qml0VmVjdG9yIHJlc3VsdDsKICAgICBnZXRMaXZlbmVz
c0luZm9Gb3JOb25DYXB0dXJlZFZhcnNBdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBy
ZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQuZ2V0KG9wZXJhbmQgLSBudW1DYXB0dXJlZFZhcnMp
OworICAgIHJldHVybiBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShtX2NvZGVCbG9j
aywgcmVzdWx0LCBvcGVyYW5kKTsKIH0KIAotRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpCitGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mbyhDb2RlQmxvY2sqIGNvZGVC
bG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0KQogewotICAgIEZhc3RCaXRWZWN0b3IgdGVt
cDsKICAgICBGYXN0Qml0VmVjdG9yIHJlc3VsdDsKIAotICAgIGdldExpdmVuZXNzSW5mb0Zvck5v
bkNhcHR1cmVkVmFyc0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIHRlbXApOwotCi0g
ICAgdW5zaWduZWQgbnVtQ2FwdHVyZWRWYXJzID0gbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyht
X2NvZGVCbG9jayk7CisgICAgdW5zaWduZWQgbnVtQ2FwdHVyZWRWYXJzID0gY29kZUJsb2NrLT5j
YXB0dXJlQ291bnQoKTsKICAgICBpZiAobnVtQ2FwdHVyZWRWYXJzKSB7Ci0gICAgICAgIGludCBm
aXJzdENhcHR1cmVkTG9jYWwgPSBWaXJ0dWFsUmVnaXN0ZXIoY2FwdHVyZVN0YXJ0KG1fY29kZUJs
b2NrKSkudG9Mb2NhbCgpOwotICAgICAgICByZXN1bHQucmVzaXplKHRlbXAubnVtQml0cygpICsg
bnVtQ2FwdHVyZWRWYXJzKTsKKyAgICAgICAgaW50IGZpcnN0Q2FwdHVyZWRMb2NhbCA9IFZpcnR1
YWxSZWdpc3Rlcihjb2RlQmxvY2stPmNhcHR1cmVTdGFydCgpKS50b0xvY2FsKCk7CisgICAgICAg
IHJlc3VsdC5yZXNpemUob3V0Lm51bUJpdHMoKSArIG51bUNhcHR1cmVkVmFycyk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1DYXB0dXJlZFZhcnM7ICsraSkKICAgICAgICAg
ICAgIHJlc3VsdC5zZXQoZmlyc3RDYXB0dXJlZExvY2FsICsgaSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIHJlc3VsdC5yZXNpemUodGVtcC5udW1CaXRzKCkpOworICAgICAgICByZXN1bHQucmVzaXpl
KG91dC5udW1CaXRzKCkpOwogCi0gICAgaW50IHRlbXBMZW5ndGggPSB0ZW1wLm51bUJpdHMoKTsK
LSAgICBBU1NFUlQodGVtcExlbmd0aCA+PSAwKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRl
bXBMZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoIXRlbXAuZ2V0KGkpKQorICAgIGludCBvdXRM
ZW5ndGggPSBvdXQubnVtQml0cygpOworICAgIEFTU0VSVChvdXRMZW5ndGggPj0gMCk7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBvdXRMZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoIW91dC5n
ZXQoaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAoIW51bUNhcHR1cmVk
VmFycykgewpAQCAtNjY2LDcgKzY0Myw3IEBAIEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzOjoKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLm9mZnNldCgpID4gY2FwdHVyZVN0YXJ0KG1f
Y29kZUJsb2NrKSkKKyAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLm9mZnNl
dCgpID4gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSkKICAgICAgICAgICAgIHJlc3VsdC5zZXQo
aSk7CiAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICByZXN1bHQuc2V0KG51bUNhcHR1cmVkVmFy
cyArIGkpOwpAQCAtNjc0LDYgKzY1MSwzOSBAQCBGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpczo6CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorRmFzdEJpdFZlY3RvciBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgRmFzdEJpdFZlY3RvciBvdXQ7CisgICAgZ2V0
TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldChieXRlY29kZU9m
ZnNldCwgb3V0KTsKKyAgICByZXR1cm4gZ2V0TGl2ZW5lc3NJbmZvKG1fY29kZUJsb2NrLCBvdXQp
OworfQorCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZUZ1bGxMaXZlbmVz
cyhGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgcmVzdWx0KQoreworICAgIEZhc3RCaXRWZWN0b3Igb3V0
OworICAgIEZhc3RCaXRWZWN0b3IgdXNlczsKKyAgICBGYXN0Qml0VmVjdG9yIGRlZnM7CisgICAg
CisgICAgcmVzdWx0Lm1fY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CisgICAgcmVzdWx0Lm1fbWFw
LmNsZWFyKCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9iYXNpY0Jsb2Nrcy5zaXpl
KCk7IGktLTspIHsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmFzaWNC
bG9ja3NbaV0uZ2V0KCk7CisgICAgICAgIGlmIChibG9jay0+aXNFbnRyeUJsb2NrKCkgfHwgYmxv
Y2stPmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAg
ICAgIG91dCA9IGJsb2NrLT5vdXQoKTsKKyAgICAgICAgdXNlcy5yZXNpemUob3V0Lm51bUJpdHMo
KSk7CisgICAgICAgIGRlZnMucmVzaXplKG91dC5udW1CaXRzKCkpOworICAgICAgICAKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0cygpLnNpemUoKTsgaS0t
OykgeworICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+Ynl0ZWNv
ZGVPZmZzZXRzKClbaV07CisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKG1fY29kZUJs
b2NrLCBtX2Jhc2ljQmxvY2tzLCBieXRlY29kZU9mZnNldCwgdXNlcywgZGVmcywgb3V0KTsKKyAg
ICAgICAgICAgIHJlc3VsdC5tX21hcC5hZGQoYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0
cygpCiB7CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9jb2RlQmxvY2stPnZtKCkt
PmludGVycHJldGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAkocmV2aXNpb24gMTU5MzUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyArMzQsMTYgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBGdWxsQnl0ZWNvZGVMaXZlbmVzczsKIAogY2xhc3Mg
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIHsKIHB1YmxpYzoKICAgICBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMoQ29kZUJsb2NrKik7Ci0KKyAgICAKICAgICBib29sIG9wZXJhbmRJc0xpdmVBdEJ5
dGVjb2RlT2Zmc2V0KGludCBvcGVyYW5kLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAg
RmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KTsKKyAgICAKKyAgICB2b2lkIGNvbXB1dGVGdWxsTGl2ZW5lc3MoRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MmIHJlc3VsdCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjb21wdXRlKCk7
CkBAIC01Myw2ICs1NiwxMiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVC
YXNpY0Jsb2NrPiA+IG1fYmFzaWNCbG9ja3M7CiB9OwogCitpbmxpbmUgYm9vbCBvcGVyYW5kSXNB
bHdheXNMaXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBpbnQgb3BlcmFuZCk7CitpbmxpbmUgYm9v
bCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Y29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CitpbmxpbmUgYm9vbCBvcGVy
YW5kSXNMaXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQs
IGludCBvcGVyYW5kKTsKKworRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm8oQ29kZUJsb2Nr
KiwgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXNJbmxpbmVzX2gKKyNkZWZpbmUgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lc19o
CisKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5
c0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGludCBvcGVyYW5kKQoreworICAgIGlmIChWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNBcmd1bWVudCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gb3BlcmFuZCA8PSBjb2RlQmxvY2stPmNhcHR1cmVTdGFydCgpICYmIG9wZXJh
bmQgPiBjb2RlQmxvY2stPmNhcHR1cmVFbmQoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmFuZFRo
YXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZhc3RC
aXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpCit7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWcob3BlcmFuZCk7CisgICAgaWYgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPiBjb2RlQmxvY2st
PmNhcHR1cmVTdGFydCgpKQorICAgICAgICByZXR1cm4gb3V0LmdldCh2aXJ0dWFsUmVnLnRvTG9j
YWwoKSk7CisgICAgc2l6ZV90IGluZGV4ID0gdmlydHVhbFJlZy50b0xvY2FsKCkgLSBjb2RlQmxv
Y2stPmNhcHR1cmVDb3VudCgpOworICAgIGlmIChpbmRleCA+PSBvdXQubnVtQml0cygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG91dC5nZXQoaW5kZXgpOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYW5kSXNMaXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0
VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoreworICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNM
aXZlKGNvZGVCbG9jaywgb3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xp
dmUoY29kZUJsb2NrLCBvdXQsIG9wZXJhbmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTkzNTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1NCw2ICszNTQsMjcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJu
IG1fbmVlZHNBY3RpdmF0aW9uOwogICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBjYXB0dXJlQ291
bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291bnQo
KTsKKyAgICB9CisgICAgCisgICAgaW50IGNhcHR1cmVTdGFydCgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoIXN5bWJvbFRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpOworICAgIH0KKyAgICAKKyAgICBp
bnQgY2FwdHVyZUVuZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIXN5bWJvbFRhYmxlKCkp
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlKCktPmNh
cHR1cmVFbmQoKTsKKyAgICB9CiAKICAgICBib29sIGlzQ2FwdHVyZWQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIElubGluZUNhbGxGcmFtZSogPSAwKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDE1
OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgSW5saW5lQ2FsbEZyYW1lOjpk
dW1wSW5Db250ZXh0KFByaW4KICAgICBlbHNlCiAgICAgICAgIG91dC5wcmludCgiLCBrbm93biBj
YWxsZWU6ICIsIGluQ29udGV4dChjYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLCBjb250ZXh0KSk7
CiAgICAgb3V0LnByaW50KCIsIG51bUFyZ3MrdGhpcyA9ICIsIGFyZ3VtZW50cy5zaXplKCkpOwot
ICAgIG91dC5wcmludCgiLCBzdGFjayA+PSByIiwgc3RhY2tPZmZzZXQpOworICAgIG91dC5wcmlu
dCgiLCBzdGFjayA8IGxvYyIsIFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCkudG9Mb2NhbCgp
KTsKICAgICBvdXQucHJpbnQoIj4iKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBG
dWxsQnl0ZWNvZGVMaXZlbmVzc19oCisjZGVmaW5lIEZ1bGxCeXRlY29kZUxpdmVuZXNzX2gKKwor
I2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CisKK3R5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwg
RmFzdEJpdFZlY3RvciwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4gPiBCeXRlY29kZVRvQml0bWFwTWFwOworCitjbGFz
cyBGdWxsQnl0ZWNvZGVMaXZlbmVzcyB7CitwdWJsaWM6CisgICAgRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MoKSA6IG1fY29kZUJsb2NrKDApIHsgfQorICAgIAorICAgIC8vIFdlIHNheSAib3V0IiB0byBy
ZWZlciB0byB0aGUgYml0dmVjdG9yIHRoYXQgY29udGFpbnMgcmF3IHJlc3VsdHMgZm9yIGEgYnl0
ZWNvZGUKKyAgICAvLyBpbnN0cnVjdGlvbi4KKyAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBnZXRP
dXQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEJ5dGVjb2Rl
VG9CaXRtYXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKGJ5dGVjb2RlSW5k
ZXgpOworICAgICAgICBBU1NFUlQoaXRlciAhPSBtX21hcC5lbmQoKSk7CisgICAgICAgIHJldHVy
biBpdGVyLT52YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYW5kSXNMaXZlKGludCBv
cGVyYW5kLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUobV9jb2RlQmxvY2ssIG9wZXJhbmQpIHx8IG9wZXJhbmRU
aGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKG1fY29kZUJsb2NrLCBnZXRPdXQoYnl0ZWNvZGVJbmRl
eCksIG9wZXJhbmQpOworICAgIH0KKyAgICAKKyAgICBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNz
KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZ2V0
TGl2ZW5lc3NJbmZvKG1fY29kZUJsb2NrLCBnZXRPdXQoYnl0ZWNvZGVJbmRleCkpOworICAgIH0K
KyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
czsKKyAgICAKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIEJ5dGVjb2RlVG9CaXRt
YXBNYXAgbV9tYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEZ1bGxC
eXRlY29kZUxpdmVuZXNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
dmFpbGFiaWxpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXZhaWxhYmlsaXR5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXZhaWxhYmlsaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHkuaCIKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK3ZvaWQgQXZhaWxhYmlsaXR5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KG1fZmx1c2hlZEF0LCAiLyIpOworICAgIAorICAgIGlmIChu
b2RlSXNVbmRlY2lkZWQoKSkgeworICAgICAgICBvdXQucHJpbnQoIlVuZGVjaWRlZCIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChub2RlSXNVbmF2YWlsYWJsZSgpKSB7
CisgICAgICAgIG91dC5wcmludCgiVW5hdmFpbGFibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBvdXQucHJpbnQobm9kZSgpKTsKK30KKwordm9pZCBBdmFpbGFiaWxpdHk6
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqKSBjb25zdAorewor
ICAgIGR1bXAob3V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXZhaWxhYmlsaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXZhaWxhYmlsaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdB
dmFpbGFiaWxpdHlfaAorI2RlZmluZSBERkdBdmFpbGFiaWxpdHlfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdGbHVzaGVkQXQuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1
Y3QgTm9kZTsKKworY2xhc3MgQXZhaWxhYmlsaXR5IHsKK3B1YmxpYzoKKyAgICBBdmFpbGFiaWxp
dHkoKQorICAgICAgICA6IG1fbm9kZSgwKQorICAgICAgICAsIG1fZmx1c2hlZEF0KERlYWRGbHVz
aCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEF2YWlsYWJpbGl0eShOb2RlKiBu
b2RlKQorICAgICAgICA6IG1fbm9kZShub2RlKQorICAgICAgICAsIG1fZmx1c2hlZEF0KENvbmZs
aWN0aW5nRmx1c2gpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBBdmFpbGFiaWxp
dHkoRmx1c2hlZEF0IGZsdXNoZWRBdCkKKyAgICAgICAgOiBtX25vZGUodW5hdmFpbGFibGVNYXJr
ZXIoKSkKKyAgICAgICAgLCBtX2ZsdXNoZWRBdChmbHVzaGVkQXQpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBBdmFpbGFiaWxpdHkoTm9kZSogbm9kZSwgRmx1c2hlZEF0IGZsdXNoZWRBdCkKKyAg
ICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAgICAgLCBtX2ZsdXNoZWRBdChmbHVzaGVkQXQpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgQXZhaWxhYmlsaXR5IHVuYXZhaWxhYmxlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBBdmFpbGFiaWxpdHkodW5hdmFpbGFibGVNYXJrZXIoKSwg
Rmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKKyAgICB9CisgICAgCisgICAgQXZhaWxhYmls
aXR5IHdpdGhGbHVzaChGbHVzaGVkQXQgZmx1c2gpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gQXZhaWxhYmlsaXR5KG1fbm9kZSwgZmx1c2gpOworICAgIH0KKyAgICAKKyAgICBBdmFpbGFi
aWxpdHkgd2l0aE5vZGUoTm9kZSogbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBB
dmFpbGFiaWxpdHkobm9kZSwgbV9mbHVzaGVkQXQpOworICAgIH0KKyAgICAKKyAgICBBdmFpbGFi
aWxpdHkgd2l0aFVuYXZhaWxhYmxlTm9kZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
d2l0aE5vZGUodW5hdmFpbGFibGVNYXJrZXIoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbm9k
ZUlzVW5kZWNpZGVkKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlID09IDA7IH0KKyAgICBib29sIG5v
ZGVJc1VuYXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlID09IHVuYXZhaWxhYmxlTWFy
a2VyKCk7IH0KKyAgICAKKyAgICBib29sIGhhc05vZGUoKSBjb25zdCB7IHJldHVybiAhbm9kZUlz
VW5kZWNpZGVkKCkgJiYgIW5vZGVJc1VuYXZhaWxhYmxlKCk7IH0KKyAgICAKKyAgICBOb2RlKiBu
b2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghbm9kZUlzVW5kZWNpZGVkKCkpOwor
ICAgICAgICBBU1NFUlQoIW5vZGVJc1VuYXZhaWxhYmxlKCkpOworICAgICAgICByZXR1cm4gbV9u
b2RlOworICAgIH0KKyAgICAKKyAgICBGbHVzaGVkQXQgZmx1c2hlZEF0KCkgY29uc3QgeyByZXR1
cm4gbV9mbHVzaGVkQXQ7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuIG5vZGVJc1VuYXZhaWxhYmxlKCkgJiYgZmx1c2hlZEF0KCkuZm9ybWF0KCkgPT0gQ29uZmxp
Y3RpbmdGbHVzaDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0eSYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ub2RlID09IG90aGVyLm1fbm9k
ZQorICAgICAgICAgICAgJiYgbV9mbHVzaGVkQXQgPT0gb3RoZXIubV9mbHVzaGVkQXQ7CisgICAg
fQorICAgIAorICAgIEF2YWlsYWJpbGl0eSBtZXJnZShjb25zdCBBdmFpbGFiaWxpdHkmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eSgKKyAgICAgICAgICAg
IG1lcmdlTm9kZXMobV9ub2RlLCBvdGhlci5tX25vZGUpLAorICAgICAgICAgICAgbV9mbHVzaGVk
QXQubWVyZ2Uob3RoZXIubV9mbHVzaGVkQXQpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiwgRHVtcENvbnRleHQqKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgTm9kZSogbWVy
Z2VOb2RlcyhOb2RlKiBhLCBOb2RlKiBiKQorICAgIHsKKyAgICAgICAgaWYgKCFhKQorICAgICAg
ICAgICAgcmV0dXJuIGI7CisgICAgICAgIGlmICghYikKKyAgICAgICAgICAgIHJldHVybiBhOwor
ICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgIHJldHVy
biB1bmF2YWlsYWJsZU1hcmtlcigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgTm9kZSogdW5h
dmFpbGFibGVNYXJrZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxOb2Rl
Kj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEpKTsKKyAgICB9CisgICAgCisgICAgTm9kZSogbV9u
b2RlOworICAgIEZsdXNoZWRBdCBtX2ZsdXNoZWRBdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQXZh
aWxhYmlsaXR5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAiREZH
QXZhaWxhYmlsaXR5LmgiCiAjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiREZHRmx1c2hlZEF0LmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgpAQCAtMTQwLDggKzE0MSw4
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICBzdHJ1Y3Qg
U1NBRGF0YSB7CiAgICAgICAgIE9wZXJhbmRzPEZsdXNoZWRBdD4gZmx1c2hBdEhlYWQ7CiAgICAg
ICAgIE9wZXJhbmRzPEZsdXNoZWRBdD4gZmx1c2hBdFRhaWw7Ci0gICAgICAgIE9wZXJhbmRzPE5v
ZGUqPiBhdmFpbGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgIE9wZXJhbmRzPE5vZGUqPiBhdmFpbGFi
aWxpdHlBdFRhaWw7CisgICAgICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5
QXRIZWFkOworICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0VGFp
bDsKICAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKICAgICAgICAgSGFzaFNldDxO
b2RlKj4gbGl2ZUF0VGFpbDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4g
dmFsdWVzQXRIZWFkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQzLDYg
KzEyNDMsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoY2FsbExpbmtTdGF0dXMuZXhlY3V0YWJsZSgpLT5p
c0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHRydWUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2FsbExpbmtTdGF0dXMuZXhlY3V0
YWJsZSgpKTsKICAgICAKQEAgLTMwNzMsNiArMzA3NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRo
U3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXMuc3RydWN0dXJlU2V0KCkuc2luZ2xl
dG9uU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0
KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSBz
cGVjaWZpY1ZhbHVlID0gc3RhdHVzLnNwZWNpZmljVmFsdWUoKSkKICAgICAgICAgICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBjZWxsQ29uc3RhbnQoc3BlY2lmaWNWYWx1ZS5h
c0NlbGwoKSkpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTMwODEsNiArMzA4NCw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9t
LCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIFN5bWJvbFRh
YmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldCh1aWQpOwog
ICAgICAgICAgICAgICAgIGlmICghZW50cnkuY291bGRCZVdhdGNoZWQoKSB8fCAhbV9ncmFwaC53
YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChlbnRyeS53YXRjaHBvaW50U2V0KCkpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRH
bG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CkBAIC0zMTMx
LDYgKzMxMzUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBOb2RlKiBiYXNlID0gY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKGdsb2JhbE9i
amVjdCwgc3RhdHVzLm9sZFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAgICAgICAgICAgICAgICAg
aGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgc3RhdGljX2Nhc3Q8UHJv
cGVydHlPZmZzZXQ+KG9wZXJhbmQpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSkpOwogICAg
ICAgICAgICAgICAgIC8vIEtlZXAgc2NvcGUgYWxpdmUgdW50aWwgYWZ0ZXIgcHV0LgogICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkp
KTsKQEAgLTMxMzgsNiArMzE0Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAg
ICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkp
OwogICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3Qt
PnN5bWJvbFRhYmxlKCktPmdldCh1aWQpOwogICAgICAgICAgICAgICAgIEFTU0VSVCghZW50cnku
Y291bGRCZVdhdGNoZWQoKSB8fCAhbV9ncmFwaC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChl
bnRyeS53YXRjaHBvaW50U2V0KCkpKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEds
b2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAko
cmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3Nl
bWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIERpc2Fzc2VtYmxlcjo6RGlzYXNzZW1ibGVyKEdyYXBoJiBncmFw
aCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgpCiB7CisgICAgbV9kdW1wQ29udGV4dC5ncmFwaCA9ICZt
X2dyYXBoOwogICAgIG1fbGFiZWxGb3JCbG9ja0luZGV4LnJlc2l6ZShncmFwaC5udW1CbG9ja3Mo
KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3Jt
YXQuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZsdXNoRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsOSBAQCB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRmx1CiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1
ZToKICAgICAgICAgb3V0LnByaW50KCJGbHVzaGVkSlNWYWx1ZSIpOwogICAgICAgICByZXR1cm47
CisgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgorICAgICAgICBvdXQucHJpbnQoIkNvbmZsaWN0
aW5nRmx1c2giKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVz
aEZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1
c2hGb3JtYXQuaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGbHVzaEZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw4IEBAIGVudW0g
Rmx1c2hGb3JtYXQgewogICAgIEZsdXNoZWREb3VibGUsCiAgICAgRmx1c2hlZENlbGwsCiAgICAg
Rmx1c2hlZEJvb2xlYW4sCi0gICAgRmx1c2hlZEpTVmFsdWUKKyAgICBGbHVzaGVkSlNWYWx1ZSwK
KyAgICBDb25mbGljdGluZ0ZsdXNoCiB9OwogCiBpbmxpbmUgTm9kZUZsYWdzIHJlc3VsdEZvcihG
bHVzaEZvcm1hdCBmb3JtYXQpCkBAIC01NCw2ICs1NSw3IEBAIGlubGluZSBOb2RlRmxhZ3MgcmVz
dWx0Rm9yKEZsdXNoRm9ybWF0IGYKICAgICBjYXNlIERlYWRGbHVzaDoKICAgICBjYXNlIEZsdXNo
ZWRKU1ZhbHVlOgogICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgY2FzZSBDb25mbGljdGluZ0Zs
dXNoOgogICAgICAgICByZXR1cm4gTm9kZVJlc3VsdEpTOwogICAgIGNhc2UgRmx1c2hlZEludDMy
OgogICAgICAgICByZXR1cm4gTm9kZVJlc3VsdEludDMyOwpAQCAtNzMsNiArNzUsNyBAQCBpbmxp
bmUgVXNlS2luZCB1c2VLaW5kRm9yKEZsdXNoRm9ybWF0IGZvCiAgICAgc3dpdGNoIChmb3JtYXQp
IHsKICAgICBjYXNlIERlYWRGbHVzaDoKICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgIGNh
c2UgQ29uZmxpY3RpbmdGbHVzaDoKICAgICAgICAgcmV0dXJuIFVudHlwZWRVc2U7CiAgICAgY2Fz
ZSBGbHVzaGVkQ2VsbDoKICAgICAgICAgcmV0dXJuIENlbGxVc2U7CkBAIC05Myw2ICs5Niw3IEBA
IGlubGluZSBEYXRhRm9ybWF0IGRhdGFGb3JtYXRGb3IoRmx1c2hGb3IKIHsKICAgICBzd2l0Y2gg
KGZvcm1hdCkgewogICAgIGNhc2UgRGVhZEZsdXNoOgorICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVz
aDoKICAgICAgICAgcmV0dXJuIERhdGFGb3JtYXREZWFkOwogICAgIGNhc2UgRmx1c2hlZEpTVmFs
dWU6CiAgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SlM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEZsdXNo
ZWRBdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIGlmIChtX2Zvcm1hdCA9
PSBEZWFkRmx1c2gpCisgICAgaWYgKG1fZm9ybWF0ID09IERlYWRGbHVzaCB8fCBtX2Zvcm1hdCA9
PSBDb25mbGljdGluZ0ZsdXNoKQogICAgICAgICBvdXQucHJpbnQobV9mb3JtYXQpOwogICAgIGVs
c2UKICAgICAgICAgb3V0LnByaW50KCJyIiwgbV92aXJ0dWFsUmVnaXN0ZXIsICI6IiwgbV9mb3Jt
YXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5oCShyZXZp
c2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0K
ICAgICAKKyAgICBleHBsaWNpdCBGbHVzaGVkQXQoRmx1c2hGb3JtYXQgZm9ybWF0KQorICAgICAg
ICA6IG1fZm9ybWF0KGZvcm1hdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGVh
ZEZsdXNoIHx8IGZvcm1hdCA9PSBDb25mbGljdGluZ0ZsdXNoKTsKKyAgICB9CisgICAgCiAgICAg
Rmx1c2hlZEF0KEZsdXNoRm9ybWF0IGZvcm1hdCwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlcikKICAgICAgICAgOiBtX2Zvcm1hdChmb3JtYXQpCiAgICAgICAgICwgbV92aXJ0dWFsUmVn
aXN0ZXIodmlydHVhbFJlZ2lzdGVyKQpAQCAtNjUsNiArNzEsMTcgQEAgcHVibGljOgogICAgIAog
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbHVzaGVkQXQmIG90aGVyKSBjb25zdCB7IHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsgfQogICAgIAorICAgIEZsdXNoZWRBdCBtZXJnZShjb25zdCBG
bHVzaGVkQXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcykKKyAgICAg
ICAgICAgIHJldHVybiBvdGhlcjsKKyAgICAgICAgaWYgKCFvdGhlcikKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgaWYgKCp0aGlzID09IG90aGVyKQorICAgICAgICAgICAgcmV0
dXJuICp0aGlzOworICAgICAgICByZXR1cm4gRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpOwor
ICAgIH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lk
IGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE1OTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZH
R3JhcGguaCIKIAorI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCIK
ICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5o
IgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKQEAgLTM5Myw2ICszOTQsNyBAQCB2b2lkIEdy
YXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiB2b2lkIEdyYXBoOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KQogewogICAgIER1bXBDb250ZXh0IG15
Q29udGV4dDsKKyAgICBteUNvbnRleHQuZ3JhcGggPSB0aGlzOwogICAgIGlmICghY29udGV4dCkK
ICAgICAgICAgY29udGV4dCA9ICZteUNvbnRleHQ7CiAgICAgCkBAIC02NDMsNiArNjQ1LDU5IEBA
IHZvaWQgR3JhcGg6OmluaXRpYWxpemVOb2RlT3duZXJzKCkKICAgICAgICAgICAgIGJsb2NrLT5h
dChub2RlSW5kZXgpLT5taXNjLm93bmVyID0gYmxvY2s7CiAgICAgfQogfQorCitGdWxsQnl0ZWNv
ZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQorewor
ICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVu
ZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2sp
OworICAgIGlmIChpdGVyICE9IG1fYnl0ZWNvZGVMaXZlbmVzcy5lbmQoKSkKKyAgICAgICAgcmV0
dXJuICppdGVyLT52YWx1ZTsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2Rl
TGl2ZW5lc3M+IGxpdmVuZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxGdWxsQnl0ZWNvZGVMaXZlbmVz
cz4oKTsKKyAgICBjb2RlQmxvY2stPmxpdmVuZXNzQW5hbHlzaXMoKS5jb21wdXRlRnVsbExpdmVu
ZXNzKCpsaXZlbmVzcyk7CisgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIHJlc3VsdCA9ICpsaXZl
bmVzczsKKyAgICBtX2J5dGVjb2RlTGl2ZW5lc3MuYWRkKGNvZGVCbG9jaywgc3RkOjptb3ZlKGxp
dmVuZXNzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mm
IEdyYXBoOjpsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKK3sK
KyAgICByZXR1cm4gbGl2ZW5lc3NGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZy
YW1lKSk7Cit9CisKK2Jvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBmb3IgKDs7KSB7CisgICAg
ICAgIGlmIChvcGVyYW5kLm9mZnNldCgpIDwgY29kZU9yaWdpbi5zdGFja09mZnNldCgpICsgSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9IFZpcnR1YWxSZWdpc3RlcigKKyAgICAgICAgICAgICAgICBvcGVyYW5kLm9mZnNldCgp
IC0gY29kZU9yaWdpbi5zdGFja09mZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKHJlZy5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVnLm9mZnNldCgp
ID49IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocmVn
Lm9mZnNldCgpID09IEpTU3RhY2s6OkNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKHJlZy5vZmZzZXQoKSA9PSBKU1N0YWNrOjpTY29w
ZUNoYWluKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHJldHVybiBsaXZlbmVzc0Zvcihjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkub3BlcmFuZElzTGl2ZSgKKyAgICAgICAgICAgICAgICByZWcub2Zmc2V0KCksIGNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
ICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgICAgIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVyOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KICAgICAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiREZHTm9kZUFsbG9j
YXRvci5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJERkdWYXJpYWRpY0Z1bmN0
aW9uLmgiCisjaW5jbHVkZSAiRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJJbmxp
bmVDYWxsRnJhbWVTZXQuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAiTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtNDE2LDYgKzQxNywxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBleGVjdXRhYmxlRm9yKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
ICAgICB9CiAgICAgCisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcihJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIGlmICghaW5saW5lQ2Fs
bEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9jazsKKyAgICAgICAgcmV0
dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7
CisgICAgfQorICAgIAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29uc3Qg
Q29kZU9yaWdpbiYgY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIHJldHVybiBiYXNlbGluZUNv
ZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIG1fcHJvZmls
ZWRCbG9jayk7CkBAIC03NzYsNiArNzg0LDEwIEBAIHB1YmxpYzoKICAgICBEZXNpcmVkV2F0Y2hw
b2ludHMmIHdhdGNocG9pbnRzKCkgeyByZXR1cm4gbV9wbGFuLndhdGNocG9pbnRzOyB9CiAgICAg
RGVzaXJlZFN0cnVjdHVyZUNoYWlucyYgY2hhaW5zKCkgeyByZXR1cm4gbV9wbGFuLmNoYWluczsg
fQogICAgIAorICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sq
IGNvZGVCbG9jayk7CisgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKTsKKyAgICBib29sIGlzTGl2ZUluQnl0ZWNvZGUo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbik7CisgICAgCiAg
ICAgVk0mIG1fdm07CiAgICAgUGxhbiYgbV9wbGFuOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxv
Y2s7CkBAIC03OTcsNiArODA5LDcgQEAgcHVibGljOgogICAgIFNlZ21lbnRlZFZlY3RvcjxTd2l0
Y2hEYXRhLCA0PiBtX3N3aXRjaERhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwg
ND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgT3duUHRyPElubGluZUNhbGxGcmFtZVNldD4g
bV9pbmxpbmVDYWxsRnJhbWVzOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVf
cHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIGJvb2wg
bV9oYXNBcmd1bWVudHM7CiAgICAgSGFzaFNldDxFeGVjdXRhYmxlQmFzZSo+IG1fZXhlY3V0YWJs
ZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQ7CiAgICAgQml0VmVjdG9yIG1fbGF6eVZhcnM7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDc3ICs0Nyw5NiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBB
U1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKICAgICAgICAgCi0gICAgICAgIFZlY3RvcjxC
YXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRo
Rmlyc3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYmxv
Y2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmZpbGwoQXZhaWxhYmlsaXR5KCkpOworICAgICAg
ICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLmZpbGwoQXZhaWxhYmlsaXR5KCkp
OworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGVwdGhGaXJzdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBkZXB0aEZpcnN0W2ldOwotICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkLmZpbGwoMCk7Ci0gICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwu
ZmlsbCgwKTsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGguYmxvY2soMCk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0
SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykgeworICAgICAgICAgICAgcm9v
dC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpID0KKyAgICAgICAg
ICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkud2l0aEZsdXNoKAorICAgICAgICAg
ICAgICAgICAgICBGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGFyZ3VtZW50KSkpOwogICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgbG9j
YWwgPSByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5udW1iZXJPZkxvY2FscygpOyBsb2Nh
bC0tOykKKyAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmxvY2FsKGxv
Y2FsKSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKICAgICAgICAgCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGRlcHRoRmlyc3RbaV07Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIFdlIGVkaXQgYXZhaWxhYmlsaXR5QXRUYWlsIGluLXBsYWNlLCBidXQgZmly
c3QgaW5pdGlhbGl6ZSBpdCB0bwotICAgICAgICAgICAgLy8gYXZhaWxhYmlsaXR5QXRIZWFkLgot
ICAgICAgICAgICAgT3BlcmFuZHM8Tm9kZSo+JiBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5h
dmFpbGFiaWxpdHlBdFRhaWw7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3Nh
LT5hdmFpbGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5k
ZXgpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7
Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgYXZhaWxh
YmlsaXR5Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgICAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3VtZW50OiB7Ci0gICAgICAgICAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIGlmIChtX2dyYXBoLm1fcGxhbi5tb2RlID09
IEZUTEZvck9TUkVudHJ5TW9kZSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9
IG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsgbG9jYWwtLTsp
IHsKKyAgICAgICAgICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChs
b2NhbCkgPQorICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCku
d2l0aEZsdXNoKAorICAgICAgICAgICAgICAgICAgICAgICAgRmx1c2hlZEF0KEZsdXNoZWRKU1Zh
bHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbCkpKTsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgZWZm
aWNpZW50IGJ5IHByb2Nlc3NpbmcgYmxvY2tzIGluIHJldmVyc2UgcG9zdG9yZGVyLgorICAgICAg
ICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eTsKKyAgICAgICAgYm9vbCBjaGFu
Z2VkOworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5udW1TdWNjZXNzb3Jz
KCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9j
ay0+c3VjY2Vzc29yKGopOwotICAgICAgICAgICAgICAgIE9wZXJhbmRzPE5vZGUqPiYgc3VjY2Vz
c29yQXZhaWxhYmlsaXR5ID0gc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKLSAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSBhdmFpbGFiaWxpdHkuc2l6ZSgpOyBrLS07
KSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG15Tm9kZSA9IGF2YWlsYWJpbGl0eVtrXTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFteU5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlm
ICghc3VjY2Vzc29yLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMobXlOb2RlKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IG92ZXJ3cml0ZSBhdmFpbGFiaWxpdHkg
d2l0aCBhIGJvZ3VzIG5vZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gYXQgbWVyZ2UgcG9pbnRz
LiBUaGlzIGlzIGZpbmUsIHNpbmNlIG1lcmdlIHBvaW50cyBoYXZlCi0gICAgICAgICAgICAgICAg
ICAgIC8vIE1vdkhpbnQoUGhpKSdzIHRvIHdvcmsgYXJvdW5kIHRoaXMuIFRoZSBvdXRjb21lIG9m
IHRoaXMgaXMKLSAgICAgICAgICAgICAgICAgICAgLy8geW91IG1pZ2h0IGhhdmUgYSBwcm9ncmFt
IGluIHdoaWNoIGEgbm9kZSBoYXBwZW5zIHRvIHJlbWFpbgotICAgICAgICAgICAgICAgICAgICAv
LyBsaXZlIGludG8gc29tZSBibG9jayBCLCBhbmQgc2VwYXJhdGVseSAoZHVlIHRvIGNvcHkKLSAg
ICAgICAgICAgICAgICAgICAgLy8gcHJvcGFnYXRpb24pIGp1c3Qgb25lIG9mIHRoZSBwcmVkZWNl
c3NvcnMgb2YgQiBpc3N1ZWQgYQotICAgICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50IHB1dHRp
bmcgdGhhdCBub2RlIGludG8gc29tZSBsb2NhbC4gVGhlbiBpbiBCIHdlIG1pZ2h0Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIHRoaW5rIHRoYXQgdGhhdCBub2RlIGlzIGEgdmFsaWQgdmFsdWUgZm9y
IHRoYXQgbG9jYWwuIE9mCi0gICAgICAgICAgICAgICAgICAgIC8vIGNvdXJzZSBpZiB0aGF0IGxv
Y2FsIHdhcyBhY3R1YWxseSBsaXZlIGluIEIsIEIgd291bGQgaGF2ZSBhCi0gICAgICAgICAgICAg
ICAgICAgIC8vIFBoaSBmb3IgaXQuIFNvIGVzc2VudGlhbGx5IHdlJ2xsIGhhdmUgT1NSIGV4aXQg
ZHJvcHBpbmcgdGhpcwotICAgICAgICAgICAgICAgICAgICAvLyBub2RlJ3MgdmFsdWUgaW50byB0
aGUgbG9jYWwgd2hlbiB3ZSBvdGhlcndpc2UgKGluIHRoZSBERkcpCi0gICAgICAgICAgICAgICAg
ICAgIC8vIHdvdWxkIGhhdmUgZHJvcHBlZCB1bmRlZmluZWQgaW50byB0aGUgbG9jYWwuIFRoaXMg
c2VlbXMKLSAgICAgICAgICAgICAgICAgICAgLy8gaGFybWxlc3MuCi0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3JBdmFpbGFiaWxpdHlba10gPSBteU5v
ZGU7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+
YXZhaWxhYmlsaXR5QXRIZWFkOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytu
b2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWls
YWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgdmFyaWFibGUtPmZs
dXNoZWRBdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRBcmd1bWVudDogeworICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZSwgdmFyaWFibGUt
PmZsdXNoZWRBdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVj
azogeworICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
YXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7
CisgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFp
bGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBBdmFpbGFiaWxpdHk6OnVuYXZh
aWxhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAoYXZhaWxhYmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsID0gYXZhaWxhYmlsaXR5OworICAg
ICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29y
cygpOyBzdWNjZXNzb3JJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYXZhaWxhYmlsaXR5LnNpemUoKTsgaS0tOykg
eworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0
SGVhZFtpXSA9IGF2YWlsYWJpbGl0eVtpXS5tZXJnZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ldKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQor
ICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAxNTkzNTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCiBjbGFzcyBHcmFwaDsKIAotLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6
c3NhLT5hdmFpbGFiaWx0aXlBdEhlYWQvVGFpbC4gVGhpcyByZWxpZXMgb24gbGl2ZW5lc3MKLS8v
IGFuYWx5c2lzIHBoYXNlIGhhdmluZyBiZWVuIHJ1biBhbmQgdGhlIGdyYXBoIG5vdCBoYXZpbmcg
YmVlbiB0cmFuc2Zvcm1lZAotLy8gYWZ0ZXIgdGhhdC4KKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6
OnNzYS0+YXZhaWxhYmlsdGl5QXRIZWFkL1RhaWwuIFRoaXMgaXMgYSBmb3J3YXJkIGZsb3cgdHlw
ZSBpbmZlcmVuY2UKKy8vIG92ZXIgTW92SGludHMuIEF0IHRoZSB0aW1lIHdoZW4gTW92SGludHMg
YXJlIGludHJvZHVjZWQsIHdlIHdlcmUgY2VydGFpbiB0aGF0IGF0IGFueQorLy8gcG9pbnQgaW4g
dGhlIHByb2dyYW0gd2hlcmUgYSBieXRlY29kZSB2YXJpYWJsZSBoYWQgYmVlbiBsaXZlLCBhbGwg
b2YgdGhlIE1vdkhpbnRzIHRoYXQKKy8vIGZsb3dlZCBpbnRvIHRoYXQgcG9pbnQgZm9yIHRoYXQg
dmFyaWFibGUgaGFkIHRoZSBzYW1lIEZsdXNoRm9ybWF0LiBUaGlzIGFuYWx5c2lzIHdpbGwgdGVs
bAorLy8geW91IHdoYXQgdGhhdCBmb3JtYXQgd291bGQgaGF2ZSBiZWVuLgogCiBib29sIHBlcmZv
cm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhHcmFwaCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAK
ICNpbmNsdWRlICJERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRG
R1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBo
YXNlLmgiCiAjaW5jbHVkZSAiREZHU1NBQ29udmVyc2lvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZH
U3RhY2tMYXlvdXRQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhh
c2UuaCIKQEAgLTI2NSw5ICsyNjYsMTEgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNv
bXBpbGVJblRocgogICAgICAgICBwZXJmb3JtU1NBQ29udmVyc2lvbihkZmcpOwogICAgICAgICBw
ZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7Ci0g
ICAgICAgIHBlcmZvcm1MSUNNKGRmZyk7CisgICAgICAgIC8vcGVyZm9ybUxJQ00oZGZnKTsKICAg
ICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUNGQShk
ZmcpOworICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKSkK
KyAgICAgICAgICAgIHBlcmZvcm1SZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uKGRmZyk7CiAgICAg
ICAgIHBlcmZvcm1EQ0UoZGZnKTsgLy8gV2UgcmVseSBvbiB0aGlzIHRvIGNvbnZlcnQgZGVhZCBT
ZXRMb2NhbHMgaW50byB0aGUgYXBwcm9wcmlhdGUgaGludCwgYW5kIHRvIGtpbGwgZGVhZCBjb2Rl
IHRoYXQgd29uJ3QgYmUgcmVjb2duaXplZCBhcyBkZWFkIGJ5IExMVk0uCiAgICAgICAgIHBlcmZv
cm1TdGFja0xheW91dChkZmcpOwogICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxp
ZGF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdH
cmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNl
LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIFJlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZSA6IHB1YmxpYyBQ
aGFzZSB7CitwdWJsaWM6CisgICAgUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlKEdyYXBo
JiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInJlc3VycmVjdGlvbiBmb3IgdmFsaWRh
dGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAg
ICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+aGFzUmVzdWx0KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXggKyAxLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgRWRnZShub2Rl
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGluc2VydGlvblNl
dC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvbihH
cmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBS
ZXN1cnJlY3Rpb24gRm9yIFZhbGlkYXRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8
UmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdXJyZWN0aW9u
Rm9yVmFsaWRhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2VfaAorI2Rl
ZmluZSBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOwor
CisvLyBQbGFjZXMgYSBQaGFudG9tIGFmdGVyIGV2ZXJ5IHZhbHVlLXByb2R1Y2luZyBub2RlLCB0
aGVyZWJ5IGRpc2FibGluZyBEQ0UgZnJvbSBraWxsaW5nIGl0LgorLy8gVGhpcyBpcyB1c2VmdWwg
Zm9yIHZhbGlkYXRpbmcgb3VyIE9TUiBleGl0IG1hY2hpbmVyeSBieSBpbnN0aXR1dGluZyB0aGUg
cmVxdWlyZW1lbnQgdGhhdAorLy8gYW55IGxpdmUtaW4tYnl0ZWNvZGUgdmFyaWFibGUgc2hvdWxk
IGJlIE9TUi1hdmFpbGFibGUuIFdpdGhvdXQgdGhpcyBwaGFzZSwgaXQncyBpbXBvc3NpYmxlCisv
LyB0byBtYWtlIHN1Y2ggYW4gYXNzZXJ0aW9uIGJlY2F1c2Ugb3VyIERDRSBpcyBtb3JlIGFnZ3Jl
c3NpdmUgdGhhbiB0aGUgYnl0ZWNvZGUgbGl2ZW5lc3MKKy8vIGFuYWx5c2lzLgorCitib29sIHBl
cmZvcm1SZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
UmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24g
MTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsMTMgKzE1OCwzNSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3Jz
LnNpemUoKTsgai0tOykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tqXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmVkZWNlc3Nvci0+YXBwZW5kTm9uVGVybWluYWwoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBVcHNpbG9uLCBibG9jay0+bGFz
dCgpLT5jb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LCBTcGVjTm9uZSwgVXBzaWxvbiwgcHJlZGVjZXNzb3ItPmxhc3QoKS0+Y29kZU9yaWdpbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUpLCBFZGdlKHByZWRlY2Vz
c29yLT52YXJpYWJsZXNBdFRhaWxbaV0sIHVzZUtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuIEZvciBtdWx0aXBsZSByZWFzb25z
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFJlYXNvbiAjMTogSWYgdGhlIGxvY2FsIGlzIGZsdXNoZWQgdGhlbiB3ZSBkb24ndCBu
ZWVkIHRvIGJvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYSBNb3ZI
aW50IHNpbmNlIGV2ZXJ5IHBhdGggdG8gdGhpcyBwb2ludCBpbiB0aGUgY29kZSB3aWxsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBmbHVzaGVkIHRoZSBieXRlY29kZSB2YXJp
YWJsZSB1c2luZyBhIFNldExvY2FsIGFuZCBoZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRoZSBBdmFpbGFiaWxpdHk6OmZsdXNoZWRBdCgpIHdpbGwgYWdyZWUsIGFuZCB0aGF0
IHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWZmaWNpZW50IGZvciBm
aWd1cmluZyBvdXQgaG93IHRvIHJlY292ZXIgdGhlIHZhcmlhYmxlJ3MgdmFsdWUuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVh
c29uICMyOiBJZiB3ZSBoYWQgaW5zZXJ0ZWQgYSBNb3ZIaW50IGFuZCB0aGUgUGhpIGZ1bmN0aW9u
IGhhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpZWQgKGJlY2F1c2UgdGhlIG9u
bHkgdXNlciBvZiB0aGUgdmFsdWUgd2FzIHRoZSAiZmx1c2giIC0gaS5lLgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHNvbWUgYXN5bmNocm9ub3VzIHJ1bnRpbWUgdGhpbmd5KSB0aGVu
IHRoZSBNb3ZIaW50IHdvdWxkIHR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
bnRvIGEgWm9tYmllSGludCwgd2hpY2ggd291bGQgZm9vbCB1cyBpbnRvIHRoaW5raW5nIHRoYXQg
dGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFibGUgaXMgZGVhZC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBSZWFzb24gIzM6IElmIHdlIGhhZCBpbnNlcnRlZCBhIE1vdkhpbnQgdGhlbiBldmVuIGlmIHRo
ZSBQaGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF5ZWQgYWxpdmUsIHdlIHdv
dWxkIHN0aWxsIGVuZCB1cCBnZW5lcmF0aW5nIGluZWZmaWNpZW50IGNvZGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSB3b3VsZCBiZSB0ZWxsaW5nIHRoZSBPU1IgZXhp
dCBjb21waWxlciB0byB1c2Ugc29tZSBTU0EKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB2YWx1ZSBmb3IgdGhlIGJ5dGVjb2RlIHZhcmlhYmxlIHJhdGhlciB0aGFuIGp1c3QgdGVsbGlu
ZyBpdCB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHZhbHVlIHdhcyBh
bHJlYWR5IG9uIHRoZSBzdGFjay4KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUt
PmNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVkZ2Uobm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMTU5
MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dp
dGNoIChmb3JtYXQpIHsKICAgICAgICAgY2FzZSBEZWFkRmx1c2g6CisgICAgICAgIGNhc2UgQ29u
ZmxpY3RpbmdGbHVzaDoKICAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShTb3VyY2VJc0Rl
YWQpOwogICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICAgICAgcmV0dXJuIFZh
bHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCB3aGVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDE1OTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgREZHVmFyaWFibGVBY2Nl
c3NEYXRhX2gKICNkZWZpbmUgREZHVmFyaWFibGVBY2Nlc3NEYXRhX2gKIAorI2luY2x1ZGUgIkRG
R0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0RvdWJsZUZvcm1hdFN0YXRlLmgiCiAjaW5jbHVkZSAi
REZHRmx1c2hGb3JtYXQuaCIKICNpbmNsdWRlICJERkdGbHVzaGVkQXQuaCIKQEAgLTM5LDYgKzQw
LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitzdHJ1Y3QgTm9kZTsK
KwogZW51bSBEb3VibGVCYWxsb3QgeyBWb3RlVmFsdWUsIFZvdGVEb3VibGUgfTsKIAogY2xhc3Mg
VmFyaWFibGVBY2Nlc3NEYXRhIDogcHVibGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHJl
dmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTYgKzQ4LDE2IEBAIHZvaWQgRXhpdFZhbHVlOjpk
dW1wSW5Db250ZXh0KFByaW50U3RyZWEKICAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCgiLCBp
bkNvbnRleHQoY29uc3RhbnQoKSwgY29udGV4dCksICIpIik7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKLSAgICAgICAgb3V0LnByaW50KCJJbkpTU3RhY2si
KTsKKyAgICAgICAgb3V0LnByaW50KCJJbkpTU3RhY2s6ciIsIHZpcnR1YWxSZWdpc3RlcigpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKLSAg
ICAgICAgb3V0LnByaW50KCJJbkpTU3RhY2tBc0ludDMyIik7CisgICAgICAgIG91dC5wcmludCgi
SW5KU1N0YWNrQXNJbnQzMjpyIiwgdmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgotICAgICAgICBvdXQucHJpbnQo
IkluSlNTdGFja0FzSW50NTIiKTsKKyAgICAgICAgb3V0LnByaW50KCJJbkpTU3RhY2tBc0ludDUy
OnIiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFja0FzRG91YmxlOgotICAgICAgICBvdXQucHJpbnQoIkluSlNTdGFja0FzRG91
YmxlIik7CisgICAgICAgIG91dC5wcmludCgiSW5KU1N0YWNrQXNEb3VibGU6ciIsIHZpcnR1YWxS
ZWdpc3RlcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAx
NTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgIkZUTExvd2VyZWRO
b2RlVmFsdWUuaCIKICNpbmNsdWRlICJGVExPdXRwdXQuaCIKICNpbmNsdWRlICJGVExUaHVua3Mu
aCIKLSNpbmNsdWRlICJGVExWYWx1ZVNvdXJjZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
ICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCkBA
IC03MCw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Z0bFN0YXRlKHN0YXRlKQogICAg
ICAgICAsIG1faGVhcHMoc3RhdGUuY29udGV4dCkKICAgICAgICAgLCBtX291dChzdGF0ZS5jb250
ZXh0KQotICAgICAgICAsIG1fdmFsdWVTb3VyY2VzKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgu
YmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBtX2F2YWlsYWJpbGl0eShPcGVy
YW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCiAgICAgICAg
ICwgbV9zdGF0ZShzdGF0ZS5ncmFwaCkKICAgICAgICAgLCBtX2ludGVycHJldGVyKHN0YXRlLmdy
YXBoLCBtX3N0YXRlKQogICAgICAgICAsIG1fc3RhY2ttYXBJRHMoMCkKQEAgLTIwNCw4ICsyMDMs
NiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZv
ckJsb2NrKCk7CiAgICAgICAgIAotICAgICAgICBtX2xpdmUgPSBibG9jay0+c3NhLT5saXZlQXRI
ZWFkOwotICAgICAgICAKICAgICAgICAgbV9zdGF0ZS5yZXNldCgpOwogICAgICAgICBtX3N0YXRl
LmJlZ2luQmFzaWNCbG9jayhtX2hpZ2hCbG9jayk7CiAgICAgICAgIApAQCAtNDc1LDEyICs0NzIs
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmIChtX25vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICBERkdfTk9E
RV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBtX25vZGUsIHVzZSk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAobV9ub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpCi0gICAgICAgICAgICBtX2xpdmUuYWRk
KG1fbm9kZSk7Ci0gICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRXhlY3V0ZUVmZmVjdHMpCiAg
ICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGVFZmZlY3RzKG5vZGVJbmRleCk7CiAgICAg
ICAgIApAQCAtNjE5LDM2ICs2MTAsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBGbHVzaGVk
SlNWYWx1ZTogewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3Io
dmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCB2
YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWRE
b3VibGU6IHsKICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9y
KHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2ss
IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2hl
ZEludDMyOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBheWxvYWRGb3IodmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrLCB2YXJp
YWJsZS0+bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1
MjogewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxl
LT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQ1MkluSlNTdGFjaywgdmFyaWFibGUt
Pm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDogewog
ICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPm1hY2hp
bmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCB2YXJpYWJsZS0+bWFjaGlu
ZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOiB7CkBAIC02
NTYsMTUgKzY0MiwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKICAg
ICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbiksCiAgICAgICAgICAgICAgICAgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bWFjaGlu
ZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5l
TG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSA9IEF2YWlsYWJpbGl0eSh2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGNvbXBpbGVNb3ZIaW50KCkKQEAgLTY3NSw3ICs2NjEsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgY29tcGlsZVpvbWJpZUhpbnQoKQogICAgIHsKICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiBkYXRhID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAg
bV92YWx1ZVNvdXJjZXMub3BlcmFuZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFNvdXJj
ZUlzRGVhZCk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkg
PSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29t
cGlsZU1vdkhpbnRBbmRDaGVjaygpCkBAIC0xMjg3LDcgKzEyNzMsNyBAQCBwcml2YXRlOgogICAg
IHsKICAgICAgICAgLy8gU2VlIGFib3ZlOyBDZWxsVXNlIGlzIGVhc2llciBzbyB3ZSBkbyBvbmx5
IHRoYXQgZm9yIG5vdy4KICAgICAgICAgQVNTRVJUKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IENlbGxVc2UpOwotCisgICAgICAgIAogICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRp
ZmllcnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07CkBAIC0yNTQ0LDEyICsyNTMwLDEy
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlSW52YWxpZGF0aW9uUG9pbnQoKQogICAgIHsK
ICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgIGRh
dGFMb2coIiAgICBJbnZhbGlkYXRpb24gcG9pbnQgd2l0aCB2YWx1ZSBzb3VyY2VzOiAiLCBtX3Zh
bHVlU291cmNlcywgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW52YWxpZGF0aW9u
IHBvaW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBtX2F2YWlsYWJpbGl0eSwgIlxuIik7CiAgICAg
ICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQo
CiAgICAgICAgICAgICBVbmNvdW50YWJsZUludmFsaWRhdGlvbiwgSW52YWxpZFZhbHVlRm9ybWF0
LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCksCiAgICAgICAgICAgICBtX2NvZGVPcmln
aW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKLSAgICAgICAgICAg
IG1fdmFsdWVTb3VyY2VzLm51bWJlck9mQXJndW1lbnRzKCksIG1fdmFsdWVTb3VyY2VzLm51bWJl
ck9mTG9jYWxzKCkpKTsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm51bWJlck9mQXJndW1l
bnRzKCksIG1fYXZhaWxhYmlsaXR5Lm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxT
dGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7
CiAgICAgICAgIAogICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5v
c3JFeGl0Lmxhc3QoKTsKQEAgLTI1NTcsNyArMjU0Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBFeGl0QXJndW1lbnRMaXN0IGFyZ3VtZW50czsKICAgICAgICAgCi0gICAgICAgIGJ1
aWxkRXhpdEFyZ3VtZW50cyhleGl0LCBhcmd1bWVudHMsIEZvcm1hdHRlZFZhbHVlKCkpOworICAg
ICAgICBidWlsZEV4aXRBcmd1bWVudHMoZXhpdCwgYXJndW1lbnRzLCBGb3JtYXR0ZWRWYWx1ZSgp
LCBleGl0Lm1fY29kZU9yaWdpbik7CiAgICAgICAgIGNhbGxTdGFja21hcChleGl0LCBhcmd1bWVu
dHMpOwogICAgICAgICAKICAgICAgICAgaW5mby5tX2lzSW52YWxpZGF0aW9uUG9pbnQgPSB0cnVl
OwpAQCAtMzgyMiwyNSArMzgwOCw2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzTGl2ZShO
b2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGl2ZS5jb250YWlucyhub2RlKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCB1c2UoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKGVkZ2UtPmhhc1Jlc3VsdCgpKTsKLSAgICAgICAgaWYgKCFlZGdlLmRvZXNLaWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fbGl2ZS5yZW1vdmUoZWRnZS5ub2RlKCkpOwot
ICAgIH0KLSAgICAKLSAgICAvLyBXcmFwcGVyIHVzZWQgb25seSBmb3IgREZHX05PREVfRE9fVE9f
Q0hJTERSRU4KLSAgICB2b2lkIHVzZShOb2RlKiwgRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAg
dXNlKGVkZ2UpOwotICAgIH0KLSAgICAKICAgICBMQmFzaWNCbG9jayBsb3dCbG9jayhCYXNpY0Js
b2NrKiBibG9jaykKICAgICB7CiAgICAgICAgIHJldHVybiBtX2Jsb2Nrcy5nZXQoYmxvY2spOwpA
QCAtMzg0OCw0MCArMzgxNSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBpbml0aWFsaXpl
T1NSRXhpdFN0YXRlRm9yQmxvY2soKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV92YWx1ZVNvdXJjZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBGbHVzaGVkQXQgZmx1
c2ggPSBtX2hpZ2hCbG9jay0+c3NhLT5mbHVzaEF0SGVhZFtpXTsKLSAgICAgICAgICAgIHN3aXRj
aCAoZmx1c2guZm9ybWF0KCkpIHsKLSAgICAgICAgICAgIGNhc2UgRGVhZEZsdXNoOiB7Ci0gICAg
ICAgICAgICAgICAgLy8gTXVzdCBjb25zaWRlciBhdmFpbGFibGUgbm9kZXMgaW5zdGVhZC4KLSAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9oaWdoQmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5
QXRIZWFkW2ldOwotICAgICAgICAgICAgICAgIGlmICghbm9kZSkgewotICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKG5vZGUp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAgICAgICAgICAgICAgbV92YWx1
ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjaywgZmx1c2gudmlydHVhbFJl
Z2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQ1MkluSlNTdGFjaywgZmx1c2gudmlydHVhbFJlZ2lzdGVy
KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBGbHVzaGVkRG91YmxlOgotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ld
ID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrLCBmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBj
YXNlIEZsdXNoZWRDZWxsOgotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAgICAg
ICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywgZmx1c2gudmlydHVhbFJlZ2lzdGVy
KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Cisg
ICAgICAgIG1fYXZhaWxhYmlsaXR5ID0gbV9oaWdoQmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkOwogICAgIH0KICAgICAKICAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCkBAIC0zODg5LDE0ICsz
ODIzLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
biwgRm9ybWF0dGVkVmFsdWUgcmVjb3ZlcnkpCiAgICAgewogICAgICAgICBpZiAodmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBleGl0IHdp
dGggdmFsdWUgc291cmNlczogIiwgbV92YWx1ZVNvdXJjZXMsICJcbiIpOwotICAgICAgICAKKyAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0ZS5qaXRDb2RlLT5v
c3JFeGl0LnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwgbV9hdmFpbGFiaWxpdHksICJc
biIpOworCiAgICAgICAgIEFTU0VSVChtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgp
ID09IG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LnNpemUoKSk7CiAgICAgICAgIAogICAg
ICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAg
ICAgICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCiAgICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0
VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKLSAgICAgICAgICAgIG1fdmFsdWVT
b3VyY2VzLm51bWJlck9mQXJndW1lbnRzKCksIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mTG9jYWxz
KCkpKTsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm51bWJlck9mQXJndW1lbnRzKCksIG1f
YXZhaWxhYmlsaXR5Lm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5h
bGl6ZXItPm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAg
IAogICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxh
c3QoKTsKQEAgLTM5MjQsMTAgKzM4NTgsMjIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEV4
aXRBcmd1bWVudExpc3QgYXJndW1lbnRzOwogICAgICAgICAKLSAgICAgICAgYnVpbGRFeGl0QXJn
dW1lbnRzKGV4aXQsIGFyZ3VtZW50cywgbG93VmFsdWUpOworICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsKICAgICAgICAgCi0gICAgICAgIGlmIChkaXJl
Y3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9ub2Rl
KTsKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgICAg
ICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXQsIGFyZ3VtZW50cywgbG93VmFsdWUsIGNvZGVP
cmlnaW4pOworICAgICAgICBlbHNlIGlmIChkaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9u
KSB7CisgICAgICAgICAgICBpZiAoIXJlY292ZXJ5KSB7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBub2RlSW5kZXggPSBtX25vZGVJbmRleDsgbm9kZUluZGV4IDwgbV9oaWdoQmxvY2st
PnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG1faGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPT0gY29kZU9yaWdpbikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luID0gbm9k
ZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXQsIGFyZ3VtZW50cywgbG93VmFsdWUsIGNvZGVPcmln
aW4pOwogICAgICAgICAgICAgZXhpdC5jb252ZXJ0VG9Gb3J3YXJkKG1faGlnaEJsb2NrLCBtX25v
ZGUsIG1fbm9kZUluZGV4LCByZWNvdmVyeSwgYXJndW1lbnRzKTsKICAgICAgICAgfQogICAgICAg
ICAKQEAgLTM5MzUsMzYgKzM4ODEsNTkgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBidWlsZEV4aXRBcmd1bWVudHMoCi0gICAgICAgIE9TUkV4aXQmIGV4aXQsIEV4aXRBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUpCisgICAgICAgIE9TUkV4
aXQmIGV4aXQsIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUgbG93
VmFsdWUsCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQobV9jYWxsRnJhbWUpOwogICAgICAgICBpZiAoISFsb3dWYWx1ZSkKICAg
ICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93VmFsdWUudmFsdWUoKSk7CiAgICAgICAgIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgVmFsdWVTb3VyY2Ugc291cmNlID0gbV92YWx1ZVNvdXJjZXNbaV07
CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3BlcmFuZEZvckluZGV4
KGkpOworICAgICAgICAgICAgYm9vbCBpc0xpdmUgPSBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUo
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIGlmICgh
aXNMaXZlKSB7CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6
ZGVhZCgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKHNvdXJjZS5raW5kKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgVmFsdWVJbkpTU3RhY2s6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9
IEV4aXRWYWx1ZTo6aW5KU1N0YWNrKHNvdXJjZS52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEludDMySW5KU1N0YWNrOgotICAgICAg
ICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50MzIo
c291cmNlLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgSW50NTJJbkpTU3RhY2s6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVl
c1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQ1Mihzb3VyY2UudmlydHVhbFJlZ2lzdGVy
KCkpOworICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IG1fYXZhaWxhYmls
aXR5W2ldOworICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNo
ZWRBdCgpOworICAgICAgICAgICAgc3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgeworICAgICAgICAg
ICAgY2FzZSBEZWFkRmx1c2g6CisgICAgICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6Cisg
ICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5oYXNOb2RlKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYWRkRXhpdEFyZ3VtZW50Rm9yTm9kZShleGl0LCBhcmd1bWVudHMsIGksIGF2YWls
YWJpbGl0eS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZh
bGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiRXhwZWN0ZWQgciIsIG9wZXJhbmQsICIgdG8gYmUgYXZhaWxhYmxlIGJ1dCBpdCB3YXNuJ3Qu
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
VGhpcyBtZWFucyB0aGF0IHRoZSBERkcncyBEQ0UgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGRl
YWQgaW4gYnl0ZWNvZGUKKyAgICAgICAgICAgICAgICAvLyBldmVuIHRob3VnaCB0aGUgYnl0ZWNv
ZGUgbGl2ZW5lc3MgYW5hbHlzaXMgdGhpbmtzIGl0J3MgbGl2ZS4gVGhpcyBpcworICAgICAgICAg
ICAgICAgIC8vIGFjY2VwdGFibGUgc2luY2UgdGhlIERGRydzIERDRSBpcyBieSBkZXNpZ24gbW9y
ZSBhZ2dyZXNzaXZlIHdoaWxlIHN0aWxsCisgICAgICAgICAgICAgICAgLy8gYmVpbmcgc291bmQu
CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6
Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNr
QXNEb3VibGUoc291cmNlLnZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgICAgICAgICAgY2FzZSBG
bHVzaGVkSlNWYWx1ZToKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgICAg
ICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0g
PSBFeGl0VmFsdWU6OmluSlNTdGFjayhmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNvdXJjZUlzRGVhZDoKLSAgICAgICAg
ICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgICAgICBl
eGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDMyKGZsdXNoLnZpcnR1
YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
SGF2ZU5vZGU6Ci0gICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50Rm9yTm9kZShleGl0LCBh
cmd1bWVudHMsIGksIHNvdXJjZS5ub2RlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FzZSBGbHVzaGVkSW50NTI6CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9
IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQ1MihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVl
c1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gudmlydHVhbFJlZ2lzdGVy
KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0zOTkxLDUzICszOTYwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHRyeVRvU2V0Q29uc3Rh
bnRFeGl0QXJndW1lbnQoZXhpdCwgaW5kZXgsIG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKLSAgICAgICAgaWYgKCFpc0xpdmUobm9kZSkpIHsKLSAgICAgICAgICAgIGJvb2wg
Zm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHBlcm1pdHNPU1JC
YWNrd2FyZFJld2lyaW5nKG5vZGUtPm9wKCkpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFu
dEV4aXRBcmd1bWVudChleGl0LCBpbmRleCwgbm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICBpZiAoaXNMaXZlKG5vZGUpKQotICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBiZXN0Tm9kZSA9IDA7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgYmVzdFNjb3JlID0gMDsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG1fbGl2ZS5i
ZWdpbigpOwotICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBt
X2xpdmUuZW5kKCk7Ci0gICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gKml0ZXI7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAo
IWNhbmRpZGF0ZS0+Y2hpbGQxKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+Y2hpbGQxKCkgIT0gbm9kZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBteVNjb3JlID0gZm9yd2FyZFJld2lyaW5nU2VsZWN0aW9uU2NvcmUoY2FuZGlkYXRlLT5v
cCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG15U2NvcmUgPD0gYmVzdFNjb3JlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGJlc3RO
b2RlID0gY2FuZGlkYXRlOwotICAgICAgICAgICAgICAgICAgICBiZXN0U2NvcmUgPSBteVNjb3Jl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAoYmVzdE5vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzTGl2ZShiZXN0Tm9k
ZSkpOwotICAgICAgICAgICAgICAgICAgICBub2RlID0gYmVzdE5vZGU7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgICAgICBl
eGl0Lm1fdmFsdWVzW2luZGV4XSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQVNT
RVJUKGlzTGl2ZShub2RlKSk7Ci0KICAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1f
aW50MzJWYWx1ZXMuZ2V0KG5vZGUpOwogICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKICAg
ICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZv
cm1hdEludDMyLCB2YWx1ZS52YWx1ZSgpKTsKQEAgLTQxMTQsNyArNDAzNiw3IEBAIHByaXZhdGU6
CiAgICAgICAgIAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPmxvY2Fs
KCk7CiAgICAgICAgIAotICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKG9wZXJhbmQpID0g
VmFsdWVTb3VyY2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxp
dHkub3BlcmFuZChvcGVyYW5kKSA9IEF2YWlsYWJpbGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCkp
OwogICAgIH0KICAgICAKICAgICB2b2lkIHNldEludDMyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1
ZSkKQEAgLTQyNzIsMTEgKzQxOTQsMTAgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPE5vZGUqLCBM
b3dlcmVkTm9kZVZhbHVlPiBtX2Jvb2xlYW5WYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93
ZXJlZE5vZGVWYWx1ZT4gbV9zdG9yYWdlVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2Vy
ZWROb2RlVmFsdWU+IG1fZG91YmxlVmFsdWVzOwotICAgIEhhc2hTZXQ8Tm9kZSo+IG1fbGl2ZTsK
ICAgICAKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fcGhpczsKICAgICAKLSAgICBPcGVy
YW5kczxWYWx1ZVNvdXJjZT4gbV92YWx1ZVNvdXJjZXM7CisgICAgT3BlcmFuZHM8QXZhaWxhYmls
aXR5PiBtX2F2YWlsYWJpbGl0eTsKICAgICAKICAgICBJblBsYWNlQWJzdHJhY3RTdGF0ZSBtX3N0
YXRlOwogICAgIEFic3RyYWN0SW50ZXJwcmV0ZXI8SW5QbGFjZUFic3RyYWN0U3RhdGU+IG1faW50
ZXJwcmV0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJ
KHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBPU1JFeGl0Ojpjb252
ZXJ0VG9Gb3J3YXJkKAogICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2Rl
LT5jb2RlT3JpZ2luKTsKICAgICAKICAgICBtX2NvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2lu
OwotICAgIAorCiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTksNiArMTk5LDcgQEAgcHVibGljOgogICAgIExWYWx1ZSBpbnRUb1B0cihMVmFsdWUgdmFsdWUs
IExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkSW50VG9QdHIobV9idWlsZGVyLCB2YWx1ZSwgdHlw
ZSk7IH0KICAgICBMVmFsdWUgYml0Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0
dXJuIGJ1aWxkQml0Q2FzdChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIAorICAgIExW
YWx1ZSBhbGxvY2EoTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRBbGxvY2EobV9idWlsZGVyLCB0
eXBlKTsgfQogICAgIExWYWx1ZSBnZXQoTFZhbHVlIHJlZmVyZW5jZSkgeyByZXR1cm4gYnVpbGRM
b2FkKG1fYnVpbGRlciwgcmVmZXJlbmNlKTsgfQogICAgIExWYWx1ZSBzZXQoTFZhbHVlIHZhbHVl
LCBMVmFsdWUgcmVmZXJlbmNlKSB7IHJldHVybiBidWlsZFN0b3JlKG1fYnVpbGRlciwgdmFsdWUs
IHJlZmVyZW5jZSk7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
VmFsdWVTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVmFsdWVTb3VyY2UuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGVExWYWx1ZVNvdXJjZS5oIgotCi0jaWYgRU5BQkxF
KEZUTF9KSVQpCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotdm9pZCBWYWx1
ZVNvdXJjZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIHN3aXRjaCAoa2lu
ZCgpKSB7Ci0gICAgY2FzZSBTb3VyY2VOb3RTZXQ6Ci0gICAgICAgIG91dC5wcmludCgiU291cmNl
Tm90U2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFZhbHVlSW5KU1N0YWNrOgotICAg
ICAgICBvdXQucHJpbnQoIlZhbHVlSW5KU1N0YWNrOiIsIHZpcnR1YWxSZWdpc3RlcigpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW50MzJJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmlu
dCgiSW50MzJJbkpTU3RhY2s6IiwgdmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJbnQ1MkluSlNTdGFjazoKLSAgICAgICAgb3V0LnByaW50KCJJbnQ1MkluSlNT
dGFjazoiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIERv
dWJsZUluSlNTdGFjazoKLSAgICAgICAgb3V0LnByaW50KCJEb3VibGVJbkpTU3RhY2s6Iiwgdmly
dHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBTb3VyY2VJc0RlYWQ6
Ci0gICAgICAgIG91dC5wcmludCgiU291cmNlSXNEZWFkIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIEhhdmVOb2RlOgotICAgICAgICBvdXQucHJpbnQoIk5vZGUoIiwgbm9kZSgpLCAiKSIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci19Ci0KLXZvaWQgVmFsdWVTb3VyY2U6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mIG91dCwgRHVtcENvbnRleHQqKSBjb25zdAotewotICAgIGR1bXAob3V0KTsKLX0KLQotfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHJldmlzaW9u
IDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEZUTFZhbHVlU291cmNlX2gKLSNkZWZpbmUg
RlRMVmFsdWVTb3VyY2VfaAotCi0jaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0KLSNpZiBFTkFC
TEUoRlRMX0pJVCkKLQotI2luY2x1ZGUgIkRGR05vZGUuaCIKLSNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKLQotZW51bSBWYWx1ZVNvdXJjZUtpbmQgewotICAgIFNvdXJjZU5v
dFNldCwKLSAgICBWYWx1ZUluSlNTdGFjaywKLSAgICBJbnQzMkluSlNTdGFjaywKLSAgICBJbnQ1
MkluSlNTdGFjaywKLSAgICBEb3VibGVJbkpTU3RhY2ssCi0gICAgU291cmNlSXNEZWFkLAotICAg
IEhhdmVOb2RlCi19OwotCi1jbGFzcyBWYWx1ZVNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgVmFsdWVT
b3VyY2UoKQotICAgICAgICA6IG1fa2luZChTb3VyY2VOb3RTZXQpCi0gICAgewotICAgIH0KLSAg
ICAKLSAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQga2luZCkKLSAgICAg
ICAgOiBtX2tpbmQoa2luZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gU291cmNl
SXNEZWFkKTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoREZHOjpOb2Rl
KiBub2RlKQotICAgICAgICA6IG1fa2luZChIYXZlTm9kZSkKLSAgICB7Ci0gICAgICAgIG1fdmFs
dWUubm9kZSA9IG5vZGU7Ci0gICAgfQotICAgIAotICAgIFZhbHVlU291cmNlKFZhbHVlU291cmNl
S2luZCBraW5kLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotICAgICAgICA6IG1fa2luZChraW5kKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYWx1ZUluSlNTdGFjayB8fCBtX2tpbmQg
PT0gSW50MzJJbkpTU3RhY2sgfHwgbV9raW5kID09IEludDUySW5KU1N0YWNrIHx8IG1fa2luZCA9
PSBEb3VibGVJbkpTU3RhY2spOwotICAgICAgICBtX3ZhbHVlLnZpcnR1YWxSZWdpc3RlciA9IHJl
Zy5vZmZzZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgVmFsdWVTb3VyY2VLaW5kIGtpbmQoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fa2luZDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gU291cmNlTm90U2V0OyB9Ci0gICAg
Ci0gICAgREZHOjpOb2RlKiBub2RlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5k
KCkgPT0gSGF2ZU5vZGUpOwotICAgICAgICByZXR1cm4gbV92YWx1ZS5ub2RlOwotICAgIH0KLSAg
ICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gVmFsdWVJbkpTU3RhY2sgfHwga2luZCgpID09IEludDMy
SW5KU1N0YWNrIHx8IGtpbmQoKSA9PSBJbnQ1MkluSlNTdGFjayB8fCBraW5kKCkgPT0gRG91Ymxl
SW5KU1N0YWNrKTsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3ZhbHVlLnZpcnR1
YWxSZWdpc3Rlcik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwotICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0Kikg
Y29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgVmFsdWVTb3VyY2VLaW5kIG1fa2luZDsKLSAgICB1bmlv
biB7Ci0gICAgICAgIERGRzo6Tm9kZSogbm9kZTsKLSAgICAgICAgaW50IHZpcnR1YWxSZWdpc3Rl
cjsKLSAgICB9IG1fdmFsdWU7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLQotI2VuZGlmIC8vIEZUTFZhbHVlU291cmNlX2gKLQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vTExWTUFQSUZ1bmN0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUElGdW5jdGlvbnMuaAko
cmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vTExWTUFQSUZ1
bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MzUsNyArNTM1LDYgQEAKICAgICBtYWNybyhM
TFZNQm9vbCwgVGFyZ2V0SGFzSklULCAoTExWTVRhcmdldFJlZiBUKSkgXAogICAgIG1hY3JvKExM
Vk1Cb29sLCBUYXJnZXRIYXNUYXJnZXRNYWNoaW5lLCAoTExWTVRhcmdldFJlZiBUKSkgXAogICAg
IG1hY3JvKExMVk1Cb29sLCBUYXJnZXRIYXNBc21CYWNrZW5kLCAoTExWTVRhcmdldFJlZiBUKSkg
XAotICAgIG1hY3JvKExMVk1UYXJnZXRNYWNoaW5lUmVmLCBDcmVhdGVUYXJnZXRNYWNoaW5lLCAo
TExWTVRhcmdldFJlZiBULCBjaGFyICpUcmlwbGUsIGNoYXIgKkNQVSwgY2hhciAqRmVhdHVyZXMs
IExMVk1Db2RlR2VuT3B0TGV2ZWwgTGV2ZWwsIExMVk1SZWxvY01vZGUgUmVsb2MsIExMVk1Db2Rl
TW9kZWwgQ29kZU1vZGVsKSkgXAogICAgIG1hY3JvKHZvaWQsIERpc3Bvc2VUYXJnZXRNYWNoaW5l
LCAoTExWTVRhcmdldE1hY2hpbmVSZWYgVCkpIFwKICAgICBtYWNybyhMTFZNVGFyZ2V0UmVmLCBH
ZXRUYXJnZXRNYWNoaW5lVGFyZ2V0LCAoTExWTVRhcmdldE1hY2hpbmVSZWYgVCkpIFwKICAgICBt
YWNybyhjaGFyICosIEdldFRhcmdldE1hY2hpbmVUcmlwbGUsIChMTFZNVGFyZ2V0TWFjaGluZVJl
ZiBUKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRHVtcENvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250
ZXh0LmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRHVtcENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCwxMSBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotRHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KCkgeyB9CitEdW1wQ29u
dGV4dDo6RHVtcENvbnRleHQoKQorICAgIDogZ3JhcGgoMCkKK3sKK30KKwogRHVtcENvbnRleHQ6
On5EdW1wQ29udGV4dCgpIHsgfQogCiBib29sIER1bXBDb250ZXh0Ojppc0VtcHR5KCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRHVtcENvbnRleHQuaAkocmV2
aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRHVtcENvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAorbmFtZXNwYWNlIERGRyB7IGNsYXNzIEdyYXBoOyB9CisKIHN0cnVjdCBEdW1wQ29udGV4dCB7
CiAgICAgRHVtcENvbnRleHQoKTsKICAgICB+RHVtcENvbnRleHQoKTsKQEAgLTQxLDYgKzQzLDcg
QEAgc3RydWN0IER1bXBDb250ZXh0IHsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBjb25z
dCBjaGFyKiBwcmVmaXggPSAiIikgY29uc3Q7CiAgICAgCiAgICAgU3RyaW5nSGFzaER1bXBDb250
ZXh0PFN0cnVjdHVyZT4gc3RydWN0dXJlczsKKyAgICBERkc6OkdyYXBoKiBncmFwaDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDcgQEAgdHlwZWRlZiBP
cHRpb25SYW5nZSBvcHRpb25SYW5nZTsKICAgICB2KGJvb2wsIGVuYWJsZUxMVk1GYXN0SVNlbCwg
ZmFsc2UpIFwKICAgICB2KGJvb2wsIHVzZUxMVk1TbWFsbENvZGVNb2RlbCwgZmFsc2UpIFwKICAg
ICB2KGJvb2wsIGR1bXBMTFZNSVIsIGZhbHNlKSBcCisgICAgdihib29sLCB2YWxpZGF0ZUZUTE9T
UkV4aXRMaXZlbmVzcywgZmFsc2UpIFwKICAgICB2KGJvb2wsIGxsdm1BbHdheXNGYWlsc0JlZm9y
ZUNvbXBpbGUsIGZhbHNlKSBcCiAgICAgdihib29sLCBsbHZtQWx3YXlzRmFpbHNCZWZvcmVMaW5r
LCBmYWxzZSkgXAogICAgIHYoYm9vbCwgbGx2bVNpbXBsZU9wdCwgdHJ1ZSkgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxNTkz
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NjksMTMgKzQ2OSwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VzTm9u
U3RyaWN0RXZhbCgpIHsgcmV0dXJuIG1fdXNlc05vblN0cmljdEV2YWw7IH0KICAgICB2b2lkIHNl
dFVzZXNOb25TdHJpY3RFdmFsKGJvb2wgdXNlc05vblN0cmljdEV2YWwpIHsgbV91c2VzTm9uU3Ry
aWN0RXZhbCA9IHVzZXNOb25TdHJpY3RFdmFsOyB9CiAKLSAgICBpbnQgY2FwdHVyZVN0YXJ0KCkg
eyByZXR1cm4gbV9jYXB0dXJlU3RhcnQ7IH0KKyAgICBpbnQgY2FwdHVyZVN0YXJ0KCkgY29uc3Qg
eyByZXR1cm4gbV9jYXB0dXJlU3RhcnQ7IH0KICAgICB2b2lkIHNldENhcHR1cmVTdGFydChpbnQg
Y2FwdHVyZVN0YXJ0KSB7IG1fY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZVN0YXJ0OyB9CiAKLSAgICBp
bnQgY2FwdHVyZUVuZCgpIHsgcmV0dXJuIG1fY2FwdHVyZUVuZDsgfQorICAgIGludCBjYXB0dXJl
RW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJlRW5kOyB9CiAgICAgdm9pZCBzZXRDYXB0dXJl
RW5kKGludCBjYXB0dXJlRW5kKSB7IG1fY2FwdHVyZUVuZCA9IGNhcHR1cmVFbmQ7IH0KIAotICAg
IGludCBjYXB0dXJlQ291bnQoKSB7IHJldHVybiAtKG1fY2FwdHVyZUVuZCAtIG1fY2FwdHVyZVN0
YXJ0KTsgfQorICAgIGludCBjYXB0dXJlQ291bnQoKSBjb25zdCB7IHJldHVybiAtKG1fY2FwdHVy
ZUVuZCAtIG1fY2FwdHVyZVN0YXJ0KTsgfQogCiAgICAgaW50IHBhcmFtZXRlckNvdW50KCkgeyBy
ZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9CiAgICAgaW50IHBhcmFt
ZXRlckNvdW50SW5jbHVkaW5nVGhpcygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRp
bmdUaGlzOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217114</attachid>
            <date>2013-11-15 21:40:37 -0800</date>
            <delta_ts>2013-11-15 22:33:06 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>114041</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5Mzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MCBA
QAorMjAxMy0xMS0xNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgaGF2ZSBhbiBleHBsaWNpdCBub3Rpb24gb2YgYnl0ZWNvZGUgbGl2ZW5lc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDE4MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
VGhpcyBtYWtlcyBGVEwgT1NSIGV4aXQgdXNlIGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lzIHRv
IGRldGVybWluZSB3aGljaCB2YXJpYWJsZXMKKyAgICAgICAgdG8gaW5jbHVkZSB2YWx1ZXMgZm9y
LiBUaGUgZGVjaXNpb24gb2YgaG93IHRvIGdldCB0aGUgdmFsdWVzIG9mIHZhcmlhYmxlcyBpcyBi
YXNlZCBvbgorICAgICAgICBmb3J3YXJkIHByb3BhZ2F0aW9uIG9mIE1vdkhpbnRzIGFuZCBTZXRM
b2NhbHMuCisgICAgICAgIAorICAgICAgICBUaGlzIGZpeGVzIGEgYnVuY2ggb2YgYnVncyAobGlr
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MTM4IGJ1dAorICAg
ICAgICBhbHNvIG90aGVycyB0aGF0IEkgbm90aWNlZCB3aGVuIEkgc3RhcnRlZCB3cml0aW5nIG1v
cmUgdGFyZ2V0dGVkIHRlc3RzKSBhbmQgYWxsb3dzIHVzCisgICAgICAgIHRvIHJlbW92ZSBzb21l
IHNrZXRjaHkgY29kZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmg6
CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAg
ICAgKEpTQzo6aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpzZXRG
b3JPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6
CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpzdGVwT3Zlckluc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZUxvY2FsTGl2
ZW5lc3NGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpczo6cnVuTGl2ZW5lc3NGaXhwb2ludCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpczo6b3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpnZXRMaXZlbmVzc0luZm8pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MpOgorICAgICAgICAq
IGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOgorICAgICAgICAoSlNDOjpvcGVyYW5kVGhhdElzTm90QWx3
YXlzTGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xpdmUpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhcHR1cmVD
b3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FwdHVyZVN0YXJ0KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpjYXB0dXJlRW5kKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3Jp
Z2luLmNwcDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpkdW1wSW5Db250ZXh0KToK
KyAgICAgICAgKiBieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzKToKKyAg
ICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OmdldE91dCk6CisgICAgICAgIChKU0M6
OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlKToKKyAgICAgICAgKEpTQzo6RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M6OmdldExpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHQXZhaWxh
YmlsaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5OjpkdW1w
KToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OmR1bXBJbkNvbnRleHQpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6
QXZhaWxhYmlsaXR5OjpBdmFpbGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJp
bGl0eTo6dW5hdmFpbGFibGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6d2l0
aEZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OndpdGhOb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OndpdGhVbmF2YWlsYWJsZU5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6bm9kZUlzVW5kZWNpZGVkKToKKyAgICAgICAg
KEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6Om5vZGVJc1VuYXZhaWxhYmxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBdmFpbGFiaWxpdHk6Omhhc05vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWls
YWJpbGl0eTo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5OjpmbHVzaGVk
QXQpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6b3BlcmF0b3IhKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eTo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0
eTo6bWVyZ2VOb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5Ojp1bmF2YWls
YWJsZU1hcmtlcik6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdEaXNhc3NlbWJsZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxlcjo6RGlzYXNzZW1ibGVyKToKKyAgICAgICAgKiBkZmcv
REZHRmx1c2hGb3JtYXQuY3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBkZmcvREZHRmx1c2hGb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpyZXN1bHRGb3Ip
OgorICAgICAgICAoSlNDOjpERkc6OnVzZUtpbmRGb3IpOgorICAgICAgICAoSlNDOjpERkc6OmRh
dGFGb3JtYXRGb3IpOgorICAgICAgICAqIGRmZy9ERkdGbHVzaGVkQXQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkZsdXNoZWRBdDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0ZsdXNoZWRBdC5o
OgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoZWRBdDo6Rmx1c2hlZEF0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpGbHVzaGVkQXQ6Om1lcmdlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bGl2ZW5lc3NGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0xpdmVJbkJ5dGVj
b2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6YmFzZWxpbmVDb2RlQmxvY2tGb3IpOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdSZXN1cnJl
Y3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2U6OlJlc3VycmVjdGlvbkZvclZhbGlkYXRpb25Q
aGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6UmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1SZXN1cnJlY3Rpb25Gb3JWYWxpZGF0
aW9uKToKKyAgICAgICAgKiBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg6
IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZH
VmFsdWVTb3VyY2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6Zm9yRmx1c2hG
b3JtYXQpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAg
KiBmdGwvRlRMRXhpdFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmR1
bXBJbkNvbnRleHQpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Okxvd2VyREZHVG9MTFZNKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpjb21waWxlWm9tYmllSGludCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6aW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmVtaXRPU1JFeGl0Q2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudEZvck5vZGUpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpvYnNlcnZlTW92SGludCk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQp
OgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OmFsbG9jYSk6CisgICAgICAgICogZnRsL0ZUTFZhbHVlU291cmNlLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBmdGwvRlRMVmFsdWVTb3VyY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsbHZtL0xM
Vk1BUElGdW5jdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL0R1bXBDb250ZXh0LmNwcDoKKyAg
ICAgICAgKEpTQzo6RHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KToKKyAgICAgICAgKiBydW50aW1l
L0R1bXBDb250ZXh0Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICog
cnVudGltZS9TeW1ib2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6
Y2FwdHVyZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6U2hhcmVkU3ltYm9sVGFibGU6OmNhcHR1cmVF
bmQpOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6Y2FwdHVyZUNvdW50KToKKwog
MjAxMy0xMS0xNSAgcGVhdm9Ab3V0bG9vay5jb20gIDxwZWF2b0BvdXRsb29rLmNvbT4KIAogICAg
ICAgICBbV2luXSBKYXZhU2NyaXB0IGNyYXNoZXMgb24gNjQtYml0IHdpdGggSklUIGVuYWJsZWQu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTkzNTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTkxLDYgKzkxLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHQXJyYXlNb2RlLmNw
cAogICAgIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcAorICAgIGRmZy9ERkdBdmFpbGFi
aWxpdHkuY3BwCiAgICAgZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCiAgICAg
ZGZnL0RGR0Jhc2ljQmxvY2suY3BwCiAgICAgZGZnL0RGR0JpbmFyeVN3aXRjaC5jcHAKQEAgLTE1
OCw2ICsxNTksNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdQbGFu
LmNwcAogICAgIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdSZXN1cnJlY3Rpb25G
b3JWYWxpZGF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAK
ICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMCArMTAwLDExIEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVBy
b2ZpbGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxl
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaCBcCi0gICAg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgXAot
ICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaCBc
Ci0gICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAgXAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlQmFzaWNCbG9jay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUJhc2ljQmxvY2suaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaCBcCkBAIC0xMzIsNiArMTMzLDcgQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
aXRLaW5kLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeHByZXNzaW9uUmFuZ2VJbmZvLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oIFwKQEAgLTIwNyw2ICsyMDks
OCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXZhaWxhYmlsaXR5LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5jcHAgXApAQCAtMzU4LDYgKzM2Miw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVn
aXN0ZXJCYW5rLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdXJyZWN0aW9u
Rm9yVmFsaWRhdGlvblBoYXNlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzgsNiArMzM4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCIgLz4NCiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJyYXlNb2RlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAiIC8+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0F2YWlsYWJpbGl0eS5jcHAiIC8+DQogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIiAv
Pg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4N
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQmluYXJ5U3dpdGNoLmNwcCIgLz4N
CkBAIC00MDMsNiArNDA0LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQ
bGFuLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlv
bkluamVjdGlvblBoYXNlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVC5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcCIgLz4NCkBAIC03NDUsNiArNzQ3LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXEJ5VmFsSW5mby5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXEJ5dGVjb2RlQmFzaWNCbG9jay5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGlu
ZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5rSW5m
by5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5rU3Rh
dHVzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbFJldHVy
bk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIgLz4NCkBAIC03NjIsNiArNzY1LDcgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV4ZWN1dGlvbkNvdW50ZXIuaCIgLz4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxFeGl0S2luZC5oIiAvPg0KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV4cHJlc3Npb25SYW5nZUluZm8uaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxGdWxsQnl0ZWNvZGVMaXZlbnNz
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcR2V0QnlJZFN0YXR1
cy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEhhbmRsZXJJbmZv
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSW5saW5lQ2FsbEZy
YW1lU2V0LmgiIC8+DQpAQCAtODEyLDYgKzgxNiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHkuaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiIC8+DQpAQCAt
ODk1LDYgKzkwMCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHUmVnaXN0ZXJCYW5rLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR1JlZ2lzdGVyU2V0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdTYWZlVG9FeGVjdXRlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Njb3JlQm9hcmQuaCIgLz4NCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU5MzUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw4ICsxMDQsNiBAQAogCQkwRjIzNUJFMjE3MTc4RTFD
MDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjIzNUJDQzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyMzVCRTMx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkNEMTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExWYWx1ZUZvcm1hdC5jcHAgKi87IH07CiAJCTBGMjM1QkU0MTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExWYWx1ZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyMzVCQ0UxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYyMzVCRTUxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkNGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExW
YWx1ZVNvdXJjZS5jcHAgKi87IH07Ci0JCTBGMjM1QkU2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExW
YWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyMzVCRDAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyMzVCRUIxNzE3OEU3
MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkU3MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0QmFzZS5jcHAgKi87IH07CiAJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyMzVCRTgxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyMzVCRUQxNzE3OEU3MzAw
NjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJFOTE3MTc4RTczMDA2OTBDN0YgLyogREZH
T1NSRXhpdFByZXBhcmF0aW9uLmNwcCAqLzsgfTsKQEAgLTI2MCw2ICsyNTgsMTIgQEAKIAkJMEY2
Mzk0NzgxNURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDc2MTVEQ0Uz
NDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2Mzk0ODQxNUU0ODExODAwNkE1
OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjYzOTQ4MTE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNw
cCAqLzsgfTsKIAkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0ODIxNUU0
ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNv
ZGVMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2NjZFQzYx
ODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyog
REZHQXZhaWxhYmlsaXR5LmNwcCAqLzsgfTsKKwkJMEY2NjZFQzcxODM1NjcyQjAwRDAxN0YxIC8q
IERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NjZFQzMxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjY2RUND
MTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQ0Ex
ODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAg
Ki87IH07CisJCTBGNjY2RUNEMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JW
YWxpZGF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxp
ZGF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjgxNERG
M0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyog
REZHRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjcwMjVBOTE3MTRCMEZBMDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzAyNUE3MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwICovOyB9OwpAQCAtMTM5NSw4ICsxMzk5LDYgQEAKIAkJMEYy
MzVCQ0MxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGVExUaHVua3MuaDsgcGF0aCA9IGZ0bC9GVExUaHVua3MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCQ0QxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZh
bHVlRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFZh
bHVlRm9ybWF0LmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1ZUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMjM1QkNFMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZv
cm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExWYWx1ZUZvcm1hdC5o
OyBwYXRoID0gZnRsL0ZUTFZhbHVlRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGMjM1QkNGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExWYWx1ZVNvdXJjZS5jcHA7IHBhdGgg
PSBmdGwvRlRMVmFsdWVTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjIzNUJEMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVTb3VyY2UuaDsgcGF0aCA9IGZ0bC9GVExWYWx1
ZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIzNUJFNzE3MTc4RTcz
MDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHT1NSRXhpdEJhc2UuY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRCYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCRTgxNzE3OEU3MzAwNjkw
QzdGIC8qIERGR09TUkV4aXRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR09TUkV4aXRCYXNlLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdEJhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCRTkxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4
aXRQcmVwYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTUwLDYgKzE1NTIsMTIgQEAK
IAkJMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oOyBwYXRoID0gZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0ODExNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5
TW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBcnJheU1v
ZGUuY3BwOyBwYXRoID0gZGZnL0RGR0FycmF5TW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQXJyYXlNb2RlLmg7IHBhdGggPSBkZmcv
REZHQXJyYXlNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjY2RUJFMTgz
NTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQkYxODM1NjZGOTAwRDAx
N0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZ1bGxCeXRlY29kZUxpdmVuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjY2RUMyMTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXZhaWxhYmlsaXR5LmNwcDsgcGF0
aCA9IGRmZy9ERkdBdmFpbGFiaWxpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0F2YWlsYWJpbGl0eS5oOyBwYXRoID0gZGZnL0RG
R0F2YWlsYWJpbGl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2NkVDQTE4
MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1Jlc3VycmVjdGlvbkZvclZh
bGlkYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlv
blBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQ0IxODM2QjM3
RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhh
c2UuaDsgcGF0aCA9IGRmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERG
R0FkamFjZW5jeUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWRq
YWNlbmN5TGlzdC5oOyBwYXRoID0gZGZnL0RGR0FkamFjZW5jeUxpc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRWRnZS5oOyBwYXRoID0gZGZnL0RG
R0VkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MDI1QTcxNzE0QjBGODAw
MzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yODQ0LDggKzI4NTIsNiBAQAogCQkJCTBGMjM1QkNEMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExWYWx1ZUZvcm1hdC5jcHAgKi8sCiAJCQkJMEYyMzVCQ0UxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTFZhbHVlRm9ybWF0LmggKi8sCiAJCQkJMEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZU
TFZhbHVlRnJvbUJsb2NrLmggKi8sCi0JCQkJMEYyMzVCQ0YxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TFZhbHVlU291cmNlLmNwcCAqLywKLQkJCQkwRjIzNUJEMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
VmFsdWVTb3VyY2UuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gZnRsOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKQEAgLTM3NDQsNiArMzc1MCw4IEBACiAJCQkJMEY2Mzk0ODIxNUU0ODExNDAw
NkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovLAogCQkJCUE3RDlBMjhGMTdBMEJDNzQwMEVFMjYx
OCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCAqLywKIAkJCQlBN0Q5QTI5MDE3QTBCQzc0
MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oICovLAorCQkJCTBGNjY2RUMyMTgz
NTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwICovLAorCQkJCTBGNjY2RUMzMTgz
NTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuaCAqLywKIAkJCQkwRjcxNENBMTE2RUE5
MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJ
MEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
aCAqLywKIAkJCQlBN0Q4OUNFMzE3QTBCOENDMDA3NzNBRDggLyogREZHQmFzaWNCbG9jay5jcHAg
Ki8sCkBAIC0zODk0LDYgKzM5MDIsOCBAQAogCQkJCTBGRkZDOTUxMTRFRjkwOTUwMEM3MjUzMiAv
KiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTIxNEVG
OTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggKi8sCiAJCQkJ
ODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAorCQkJCTBG
NjY2RUNBMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhh
c2UuY3BwICovLAorCQkJCTBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rp
b25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLywKIAkJCQlBNzdBNDIzQzE3QTBCQkZEMDBBOERCODEg
LyogREZHU2FmZVRvRXhlY3V0ZS5oICovLAogCQkJCUE3NDEwMTdFMTc5REFGODAwMDJFQjhCQSAv
KiBERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oICovLAogCQkJCTg2RUNB
M0Y5MTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmggKi8sCkBAIC00MDM2LDE1ICs0
MDQ2LDE2IEBACiAJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQzJGQ0FFMEMxN0E5QzI0
RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi8sCi0JCQkJQzJGQ0FFMEQxN0E5
QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovLAotCQkJCUMyRkNBRTBFMTdB
OUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwICovLAotCQkJCUMy
RkNBRTBGMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLywK
IAkJCQkwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5j
cHAgKi8sCiAJCQkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblBy
b2ZpbGUuaCAqLywKIAkJCQkwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxl
LmNwcCAqLywKIAkJCQkwRjYzOTQ1MjE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmgg
Ki8sCisJCQkJQzJGQ0FFMEMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5j
cHAgKi8sCisJCQkJQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9j
ay5oICovLAogCQkJCTBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRp
b25zLmggKi8sCisJCQkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5jcHAgKi8sCisJCQkJQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5oICovLAorCQkJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAv
KiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8sCiAJCQkJMEY4MDIzRTkxNjEz
ODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovLAogCQkJCTBGMEI4M0FFMTRCQ0Y3MTQwMDg4
NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwICovLAogCQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4NUI0
RiAvKiBDYWxsTGlua0luZm8uaCAqLywKQEAgLTQwNzMsNiArNDA4NCw3IEBACiAJCQkJMEZCMTA1
ODIxNjc1NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCAqLywKIAkJCQkwRkIxMDU4MzE2NzU0
ODBDMDBGOEFCNkUgLyogRXhpdEtpbmQuaCAqLywKIAkJCQkwRjBCODNBQTE0QkNGNUI5MDA4ODVC
NEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oICovLAorCQkJCTBGNjY2RUJGMTgzNTY2RjkwMEQw
MTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovLAogCQkJCTBGOTMzMjk1MTRDQTdEQzEw
MDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5NjE0Q0E3REMxMDA4
NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5oICovLAogCQkJCTBGMEI4M0E4MTRCQ0Y1NUUwMDg4NUI0
RiAvKiBIYW5kbGVySW5mby5oICovLApAQCAtNDQzMSw3ICs0NDQzLDYgQEAKIAkJCQkwRkVBMEEy
MDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjIzNUJFNDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMEYyMzVCRTYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVl
U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNDBFMTZGNUNEMDBCMzQ0NjAgLyog
RnVuY3Rpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxQTAxNkI3MkEx
QTAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDA1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvblByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC00NDYxLDYgKzQ0NzIsNyBAQAogCQkJCTJBNkY0NjI2MTdFOTU5Q0UwMEM0NUM5
OCAvKiBIZWFwT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEY5NzQ0NzEzOEM4NTNF
MDBEQTFDNjcgLyogSGVhcFJvb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjREMzFF
MzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0
dXJuVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDBGMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTQ3MDMsNiArNDcxNSw3IEBACiAJCQkJ
OTVDRDQ1NzcwRTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDUxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlTm9kZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNzI5QTUxNjZBRDM1MTAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNv
ZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlC
OTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMTM5MTJBMTY3NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJBMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxl
ckNvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTQ4MTMsNiArNDgyNiw3IEBACiAJCQkJ
QTdBOEFGM0YxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QThBRjQwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjY2RUM3MTgzNTY3MkIwMEQwMTdGMSAv
KiBERkdBdmFpbGFiaWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjYwMTgyMTYzOUZEMkEw
MDM3MkJBMyAvKiBVbmxpbmtlZENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRTg5
MkMxNkQwMjhBRDAwOUU0RkQyIC8qIFVudXNlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICov
LApAQCAtNDg0Myw2ICs0ODU3LDcgQEAKIAkJCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyog
V3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY4OENCMTYwRUQxMkI0
RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDUxNTM5Qjkx
MkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjY2RUNEMTgz
NkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg3MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJy
SklULmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyogWWFy
clBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC01NDUxLDcgKzU0NjYsNiBAQAogCQkJCTBGRUEw
QTE2MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjIzNUJFMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMjM1QkUzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkwRjIzNUJFNTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0IxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0
aW9uQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUYxNkI3MkExNzAw
NURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5Q0MxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNTYzMCw2ICs1NjQ0LDcgQEAKIAkJCQkwRkY3MjlCMzE2NkFEMzVDMDAwRjVC
QTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjQxNjZB
RDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzJGQ0FFMTAxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjY2NkVDQzE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0
aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3
NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmls
ZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01Njk4LDYgKzU3MTMsNyBAQAogCQkJ
CTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkVEOTRGMzAxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nTWFjLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjY2RUM2MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFp
bGFiaWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjUxNTg1M0NFMDAwNEE0RTdE
IC8qIFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFDRjczNzcxNzFDQTZGQjAw
QzlCQjFFIC8qIFdlYWsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRFODRGOUUxNEVFMUFDQzAw
RDZENUQ0IC8qIFdlYWtCbG9jay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmgJKHJldmlz
aW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJh
c2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQ29kZUJsb2NrOwogCi10eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIEZhc3RC
aXRWZWN0b3IsIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dW5zaWduZWQ+ID4gQnl0ZWNvZGVUb0JpdG1hcE1hcDsKLQogY2xhc3MgQnl0
ZWNvZGVCYXNpY0Jsb2NrIDogcHVibGljIFJlZkNvdW50ZWQ8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiB7
CiBwdWJsaWM6CiAgICAgZW51bSBTcGVjaWFsQmxvY2tUeXBlIHsgRW50cnlCbG9jaywgRXhpdEJs
b2NrIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKIAorI2luY2x1ZGUgIkJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNp
bmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFy
Z2V0cy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM4LDQ0ICs0MCwyMyBAQCBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lCiAgICAgY29tcHV0ZSgpOwogfQogCi1zdGF0
aWMgaW50IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17
Ci0gICAgaWYgKCFjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgpOwotfQot
Ci1zdGF0aWMgaW50IGNhcHR1cmVTdGFydChDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBp
ZiAoIWNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCk7Ci19Ci0KLXN0YXRp
YyBpbnQgY2FwdHVyZUVuZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBpZiAoIWNvZGVC
bG9jay0+c3ltYm9sVGFibGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvZGVC
bG9jay0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOwotfQotCiBzdGF0aWMgYm9vbCBpc1Zh
bGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50IG9wZXJhbmQp
CiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWcob3BlcmFuZCk7CiAgICAgcmV0dXJu
ICFjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KG9wZXJhbmQpIC8vIERvbid0IGNh
cmUgYWJvdXQgY29uc3RhbnRzLgogICAgICAgICAmJiB2aXJ0dWFsUmVnLmlzTG9jYWwoKSAvLyBE
b24ndCBjYXJlIGFib3V0IGFyZ3VtZW50cy4KLSAgICAgICAgJiYgKCFudW1iZXJPZkNhcHR1cmVk
VmFyaWFibGVzKGNvZGVCbG9jaykgLy8gSWYgd2UgaGF2ZSBubyBjYXB0dXJlZCB2YXJpYWJsZXMs
IHdlJ3JlIGdvb2QgdG8gZ28uCi0gICAgICAgICAgICB8fCAodmlydHVhbFJlZy5vZmZzZXQoKSA+
IGNhcHR1cmVTdGFydChjb2RlQmxvY2spIHx8ICh2aXJ0dWFsUmVnLm9mZnNldCgpIDw9IGNhcHR1
cmVFbmQoY29kZUJsb2NrKSkpKTsKKyAgICAgICAgJiYgKCFjb2RlQmxvY2stPmNhcHR1cmVDb3Vu
dCgpIC8vIElmIHdlIGhhdmUgbm8gY2FwdHVyZWQgdmFyaWFibGVzLCB3ZSdyZSBnb29kIHRvIGdv
LgorICAgICAgICAgICAgfHwgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPiBjb2RlQmxvY2stPmNhcHR1
cmVTdGFydCgpIHx8ICh2aXJ0dWFsUmVnLm9mZnNldCgpIDw9IGNvZGVCbG9jay0+Y2FwdHVyZUVu
ZCgpKSkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRGb3JPcGVyYW5kKENvZGVCbG9jayogY29kZUJs
b2NrLCBGYXN0Qml0VmVjdG9yJiBiaXRzLCBpbnQgb3BlcmFuZCkKIHsKICAgICBBU1NFUlQoaXNW
YWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBvcGVyYW5kKSk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWcob3BlcmFuZCk7Ci0gICAgaWYgKHZpcnR1YWxSZWcub2Zmc2V0
KCkgPiBjYXB0dXJlU3RhcnQoY29kZUJsb2NrKSkKKyAgICBpZiAodmlydHVhbFJlZy5vZmZzZXQo
KSA+IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkpCiAgICAgICAgIGJpdHMuc2V0KHZpcnR1YWxS
ZWcudG9Mb2NhbCgpKTsKICAgICBlbHNlCi0gICAgICAgIGJpdHMuc2V0KHZpcnR1YWxSZWcudG9M
b2NhbCgpIC0gbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhjb2RlQmxvY2spKTsKKyAgICAgICAg
Yml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkgLSBjb2RlQmxvY2stPmNhcHR1cmVDb3VudCgp
KTsKIH0KIAogc3RhdGljIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldChDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHVz
ZXMpCkBAIC0zMDMsOCArMjg0LDggQEAgc3RhdGljIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29k
ZU9mZnNldAogICAgICAgICBpbnQgYmFzZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAg
ICAgICAgaW50IGNvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVn
aXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGJhc2UgKyBpKSkKLSAgICAgICAgICAgICAgICBz
ZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgYmFzZSArIGkpOworICAgICAgICAgICAgaWYg
KGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgYmFzZSAtIGkpKQorICAgICAg
ICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBiYXNlIC0gaSk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMxNSwxMSArMjk2LDExIEBAIHN0YXRp
YyB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQKICAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkK
ICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwogICAgICAgICBpbnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZDsKKyAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZDsKICAgICAgICAgaW50IGxhc3RBcmcgPSByZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6
dGhpc0FyZ3VtZW50T2Zmc2V0KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnQ291
bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNv
ZGVCbG9jaywgbGFzdEFyZyAtIGkpKQotICAgICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29k
ZUJsb2NrLCB1c2VzLCBsYXN0QXJnIC0gaSk7CisgICAgICAgIGZvciAoaW50IGkgPSBvcGNvZGVJ
RCA9PSBvcF9jb25zdHJ1Y3QgPyAxIDogMDsgaSA8IGFyZ0NvdW50OyBpKyspIHsKKyAgICAgICAg
ICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGxhc3RBcmcgKyBp
KSkKKyAgICAgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgbGFzdEFy
ZyArIGkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMzMsMTAgKzMx
NCw5IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQKICAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQotI2RlZmluZSBMTElOVF9IRUxQRVJfT1BDT0RF
UyhvcGNvZGUsIGxlbmd0aCkgY2FzZSBvcGNvZGU6Ci0gICAgRk9SX0VBQ0hfTExJTlRfT1BDT0RF
X0VYVEVOU0lPTihMTElOVF9IRUxQRVJfT1BDT0RFUykKLSAgICAgICAgcmV0dXJuOwotI3VuZGVm
IExMSU5UX0hFTFBFUl9PUENPREVTCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkBAIC00OTIsOCAr
NDcyLDcgQEAgc3RhdGljIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldAogICAgIGNh
c2Ugb3BfZW50ZXI6IHsKICAgICAgICAgZGVmcy5zZXRBbGwoKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICB9CisgICAgfSB9CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBnZXRMZWFkZXJPZmZz
ZXRGb3JCYXNpY0Jsb2NrKFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+KiBiYXNpY0Jsb2NrKQpA
QCAtNTQwLDEzICs1MTksMzIgQEAgc3RhdGljIEJ5dGVjb2RlQmFzaWNCbG9jayogZmluZEJhc2lj
QmxvYwogICAgIHJldHVybiBiYXNpY0Jsb2NrWzFdLmdldCgpOwogfQogCitzdGF0aWMgdm9pZCBz
dGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9jayogY29kZUJsb2NrLCBWZWN0b3I8UmVmUHRyPEJ5
dGVjb2RlQmFzaWNCbG9jaz4+JiBiYXNpY0Jsb2NrcywgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQs
IEZhc3RCaXRWZWN0b3ImIHVzZXMsIEZhc3RCaXRWZWN0b3ImIGRlZnMsIEZhc3RCaXRWZWN0b3Im
IG91dCkKK3sKKyAgICB1c2VzLmNsZWFyQWxsKCk7CisgICAgZGVmcy5jbGVhckFsbCgpOworICAg
IAorICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9m
ZnNldCwgdXNlcyk7CisgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ss
IGJ5dGVjb2RlT2Zmc2V0LCBkZWZzKTsKKyAgICAKKyAgICBvdXQuZXhjbHVkZShkZWZzKTsKKyAg
ICBvdXQubWVyZ2UodXNlcyk7CisgICAgCisgICAgLy8gSWYgd2UgaGF2ZSBhbiBleGNlcHRpb24g
aGFuZGxlciwgd2Ugd2FudCB0aGUgbGl2ZS1pbiB2YXJpYWJsZXMgb2YgdGhlIAorICAgIC8vIGV4
Y2VwdGlvbiBoYW5kbGVyIGJsb2NrIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBsaXZlLWluIG9mIHRo
aXMgcGFydGljdWxhciBieXRlY29kZS4KKyAgICBpZiAoSGFuZGxlckluZm8qIGhhbmRsZXIgPSBj
b2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkpIHsKKyAg
ICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBoYW5kbGVyQmxvY2sgPSBmaW5kQmFzaWNCbG9ja1dp
dGhMZWFkZXJPZmZzZXQoYmFzaWNCbG9ja3MsIGhhbmRsZXItPnRhcmdldCk7CisgICAgICAgIEFT
U0VSVChoYW5kbGVyQmxvY2spOworICAgICAgICBvdXQubWVyZ2UoaGFuZGxlckJsb2NrLT5pbigp
KTsKKyAgICB9Cit9CisKIHN0YXRpYyB2b2lkIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNv
ZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2ss
IFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiA+JiBiYXNpY0Jsb2NrcywgdW5zaWdu
ZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKCFi
bG9jay0+aXNFeGl0QmxvY2soKSk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNFbnRyeUJsb2NrKCkp
OwogCiAgICAgRmFzdEJpdFZlY3RvciBvdXQgPSBibG9jay0+b3V0KCk7Ci0gICAgSGFuZGxlcklu
Zm8qIGhhbmRsZXIgPSAwOwogCiAgICAgRmFzdEJpdFZlY3RvciB1c2VzOwogICAgIEZhc3RCaXRW
ZWN0b3IgZGVmczsKQEAgLTU1NywyMyArNTU1LDggQEAgc3RhdGljIHZvaWQgY29tcHV0ZUxvY2Fs
TGl2ZW5lc3NGb3JCeXRlYwogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2Nr
LT5ieXRlY29kZU9mZnNldHMoKVtpXTsKICAgICAgICAgaWYgKHRhcmdldE9mZnNldCA+IGJ5dGVj
b2RlT2Zmc2V0KQogICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgdXNlcy5jbGVhckFsbCgp
OwotICAgICAgICBkZWZzLmNsZWFyQWxsKCk7Ci0KLSAgICAgICAgY29tcHV0ZVVzZXNGb3JCeXRl
Y29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCB1c2VzKTsKLSAgICAgICAgY29t
cHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCBkZWZz
KTsKLQotICAgICAgICBvdXQuZXhjbHVkZShkZWZzKTsKLSAgICAgICAgb3V0Lm1lcmdlKHVzZXMp
OwotCi0gICAgICAgIC8vIElmIHdlIGhhdmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIHdlIHdhbnQg
dGhlIGxpdmUtaW4gdmFyaWFibGVzIG9mIHRoZSAKLSAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRs
ZXIgYmxvY2sgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGxpdmUtaW4gb2YgdGhpcyBwYXJ0aWN1bGFy
IGJ5dGVjb2RlLgotICAgICAgICBpZiAoKGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JC
eXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkpKSB7Ci0gICAgICAgICAgICBCeXRlY29kZUJh
c2ljQmxvY2sqIGhhbmRsZXJCbG9jayA9IGZpbmRCYXNpY0Jsb2NrV2l0aExlYWRlck9mZnNldChi
YXNpY0Jsb2NrcywgaGFuZGxlci0+dGFyZ2V0KTsKLSAgICAgICAgICAgIEFTU0VSVChoYW5kbGVy
QmxvY2spOwotICAgICAgICAgICAgb3V0Lm1lcmdlKGhhbmRsZXJCbG9jay0+aW4oKSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBi
YXNpY0Jsb2NrcywgYnl0ZWNvZGVPZmZzZXQsIHVzZXMsIGRlZnMsIG91dCk7CiAgICAgfQogCiAg
ICAgcmVzdWx0LnNldChvdXQpOwpAQCAtNTkwLDcgKzU3Myw3IEBAIHZvaWQgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpydW5MaXZlbmUKIHsKICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5r
ZWRDb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKICAgICB1bnNp
Z25lZCBudW1iZXJPZlZhcmlhYmxlcyA9IHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZhcnMgKyAK
LSAgICAgICAgdW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIC0gbnVtYmVy
T2ZDYXB0dXJlZFZhcmlhYmxlcyhtX2NvZGVCbG9jayk7CisgICAgICAgIHVubGlua2VkQ29kZUJs
b2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAtIG1fY29kZUJsb2NrLT5jYXB0dXJlQ291bnQoKTsK
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jhc2ljQmxvY2tzLnNpemUoKTsgaSsr
KSB7CiAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jhc2ljQmxvY2tzW2ld
LmdldCgpOwpAQCAtNjI5LDM2ICs2MTIsMzAgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXM6OmdldExpdmVuZQogCiBib29sIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6b3BlcmFuZElz
TGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9wZXJhbmQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
KQogewotICAgIGludCBudW1DYXB0dXJlZFZhcnMgPSBudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVz
KG1fY29kZUJsb2NrKTsKLSAgICBpZiAoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlzQXJndW1l
bnQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKG9wZXJhbmQgPD0gY2FwdHVyZVN0
YXJ0KG1fY29kZUJsb2NrKSAmJiBvcGVyYW5kID4gY2FwdHVyZUVuZChtX2NvZGVCbG9jaykpCisg
ICAgaWYgKG9wZXJhbmRJc0Fsd2F5c0xpdmUobV9jb2RlQmxvY2ssIG9wZXJhbmQpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICBGYXN0Qml0VmVjdG9yIHJlc3VsdDsKICAgICBnZXRMaXZlbmVz
c0luZm9Gb3JOb25DYXB0dXJlZFZhcnNBdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBy
ZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQuZ2V0KG9wZXJhbmQgLSBudW1DYXB0dXJlZFZhcnMp
OworICAgIHJldHVybiBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShtX2NvZGVCbG9j
aywgcmVzdWx0LCBvcGVyYW5kKTsKIH0KIAotRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpCitGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mbyhDb2RlQmxvY2sqIGNvZGVC
bG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0KQogewotICAgIEZhc3RCaXRWZWN0b3IgdGVt
cDsKICAgICBGYXN0Qml0VmVjdG9yIHJlc3VsdDsKIAotICAgIGdldExpdmVuZXNzSW5mb0Zvck5v
bkNhcHR1cmVkVmFyc0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIHRlbXApOwotCi0g
ICAgdW5zaWduZWQgbnVtQ2FwdHVyZWRWYXJzID0gbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyht
X2NvZGVCbG9jayk7CisgICAgdW5zaWduZWQgbnVtQ2FwdHVyZWRWYXJzID0gY29kZUJsb2NrLT5j
YXB0dXJlQ291bnQoKTsKICAgICBpZiAobnVtQ2FwdHVyZWRWYXJzKSB7Ci0gICAgICAgIGludCBm
aXJzdENhcHR1cmVkTG9jYWwgPSBWaXJ0dWFsUmVnaXN0ZXIoY2FwdHVyZVN0YXJ0KG1fY29kZUJs
b2NrKSkudG9Mb2NhbCgpOwotICAgICAgICByZXN1bHQucmVzaXplKHRlbXAubnVtQml0cygpICsg
bnVtQ2FwdHVyZWRWYXJzKTsKKyAgICAgICAgaW50IGZpcnN0Q2FwdHVyZWRMb2NhbCA9IFZpcnR1
YWxSZWdpc3Rlcihjb2RlQmxvY2stPmNhcHR1cmVTdGFydCgpKS50b0xvY2FsKCk7CisgICAgICAg
IHJlc3VsdC5yZXNpemUob3V0Lm51bUJpdHMoKSArIG51bUNhcHR1cmVkVmFycyk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1DYXB0dXJlZFZhcnM7ICsraSkKICAgICAgICAg
ICAgIHJlc3VsdC5zZXQoZmlyc3RDYXB0dXJlZExvY2FsICsgaSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIHJlc3VsdC5yZXNpemUodGVtcC5udW1CaXRzKCkpOworICAgICAgICByZXN1bHQucmVzaXpl
KG91dC5udW1CaXRzKCkpOwogCi0gICAgaW50IHRlbXBMZW5ndGggPSB0ZW1wLm51bUJpdHMoKTsK
LSAgICBBU1NFUlQodGVtcExlbmd0aCA+PSAwKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRl
bXBMZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoIXRlbXAuZ2V0KGkpKQorICAgIGludCBvdXRM
ZW5ndGggPSBvdXQubnVtQml0cygpOworICAgIEFTU0VSVChvdXRMZW5ndGggPj0gMCk7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBvdXRMZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoIW91dC5n
ZXQoaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAoIW51bUNhcHR1cmVk
VmFycykgewpAQCAtNjY2LDcgKzY0Myw3IEBAIEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzOjoKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLm9mZnNldCgpID4gY2FwdHVyZVN0YXJ0KG1f
Y29kZUJsb2NrKSkKKyAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLm9mZnNl
dCgpID4gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSkKICAgICAgICAgICAgIHJlc3VsdC5zZXQo
aSk7CiAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICByZXN1bHQuc2V0KG51bUNhcHR1cmVkVmFy
cyArIGkpOwpAQCAtNjc0LDYgKzY1MSwzOSBAQCBGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpczo6CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorRmFzdEJpdFZlY3RvciBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgRmFzdEJpdFZlY3RvciBvdXQ7CisgICAgZ2V0
TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldChieXRlY29kZU9m
ZnNldCwgb3V0KTsKKyAgICByZXR1cm4gZ2V0TGl2ZW5lc3NJbmZvKG1fY29kZUJsb2NrLCBvdXQp
OworfQorCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZUZ1bGxMaXZlbmVz
cyhGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgcmVzdWx0KQoreworICAgIEZhc3RCaXRWZWN0b3Igb3V0
OworICAgIEZhc3RCaXRWZWN0b3IgdXNlczsKKyAgICBGYXN0Qml0VmVjdG9yIGRlZnM7CisgICAg
CisgICAgcmVzdWx0Lm1fY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CisgICAgcmVzdWx0Lm1fbWFw
LmNsZWFyKCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9iYXNpY0Jsb2Nrcy5zaXpl
KCk7IGktLTspIHsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmFzaWNC
bG9ja3NbaV0uZ2V0KCk7CisgICAgICAgIGlmIChibG9jay0+aXNFbnRyeUJsb2NrKCkgfHwgYmxv
Y2stPmlzRXhpdEJsb2NrKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAg
ICAgIG91dCA9IGJsb2NrLT5vdXQoKTsKKyAgICAgICAgdXNlcy5yZXNpemUob3V0Lm51bUJpdHMo
KSk7CisgICAgICAgIGRlZnMucmVzaXplKG91dC5udW1CaXRzKCkpOworICAgICAgICAKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0cygpLnNpemUoKTsgaS0t
OykgeworICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+Ynl0ZWNv
ZGVPZmZzZXRzKClbaV07CisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKG1fY29kZUJs
b2NrLCBtX2Jhc2ljQmxvY2tzLCBieXRlY29kZU9mZnNldCwgdXNlcywgZGVmcywgb3V0KTsKKyAg
ICAgICAgICAgIHJlc3VsdC5tX21hcC5hZGQoYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0
cygpCiB7CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9jb2RlQmxvY2stPnZtKCkt
PmludGVycHJldGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAkocmV2aXNpb24gMTU5MzUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyArMzQsMTYgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBGdWxsQnl0ZWNvZGVMaXZlbmVzczsKIAogY2xhc3Mg
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIHsKIHB1YmxpYzoKICAgICBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMoQ29kZUJsb2NrKik7Ci0KKyAgICAKICAgICBib29sIG9wZXJhbmRJc0xpdmVBdEJ5
dGVjb2RlT2Zmc2V0KGludCBvcGVyYW5kLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAg
RmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KTsKKyAgICAKKyAgICB2b2lkIGNvbXB1dGVGdWxsTGl2ZW5lc3MoRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MmIHJlc3VsdCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjb21wdXRlKCk7
CkBAIC01Myw2ICs1NiwxMiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVC
YXNpY0Jsb2NrPiA+IG1fYmFzaWNCbG9ja3M7CiB9OwogCitpbmxpbmUgYm9vbCBvcGVyYW5kSXNB
bHdheXNMaXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBpbnQgb3BlcmFuZCk7CitpbmxpbmUgYm9v
bCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Y29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CitpbmxpbmUgYm9vbCBvcGVy
YW5kSXNMaXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQs
IGludCBvcGVyYW5kKTsKKworRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm8oQ29kZUJsb2Nr
KiwgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXNJbmxpbmVzX2gKKyNkZWZpbmUgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lc19o
CisKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5
c0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGludCBvcGVyYW5kKQoreworICAgIGlmIChWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNBcmd1bWVudCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gb3BlcmFuZCA8PSBjb2RlQmxvY2stPmNhcHR1cmVTdGFydCgpICYmIG9wZXJh
bmQgPiBjb2RlQmxvY2stPmNhcHR1cmVFbmQoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmFuZFRo
YXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZhc3RC
aXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpCit7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWcob3BlcmFuZCk7CisgICAgaWYgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPiBjb2RlQmxvY2st
PmNhcHR1cmVTdGFydCgpKQorICAgICAgICByZXR1cm4gb3V0LmdldCh2aXJ0dWFsUmVnLnRvTG9j
YWwoKSk7CisgICAgc2l6ZV90IGluZGV4ID0gdmlydHVhbFJlZy50b0xvY2FsKCkgLSBjb2RlQmxv
Y2stPmNhcHR1cmVDb3VudCgpOworICAgIGlmIChpbmRleCA+PSBvdXQubnVtQml0cygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG91dC5nZXQoaW5kZXgpOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYW5kSXNMaXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0
VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoreworICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNM
aXZlKGNvZGVCbG9jaywgb3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xp
dmUoY29kZUJsb2NrLCBvdXQsIG9wZXJhbmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTkzNTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1NCw2ICszNTQsMjcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJu
IG1fbmVlZHNBY3RpdmF0aW9uOwogICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBjYXB0dXJlQ291
bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291bnQo
KTsKKyAgICB9CisgICAgCisgICAgaW50IGNhcHR1cmVTdGFydCgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoIXN5bWJvbFRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpOworICAgIH0KKyAgICAKKyAgICBp
bnQgY2FwdHVyZUVuZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIXN5bWJvbFRhYmxlKCkp
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlKCktPmNh
cHR1cmVFbmQoKTsKKyAgICB9CiAKICAgICBib29sIGlzQ2FwdHVyZWQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIElubGluZUNhbGxGcmFtZSogPSAwKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDE1
OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgSW5saW5lQ2FsbEZyYW1lOjpk
dW1wSW5Db250ZXh0KFByaW4KICAgICBlbHNlCiAgICAgICAgIG91dC5wcmludCgiLCBrbm93biBj
YWxsZWU6ICIsIGluQ29udGV4dChjYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLCBjb250ZXh0KSk7
CiAgICAgb3V0LnByaW50KCIsIG51bUFyZ3MrdGhpcyA9ICIsIGFyZ3VtZW50cy5zaXplKCkpOwot
ICAgIG91dC5wcmludCgiLCBzdGFjayA+PSByIiwgc3RhY2tPZmZzZXQpOworICAgIG91dC5wcmlu
dCgiLCBzdGFjayA8IGxvYyIsIFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCkudG9Mb2NhbCgp
KTsKICAgICBvdXQucHJpbnQoIj4iKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBG
dWxsQnl0ZWNvZGVMaXZlbmVzc19oCisjZGVmaW5lIEZ1bGxCeXRlY29kZUxpdmVuZXNzX2gKKwor
I2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CisKK3R5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwg
RmFzdEJpdFZlY3RvciwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4gPiBCeXRlY29kZVRvQml0bWFwTWFwOworCitjbGFz
cyBGdWxsQnl0ZWNvZGVMaXZlbmVzcyB7CitwdWJsaWM6CisgICAgRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MoKSA6IG1fY29kZUJsb2NrKDApIHsgfQorICAgIAorICAgIC8vIFdlIHNheSAib3V0IiB0byBy
ZWZlciB0byB0aGUgYml0dmVjdG9yIHRoYXQgY29udGFpbnMgcmF3IHJlc3VsdHMgZm9yIGEgYnl0
ZWNvZGUKKyAgICAvLyBpbnN0cnVjdGlvbi4KKyAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBnZXRP
dXQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEJ5dGVjb2Rl
VG9CaXRtYXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKGJ5dGVjb2RlSW5k
ZXgpOworICAgICAgICBBU1NFUlQoaXRlciAhPSBtX21hcC5lbmQoKSk7CisgICAgICAgIHJldHVy
biBpdGVyLT52YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYW5kSXNMaXZlKGludCBv
cGVyYW5kLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUobV9jb2RlQmxvY2ssIG9wZXJhbmQpIHx8IG9wZXJhbmRU
aGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKG1fY29kZUJsb2NrLCBnZXRPdXQoYnl0ZWNvZGVJbmRl
eCksIG9wZXJhbmQpOworICAgIH0KKyAgICAKKyAgICBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNz
KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZ2V0
TGl2ZW5lc3NJbmZvKG1fY29kZUJsb2NrLCBnZXRPdXQoYnl0ZWNvZGVJbmRleCkpOworICAgIH0K
KyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
czsKKyAgICAKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIEJ5dGVjb2RlVG9CaXRt
YXBNYXAgbV9tYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEZ1bGxC
eXRlY29kZUxpdmVuZXNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
dmFpbGFiaWxpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXZhaWxhYmlsaXR5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXZhaWxhYmlsaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBdmFpbGFiaWxpdHkuaCIKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK3ZvaWQgQXZhaWxhYmlsaXR5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KG1fZmx1c2hlZEF0LCAiLyIpOworICAgIAorICAgIGlmIChu
b2RlSXNVbmRlY2lkZWQoKSkgeworICAgICAgICBvdXQucHJpbnQoIlVuZGVjaWRlZCIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChub2RlSXNVbmF2YWlsYWJsZSgpKSB7
CisgICAgICAgIG91dC5wcmludCgiVW5hdmFpbGFibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBvdXQucHJpbnQobm9kZSgpKTsKK30KKwordm9pZCBBdmFpbGFiaWxpdHk6
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqKSBjb25zdAorewor
ICAgIGR1bXAob3V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXZhaWxhYmlsaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXZhaWxhYmlsaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdB
dmFpbGFiaWxpdHlfaAorI2RlZmluZSBERkdBdmFpbGFiaWxpdHlfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdGbHVzaGVkQXQuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1
Y3QgTm9kZTsKKworY2xhc3MgQXZhaWxhYmlsaXR5IHsKK3B1YmxpYzoKKyAgICBBdmFpbGFiaWxp
dHkoKQorICAgICAgICA6IG1fbm9kZSgwKQorICAgICAgICAsIG1fZmx1c2hlZEF0KERlYWRGbHVz
aCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEF2YWlsYWJpbGl0eShOb2RlKiBu
b2RlKQorICAgICAgICA6IG1fbm9kZShub2RlKQorICAgICAgICAsIG1fZmx1c2hlZEF0KENvbmZs
aWN0aW5nRmx1c2gpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBBdmFpbGFiaWxp
dHkoRmx1c2hlZEF0IGZsdXNoZWRBdCkKKyAgICAgICAgOiBtX25vZGUodW5hdmFpbGFibGVNYXJr
ZXIoKSkKKyAgICAgICAgLCBtX2ZsdXNoZWRBdChmbHVzaGVkQXQpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBBdmFpbGFiaWxpdHkoTm9kZSogbm9kZSwgRmx1c2hlZEF0IGZsdXNoZWRBdCkKKyAg
ICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAgICAgLCBtX2ZsdXNoZWRBdChmbHVzaGVkQXQpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgQXZhaWxhYmlsaXR5IHVuYXZhaWxhYmxlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBBdmFpbGFiaWxpdHkodW5hdmFpbGFibGVNYXJrZXIoKSwg
Rmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKKyAgICB9CisgICAgCisgICAgQXZhaWxhYmls
aXR5IHdpdGhGbHVzaChGbHVzaGVkQXQgZmx1c2gpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gQXZhaWxhYmlsaXR5KG1fbm9kZSwgZmx1c2gpOworICAgIH0KKyAgICAKKyAgICBBdmFpbGFi
aWxpdHkgd2l0aE5vZGUoTm9kZSogbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBB
dmFpbGFiaWxpdHkobm9kZSwgbV9mbHVzaGVkQXQpOworICAgIH0KKyAgICAKKyAgICBBdmFpbGFi
aWxpdHkgd2l0aFVuYXZhaWxhYmxlTm9kZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
d2l0aE5vZGUodW5hdmFpbGFibGVNYXJrZXIoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbm9k
ZUlzVW5kZWNpZGVkKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlID09IDA7IH0KKyAgICBib29sIG5v
ZGVJc1VuYXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlID09IHVuYXZhaWxhYmxlTWFy
a2VyKCk7IH0KKyAgICAKKyAgICBib29sIGhhc05vZGUoKSBjb25zdCB7IHJldHVybiAhbm9kZUlz
VW5kZWNpZGVkKCkgJiYgIW5vZGVJc1VuYXZhaWxhYmxlKCk7IH0KKyAgICAKKyAgICBOb2RlKiBu
b2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghbm9kZUlzVW5kZWNpZGVkKCkpOwor
ICAgICAgICBBU1NFUlQoIW5vZGVJc1VuYXZhaWxhYmxlKCkpOworICAgICAgICByZXR1cm4gbV9u
b2RlOworICAgIH0KKyAgICAKKyAgICBGbHVzaGVkQXQgZmx1c2hlZEF0KCkgY29uc3QgeyByZXR1
cm4gbV9mbHVzaGVkQXQ7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuIG5vZGVJc1VuYXZhaWxhYmxlKCkgJiYgZmx1c2hlZEF0KCkuZm9ybWF0KCkgPT0gQ29uZmxp
Y3RpbmdGbHVzaDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0eSYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ub2RlID09IG90aGVyLm1fbm9k
ZQorICAgICAgICAgICAgJiYgbV9mbHVzaGVkQXQgPT0gb3RoZXIubV9mbHVzaGVkQXQ7CisgICAg
fQorICAgIAorICAgIEF2YWlsYWJpbGl0eSBtZXJnZShjb25zdCBBdmFpbGFiaWxpdHkmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eSgKKyAgICAgICAgICAg
IG1lcmdlTm9kZXMobV9ub2RlLCBvdGhlci5tX25vZGUpLAorICAgICAgICAgICAgbV9mbHVzaGVk
QXQubWVyZ2Uob3RoZXIubV9mbHVzaGVkQXQpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiwgRHVtcENvbnRleHQqKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgTm9kZSogbWVy
Z2VOb2RlcyhOb2RlKiBhLCBOb2RlKiBiKQorICAgIHsKKyAgICAgICAgaWYgKCFhKQorICAgICAg
ICAgICAgcmV0dXJuIGI7CisgICAgICAgIGlmICghYikKKyAgICAgICAgICAgIHJldHVybiBhOwor
ICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgIHJldHVy
biB1bmF2YWlsYWJsZU1hcmtlcigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgTm9kZSogdW5h
dmFpbGFibGVNYXJrZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxOb2Rl
Kj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEpKTsKKyAgICB9CisgICAgCisgICAgTm9kZSogbV9u
b2RlOworICAgIEZsdXNoZWRBdCBtX2ZsdXNoZWRBdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQXZh
aWxhYmlsaXR5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAiREZH
QXZhaWxhYmlsaXR5LmgiCiAjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiREZHRmx1c2hlZEF0LmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgpAQCAtMTQwLDggKzE0MSw4
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICBzdHJ1Y3Qg
U1NBRGF0YSB7CiAgICAgICAgIE9wZXJhbmRzPEZsdXNoZWRBdD4gZmx1c2hBdEhlYWQ7CiAgICAg
ICAgIE9wZXJhbmRzPEZsdXNoZWRBdD4gZmx1c2hBdFRhaWw7Ci0gICAgICAgIE9wZXJhbmRzPE5v
ZGUqPiBhdmFpbGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgIE9wZXJhbmRzPE5vZGUqPiBhdmFpbGFi
aWxpdHlBdFRhaWw7CisgICAgICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5
QXRIZWFkOworICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0VGFp
bDsKICAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKICAgICAgICAgSGFzaFNldDxO
b2RlKj4gbGl2ZUF0VGFpbDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4g
dmFsdWVzQXRIZWFkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDczLDYg
KzMwNzMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBOb2RlKiBiYXNlID0gY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKGdsb2JhbE9iamVj
dCwgc3RhdHVzLnN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKKyAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7
CiAgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IHN0YXR1cy5zcGVj
aWZpY1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0
KSwgY2VsbENvbnN0YW50KHNwZWNpZmljVmFsdWUuYXNDZWxsKCkpKTsKICAgICAgICAgICAgICAg
ICBlbHNlCkBAIC0zMDgxLDYgKzMwODIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoK
ICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29w
ZSkpKTsKICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWVudHJ5
LmNvdWxkQmVXYXRjaGVkKCkgfHwgIW1fZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQo
ZW50cnkud2F0Y2hwb2ludFNldCgpKSkgewogICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGRzdCksIGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCks
IE9wSW5mbyhwcmVkaWN0aW9uKSkpOwpAQCAtMzEzMSw2ICszMTMzLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IGNlbGxDb25z
dGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1cy5vbGRTdHJ1Y3R1cmUo
KSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lz
dGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlk
ZW50aWZpZXJOdW1iZXIsIHN0YXRpY19jYXN0PFByb3BlcnR5T2Zmc2V0PihvcGVyYW5kKSwgZ2V0
KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKICAgICAgICAgICAgICAgICAvLyBLZWVwIHNjb3Bl
IGFsaXZlIHVudGlsIGFmdGVyIHB1dC4KICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50
b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CkBAIC0zMTM4LDYgKzMxNDEsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRv
bSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBTeW1ib2xU
YWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQodWlkKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWVudHJ5LmNvdWxkQmVXYXRjaGVkKCkgfHwgIW1fZ3Jh
cGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoZW50cnkud2F0Y2hwb2ludFNldCgpKSk7CiAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwg
Z2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBEaXNhc3Nl
bWJsZXI6OkRpc2Fzc2VtYmxlcihHcmFwaCYgZ3JhcGgpCiAgICAgOiBtX2dyYXBoKGdyYXBoKQog
eworICAgIG1fZHVtcENvbnRleHQuZ3JhcGggPSAmbV9ncmFwaDsKICAgICBtX2xhYmVsRm9yQmxv
Y2tJbmRleC5yZXNpemUoZ3JhcGgubnVtQmxvY2tzKCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAkocmV2aXNpb24gMTU5MzUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDYgKzU2LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIEZsdQogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CiAgICAgICAgIG91dC5wcmludCgiRmx1
c2hlZEpTVmFsdWUiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVz
aDoKKyAgICAgICAgb3V0LnByaW50KCJDb25mbGljdGluZ0ZsdXNoIik7CisgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHJldmlzaW9uIDE1OTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNyArNDUsOCBAQCBlbnVtIEZsdXNoRm9ybWF0IHsKICAgICBGbHVzaGVk
RG91YmxlLAogICAgIEZsdXNoZWRDZWxsLAogICAgIEZsdXNoZWRCb29sZWFuLAotICAgIEZsdXNo
ZWRKU1ZhbHVlCisgICAgRmx1c2hlZEpTVmFsdWUsCisgICAgQ29uZmxpY3RpbmdGbHVzaAogfTsK
IAogaW5saW5lIE5vZGVGbGFncyByZXN1bHRGb3IoRmx1c2hGb3JtYXQgZm9ybWF0KQpAQCAtNTQs
NiArNTUsNyBAQCBpbmxpbmUgTm9kZUZsYWdzIHJlc3VsdEZvcihGbHVzaEZvcm1hdCBmCiAgICAg
Y2FzZSBEZWFkRmx1c2g6CiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAgICBjYXNlIEZsdXNo
ZWRDZWxsOgorICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKICAgICAgICAgcmV0dXJuIE5vZGVS
ZXN1bHRKUzsKICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKICAgICAgICAgcmV0dXJuIE5vZGVSZXN1
bHRJbnQzMjsKQEAgLTczLDYgKzc1LDcgQEAgaW5saW5lIFVzZUtpbmQgdXNlS2luZEZvcihGbHVz
aEZvcm1hdCBmbwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBEZWFkRmx1c2g6CiAg
ICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAg
ICAgIHJldHVybiBVbnR5cGVkVXNlOwogICAgIGNhc2UgRmx1c2hlZENlbGw6CiAgICAgICAgIHJl
dHVybiBDZWxsVXNlOwpAQCAtOTMsNiArOTYsNyBAQCBpbmxpbmUgRGF0YUZvcm1hdCBkYXRhRm9y
bWF0Rm9yKEZsdXNoRm9yCiB7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIERlYWRG
bHVzaDoKKyAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAgICAgIHJldHVybiBEYXRhRm9y
bWF0RGVhZDsKICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICByZXR1cm4gRGF0YUZv
cm1hdEpTOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmNw
cAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVz
aGVkQXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBGbHVzaGVkQXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKLSAgICBpZiAobV9mb3JtYXQgPT0gRGVhZEZsdXNoKQorICAgIGlmIChtX2Zv
cm1hdCA9PSBEZWFkRmx1c2ggfHwgbV9mb3JtYXQgPT0gQ29uZmxpY3RpbmdGbHVzaCkKICAgICAg
ICAgb3V0LnByaW50KG1fZm9ybWF0KTsKICAgICBlbHNlCiAgICAgICAgIG91dC5wcmludCgiciIs
IG1fdmlydHVhbFJlZ2lzdGVyLCAiOiIsIG1fZm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiAr
NDIsMTIgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCisgICAgZXhwbGljaXQgRmx1c2hl
ZEF0KEZsdXNoRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgOiBtX2Zvcm1hdChmb3JtYXQpCisgICAg
eworICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERlYWRGbHVzaCB8fCBmb3JtYXQgPT0gQ29uZmxp
Y3RpbmdGbHVzaCk7CisgICAgfQorICAgIAogICAgIEZsdXNoZWRBdChGbHVzaEZvcm1hdCBmb3Jt
YXQsIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgIDogbV9mb3JtYXQo
Zm9ybWF0KQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlcikKQEAg
LTY1LDYgKzcxLDE3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
Rmx1c2hlZEF0JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KICAg
ICAKKyAgICBGbHVzaGVkQXQgbWVyZ2UoY29uc3QgRmx1c2hlZEF0JiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICghKnRoaXMpCisgICAgICAgICAgICByZXR1cm4gb3RoZXI7CisgICAg
ICAgIGlmICghb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIGlmICgq
dGhpcyA9PSBvdGhlcikKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgcmV0dXJu
IEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAKKyNpbmNsdWRlICJCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyU2V0
LmgiCkBAIC0zOTMsNiArMzk0LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50
U3RyZWFtJgogdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCog
Y29udGV4dCkKIHsKICAgICBEdW1wQ29udGV4dCBteUNvbnRleHQ7CisgICAgbXlDb250ZXh0Lmdy
YXBoID0gdGhpczsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIGNvbnRleHQgPSAmbXlDb250
ZXh0OwogICAgIApAQCAtNjQzLDYgKzY0NSw1OSBAQCB2b2lkIEdyYXBoOjppbml0aWFsaXplTm9k
ZU93bmVycygpCiAgICAgICAgICAgICBibG9jay0+YXQobm9kZUluZGV4KS0+bWlzYy5vd25lciA9
IGJsb2NrOwogICAgIH0KIH0KKworRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVz
c0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0
ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+OjppdGVyYXRvciBpdGVyID0gbV9i
eXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKKyAgICBpZiAoaXRlciAhPSBtX2J5dGVj
b2RlTGl2ZW5lc3MuZW5kKCkpCisgICAgICAgIHJldHVybiAqaXRlci0+dmFsdWU7CisgICAgCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPiBsaXZlbmVzcyA9IHN0ZDo6
bWFrZV91bmlxdWU8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+KCk7CisgICAgY29kZUJsb2NrLT5saXZl
bmVzc0FuYWx5c2lzKCkuY29tcHV0ZUZ1bGxMaXZlbmVzcygqbGl2ZW5lc3MpOworICAgIEZ1bGxC
eXRlY29kZUxpdmVuZXNzJiByZXN1bHQgPSAqbGl2ZW5lc3M7CisgICAgbV9ieXRlY29kZUxpdmVu
ZXNzLmFkZChjb2RlQmxvY2ssIHN0ZDo6bW92ZShsaXZlbmVzcykpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK0Z1bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3IoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIGxpdmVuZXNzRm9yKGJh
c2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSkpOworfQorCitib29sIEdyYXBoOjpp
c0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4pCit7CisgICAgZm9yICg7OykgeworICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA8
IGNvZGVPcmlnaW4uc3RhY2tPZmZzZXQoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUp
IHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoCisg
ICAgICAgICAgICAgICAgb3BlcmFuZC5vZmZzZXQoKSAtIGNvZGVPcmlnaW4uc3RhY2tPZmZzZXQo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlZy5vZmZzZXQoKSA+PSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFk
ZXJTaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJlZy5vZmZzZXQoKSA9PSBKU1N0YWNrOjpDYWxs
ZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGlm
IChyZWcub2Zmc2V0KCkgPT0gSlNTdGFjazo6U2NvcGVDaGFpbikKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4g
bGl2ZW5lc3NGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpLm9wZXJhbmRJc0xpdmUoCisg
ICAgICAgICAgICAgICAgcmVnLm9mZnNldCgpLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjb2RlT3JpZ2luID0g
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CiAgICAgCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiAr
NDEsNyBAQAogI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJERkdQbGFu
LmgiCiAjaW5jbHVkZSAiREZHVmFyaWFkaWNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkZ1bGxCeXRl
Y29kZUxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCiAjaW5jbHVk
ZSAiSlNTdGFjay5oIgogI2luY2x1ZGUgIk1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCIK
QEAgLTQxNiw2ICs0MTcsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXhlY3V0YWJsZUZv
cihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAgIAorICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUp
CisgICAgeworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVy
biBtX3Byb2ZpbGVkQmxvY2s7CisgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zvcklu
bGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOworICAgIH0KKyAgICAKICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAg
ICAgewogICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGlu
ZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBtX3Byb2ZpbGVkQmxvY2spOwpAQCAtNzc2LDYgKzc4NCwx
MCBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFdhdGNocG9pbnRzJiB3YXRjaHBvaW50cygpIHsgcmV0
dXJuIG1fcGxhbi53YXRjaHBvaW50czsgfQogICAgIERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMmIGNo
YWlucygpIHsgcmV0dXJuIG1fcGxhbi5jaGFpbnM7IH0KICAgICAKKyAgICBGdWxsQnl0ZWNvZGVM
aXZlbmVzcyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spOworICAgIEZ1bGxCeXRl
Y29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSk7CisgICAgYm9vbCBpc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4pOworICAgIAogICAgIFZNJiBtX3ZtOwogICAgIFBsYW4mIG1f
cGxhbjsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtNzk3LDYgKzgwOSw3IEBAIHB1
YmxpYzoKICAgICBTZWdtZW50ZWRWZWN0b3I8U3dpdGNoRGF0YSwgND4gbV9zd2l0Y2hEYXRhOwog
ICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwog
ICAgIE93blB0cjxJbmxpbmVDYWxsRnJhbWVTZXQ+IG1faW5saW5lQ2FsbEZyYW1lczsKKyAgICBI
YXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+
IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAgICBib29sIG1faGFzQXJndW1lbnRzOwogICAgIEhhc2hT
ZXQ8RXhlY3V0YWJsZUJhc2UqPiBtX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkOwog
ICAgIEJpdFZlY3RvciBtX2xhenlWYXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3NyArNDcs
OTYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNT
QSk7CiAgICAgICAgIAotICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7Ci0g
ICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7Cisg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsg
YmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZC5maWxsKEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJp
bGl0eUF0VGFpbC5maWxsKEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhGaXJzdFtpXTsKLSAgICAgICAg
ICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5maWxsKDApOwotICAgICAgICAgICAg
YmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLmZpbGwoMCk7CisgICAgICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBtX2dyYXBoLmJsb2NrKDApOworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3Vt
ZW50ID0gcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsg
YXJndW1lbnQtLTspIHsKKyAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFk
LmFyZ3VtZW50KGFyZ3VtZW50KSA9CisgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2
YWlsYWJsZSgpLndpdGhGbHVzaCgKKyAgICAgICAgICAgICAgICAgICAgRmx1c2hlZEF0KEZsdXNo
ZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpKTsKICAgICAg
ICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gcm9vdC0+c3NhLT5hdmFpbGFiaWxp
dHlBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspCisgICAgICAgICAgICByb290LT5z
c2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2NhbCkgPSBBdmFpbGFiaWxpdHk6OnVuYXZh
aWxhYmxlKCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVw
dGhGaXJzdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBk
ZXB0aEZpcnN0W2ldOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSBlZGl0IGF2YWls
YWJpbGl0eUF0VGFpbCBpbi1wbGFjZSwgYnV0IGZpcnN0IGluaXRpYWxpemUgaXQgdG8KLSAgICAg
ICAgICAgIC8vIGF2YWlsYWJpbGl0eUF0SGVhZC4KLSAgICAgICAgICAgIE9wZXJhbmRzPE5vZGUq
PiYgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsOwotICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNr
OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGNhc2UgWm9tYmllSGludDogewotICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3Bl
cmFuZChub2RlLT5sb2NhbCgpKSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2Fz
ZSBHZXRBcmd1bWVudDogewotICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFu
ZChub2RlLT5sb2NhbCgpKSA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICBpZiAobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSBtX2dyYXBoLm1fcHJvZmlsZWRCbG9jay0+
bV9udW1DYWxsZWVSZWdpc3RlcnM7IGxvY2FsLS07KSB7CisgICAgICAgICAgICAgICAgcm9vdC0+
c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubG9jYWwobG9jYWwpID0KKyAgICAgICAgICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpLndpdGhGbHVzaCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwobG9jYWwpKSk7CiAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGVmZmljaWVudCBieSBwcm9jZXNzaW5nIGJsb2Nr
cyBpbiByZXZlcnNlIHBvc3RvcmRlci4KKyAgICAgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBh
dmFpbGFiaWxpdHk7CisgICAgICAgIGJvb2wgY2hhbmdlZDsKKyAgICAgICAgZG8geworICAgICAg
ICAgICAgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBqLS07KSB7Ci0gICAgICAgICAgICAg
ICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihqKTsKLSAgICAgICAg
ICAgICAgICBPcGVyYW5kczxOb2RlKj4mIHN1Y2Nlc3NvckF2YWlsYWJpbGl0eSA9IHN1Y2Nlc3Nv
ci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBrID0gYXZhaWxhYmlsaXR5LnNpemUoKTsgay0tOykgewotICAgICAgICAgICAgICAgICAgICBO
b2RlKiBteU5vZGUgPSBhdmFpbGFiaWxpdHlba107Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
bXlOb2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3Nvci0+c3NhLT5saXZlQXRI
ZWFkLmNvbnRhaW5zKG15Tm9kZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0
aGlzIG1heSBvdmVyd3JpdGUgYXZhaWxhYmlsaXR5IHdpdGggYSBib2d1cyBub2RlCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGF0IG1lcmdlIHBvaW50cy4gVGhpcyBpcyBmaW5lLCBzaW5jZSBtZXJn
ZSBwb2ludHMgaGF2ZQotICAgICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50KFBoaSkncyB0byB3
b3JrIGFyb3VuZCB0aGlzLiBUaGUgb3V0Y29tZSBvZiB0aGlzIGlzCi0gICAgICAgICAgICAgICAg
ICAgIC8vIHlvdSBtaWdodCBoYXZlIGEgcHJvZ3JhbSBpbiB3aGljaCBhIG5vZGUgaGFwcGVucyB0
byByZW1haW4KLSAgICAgICAgICAgICAgICAgICAgLy8gbGl2ZSBpbnRvIHNvbWUgYmxvY2sgQiwg
YW5kIHNlcGFyYXRlbHkgKGR1ZSB0byBjb3B5Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByb3Bh
Z2F0aW9uKSBqdXN0IG9uZSBvZiB0aGUgcHJlZGVjZXNzb3JzIG9mIEIgaXNzdWVkIGEKLSAgICAg
ICAgICAgICAgICAgICAgLy8gTW92SGludCBwdXR0aW5nIHRoYXQgbm9kZSBpbnRvIHNvbWUgbG9j
YWwuIFRoZW4gaW4gQiB3ZSBtaWdodAotICAgICAgICAgICAgICAgICAgICAvLyB0aGluayB0aGF0
IHRoYXQgbm9kZSBpcyBhIHZhbGlkIHZhbHVlIGZvciB0aGF0IGxvY2FsLiBPZgotICAgICAgICAg
ICAgICAgICAgICAvLyBjb3Vyc2UgaWYgdGhhdCBsb2NhbCB3YXMgYWN0dWFsbHkgbGl2ZSBpbiBC
LCBCIHdvdWxkIGhhdmUgYQotICAgICAgICAgICAgICAgICAgICAvLyBQaGkgZm9yIGl0LiBTbyBl
c3NlbnRpYWxseSB3ZSdsbCBoYXZlIE9TUiBleGl0IGRyb3BwaW5nIHRoaXMKLSAgICAgICAgICAg
ICAgICAgICAgLy8gbm9kZSdzIHZhbHVlIGludG8gdGhlIGxvY2FsIHdoZW4gd2Ugb3RoZXJ3aXNl
IChpbiB0aGUgREZHKQotICAgICAgICAgICAgICAgICAgICAvLyB3b3VsZCBoYXZlIGRyb3BwZWQg
dW5kZWZpbmVkIGludG8gdGhlIGxvY2FsLiBUaGlzIHNlZW1zCi0gICAgICAgICAgICAgICAgICAg
IC8vIGhhcm1sZXNzLgotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
c3VjY2Vzc29yQXZhaWxhYmlsaXR5W2tdID0gbXlOb2RlOworICAgICAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsg
KytibG9ja0luZGV4KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7
IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJndW1lbnQ6IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0
eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5KG5vZGUsIHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eSA9PSBibG9j
ay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJp
bGl0eUF0VGFpbCA9IGF2YWlsYWJpbGl0eTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nl
c3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsK
KyAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nl
c3NvcihzdWNjZXNzb3JJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGF2YWlsYWJpbGl0eS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0gPSBhdmFpbGFiaWxpdHlbaV0u
bWVyZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZFtpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7
CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDkgKzM2LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgR3Jh
cGg7CiAKLS8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+YXZhaWxhYmlsdGl5QXRIZWFkL1Rh
aWwuIFRoaXMgcmVsaWVzIG9uIGxpdmVuZXNzCi0vLyBhbmFseXNpcyBwaGFzZSBoYXZpbmcgYmVl
biBydW4gYW5kIHRoZSBncmFwaCBub3QgaGF2aW5nIGJlZW4gdHJhbnNmb3JtZWQKLS8vIGFmdGVy
IHRoYXQuCisvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRpeUF0SGVhZC9U
YWlsLiBUaGlzIGlzIGEgZm9yd2FyZCBmbG93IHR5cGUgaW5mZXJlbmNlCisvLyBvdmVyIE1vdkhp
bnRzLiBBdCB0aGUgdGltZSB3aGVuIE1vdkhpbnRzIGFyZSBpbnRyb2R1Y2VkLCB3ZSB3ZXJlIGNl
cnRhaW4gdGhhdCBhdCBhbnkKKy8vIHBvaW50IGluIHRoZSBwcm9ncmFtIHdoZXJlIGEgYnl0ZWNv
ZGUgdmFyaWFibGUgaGFkIGJlZW4gbGl2ZSwgYWxsIG9mIHRoZSBNb3ZIaW50cyB0aGF0CisvLyBm
bG93ZWQgaW50byB0aGF0IHBvaW50IGZvciB0aGF0IHZhcmlhYmxlIGhhZCB0aGUgc2FtZSBGbHVz
aEZvcm1hdC4gVGhpcyBhbmFseXNpcyB3aWxsIHRlbGwKKy8vIHlvdSB3aGF0IHRoYXQgZm9ybWF0
IHdvdWxkIGhhdmUgYmVlbi4KIAogYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMo
R3JhcGgmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZp
c2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiREZHT1NSRW50cnlwb2lu
dENyZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgorI2luY2x1ZGUg
IkRGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1NTQUNv
bnZlcnNpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0YWNrTGF5b3V0UGhhc2UuaCIKICNpbmNs
dWRlICJERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmgiCkBAIC0yNjUsOSArMjY2LDExIEBA
IFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9y
bVNTQUNvbnZlcnNpb24oZGZnKTsKICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZn
KTsKICAgICAgICAgcGVyZm9ybUNGQShkZmcpOwotICAgICAgICBwZXJmb3JtTElDTShkZmcpOwor
ICAgICAgICAvL3BlcmZvcm1MSUNNKGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5
c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKKyAgICAgICAgaWYgKE9wdGlvbnM6
OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpCisgICAgICAgICAgICBwZXJmb3JtUmVzdXJy
ZWN0aW9uRm9yVmFsaWRhdGlvbihkZmcpOwogICAgICAgICBwZXJmb3JtRENFKGRmZyk7IC8vIFdl
IHJlbHkgb24gdGhpcyB0byBjb252ZXJ0IGRlYWQgU2V0TG9jYWxzIGludG8gdGhlIGFwcHJvcHJp
YXRlIGhpbnQsIGFuZCB0byBraWxsIGRlYWQgY29kZSB0aGF0IHdvbid0IGJlIHJlY29nbml6ZWQg
YXMgZGVhZCBieSBMTFZNLgogICAgICAgICBwZXJmb3JtU3RhY2tMYXlvdXQoZGZnKTsKICAgICAg
ICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRh
dGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2lj
QmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNl
cnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBSZXN1cnJlY3Rp
b25Gb3JWYWxpZGF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFJlc3Vy
cmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJyZXN1cnJlY3Rpb24gZm9yIHZhbGlkYXRpb24iKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNl
dChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25v
ZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmhhc1Jlc3VsdCgpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIFBoYW50
b20sIG5vZGUtPmNvZGVPcmlnaW4sIEVkZ2Uobm9kZSkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK2Jvb2wgcGVy
Zm9ybVJlc3VycmVjdGlvbkZvclZhbGlkYXRpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBs
aW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgUmVzdXJyZWN0aW9uIEZvciBWYWxpZGF0aW9u
IFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPFJlc3VycmVjdGlvbkZvclZhbGlkYXRpb25Q
aGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1cnJlY3Rpb25Gb3JW
YWxpZGF0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUmVzdXJy
ZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHUmVzdXJyZWN0aW9uRm9yVmFs
aWRhdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gUGxhY2VzIGEgUGhhbnRvbSBhZnRl
ciBldmVyeSB2YWx1ZS1wcm9kdWNpbmcgbm9kZSwgdGhlcmVieSBkaXNhYmxpbmcgRENFIGZyb20g
a2lsbGluZyBpdC4KKy8vIFRoaXMgaXMgdXNlZnVsIGZvciB2YWxpZGF0aW5nIG91ciBPU1IgZXhp
dCBtYWNoaW5lcnkgYnkgaW5zdGl0dXRpbmcgdGhlIHJlcXVpcmVtZW50IHRoYXQKKy8vIGFueSBs
aXZlLWluLWJ5dGVjb2RlIHZhcmlhYmxlIHNob3VsZCBiZSBPU1ItYXZhaWxhYmxlLiBXaXRob3V0
IHRoaXMgcGhhc2UsIGl0J3MgaW1wb3NzaWJsZQorLy8gdG8gbWFrZSBzdWNoIGFuIGFzc2VydGlv
biBiZWNhdXNlIG91ciBEQ0UgaXMgbW9yZSBhZ2dyZXNzaXZlIHRoYW4gdGhlIGJ5dGVjb2RlIGxp
dmVuZXNzCisvLyBhbmFseXNpcy4KKworYm9vbCBwZXJmb3JtUmVzdXJyZWN0aW9uRm9yVmFsaWRh
dGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25Q
aGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NT
QUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU4LDEzICsxNTgsMzUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLTspIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVk
ZWNlc3NvcnNbal07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3ItPmFw
cGVuZE5vblRlcm1pbmFsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LCBTcGVjTm9uZSwgVXBzaWxvbiwgYmxvY2stPmxhc3QoKS0+Y29kZU9yaWdpbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFVwc2lsb24sIHByZWRl
Y2Vzc29yLT5sYXN0KCktPmNvZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyhub2RlKSwgRWRnZShwcmVkZWNlc3Nvci0+dmFyaWFibGVzQXRUYWlsW2ldLCB1
c2VLaW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUt
PmNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRWRnZShub2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9mbHVzaGVkTG9j
YWxPcHMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBE
byBub3RoaW5nLiBGb3IgbXVsdGlwbGUgcmVhc29ucy4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFzb24gIzE6IElmIHRoZSBs
b2NhbCBpcyBmbHVzaGVkIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBib3RoZXIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB3aXRoIGEgTW92SGludCBzaW5jZSBldmVyeSBwYXRoIHRvIHRo
aXMgcG9pbnQgaW4gdGhlIGNvZGUgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGhhdmUgZmx1c2hlZCB0aGUgYnl0ZWNvZGUgdmFyaWFibGUgdXNpbmcgYSBTZXRMb2NhbCBhbmQg
aGVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgQXZhaWxhYmlsaXR5Ojpm
bHVzaGVkQXQoKSB3aWxsIGFncmVlLCBhbmQgdGhhdCB3aWxsIGJlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gc3VmZmljaWVudCBmb3IgZmlndXJpbmcgb3V0IGhvdyB0byByZWNvdmVy
IHRoZSB2YXJpYWJsZSdzIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYXNvbiAjMjogSWYgd2UgaGFkIGluc2VydGVk
IGEgTW92SGludCBhbmQgdGhlIFBoaSBmdW5jdGlvbiBoYWQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBkaWVkIChiZWNhdXNlIHRoZSBvbmx5IHVzZXIgb2YgdGhlIHZhbHVlIHdhcyB0
aGUgImZsdXNoIiAtIGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzb21lIGFz
eW5jaHJvbm91cyBydW50aW1lIHRoaW5neSkgdGhlbiB0aGUgTW92SGludCB3b3VsZCB0dXJuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50byBhIFpvbWJpZUhpbnQsIHdoaWNoIHdv
dWxkIGZvb2wgdXMgaW50byB0aGlua2luZyB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHZhcmlhYmxlIGlzIGRlYWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVhc29uICMzOiBJZiB3ZSBoYWQgaW5z
ZXJ0ZWQgYSBNb3ZIaW50IHRoZW4gZXZlbiBpZiB0aGUgUGhpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gc3RheWVkIGFsaXZlLCB3ZSB3b3VsZCBzdGlsbCBlbmQgdXAgZ2VuZXJhdGlu
ZyBpbmVmZmljaWVudCBjb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luY2Ug
d2Ugd291bGQgYmUgdGVsbGluZyB0aGUgT1NSIGV4aXQgY29tcGlsZXIgdG8gdXNlIHNvbWUgU1NB
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgZm9yIHRoZSBieXRlY29kZSB2
YXJpYWJsZSByYXRoZXIgdGhhbiBqdXN0IHRlbGxpbmcgaXQgdGhhdAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBvbiB0aGUgc3RhY2suCisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5jb2RlT3JpZ2luLCBPcEluZm8odmFyaWFi
bGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhbHVlU291cmNlLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgICAgIGNh
c2UgRGVhZEZsdXNoOgorICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAgICAgICAg
ICByZXR1cm4gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKICAgICAgICAgY2FzZSBGbHVzaGVk
SlNWYWx1ZToKICAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywg
d2hlcmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsy
Niw3IEBACiAjaWZuZGVmIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9oCiAjZGVmaW5lIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YV9oCiAKKyNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdE
b3VibGVGb3JtYXRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR0ZsdXNoRm9ybWF0LmgiCiAjaW5jbHVk
ZSAiREZHRmx1c2hlZEF0LmgiCkBAIC0zOSw2ICs0MCw4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAorc3RydWN0IE5vZGU7CisKIGVudW0gRG91YmxlQmFsbG90IHsgVm90
ZVZhbHVlLCBWb3RlRG91YmxlIH07CiAKIGNsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YSA6IHB1Ymxp
YyBVbmlvbkZpbmQ8VmFyaWFibGVBY2Nlc3NEYXRhPiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDE2ICs0OCwxNiBAQCB2b2lkIEV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhCiAg
ICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQoIiwgaW5Db250ZXh0KGNvbnN0YW50KCksIGNvbnRl
eHQpLCAiKSIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6
Ci0gICAgICAgIG91dC5wcmludCgiSW5KU1N0YWNrIik7CisgICAgICAgIG91dC5wcmludCgiSW5K
U1N0YWNrOnIiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6Ci0gICAgICAgIG91dC5wcmludCgiSW5KU1N0YWNr
QXNJbnQzMiIpOworICAgICAgICBvdXQucHJpbnQoIkluSlNTdGFja0FzSW50MzI6ciIsIHZpcnR1
YWxSZWdpc3RlcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0
YWNrQXNJbnQ1MjoKLSAgICAgICAgb3V0LnByaW50KCJJbkpTU3RhY2tBc0ludDUyIik7CisgICAg
ICAgIG91dC5wcmludCgiSW5KU1N0YWNrQXNJbnQ1MjpyIiwgdmlydHVhbFJlZ2lzdGVyKCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKLSAg
ICAgICAgb3V0LnByaW50KCJJbkpTU3RhY2tBc0RvdWJsZSIpOworICAgICAgICBvdXQucHJpbnQo
IkluSlNTdGFja0FzRG91YmxlOnIiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDYgQEAKICNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVlLmgiCiAjaW5jbHVkZSAiRlRM
T3V0cHV0LmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCi0jaW5jbHVkZSAiRlRMVmFsdWVTb3Vy
Y2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAtNzAsNyArNjksNyBAQCBwdWJsaWM6CiAg
ICAgICAgICwgbV9mdGxTdGF0ZShzdGF0ZSkKICAgICAgICAgLCBtX2hlYXBzKHN0YXRlLmNvbnRl
eHQpCiAgICAgICAgICwgbV9vdXQoc3RhdGUuY29udGV4dCkKLSAgICAgICAgLCBtX3ZhbHVlU291
cmNlcyhPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQp
CisgICAgICAgICwgbV9hdmFpbGFiaWxpdHkoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fc3RhdGUoc3RhdGUuZ3JhcGgpCiAg
ICAgICAgICwgbV9pbnRlcnByZXRlcihzdGF0ZS5ncmFwaCwgbV9zdGF0ZSkKICAgICAgICAgLCBt
X3N0YWNrbWFwSURzKDApCkBAIC0yMDQsOCArMjAzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgCiAg
ICAgICAgIGluaXRpYWxpemVPU1JFeGl0U3RhdGVGb3JCbG9jaygpOwogICAgICAgICAKLSAgICAg
ICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZDsKLSAgICAgICAgCiAgICAgICAgIG1f
c3RhdGUucmVzZXQoKTsKICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9oaWdoQmxv
Y2spOwogICAgICAgICAKQEAgLTQ3NSwxMiArNDcyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKQotICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwg
bV9ub2RlLCB1c2UpOwotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+YWRqdXN0ZWRSZWZD
b3VudCgpKQotICAgICAgICAgICAgbV9saXZlLmFkZChtX25vZGUpOwotICAgICAgICAKICAgICAg
ICAgaWYgKHNob3VsZEV4ZWN1dGVFZmZlY3RzKQogICAgICAgICAgICAgbV9pbnRlcnByZXRlci5l
eGVjdXRlRWZmZWN0cyhub2RlSW5kZXgpOwogICAgICAgICAKQEAgLTYxOSwzNiArNjEwLDMxIEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6IHsKICAgICAgICAgICAgIExW
YWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBt
X291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkp
OwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKTsK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOiB7CiAgICAgICAgICAgICBMVmFs
dWUgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBtX291
dC5zdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkp
KTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkp
OwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjogewogICAgICAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBtX291
dC5zdG9yZTMyKHZhbHVlLCBwYXlsb2FkRm9yKHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpOwot
ICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBW
YWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjaywgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6IHsKICAgICAgICAgICAgIExWYWx1ZSB2
YWx1ZSA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3Rv
cmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAg
ICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVT
b3VyY2UoSW50NTJJbkpTU3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6IHsKICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZh
bHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAg
bV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShW
YWx1ZUluSlNTdGFjaywgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBGbHVzaGVkQm9vbGVhbjogewpAQCAtNjU2LDE1ICs2NDIsMTUgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCiAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZSht
X25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pLAogICAgICAgICAgICAg
ICAgIGFkZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBt
X3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZh
bHVlSW5KU1N0YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbV9h
dmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBBdmFpbGFiaWxpdHkodmFy
aWFibGUtPmZsdXNoZWRBdCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlTW92SGlu
dCgpCkBAIC02NzUsNyArNjYxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVab21iaWVI
aW50KCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQoZGF0
YS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOworICAgICAgICBtX2F2YWls
YWJpbGl0eS5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJs
ZSgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVNb3ZIaW50QW5kQ2hlY2soKQpAQCAt
MTI4Nyw3ICsxMjczLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIC8vIFNlZSBhYm92ZTsg
Q2VsbFVzZSBpcyBlYXNpZXIgc28gd2UgZG8gb25seSB0aGF0IGZvciBub3cuCiAgICAgICAgIEFT
U0VSVChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKTsKLQorICAgICAgICAK
ICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBT
dHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVy
TnVtYmVyKCldOwpAQCAtMjU0NCwxMiArMjUzMCwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgY29t
cGlsZUludmFsaWRhdGlvblBvaW50KCkKICAgICB7CiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGls
YXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgSW52YWxpZGF0aW9uIHBv
aW50IHdpdGggdmFsdWUgc291cmNlczogIiwgbV92YWx1ZVNvdXJjZXMsICJcbiIpOworICAgICAg
ICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3aXRoIGF2YWlsYWJpbGl0eTog
IiwgbV9hdmFpbGFiaWxpdHksICJcbiIpOwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5q
aXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAgVW5jb3VudGFibGVJ
bnZhbGlkYXRpb24sIEludmFsaWRWYWx1ZUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZSgpLAogICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgbV9jb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGUsCi0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkFy
Z3VtZW50cygpLCBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkxvY2FscygpKSk7CisgICAgICAgICAg
ICBtX2F2YWlsYWJpbGl0eS5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2F2YWlsYWJpbGl0eS5udW1i
ZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFw
cGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAgICAgT1NSRXhp
dCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBAIC0yNTU3LDcg
KzI1NDMsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgRXhpdEFyZ3VtZW50TGlzdCBh
cmd1bWVudHM7CiAgICAgICAgIAotICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMoZXhpdCwgYXJn
dW1lbnRzLCBGb3JtYXR0ZWRWYWx1ZSgpKTsKKyAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4
aXQsIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUoKSwgZXhpdC5tX2NvZGVPcmlnaW4pOwogICAg
ICAgICBjYWxsU3RhY2ttYXAoZXhpdCwgYXJndW1lbnRzKTsKICAgICAgICAgCiAgICAgICAgIGlu
Zm8ubV9pc0ludmFsaWRhdGlvblBvaW50ID0gdHJ1ZTsKQEAgLTM4MjIsMjUgKzM4MDgsNiBAQCBw
cml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
ICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0xpdmUoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX2xpdmUuY29udGFpbnMobm9kZSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdXNl
KEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChlZGdlLT5oYXNSZXN1bHQoKSk7Ci0g
ICAgICAgIGlmICghZWRnZS5kb2VzS2lsbCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBtX2xpdmUucmVtb3ZlKGVkZ2Uubm9kZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gV3JhcHBl
ciB1c2VkIG9ubHkgZm9yIERGR19OT0RFX0RPX1RPX0NISUxEUkVOCi0gICAgdm9pZCB1c2UoTm9k
ZSosIEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHVzZShlZGdlKTsKLSAgICB9Ci0gICAgCiAg
ICAgTEJhc2ljQmxvY2sgbG93QmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAg
ICByZXR1cm4gbV9ibG9ja3MuZ2V0KGJsb2NrKTsKQEAgLTM4NDgsNDAgKzM4MTUsNyBAQCBwcml2
YXRlOgogICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKCkKICAg
ICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVTb3VyY2VzLnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gbV9oaWdoQmxvY2stPnNzYS0+Zmx1
c2hBdEhlYWRbaV07Ci0gICAgICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgpKSB7Ci0gICAg
ICAgICAgICBjYXNlIERlYWRGbHVzaDogewotICAgICAgICAgICAgICAgIC8vIE11c3QgY29uc2lk
ZXIgYXZhaWxhYmxlIG5vZGVzIGluc3RlYWQuCi0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG1faGlnaEJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXTsKLSAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBW
YWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV92YWx1
ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShub2RlKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgRmx1c2hl
ZEludDMyOgotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2Uo
SW50MzJJbkpTU3RhY2ssIGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDUy
OgotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoSW50NTJJ
bkpTU3RhY2ssIGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToKLSAg
ICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKERvdWJsZUluSlNT
dGFjaywgZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKLSAgICAgICAg
ICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVl
OgotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJ
bkpTU3RhY2ssIGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBtX2F2YWlsYWJpbGl0eSA9IG1f
aGlnaEJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBhcHBlbmRPU1JFeGl0KApAQCAtMzg4OSwxNCArMzgyMywxNCBAQCBwcml2YXRlOgogICAgICAg
ICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRlZFZhbHVlIHJlY292ZXJ5
KQogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKLSAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCB3aXRoIHZhbHVlIHNvdXJjZXM6ICIsIG1fdmFs
dWVTb3VyY2VzLCAiXG4iKTsKLSAgICAgICAgCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NS
IGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCksICIgd2l0aCBhdmFp
bGFiaWxpdHk6ICIsIG1fYXZhaWxhYmlsaXR5LCAiXG4iKTsKKwogICAgICAgICBBU1NFUlQobV9m
dGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSA9PSBtX2Z0bFN0YXRlLmZpbmFsaXplci0+
b3NyRXhpdC5zaXplKCkpOwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5v
c3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAga2luZCwgbG93VmFsdWUuZm9ybWF0
KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFsdWUpLAog
ICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgbV9jb2RlT3JpZ2luRm9yRXhp
dFByb2ZpbGUsCi0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkFyZ3VtZW50cygp
LCBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkxvY2FscygpKSk7CisgICAgICAgICAgICBtX2F2YWls
YWJpbGl0eS5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2F2YWlsYWJpbGl0eS5udW1iZXJPZkxvY2Fs
cygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JF
eGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAgICAgT1NSRXhpdCYgZXhpdCA9
IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBAIC0zOTI0LDEwICszODU4LDIy
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBFeGl0QXJndW1lbnRMaXN0IGFyZ3VtZW50czsK
ICAgICAgICAgCi0gICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0LCBhcmd1bWVudHMsIGxv
d1ZhbHVlKTsKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmln
aW47CiAgICAgICAgIAotICAgICAgICBpZiAoZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlv
bikgewotICAgICAgICAgICAgQVNTRVJUKG1fbm9kZSk7CisgICAgICAgIGlmIChkaXJlY3Rpb24g
PT0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICAgICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhl
eGl0LCBhcmd1bWVudHMsIGxvd1ZhbHVlLCBjb2RlT3JpZ2luKTsKKyAgICAgICAgZWxzZSBpZiAo
ZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikgeworICAgICAgICAgICAgaWYgKCFyZWNv
dmVyeSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gbV9ub2Rl
SW5kZXg7IG5vZGVJbmRleCA8IG1faGlnaEJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hCbG9jay0+YXQobm9kZUluZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0
ID09IGNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0
LCBhcmd1bWVudHMsIGxvd1ZhbHVlLCBjb2RlT3JpZ2luKTsKICAgICAgICAgICAgIGV4aXQuY29u
dmVydFRvRm9yd2FyZChtX2hpZ2hCbG9jaywgbV9ub2RlLCBtX25vZGVJbmRleCwgcmVjb3Zlcnks
IGFyZ3VtZW50cyk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0zOTM1LDM2ICszODgxLDU5IEBA
IHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIHZvaWQgYnVpbGRFeGl0QXJndW1lbnRzKAotICAg
ICAgICBPU1JFeGl0JiBleGl0LCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIEZvcm1hdHRl
ZFZhbHVlIGxvd1ZhbHVlKQorICAgICAgICBPU1JFeGl0JiBleGl0LCBFeGl0QXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLAorICAgICAgICBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fY2FsbEZyYW1l
KTsKICAgICAgICAgaWYgKCEhbG93VmFsdWUpCiAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KGxvd1ZhbHVlLnZhbHVlKCkpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFZhbHVlU291
cmNlIHNvdXJjZSA9IG1fdmFsdWVTb3VyY2VzW2ldOworICAgICAgICAgICAgaW50IG9wZXJhbmQg
PSBleGl0Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIGJvb2wgaXNM
aXZlID0gbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwg
Y29kZU9yaWdpbik7CisgICAgICAgICAgICBpZiAoIWlzTGl2ZSkgeworICAgICAgICAgICAgICAg
IGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNo
IChzb3VyY2Uua2luZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFZhbHVlSW5KU1N0YWNrOgotICAg
ICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFjayhzb3Vy
Y2UudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBJbnQzMkluSlNTdGFjazoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ld
ID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDMyKHNvdXJjZS52aXJ0dWFsUmVnaXN0ZXIoKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEludDUySW5KU1N0YWNr
OgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFj
a0FzSW50NTIoc291cmNlLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIEF2YWlsYWJp
bGl0eSBhdmFpbGFiaWxpdHkgPSBtX2F2YWlsYWJpbGl0eVtpXTsKKyAgICAgICAgICAgIEZsdXNo
ZWRBdCBmbHVzaCA9IGF2YWlsYWJpbGl0eS5mbHVzaGVkQXQoKTsKKyAgICAgICAgICAgIHN3aXRj
aCAoZmx1c2guZm9ybWF0KCkpIHsKKyAgICAgICAgICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAg
ICAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgorICAgICAgICAgICAgICAgIGlmIChhdmFpbGFi
aWxpdHkuaGFzTm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudEZv
ck5vZGUoZXhpdCwgYXJndW1lbnRzLCBpLCBhdmFpbGFiaWxpdHkubm9kZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygp
KSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkV4cGVjdGVkIHIiLCBvcGVyYW5kLCAi
IHRvIGJlIGF2YWlsYWJsZSBidXQgaXQgd2Fzbid0LlxuIik7CisgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgREZHJ3Mg
RENFIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBkZWFkIGluIGJ5dGVjb2RlCisgICAgICAgICAg
ICAgICAgLy8gZXZlbiB0aG91Z2ggdGhlIGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lzIHRoaW5r
cyBpdCdzIGxpdmUuIFRoaXMgaXMKKyAgICAgICAgICAgICAgICAvLyBhY2NlcHRhYmxlIHNpbmNl
IHRoZSBERkcncyBEQ0UgaXMgYnkgZGVzaWduIG1vcmUgYWdncmVzc2l2ZSB3aGlsZSBzdGlsbAor
ICAgICAgICAgICAgICAgIC8vIGJlaW5nIHNvdW5kLgorICAgICAgICAgICAgICAgIGV4aXQubV92
YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgRG91YmxlSW5KU1N0YWNrOgotICAgICAgICAgICAgICAgIGV4aXQubV92
YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKHNvdXJjZS52aXJ0dWFsUmVn
aXN0ZXIoKSk7CisKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgICAg
ICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAg
ICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2soZmx1
c2gudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBTb3VyY2VJc0RlYWQ6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9
IEV4aXRWYWx1ZTo6ZGVhZCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBG
bHVzaGVkSW50MzI6CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1
ZTo6aW5KU1N0YWNrQXNJbnQzMihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEhhdmVOb2RlOgotICAgICAgICAgICAgICAg
IGFkZEV4aXRBcmd1bWVudEZvck5vZGUoZXhpdCwgYXJndW1lbnRzLCBpLCBzb3VyY2Uubm9kZSgp
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgorICAg
ICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50
NTIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBGbHVzaGVkRG91Ymxl
OgorICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFj
a0FzRG91YmxlKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzk5MSw1MyArMzk2MCw2IEBAIHByaXZh
dGU6CiAgICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50RXhpdEFyZ3VtZW50KGV4aXQsIGluZGV4
LCBub2RlKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGlmICghaXNM
aXZlKG5vZGUpKSB7Ci0gICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhub2RlLT5vcCgp
KSkgewotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRFeGl0QXJndW1lbnQoZXhpdCwgaW5kZXgs
IG5vZGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYg
KGlzTGl2ZShub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAg
ICAgICAgICAgTm9kZSogYmVzdE5vZGUgPSAwOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJl
c3RTY29yZSA9IDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgSGFzaFNldDxO
b2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2xpdmUuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBI
YXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9saXZlLmVuZCgpOwotICAgICAgICAgICAg
ICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5v
ZGUqIGNhbmRpZGF0ZSA9ICppdGVyOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRl
LT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUtPmNoaWxkMSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
YW5kaWRhdGUtPmNoaWxkMSgpICE9IG5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbXlTY29yZSA9IGZvcndhcmRSZXdp
cmluZ1NlbGVjdGlvblNjb3JlKGNhbmRpZGF0ZS0+b3AoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChteVNjb3JlIDw9IGJlc3RTY29yZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgICAgICBiZXN0Tm9kZSA9IGNhbmRpZGF0ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYmVzdFNjb3JlID0gbXlTY29yZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGJlc3ROb2RlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChpc0xpdmUoYmVzdE5vZGUpKTsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IGJlc3ROb2RlOwotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpbmRleF0gPSBFeGl0
VmFsdWU6OmRlYWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChpc0xpdmUobm9kZSkpOwotCiAgICAg
ICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChub2RlKTsKICAg
ICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CiAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQo
ZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRJbnQzMiwgdmFsdWUudmFsdWUoKSk7
CkBAIC00MTE0LDcgKzQwMzYsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT5sb2NhbCgpOwogICAgICAgICAKLSAgICAgICAgbV92
YWx1ZVNvdXJjZXMub3BlcmFuZChvcGVyYW5kKSA9IFZhbHVlU291cmNlKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQob3BlcmFuZCkgPSBBdmFp
bGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBz
ZXRJbnQzMihOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCkBAIC00MjcyLDExICs0MTk0LDEwIEBA
IHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9ib29sZWFu
VmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fc3RvcmFnZVZh
bHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2RvdWJsZVZhbHVl
czsKLSAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7CiAgICAgCiAgICAgSGFzaE1hcDxOb2RlKiwg
TFZhbHVlPiBtX3BoaXM7CiAgICAgCi0gICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG1fdmFsdWVT
b3VyY2VzOworICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9hdmFpbGFiaWxpdHk7CiAgICAg
CiAgICAgSW5QbGFjZUFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICBBYnN0cmFjdEludGVycHJl
dGVyPEluUGxhY2VBYnN0cmFjdFN0YXRlPiBtX2ludGVycHJldGVyOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw3ICs3Myw3IEBAIHZvaWQgT1NSRXhpdDo6Y29udmVydFRvRm9yd2FyZCgKICAgICBBU1NFUlQo
bm9kZS0+Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CiAgICAgCiAgICAg
bV9jb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKLSAgICAKKwogICAgIGlmICghdmFsdWUp
CiAgICAgICAgIHJldHVybjsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
dXRwdXQuaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSw3IEBAIHB1YmxpYzoKICAg
ICBMVmFsdWUgaW50VG9QdHIoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBidWls
ZEludFRvUHRyKG1fYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9CiAgICAgTFZhbHVlIGJpdENhc3Qo
TFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBidWlsZEJpdENhc3QobV9idWlsZGVy
LCB2YWx1ZSwgdHlwZSk7IH0KICAgICAKKyAgICBMVmFsdWUgYWxsb2NhKExUeXBlIHR5cGUpIHsg
cmV0dXJuIGJ1aWxkQWxsb2NhKG1fYnVpbGRlciwgdHlwZSk7IH0KICAgICBMVmFsdWUgZ2V0KExW
YWx1ZSByZWZlcmVuY2UpIHsgcmV0dXJuIGJ1aWxkTG9hZChtX2J1aWxkZXIsIHJlZmVyZW5jZSk7
IH0KICAgICBMVmFsdWUgc2V0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHJlZmVyZW5jZSkgeyByZXR1
cm4gYnVpbGRTdG9yZShtX2J1aWxkZXIsIHZhbHVlLCByZWZlcmVuY2UpOyB9CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAkocmV2aXNp
b24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
RlRMVmFsdWVTb3VyY2UuaCIKLQotI2lmIEVOQUJMRShGVExfSklUKQotCi1uYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7Ci0KLXZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2UgU291cmNlTm90
U2V0OgotICAgICAgICBvdXQucHJpbnQoIlNvdXJjZU5vdFNldCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBWYWx1ZUluSlNTdGFjazoKLSAgICAgICAgb3V0LnByaW50KCJWYWx1ZUluSlNT
dGFjazoiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIElu
dDMySW5KU1N0YWNrOgotICAgICAgICBvdXQucHJpbnQoIkludDMySW5KU1N0YWNrOiIsIHZpcnR1
YWxSZWdpc3RlcigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW50NTJJbkpTU3RhY2s6
Ci0gICAgICAgIG91dC5wcmludCgiSW50NTJJbkpTU3RhY2s6IiwgdmlydHVhbFJlZ2lzdGVyKCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6Ci0gICAgICAgIG91
dC5wcmludCgiRG91YmxlSW5KU1N0YWNrOiIsIHZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgU291cmNlSXNEZWFkOgotICAgICAgICBvdXQucHJpbnQoIlNvdXJj
ZUlzRGVhZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBIYXZlTm9kZToKLSAgICAgICAg
b3V0LnByaW50KCJOb2RlKCIsIG5vZGUoKSwgIikiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFZhbHVl
U291cmNlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KikgY29u
c3QKLXsKLSAgICBkdW1wKG91dCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQot
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFZhbHVlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExWYWx1ZVNvdXJjZS5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBGVExWYWx1ZVNvdXJjZV9oCi0jZGVmaW5lIEZUTFZhbHVlU291cmNlX2gKLQotI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJE
RkdOb2RlLmgiCi0jaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLWVudW0g
VmFsdWVTb3VyY2VLaW5kIHsKLSAgICBTb3VyY2VOb3RTZXQsCi0gICAgVmFsdWVJbkpTU3RhY2ss
Ci0gICAgSW50MzJJbkpTU3RhY2ssCi0gICAgSW50NTJJbkpTU3RhY2ssCi0gICAgRG91YmxlSW5K
U1N0YWNrLAotICAgIFNvdXJjZUlzRGVhZCwKLSAgICBIYXZlTm9kZQotfTsKLQotY2xhc3MgVmFs
dWVTb3VyY2UgewotcHVibGljOgotICAgIFZhbHVlU291cmNlKCkKLSAgICAgICAgOiBtX2tpbmQo
U291cmNlTm90U2V0KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgVmFsdWVTb3Vy
Y2UoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCi0gICAgICAgIDogbV9raW5kKGtpbmQpCi0gICAgewot
ICAgICAgICBBU1NFUlQobV9raW5kID09IFNvdXJjZUlzRGVhZCk7Ci0gICAgfQotICAgIAotICAg
IGV4cGxpY2l0IFZhbHVlU291cmNlKERGRzo6Tm9kZSogbm9kZSkKLSAgICAgICAgOiBtX2tpbmQo
SGF2ZU5vZGUpCi0gICAgewotICAgICAgICBtX3ZhbHVlLm5vZGUgPSBub2RlOwotICAgIH0KLSAg
ICAKLSAgICBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQga2luZCwgVmlydHVhbFJlZ2lzdGVy
IHJlZykKLSAgICAgICAgOiBtX2tpbmQoa2luZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tp
bmQgPT0gVmFsdWVJbkpTU3RhY2sgfHwgbV9raW5kID09IEludDMySW5KU1N0YWNrIHx8IG1fa2lu
ZCA9PSBJbnQ1MkluSlNTdGFjayB8fCBtX2tpbmQgPT0gRG91YmxlSW5KU1N0YWNrKTsKLSAgICAg
ICAgbV92YWx1ZS52aXJ0dWFsUmVnaXN0ZXIgPSByZWcub2Zmc2V0KCk7Ci0gICAgfQotICAgIAot
ICAgIFZhbHVlU291cmNlS2luZCBraW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2tpbmQ7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
a2luZCgpID09IFNvdXJjZU5vdFNldDsgfQotICAgIAotICAgIERGRzo6Tm9kZSogbm9kZSgpIGNv
bnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsKLSAgICAgICAg
cmV0dXJuIG1fdmFsdWUubm9kZTsKLSAgICB9Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFZh
bHVlSW5KU1N0YWNrIHx8IGtpbmQoKSA9PSBJbnQzMkluSlNTdGFjayB8fCBraW5kKCkgPT0gSW50
NTJJbkpTU3RhY2sgfHwga2luZCgpID09IERvdWJsZUluSlNTdGFjayk7Ci0gICAgICAgIHJldHVy
biBWaXJ0dWFsUmVnaXN0ZXIobV92YWx1ZS52aXJ0dWFsUmVnaXN0ZXIpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2b2lkIGR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFZh
bHVlU291cmNlS2luZCBtX2tpbmQ7Ci0gICAgdW5pb24gewotICAgICAgICBERkc6Ok5vZGUqIG5v
ZGU7Ci0gICAgICAgIGludCB2aXJ0dWFsUmVnaXN0ZXI7Ci0gICAgfSBtX3ZhbHVlOwotfTsKLQot
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0K
LSNlbmRpZiAvLyBGVExWYWx1ZVNvdXJjZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbHZtL0xMVk1BUElGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGx2bS9MTFZNQVBJRnVuY3Rpb25zLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUElGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTM1LDcgKzUzNSw2IEBACiAgICAgbWFjcm8oTExWTUJvb2wsIFRhcmdldEhhc0pJVCwgKExM
Vk1UYXJnZXRSZWYgVCkpIFwKICAgICBtYWNybyhMTFZNQm9vbCwgVGFyZ2V0SGFzVGFyZ2V0TWFj
aGluZSwgKExMVk1UYXJnZXRSZWYgVCkpIFwKICAgICBtYWNybyhMTFZNQm9vbCwgVGFyZ2V0SGFz
QXNtQmFja2VuZCwgKExMVk1UYXJnZXRSZWYgVCkpIFwKLSAgICBtYWNybyhMTFZNVGFyZ2V0TWFj
aGluZVJlZiwgQ3JlYXRlVGFyZ2V0TWFjaGluZSwgKExMVk1UYXJnZXRSZWYgVCwgY2hhciAqVHJp
cGxlLCBjaGFyICpDUFUsIGNoYXIgKkZlYXR1cmVzLCBMTFZNQ29kZUdlbk9wdExldmVsIExldmVs
LCBMTFZNUmVsb2NNb2RlIFJlbG9jLCBMTFZNQ29kZU1vZGVsIENvZGVNb2RlbCkpIFwKICAgICBt
YWNybyh2b2lkLCBEaXNwb3NlVGFyZ2V0TWFjaGluZSwgKExMVk1UYXJnZXRNYWNoaW5lUmVmIFQp
KSBcCiAgICAgbWFjcm8oTExWTVRhcmdldFJlZiwgR2V0VGFyZ2V0TWFjaGluZVRhcmdldCwgKExM
Vk1UYXJnZXRNYWNoaW5lUmVmIFQpKSBcCiAgICAgbWFjcm8oY2hhciAqLCBHZXRUYXJnZXRNYWNo
aW5lVHJpcGxlLCAoTExWTVRhcmdldE1hY2hpbmVSZWYgVCkpIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EdW1wQ29udGV4dC5jcHAJKHJldmlzaW9uIDE1OTM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUR1bXBDb250
ZXh0OjpEdW1wQ29udGV4dCgpIHsgfQorRHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KCkKKyAgICA6
IGdyYXBoKDApCit7Cit9CisKIER1bXBDb250ZXh0Ojp+RHVtcENvbnRleHQoKSB7IH0KIAogYm9v
bCBEdW1wQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EdW1wQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSBERkcgeyBjbGFzcyBH
cmFwaDsgfQorCiBzdHJ1Y3QgRHVtcENvbnRleHQgewogICAgIER1bXBDb250ZXh0KCk7CiAgICAg
fkR1bXBDb250ZXh0KCk7CkBAIC00MSw2ICs0Myw3IEBAIHN0cnVjdCBEdW1wQ29udGV4dCB7CiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4ID0gIiIpIGNvbnN0
OwogICAgIAogICAgIFN0cmluZ0hhc2hEdW1wQ29udGV4dDxTdHJ1Y3R1cmU+IHN0cnVjdHVyZXM7
CisgICAgREZHOjpHcmFwaCogZ3JhcGg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE1OTM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTI2LDYgKzEyNiw3IEBAIHR5cGVkZWYgT3B0aW9uUmFuZ2Ugb3B0aW9uUmFuZ2U7CiAg
ICAgdihib29sLCBlbmFibGVMTFZNRmFzdElTZWwsIGZhbHNlKSBcCiAgICAgdihib29sLCB1c2VM
TFZNU21hbGxDb2RlTW9kZWwsIGZhbHNlKSBcCiAgICAgdihib29sLCBkdW1wTExWTUlSLCBmYWxz
ZSkgXAorICAgIHYoYm9vbCwgdmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MsIGZhbHNlKSBcCiAg
ICAgdihib29sLCBsbHZtQWx3YXlzRmFpbHNCZWZvcmVDb21waWxlLCBmYWxzZSkgXAogICAgIHYo
Ym9vbCwgbGx2bUFsd2F5c0ZhaWxzQmVmb3JlTGluaywgZmFsc2UpIFwKICAgICB2KGJvb2wsIGxs
dm1TaW1wbGVPcHQsIHRydWUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDEzICs0Njks
MTMgQEAgcHVibGljOgogICAgIGJvb2wgdXNlc05vblN0cmljdEV2YWwoKSB7IHJldHVybiBtX3Vz
ZXNOb25TdHJpY3RFdmFsOyB9CiAgICAgdm9pZCBzZXRVc2VzTm9uU3RyaWN0RXZhbChib29sIHVz
ZXNOb25TdHJpY3RFdmFsKSB7IG1fdXNlc05vblN0cmljdEV2YWwgPSB1c2VzTm9uU3RyaWN0RXZh
bDsgfQogCi0gICAgaW50IGNhcHR1cmVTdGFydCgpIHsgcmV0dXJuIG1fY2FwdHVyZVN0YXJ0OyB9
CisgICAgaW50IGNhcHR1cmVTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZVN0YXJ0OyB9
CiAgICAgdm9pZCBzZXRDYXB0dXJlU3RhcnQoaW50IGNhcHR1cmVTdGFydCkgeyBtX2NhcHR1cmVT
dGFydCA9IGNhcHR1cmVTdGFydDsgfQogCi0gICAgaW50IGNhcHR1cmVFbmQoKSB7IHJldHVybiBt
X2NhcHR1cmVFbmQ7IH0KKyAgICBpbnQgY2FwdHVyZUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fw
dHVyZUVuZDsgfQogICAgIHZvaWQgc2V0Q2FwdHVyZUVuZChpbnQgY2FwdHVyZUVuZCkgeyBtX2Nh
cHR1cmVFbmQgPSBjYXB0dXJlRW5kOyB9CiAKLSAgICBpbnQgY2FwdHVyZUNvdW50KCkgeyByZXR1
cm4gLShtX2NhcHR1cmVFbmQgLSBtX2NhcHR1cmVTdGFydCk7IH0KKyAgICBpbnQgY2FwdHVyZUNv
dW50KCkgY29uc3QgeyByZXR1cm4gLShtX2NhcHR1cmVFbmQgLSBtX2NhcHR1cmVTdGFydCk7IH0K
IAogICAgIGludCBwYXJhbWV0ZXJDb3VudCgpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNs
dWRpbmdUaGlzIC0gMTsgfQogICAgIGludCBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoKSB7
IHJldHVybiBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsgfQo=
</data>
<flag name="commit-queue"
          id="240193"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217116</attachid>
            <date>2013-11-15 22:33:06 -0800</date>
            <delta_ts>2013-11-16 00:48:16 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>113995</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5Mzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MCBA
QAorMjAxMy0xMS0xNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgaGF2ZSBhbiBleHBsaWNpdCBub3Rpb24gb2YgYnl0ZWNvZGUgbGl2ZW5lc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDE4MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
VGhpcyBtYWtlcyBGVEwgT1NSIGV4aXQgdXNlIGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lzIHRv
IGRldGVybWluZSB3aGljaCB2YXJpYWJsZXMKKyAgICAgICAgdG8gaW5jbHVkZSB2YWx1ZXMgZm9y
LiBUaGUgZGVjaXNpb24gb2YgaG93IHRvIGdldCB0aGUgdmFsdWVzIG9mIHZhcmlhYmxlcyBpcyBi
YXNlZCBvbgorICAgICAgICBmb3J3YXJkIHByb3BhZ2F0aW9uIG9mIE1vdkhpbnRzIGFuZCBTZXRM
b2NhbHMuCisgICAgICAgIAorICAgICAgICBUaGlzIGZpeGVzIGEgYnVuY2ggb2YgYnVncyAobGlr
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MTM4IGJ1dAorICAg
ICAgICBhbHNvIG90aGVycyB0aGF0IEkgbm90aWNlZCB3aGVuIEkgc3RhcnRlZCB3cml0aW5nIG1v
cmUgdGFyZ2V0dGVkIHRlc3RzKSBhbmQgYWxsb3dzIHVzCisgICAgICAgIHRvIHJlbW92ZSBzb21l
IHNrZXRjaHkgY29kZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmg6
CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAg
ICAgKEpTQzo6aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpzZXRG
b3JPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6
CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpzdGVwT3Zlckluc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZUxvY2FsTGl2
ZW5lc3NGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpczo6cnVuTGl2ZW5lc3NGaXhwb2ludCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpczo6b3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpnZXRMaXZlbmVzc0luZm8pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MpOgorICAgICAgICAq
IGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOgorICAgICAgICAoSlNDOjpvcGVyYW5kVGhhdElzTm90QWx3
YXlzTGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xpdmUpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhcHR1cmVD
b3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FwdHVyZVN0YXJ0KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpjYXB0dXJlRW5kKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3Jp
Z2luLmNwcDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpkdW1wSW5Db250ZXh0KToK
KyAgICAgICAgKiBieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzKToKKyAg
ICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OmdldE91dCk6CisgICAgICAgIChKU0M6
OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlKToKKyAgICAgICAgKEpTQzo6RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M6OmdldExpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHQXZhaWxh
YmlsaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5OjpkdW1w
KToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OmR1bXBJbkNvbnRleHQpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6
QXZhaWxhYmlsaXR5OjpBdmFpbGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJp
bGl0eTo6dW5hdmFpbGFibGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6d2l0
aEZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OndpdGhOb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OndpdGhVbmF2YWlsYWJsZU5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6bm9kZUlzVW5kZWNpZGVkKToKKyAgICAgICAg
KEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6Om5vZGVJc1VuYXZhaWxhYmxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBdmFpbGFiaWxpdHk6Omhhc05vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWls
YWJpbGl0eTo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5OjpmbHVzaGVk
QXQpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6b3BlcmF0b3IhKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eTo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0
eTo6bWVyZ2VOb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5Ojp1bmF2YWls
YWJsZU1hcmtlcik6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdEaXNhc3NlbWJsZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxlcjo6RGlzYXNzZW1ibGVyKToKKyAgICAgICAgKiBkZmcv
REZHRmx1c2hGb3JtYXQuY3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBkZmcvREZHRmx1c2hGb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpyZXN1bHRGb3Ip
OgorICAgICAgICAoSlNDOjpERkc6OnVzZUtpbmRGb3IpOgorICAgICAgICAoSlNDOjpERkc6OmRh
dGFGb3JtYXRGb3IpOgorICAgICAgICAqIGRmZy9ERkdGbHVzaGVkQXQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkZsdXNoZWRBdDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0ZsdXNoZWRBdC5o
OgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoZWRBdDo6Rmx1c2hlZEF0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpGbHVzaGVkQXQ6Om1lcmdlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bGl2ZW5lc3NGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0xpdmVJbkJ5dGVj
b2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6YmFzZWxpbmVDb2RlQmxvY2tGb3IpOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdSZXN1cnJl
Y3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2U6OlJlc3VycmVjdGlvbkZvclZhbGlkYXRpb25Q
aGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6UmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1SZXN1cnJlY3Rpb25Gb3JWYWxpZGF0
aW9uKToKKyAgICAgICAgKiBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg6
IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZH
VmFsdWVTb3VyY2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6Zm9yRmx1c2hG
b3JtYXQpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAg
KiBmdGwvRlRMRXhpdFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmR1
bXBJbkNvbnRleHQpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Okxvd2VyREZHVG9MTFZNKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpjb21waWxlWm9tYmllSGludCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6aW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmVtaXRPU1JFeGl0Q2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudEZvck5vZGUpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpvYnNlcnZlTW92SGludCk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQp
OgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OmFsbG9jYSk6CisgICAgICAgICogZnRsL0ZUTFZhbHVlU291cmNlLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBmdGwvRlRMVmFsdWVTb3VyY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsbHZtL0xM
Vk1BUElGdW5jdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL0R1bXBDb250ZXh0LmNwcDoKKyAg
ICAgICAgKEpTQzo6RHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KToKKyAgICAgICAgKiBydW50aW1l
L0R1bXBDb250ZXh0Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICog
cnVudGltZS9TeW1ib2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6
Y2FwdHVyZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6U2hhcmVkU3ltYm9sVGFibGU6OmNhcHR1cmVF
bmQpOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6Y2FwdHVyZUNvdW50KToKKwog
MjAxMy0xMS0xNSAgcGVhdm9Ab3V0bG9vay5jb20gIDxwZWF2b0BvdXRsb29rLmNvbT4KIAogICAg
ICAgICBbV2luXSBKYXZhU2NyaXB0IGNyYXNoZXMgb24gNjQtYml0IHdpdGggSklUIGVuYWJsZWQu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTkzNTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTkxLDYgKzkxLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHQXJyYXlNb2RlLmNw
cAogICAgIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcAorICAgIGRmZy9ERkdBdmFpbGFi
aWxpdHkuY3BwCiAgICAgZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCiAgICAg
ZGZnL0RGR0Jhc2ljQmxvY2suY3BwCiAgICAgZGZnL0RGR0JpbmFyeVN3aXRjaC5jcHAKQEAgLTE1
OCw2ICsxNTksNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdQbGFu
LmNwcAogICAgIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdSZXN1cnJlY3Rpb25G
b3JWYWxpZGF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAK
ICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMCArMTAwLDExIEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVBy
b2ZpbGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxl
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaCBcCi0gICAg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgXAot
ICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaCBc
Ci0gICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAgXAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlQmFzaWNCbG9jay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUJhc2ljQmxvY2suaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaCBcCkBAIC0xMzIsNiArMTMzLDcgQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
aXRLaW5kLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeHByZXNzaW9uUmFuZ2VJbmZvLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oIFwKQEAgLTIwNyw2ICsyMDks
OCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXZhaWxhYmlsaXR5LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5jcHAgXApAQCAtMzU4LDYgKzM2Miw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVn
aXN0ZXJCYW5rLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdXJyZWN0aW9u
Rm9yVmFsaWRhdGlvblBoYXNlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmggXApAQCAtNDY5LDggKzQ3NSw2IEBAIGphdmFzY3Jp
cHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVG
b3JtYXQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0Lmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9tQmxvY2suaCBcCi0JU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAgXAotCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29kZUJsb2NrU2V0LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29k
ZUJsb2NrU2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEFsbG9jYXRv
ci5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNp
b24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM4LDYgKzMzOCw3
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fy
cmF5TW9kZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0VGFp
bEFic3RyYWN0U3RhdGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBdmFpbGFiaWxpdHkuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHQmFzaWNCbG9jay5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0JpbmFyeVN3aXRjaC5jcHAiIC8+DQpAQCAtNDAzLDYgKzQwNCw3IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGxhbi5jcHAiIC8+DQogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVzdXJy
ZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCIgLz4NCiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAiIC8+DQpAQCAtNzQ1LDYg
Kzc0Nyw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeVZhbEluZm8u
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZUJhc2lj
QmxvY2suaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmUuaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua0luZm8uaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua1N0YXR1cy5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0
LmgiIC8+DQpAQCAtNzYyLDYgKzc2NSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxFeGVjdXRpb25Db3VudGVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcRXhpdEtpbmQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxFeHByZXNzaW9uUmFuZ2VJbmZvLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcRnVsbEJ5dGVjb2RlTGl2ZW5zcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEdldEJ5SWRTdGF0dXMuaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxIYW5kbGVySW5mby5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXElubGluZUNhbGxGcmFtZVNldC5oIiAvPg0KQEAgLTgxMiw2
ICs4MTYsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5aWZ5U2xv
d1BhdGhHZW5lcmF0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
QXJyYXlNb2RlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0VGFp
bEFic3RyYWN0U3RhdGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
QXZhaWxhYmlsaXR5LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jh
Y2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHQmFzaWNCbG9jay5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYXNpY0Jsb2NrSW5saW5lcy5oIiAvPg0KQEAgLTg5NSw2ICs5MDAsNyBAQAogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1JlZ2lzdGVyQmFuay5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlclNldC5oIiAvPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0
aW9uUGhhc2UuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZVRv
RXhlY3V0ZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTYW5lU3Ry
aW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdTY29yZUJvYXJkLmgiIC8+DQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDQsOCArMTA0LDYgQEAKIAkJMEYyMzVCRTIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQ0Mx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjM1QkUzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExW
YWx1ZUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjIzNUJDRDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuY3BwICovOyB9
OwogCQkwRjIzNUJFNDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkNFMTcxNzhFMUMw
MDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTBGMjM1QkU1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1
ZVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjIzNUJDRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuY3BwICovOyB9Owot
CQkwRjIzNUJFNjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkQwMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMjM1QkVCMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIzNUJFNzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwICovOyB9OwogCQkw
RjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkU4MTcxNzhFNzMwMDY5MEM3
RiAvKiBERkdPU1JFeGl0QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMjM1QkVEMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJl
cGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyMzVCRTkxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAg
Ki87IH07CkBAIC0yNjAsNiArMjU4LDEyIEBACiAJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAv
KiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNjM5NDg0MTVFNDgxMTgwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0ODEx
NUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgKi87IH07CiAJCTBGNjM5NDg1MTVF
NDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJh
eU1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjY2
NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUJGMTgzNTY2RjkwMEQw
MTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjY2RUM2MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdB
dmFpbGFiaWxpdHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2NjZFQzIxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgKi87
IH07CisJCTBGNjY2RUM3MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUMzMTgzNTY3
MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjY2NkVDQzE4MzZCMzdFMDBEMDE3RjEgLyogREZH
UmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUNBMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwICovOyB9OworCQkwRjY2NkVDRDE4MzZC
MzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDQjE4MzZCMzdF
MDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0Yx
NjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGph
Y2VuY3lMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJF
NCAvKiBERkdFZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY3MDI1QTkxNzE0QjBGQTAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjcwMjVBNzE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCAq
LzsgfTsKQEAgLTEzOTUsOCArMTM5OSw2IEBACiAJCTBGMjM1QkNDMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVGh1bmtz
Lmg7IHBhdGggPSBmdGwvRlRMVGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMjM1QkNEMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExWYWx1ZUZvcm1hdC5jcHA7IHBhdGggPSBm
dGwvRlRMVmFsdWVGb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIz
NUJDRTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVGb3JtYXQuaDsgcGF0aCA9IGZ0bC9GVExWYWx1ZUZv
cm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjIzNUJDRjE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRlRMVmFsdWVTb3VyY2UuY3BwOyBwYXRoID0gZnRsL0ZUTFZhbHVlU291cmNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyMzVCRDAxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTFZhbHVlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TFZhbHVlU291cmNlLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVTb3VyY2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCRTcxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRC
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRC
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMjM1QkU4MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0QmFzZS5oOyBwYXRo
ID0gZGZnL0RGR09TUkV4aXRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MjM1QkU5MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdFByZXBhcmF0aW9uLmNw
cDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTU1MCw2ICsxNTUyLDEyIEBACiAJCTBGNjM5NDc2MTVEQ0UzNDcwMDZB
NTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJyYXlNb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdB
cnJheU1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzOTQ4MjE1RTQ4
MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0FycmF5TW9kZS5oOyBwYXRoID0gZGZnL0RGR0FycmF5TW9kZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZl
bmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdWxsQnl0ZWNvZGVMaXZl
bmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2NkVDMjE4MzU2NzJCMDBE
MDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0F2YWlsYWJpbGl0eS5jcHA7IHBhdGggPSBkZmcvREZHQXZhaWxhYmlsaXR5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQzMxODM1NjcyQjAwRDAx
N0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdBdmFpbGFiaWxpdHkuaDsgcGF0aCA9IGRmZy9ERkdBdmFpbGFiaWxpdHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQ0ExODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jl
c3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJl
Y3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHUmVz
dXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9IGRm
Zy9ERkdBZGphY2VuY3lMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZF
MTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0VkZ2UuaDsgcGF0aCA9IGRmZy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNzAyNUE3MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg0NCw4ICsyODUyLDYg
QEAKIAkJCQkwRjIzNUJDRDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuY3BwICov
LAogCQkJCTBGMjM1QkNFMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5oICovLAog
CQkJCTBGREIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oICovLAot
CQkJCTBGMjM1QkNGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5jcHAgKi8sCi0J
CQkJMEYyMzVCRDAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmggKi8sCiAJCQkp
OwogCQkJbmFtZSA9IGZ0bDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zNzQ0LDYg
KzM3NTAsOCBAQAogCQkJCTBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUu
aCAqLywKIAkJCQlBN0Q5QTI4RjE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RT
dGF0ZS5jcHAgKi8sCiAJCQkJQTdEOUEyOTAxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFi
c3RyYWN0U3RhdGUuaCAqLywKKwkJCQkwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZh
aWxhYmlsaXR5LmNwcCAqLywKKwkJCQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZh
aWxhYmlsaXR5LmggKi8sCiAJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJF
QiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCiAJCQkJQTdEODlDRTMxN0Ew
QjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2suY3BwICovLApAQCAtMzg5NCw2ICszOTAyLDgg
QEAKIAkJCQkwRkZGQzk1MTE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTUyMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oICovLAogCQkJCTg2RUM5REMxMTMyOERGODIwMDJCMkFE
NyAvKiBERkdSZWdpc3RlckJhbmsuaCAqLywKKwkJCQkwRjY2NkVDQTE4MzZCMzdFMDBEMDE3RjEg
LyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjY2NkVD
QjE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmgg
Ki8sCiAJCQkJQTc3QTQyM0MxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCAq
LywKIAkJCQlBNzQxMDE3RTE3OURBRjgwMDAyRUI4QkEgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFs
U2xvd1BhdGhHZW5lcmF0b3IuaCAqLywKIAkJCQk4NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcgLyog
REZHU2NvcmVCb2FyZC5oICovLApAQCAtNDAzNiwxNSArNDA0NiwxNiBAQAogCQk5NjlBMDc4RjBF
RDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCUMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJh
c2ljQmxvY2suY3BwICovLAotCQkJCUMyRkNBRTBEMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29k
ZUJhc2ljQmxvY2suaCAqLywKLQkJCQlDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLywKLQkJCQlDMkZDQUUwRjE3QTlDMjRFMDAzNEM3MzUg
LyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8sCiAJCQkJMEY4MzM1QjQxNjM5QzFFMzAw
MTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwICovLAogCQkJCTBGODMzNUI1MTYz
OUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi8sCiAJCQkJMEY2Mzk0
NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgKi8sCiAJCQkJMEY2Mzk0NTIx
NUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oICovLAorCQkJCUMyRkNBRTBDMTdBOUMy
NEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovLAorCQkJCUMyRkNBRTBEMTdB
OUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLywKIAkJCQkwRjIxQzI3RTE0
QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovLAorCQkJCUMyRkNBRTBF
MTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwICovLAorCQkJ
CUMyRkNBRTBGMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAq
LywKKwkJCQkwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzSW5saW5lcy5oICovLAogCQkJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbElu
Zm8uaCAqLywKIAkJCQkwRjBCODNBRTE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNw
cCAqLywKIAkJCQkwRjBCODNBRjE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggKi8s
CkBAIC00MDczLDYgKzQwODQsNyBAQAogCQkJCTBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBF
eGl0S2luZC5jcHAgKi8sCiAJCQkJMEZCMTA1ODMxNjc1NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5k
LmggKi8sCiAJCQkJMEYwQjgzQUExNEJDRjVCOTAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUlu
Zm8uaCAqLywKKwkJCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MuaCAqLywKIAkJCQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1
cy5jcHAgKi8sCiAJCQkJMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMu
aCAqLywKIAkJCQkwRjBCODNBODE0QkNGNTVFMDA4ODVCNEYgLyogSGFuZGxlckluZm8uaCAqLywK
QEAgLTQ0MzEsNyArNDQ0Myw2IEBACiAJCQkJMEZFQTBBMjAxNzA4QjAwNzAwQkI3MjJDIC8qIEZU
TFR5cGVkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRTQxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTFZhbHVlRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNDQTE3M0RB
NTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
MjM1QkU2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0MDQwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjBGMUEwMTZCNzJBMUEwMDVERjk1QiAvKiBGdW5jdGlvbkV4
ZWN1dGFibGVEdW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0
NjAgLyogRnVuY3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtNDQ2MSw2ICs0NDcy
LDcgQEAKIAkJCQkyQTZGNDYyNjE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTRGOTc0NDcxMzhDODUzRTAwREExQzY3IC8qIEhlYXBSb290Vmlz
aXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzI0RDMxRTMxNjFDRDY5NTAwMkFBNERCIC8qIEhl
YXBTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3
RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRTUyNkJF
MTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4
MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQwRjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRl
cnMgKi8sCkBAIC00NzAzLDYgKzQ3MTUsNyBAQAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4
RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MTBFMTZG
NUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUE1
MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QjkxNjZBRDM2MDAwMEY1QkEzIC8qIFBy
b2ZpbGVyQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjEzOTEyQTE2NzcxQzM2MDA5
Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCkBAIC00ODEzLDYgKzQ4MjYsNyBAQAogCQkJCUE3QThBRjNGMTdBREI1RjMwMDVBQjE3
NCAvKiBVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0MDE3QURCNUYzMDA1
QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUYwOENG
MTQ2Qzc2MzMwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjY2NkVDNzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0I2MDE4MjE2MzlGRDJBMDAzNzJCQTMgLyogVW5saW5rZWRDb2Rl
QmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBV
bnVzZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5
QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTQ4NDMsNiArNDg1Nyw3IEBA
CiAJCQkJMEZDODE1MEExNDA0M0JGNTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTk2ODhDQjE2MEVEMTJCNEUwMDFENjQ5RiAvKiBYODZBc3NlbWJs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ1MTUzOUI5MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2NkVDRDE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVz
dXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4
NTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJzICov
LApAQCAtNTQ1MSw3ICs1NDY2LDYgQEAKIAkJCQkwRkVBMEExNjE3MDZCQjkwMDBCQjcyMkMgLyog
RlRMU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRTExNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTFRodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFMzE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYyMzVCRTUx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUNCMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1
dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNDMTA3RUMzNzYwMDQyN0E0
OCAvKiBGdW5jdGlvblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU2MzAsNiArNTY0
NCw3IEBACiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ck9yaWdpblN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyRkNBRTEwMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NjZF
Q0MxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmls
ZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2
RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJC
MTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNTY5OCw2ICs1NzEzLDcgQEAKIAkJCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2
MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVEOTRGMkUxNzFF
M0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjMw
MTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjY2NkVDNjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOTE5RDI1MTU4NTNDRTAwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBQ0Y3Mzc3MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0RTg0RjlFMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDggKzM2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsK
IAotdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBGYXN0Qml0VmVjdG9yLCBXVEY6OkludEhhc2g8
dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPiA+
IEJ5dGVjb2RlVG9CaXRtYXBNYXA7Ci0KIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jayA6IHB1Ymxp
YyBSZWZDb3VudGVkPEJ5dGVjb2RlQmFzaWNCbG9jaz4gewogcHVibGljOgogICAgIGVudW0gU3Bl
Y2lhbEJsb2NrVHlwZSB7IEVudHJ5QmxvY2ssIEV4aXRCbG9jayB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw3ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmgiCiAKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MuaCIKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC0zOCw0NCArNDAsMjMgQEAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpCeXRlY29k
ZUxpdmVuZQogICAgIGNvbXB1dGUoKTsKIH0KIAotc3RhdGljIGludCBudW1iZXJPZkNhcHR1cmVk
VmFyaWFibGVzKENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5z
eW1ib2xUYWJsZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5z
eW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291bnQoKTsKLX0KLQotc3RhdGljIGludCBjYXB0dXJlU3Rh
cnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgaWYgKCFjb2RlQmxvY2stPnN5bWJvbFRh
YmxlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb2RlQmxvY2stPnN5bWJvbFRh
YmxlKCktPmNhcHR1cmVTdGFydCgpOwotfQotCi1zdGF0aWMgaW50IGNhcHR1cmVFbmQoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCi17Ci0gICAgaWYgKCFjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPmNh
cHR1cmVFbmQoKTsKLX0KLQogc3RhdGljIGJvb2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIGludCBvcGVyYW5kKQogewogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnKG9wZXJhbmQpOwogICAgIHJldHVybiAhY29kZUJsb2NrLT5pc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChvcGVyYW5kKSAvLyBEb24ndCBjYXJlIGFib3V0IGNvbnN0YW50cy4KICAg
ICAgICAgJiYgdmlydHVhbFJlZy5pc0xvY2FsKCkgLy8gRG9uJ3QgY2FyZSBhYm91dCBhcmd1bWVu
dHMuCi0gICAgICAgICYmICghbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhjb2RlQmxvY2spIC8v
IElmIHdlIGhhdmUgbm8gY2FwdHVyZWQgdmFyaWFibGVzLCB3ZSdyZSBnb29kIHRvIGdvLgotICAg
ICAgICAgICAgfHwgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPiBjYXB0dXJlU3RhcnQoY29kZUJsb2Nr
KSB8fCAodmlydHVhbFJlZy5vZmZzZXQoKSA8PSBjYXB0dXJlRW5kKGNvZGVCbG9jaykpKSk7Cisg
ICAgICAgICYmICghY29kZUJsb2NrLT5jYXB0dXJlQ291bnQoKSAvLyBJZiB3ZSBoYXZlIG5vIGNh
cHR1cmVkIHZhcmlhYmxlcywgd2UncmUgZ29vZCB0byBnby4KKyAgICAgICAgICAgIHx8ICh2aXJ0
dWFsUmVnLm9mZnNldCgpID4gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSB8fCAodmlydHVhbFJl
Zy5vZmZzZXQoKSA8PSBjb2RlQmxvY2stPmNhcHR1cmVFbmQoKSkpKTsKIH0KIAogc3RhdGljIHZv
aWQgc2V0Rm9yT3BlcmFuZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgRmFzdEJpdFZlY3RvciYgYml0
cywgaW50IG9wZXJhbmQpCiB7CiAgICAgQVNTRVJUKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNz
KGNvZGVCbG9jaywgb3BlcmFuZCkpOwogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnKG9w
ZXJhbmQpOwotICAgIGlmICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY2FwdHVyZVN0YXJ0KGNvZGVC
bG9jaykpCisgICAgaWYgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPiBjb2RlQmxvY2stPmNhcHR1cmVT
dGFydCgpKQogICAgICAgICBiaXRzLnNldCh2aXJ0dWFsUmVnLnRvTG9jYWwoKSk7CiAgICAgZWxz
ZQotICAgICAgICBiaXRzLnNldCh2aXJ0dWFsUmVnLnRvTG9jYWwoKSAtIG51bWJlck9mQ2FwdHVy
ZWRWYXJpYWJsZXMoY29kZUJsb2NrKSk7CisgICAgICAgIGJpdHMuc2V0KHZpcnR1YWxSZWcudG9M
b2NhbCgpIC0gY29kZUJsb2NrLT5jYXB0dXJlQ291bnQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNv
bXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiB1c2VzKQpAQCAtMzAzLDggKzI4NCw4IEBA
IHN0YXRpYyB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQKICAgICAgICAgaW50IGJh
c2UgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBjb3VudCA9IGluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKSB7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJs
b2NrLCBiYXNlICsgaSkpCi0gICAgICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ss
IHVzZXMsIGJhc2UgKyBpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZl
bmVzcyhjb2RlQmxvY2ssIGJhc2UgLSBpKSkKKyAgICAgICAgICAgICAgICBzZXRGb3JPcGVyYW5k
KGNvZGVCbG9jaywgdXNlcywgYmFzZSAtIGkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0zMTUsMTEgKzI5NiwxMSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlVXNlc0ZvckJ5
dGVjb2RlT2Zmc2V0CiAgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2Rl
QmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCiAgICAgICAgICAgICBzZXRGb3JPcGVy
YW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAg
aW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICBpbnQgcmVn
aXN0ZXJPZmZzZXQgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisgICAgICAgIGludCByZWdp
c3Rlck9mZnNldCA9IC1pbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBsYXN0
QXJnID0gcmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOwot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHsKLSAgICAgICAgICAg
IGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGxhc3RBcmcgLSBpKSkK
LSAgICAgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgbGFzdEFyZyAt
IGkpOworICAgICAgICBmb3IgKGludCBpID0gb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gMSA6
IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVy
Rm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBsYXN0QXJnICsgaSkpCisgICAgICAgICAgICAgICAgc2V0
Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGxhc3RBcmcgKyBpKTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMzMzLDEwICszMTQsOSBAQCBzdGF0aWMgdm9pZCBjb21w
dXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0CiAgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVC
bG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSNkZWZpbmUgTExJTlRfSEVMUEVSX09QQ09ERVMob3Bjb2RlLCBsZW5ndGgpIGNhc2Ug
b3Bjb2RlOgotICAgIEZPUl9FQUNIX0xMSU5UX09QQ09ERV9FWFRFTlNJT04oTExJTlRfSEVMUEVS
X09QQ09ERVMpCi0gICAgICAgIHJldHVybjsKLSN1bmRlZiBMTElOVF9IRUxQRVJfT1BDT0RFUwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtNDkyLDggKzQ3Miw3IEBAIHN0YXRpYyB2b2lkIGNv
bXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQKICAgICBjYXNlIG9wX2VudGVyOiB7CiAgICAgICAg
IGRlZnMuc2V0QWxsKCk7CiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgfQorICAgIH0gfQog
fQogCiBzdGF0aWMgdW5zaWduZWQgZ2V0TGVhZGVyT2Zmc2V0Rm9yQmFzaWNCbG9jayhSZWZQdHI8
Qnl0ZWNvZGVCYXNpY0Jsb2NrPiogYmFzaWNCbG9jaykKQEAgLTU0MCwxMyArNTE5LDMyIEBAIHN0
YXRpYyBCeXRlY29kZUJhc2ljQmxvY2sqIGZpbmRCYXNpY0Jsb2MKICAgICByZXR1cm4gYmFzaWNC
bG9ja1sxXS5nZXQoKTsKIH0KIAorc3RhdGljIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+PiYgYmFz
aWNCbG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiB1c2VzLCBG
YXN0Qml0VmVjdG9yJiBkZWZzLCBGYXN0Qml0VmVjdG9yJiBvdXQpCit7CisgICAgdXNlcy5jbGVh
ckFsbCgpOworICAgIGRlZnMuY2xlYXJBbGwoKTsKKyAgICAKKyAgICBjb21wdXRlVXNlc0ZvckJ5
dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQsIHVzZXMpOworICAgIGNvbXB1
dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgZGVmcyk7
CisgICAgCisgICAgb3V0LmV4Y2x1ZGUoZGVmcyk7CisgICAgb3V0Lm1lcmdlKHVzZXMpOworICAg
IAorICAgIC8vIElmIHdlIGhhdmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIHdlIHdhbnQgdGhlIGxp
dmUtaW4gdmFyaWFibGVzIG9mIHRoZSAKKyAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9jayB0
byBiZSBpbmNsdWRlZCBpbiB0aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgYnl0ZWNvZGUu
CisgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSB7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9j
ayogaGFuZGxlckJsb2NrID0gZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGJhc2ljQmxv
Y2tzLCBoYW5kbGVyLT50YXJnZXQpOworICAgICAgICBBU1NFUlQoaGFuZGxlckJsb2NrKTsKKyAg
ICAgICAgb3V0Lm1lcmdlKGhhbmRsZXJCbG9jay0+aW4oKSk7CisgICAgfQorfQorCiBzdGF0aWMg
dm9pZCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrLCBWZWN0b3I8UmVmUHRyPEJ5dGVjb2Rl
QmFzaWNCbG9jaz4gPiYgYmFzaWNCbG9ja3MsIHVuc2lnbmVkIHRhcmdldE9mZnNldCwgRmFzdEJp
dFZlY3RvciYgcmVzdWx0KQogewogICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwog
ICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygpKTsKIAogICAgIEZhc3RCaXRWZWN0b3Ig
b3V0ID0gYmxvY2stPm91dCgpOwotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gMDsKIAogICAg
IEZhc3RCaXRWZWN0b3IgdXNlczsKICAgICBGYXN0Qml0VmVjdG9yIGRlZnM7CkBAIC01NTcsMjMg
KzU1NSw4IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWMKICAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+Ynl0ZWNvZGVPZmZzZXRzKClbaV07
CiAgICAgICAgIGlmICh0YXJnZXRPZmZzZXQgPiBieXRlY29kZU9mZnNldCkKICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIHVzZXMuY2xlYXJBbGwoKTsKLSAgICAgICAgZGVmcy5jbGVhckFs
bCgpOwotCi0gICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBi
eXRlY29kZU9mZnNldCwgdXNlcyk7Ci0gICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZz
ZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgZGVmcyk7Ci0KLSAgICAgICAgb3V0LmV4Y2x1
ZGUoZGVmcyk7Ci0gICAgICAgIG91dC5tZXJnZSh1c2VzKTsKLQotICAgICAgICAvLyBJZiB3ZSBo
YXZlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCB3ZSB3YW50IHRoZSBsaXZlLWluIHZhcmlhYmxlcyBv
ZiB0aGUgCi0gICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGVyIGJsb2NrIHRvIGJlIGluY2x1ZGVk
IGluIHRoZSBsaXZlLWluIG9mIHRoaXMgcGFydGljdWxhciBieXRlY29kZS4KLSAgICAgICAgaWYg
KChoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQpKSkgewotICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBoYW5kbGVyQmxvY2sg
PSBmaW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoYmFzaWNCbG9ja3MsIGhhbmRsZXItPnRh
cmdldCk7Ci0gICAgICAgICAgICBBU1NFUlQoaGFuZGxlckJsb2NrKTsKLSAgICAgICAgICAgIG91
dC5tZXJnZShoYW5kbGVyQmxvY2stPmluKCkpOwotICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBzdGVwT3Zlckluc3RydWN0aW9uKGNvZGVCbG9jaywgYmFzaWNCbG9ja3MsIGJ5dGVjb2RlT2Zm
c2V0LCB1c2VzLCBkZWZzLCBvdXQpOwogICAgIH0KIAogICAgIHJlc3VsdC5zZXQob3V0KTsKQEAg
LTU5MCw3ICs1NzMsNyBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6cnVuTGl2ZW5l
CiB7CiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZWYXJpYWJsZXMg
PSB1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzICsgCi0gICAgICAgIHVubGlua2VkQ29kZUJs
b2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAtIG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9j
b2RlQmxvY2spOworICAgICAgICB1bmxpbmtlZENvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3Rl
cnMgLSBtX2NvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9iYXNpY0Jsb2Nrcy5zaXplKCk7IGkrKykgewogICAgICAgICBCeXRlY29kZUJh
c2ljQmxvY2sqIGJsb2NrID0gbV9iYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKQEAgLTYyOSwzNiArNjEy
LDMwIEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmUKIAogYm9vbCBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6Om9wZXJhbmRJc0xpdmVBdEJ5dGVjb2RlT2Zmc2V0KGlu
dCBvcGVyYW5kLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsKLSAgICBpbnQgbnVtQ2FwdHVy
ZWRWYXJzID0gbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhtX2NvZGVCbG9jayk7Ci0gICAgaWYg
KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0FyZ3VtZW50KCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGlmIChvcGVyYW5kIDw9IGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykgJiYgb3Bl
cmFuZCA+IGNhcHR1cmVFbmQobV9jb2RlQmxvY2spKQorICAgIGlmIChvcGVyYW5kSXNBbHdheXNM
aXZlKG1fY29kZUJsb2NrLCBvcGVyYW5kKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgRmFz
dEJpdFZlY3RvciByZXN1bHQ7CiAgICAgZ2V0TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVyZWRWYXJz
QXRCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVz
dWx0LmdldChvcGVyYW5kIC0gbnVtQ2FwdHVyZWRWYXJzKTsKKyAgICByZXR1cm4gb3BlcmFuZFRo
YXRJc05vdEFsd2F5c0xpdmVJc0xpdmUobV9jb2RlQmxvY2ssIHJlc3VsdCwgb3BlcmFuZCk7CiB9
CiAKLUZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0lu
Zm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorRmFzdEJpdFZlY3Rv
ciBnZXRMaXZlbmVzc0luZm8oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZhc3RCaXRWZWN0
b3ImIG91dCkKIHsKLSAgICBGYXN0Qml0VmVjdG9yIHRlbXA7CiAgICAgRmFzdEJpdFZlY3RvciBy
ZXN1bHQ7CiAKLSAgICBnZXRMaXZlbmVzc0luZm9Gb3JOb25DYXB0dXJlZFZhcnNBdEJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCB0ZW1wKTsKLQotICAgIHVuc2lnbmVkIG51bUNhcHR1cmVk
VmFycyA9IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9jb2RlQmxvY2spOworICAgIHVuc2ln
bmVkIG51bUNhcHR1cmVkVmFycyA9IGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCk7CiAgICAgaWYg
KG51bUNhcHR1cmVkVmFycykgewotICAgICAgICBpbnQgZmlyc3RDYXB0dXJlZExvY2FsID0gVmly
dHVhbFJlZ2lzdGVyKGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykpLnRvTG9jYWwoKTsKLSAgICAg
ICAgcmVzdWx0LnJlc2l6ZSh0ZW1wLm51bUJpdHMoKSArIG51bUNhcHR1cmVkVmFycyk7CisgICAg
ICAgIGludCBmaXJzdENhcHR1cmVkTG9jYWwgPSBWaXJ0dWFsUmVnaXN0ZXIoY29kZUJsb2NrLT5j
YXB0dXJlU3RhcnQoKSkudG9Mb2NhbCgpOworICAgICAgICByZXN1bHQucmVzaXplKG91dC5udW1C
aXRzKCkgKyBudW1DYXB0dXJlZFZhcnMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtQ2FwdHVyZWRWYXJzOyArK2kpCiAgICAgICAgICAgICByZXN1bHQuc2V0KGZpcnN0Q2Fw
dHVyZWRMb2NhbCArIGkpOwogICAgIH0gZWxzZQotICAgICAgICByZXN1bHQucmVzaXplKHRlbXAu
bnVtQml0cygpKTsKKyAgICAgICAgcmVzdWx0LnJlc2l6ZShvdXQubnVtQml0cygpKTsKIAotICAg
IGludCB0ZW1wTGVuZ3RoID0gdGVtcC5udW1CaXRzKCk7Ci0gICAgQVNTRVJUKHRlbXBMZW5ndGgg
Pj0gMCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZW1wTGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgaWYgKCF0ZW1wLmdldChpKSkKKyAgICBpbnQgb3V0TGVuZ3RoID0gb3V0Lm51bUJpdHMoKTsK
KyAgICBBU1NFUlQob3V0TGVuZ3RoID49IDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0
TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKCFvdXQuZ2V0KGkpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgaWYgKCFudW1DYXB0dXJlZFZhcnMpIHsKQEAgLTY2Niw3ICs2NDMs
NyBAQCBGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKS5vZmZzZXQoKSA+IGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykpCisgICAgICAgIGlm
ICh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKS5vZmZzZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVy
ZVN0YXJ0KCkpCiAgICAgICAgICAgICByZXN1bHQuc2V0KGkpOwogICAgICAgICBlbHNlIAogICAg
ICAgICAgICAgcmVzdWx0LnNldChudW1DYXB0dXJlZFZhcnMgKyBpKTsKQEAgLTY3NCw2ICs2NTEs
MzkgQEAgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OgogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK0Zhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpn
ZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQor
eworICAgIEZhc3RCaXRWZWN0b3Igb3V0OworICAgIGdldExpdmVuZXNzSW5mb0Zvck5vbkNhcHR1
cmVkVmFyc0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgcmV0dXJu
IGdldExpdmVuZXNzSW5mbyhtX2NvZGVCbG9jaywgb3V0KTsKK30KKwordm9pZCBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MoRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mm
IHJlc3VsdCkKK3sKKyAgICBGYXN0Qml0VmVjdG9yIG91dDsKKyAgICBGYXN0Qml0VmVjdG9yIHVz
ZXM7CisgICAgRmFzdEJpdFZlY3RvciBkZWZzOworICAgIAorICAgIHJlc3VsdC5tX2NvZGVCbG9j
ayA9IG1fY29kZUJsb2NrOworICAgIHJlc3VsdC5tX21hcC5jbGVhcigpOworICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fYmFzaWNCbG9ja3Muc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEJ5
dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jhc2ljQmxvY2tzW2ldLmdldCgpOworICAgICAg
ICBpZiAoYmxvY2stPmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLT5pc0V4aXRCbG9jaygpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBvdXQgPSBibG9jay0+b3V0KCk7
CisgICAgICAgIHVzZXMucmVzaXplKG91dC5udW1CaXRzKCkpOworICAgICAgICBkZWZzLnJlc2l6
ZShvdXQubnVtQml0cygpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5ieXRlY29kZU9mZnNldHMoKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0cygpW2ldOworICAgICAg
ICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihtX2NvZGVCbG9jaywgbV9iYXNpY0Jsb2NrcywgYnl0
ZWNvZGVPZmZzZXQsIHVzZXMsIGRlZnMsIG91dCk7CisgICAgICAgICAgICByZXN1bHQubV9tYXAu
YWRkKGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMoKQogewogICAgIEludGVycHJldGVy
KiBpbnRlcnByZXRlciA9IG1fY29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRlcjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsMTMgKzM0LDE2IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOworY2xh
c3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3M7CiAKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cyB7CiBwdWJsaWM6CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzKENvZGVCbG9jayopOwot
CisgICAgCiAgICAgYm9vbCBvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9mZnNldChpbnQgb3BlcmFu
ZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5l
c3NJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAgCisg
ICAgdm9pZCBjb21wdXRlRnVsbExpdmVuZXNzKEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQp
OwogCiBwcml2YXRlOgogICAgIHZvaWQgY29tcHV0ZSgpOwpAQCAtNTMsNiArNTYsMTIgQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiBtX2Jhc2ljQmxv
Y2tzOwogfTsKIAoraW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgaW50IG9wZXJhbmQpOworaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5
c0xpdmVJc0xpdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91
dCwgaW50IG9wZXJhbmQpOworaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CisKK0Zhc3RC
aXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvKENvZGVCbG9jayosIGNvbnN0IEZhc3RCaXRWZWN0b3Im
IG91dCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lc19oCisjZGVmaW5l
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXNfaAorCisjaW5jbHVkZSAiQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitpbmxpbmUgYm9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKENvZGVCbG9jayogY29kZUJs
b2NrLCBpbnQgb3BlcmFuZCkKK3sKKyAgICBpZiAoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlz
QXJndW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG9wZXJhbmQgPD0g
Y29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSAmJiBvcGVyYW5kID4gY29kZUJsb2NrLT5jYXB0dXJl
RW5kKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZl
KENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVy
YW5kKQoreworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnKG9wZXJhbmQpOworICAgIGlm
ICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSkKKyAgICAg
ICAgcmV0dXJuIG91dC5nZXQodmlydHVhbFJlZy50b0xvY2FsKCkpOworICAgIHNpemVfdCBpbmRl
eCA9IHZpcnR1YWxSZWcudG9Mb2NhbCgpIC0gY29kZUJsb2NrLT5jYXB0dXJlQ291bnQoKTsKKyAg
ICBpZiAoaW5kZXggPj0gb3V0Lm51bUJpdHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBvdXQuZ2V0KGluZGV4KTsKK30KKworaW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShD
b2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFu
ZCkKK3sKKyAgICByZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShjb2RlQmxvY2ssIG9wZXJhbmQp
IHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvZGVCbG9jaywgb3V0LCBvcGVy
YW5kKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXNJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNiArMzU0LDI3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX25lZWRzQWN0aXZhdGlvbjsKICAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgY2FwdHVyZUNvdW50KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmICghc3ltYm9sVGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50KCk7CisgICAgfQorICAgIAorICAgIGlu
dCBjYXB0dXJlU3RhcnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZSgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZSgpLT5j
YXB0dXJlU3RhcnQoKTsKKyAgICB9CisgICAgCisgICAgaW50IGNhcHR1cmVFbmQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7CisgICAgfQogCiAg
ICAgYm9vbCBpc0NhcHR1cmVkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBJbmxpbmVDYWxsRnJh
bWUqID0gMCkgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVPcmlnaW4uY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3
ICsxMTYsNyBAQCB2b2lkIElubGluZUNhbGxGcmFtZTo6ZHVtcEluQ29udGV4dChQcmluCiAgICAg
ZWxzZQogICAgICAgICBvdXQucHJpbnQoIiwga25vd24gY2FsbGVlOiAiLCBpbkNvbnRleHQoY2Fs
bGVlUmVjb3ZlcnkuY29uc3RhbnQoKSwgY29udGV4dCkpOwogICAgIG91dC5wcmludCgiLCBudW1B
cmdzK3RoaXMgPSAiLCBhcmd1bWVudHMuc2l6ZSgpKTsKLSAgICBvdXQucHJpbnQoIiwgc3RhY2sg
Pj0gciIsIHN0YWNrT2Zmc2V0KTsKKyAgICBvdXQucHJpbnQoIiwgc3RhY2sgPCBsb2MiLCBWaXJ0
dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CiAgICAgb3V0LnByaW50KCI+Iik7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVM
aXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9G
dWxsQnl0ZWNvZGVMaXZlbmVzcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnVsbEJ5dGVjb2RlTGl2ZW5lc3NfaAor
I2RlZmluZSBGdWxsQnl0ZWNvZGVMaXZlbmVzc19oCisKKyNpbmNsdWRlIDx3dGYvRmFzdEJpdFZl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzOworCit0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIEZhc3RCaXRWZWN0b3IsIFdURjo6SW50
SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWdu
ZWQ+ID4gQnl0ZWNvZGVUb0JpdG1hcE1hcDsKKworY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mg
eworcHVibGljOgorICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzKCkgOiBtX2NvZGVCbG9jaygwKSB7
IH0KKyAgICAKKyAgICAvLyBXZSBzYXkgIm91dCIgdG8gcmVmZXIgdG8gdGhlIGJpdHZlY3RvciB0
aGF0IGNvbnRhaW5zIHJhdyByZXN1bHRzIGZvciBhIGJ5dGVjb2RlCisgICAgLy8gaW5zdHJ1Y3Rp
b24uCisgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgZ2V0T3V0KHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpIGNvbnN0CisgICAgeworICAgICAgICBCeXRlY29kZVRvQml0bWFwTWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gbV9tYXAuZmluZChieXRlY29kZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKGl0
ZXIgIT0gbV9tYXAuZW5kKCkpOworICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmFuZElzTGl2ZShpbnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZl
KG1fY29kZUJsb2NrLCBvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2
ZShtX2NvZGVCbG9jaywgZ2V0T3V0KGJ5dGVjb2RlSW5kZXgpLCBvcGVyYW5kKTsKKyAgICB9Cisg
ICAgCisgICAgRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzcyh1bnNpZ25lZCBieXRlY29kZUluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldExpdmVuZXNzSW5mbyhtX2NvZGVCbG9j
aywgZ2V0T3V0KGJ5dGVjb2RlSW5kZXgpKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CisgICAgCisgICAgQ29kZUJsb2Nr
KiBtX2NvZGVCbG9jazsKKyAgICBCeXRlY29kZVRvQml0bWFwTWFwIG1fbWFwOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBGdWxsQnl0ZWNvZGVMaXZlbmVzc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHQXZhaWxhYmlsaXR5LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R05vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEF2YWls
YWJpbGl0eTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCht
X2ZsdXNoZWRBdCwgIi8iKTsKKyAgICAKKyAgICBpZiAobm9kZUlzVW5kZWNpZGVkKCkpIHsKKyAg
ICAgICAgb3V0LnByaW50KCJVbmRlY2lkZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBpZiAobm9kZUlzVW5hdmFpbGFibGUoKSkgeworICAgICAgICBvdXQucHJpbnQoIlVu
YXZhaWxhYmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50
KG5vZGUoKSk7Cit9CisKK3ZvaWQgQXZhaWxhYmlsaXR5OjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KikgY29uc3QKK3sKKyAgICBkdW1wKG91dCk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQXZhaWxhYmlsaXR5X2gKKyNkZWZpbmUg
REZHQXZhaWxhYmlsaXR5X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
Rmx1c2hlZEF0LmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IE5vZGU7CisKK2NsYXNzIEF2YWls
YWJpbGl0eSB7CitwdWJsaWM6CisgICAgQXZhaWxhYmlsaXR5KCkKKyAgICAgICAgOiBtX25vZGUo
MCkKKyAgICAgICAgLCBtX2ZsdXNoZWRBdChEZWFkRmx1c2gpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBleHBsaWNpdCBBdmFpbGFiaWxpdHkoTm9kZSogbm9kZSkKKyAgICAgICAgOiBtX25vZGUo
bm9kZSkKKyAgICAgICAgLCBtX2ZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgZXhwbGljaXQgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdCBmbHVzaGVkQXQp
CisgICAgICAgIDogbV9ub2RlKHVuYXZhaWxhYmxlTWFya2VyKCkpCisgICAgICAgICwgbV9mbHVz
aGVkQXQoZmx1c2hlZEF0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgQXZhaWxhYmlsaXR5KE5v
ZGUqIG5vZGUsIEZsdXNoZWRBdCBmbHVzaGVkQXQpCisgICAgICAgIDogbV9ub2RlKG5vZGUpCisg
ICAgICAgICwgbV9mbHVzaGVkQXQoZmx1c2hlZEF0KQorICAgIHsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIEF2YWlsYWJpbGl0eSB1bmF2YWlsYWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4g
QXZhaWxhYmlsaXR5KHVuYXZhaWxhYmxlTWFya2VyKCksIEZsdXNoZWRBdChDb25mbGljdGluZ0Zs
dXNoKSk7CisgICAgfQorICAgIAorICAgIEF2YWlsYWJpbGl0eSB3aXRoRmx1c2goRmx1c2hlZEF0
IGZsdXNoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eShtX25vZGUs
IGZsdXNoKTsKKyAgICB9CisgICAgCisgICAgQXZhaWxhYmlsaXR5IHdpdGhOb2RlKE5vZGUqIG5v
ZGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQXZhaWxhYmlsaXR5KG5vZGUsIG1fZmx1
c2hlZEF0KTsKKyAgICB9CisgICAgCisgICAgQXZhaWxhYmlsaXR5IHdpdGhVbmF2YWlsYWJsZU5v
ZGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpdGhOb2RlKHVuYXZhaWxhYmxlTWFy
a2VyKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG5vZGVJc1VuZGVjaWRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbm9kZSA9PSAwOyB9CisgICAgYm9vbCBub2RlSXNVbmF2YWlsYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZSA9PSB1bmF2YWlsYWJsZU1hcmtlcigpOyB9CisgICAgCisgICAgYm9v
bCBoYXNOb2RlKCkgY29uc3QgeyByZXR1cm4gIW5vZGVJc1VuZGVjaWRlZCgpICYmICFub2RlSXNV
bmF2YWlsYWJsZSgpOyB9CisgICAgCisgICAgTm9kZSogbm9kZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoIW5vZGVJc1VuZGVjaWRlZCgpKTsKKyAgICAgICAgQVNTRVJUKCFub2RlSXNV
bmF2YWlsYWJsZSgpKTsKKyAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICB9CisgICAgCisgICAg
Rmx1c2hlZEF0IGZsdXNoZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmx1c2hlZEF0OyB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBub2RlSXNVbmF2YWlsYWJsZSgp
ICYmIGZsdXNoZWRBdCgpLmZvcm1hdCgpID09IENvbmZsaWN0aW5nRmx1c2g7IH0KKworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBBdmFpbGFiaWxpdHkmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fbm9kZSA9PSBvdGhlci5tX25vZGUKKyAgICAgICAgICAgICYmIG1fZmx1
c2hlZEF0ID09IG90aGVyLm1fZmx1c2hlZEF0OworICAgIH0KKyAgICAKKyAgICBBdmFpbGFiaWxp
dHkgbWVyZ2UoY29uc3QgQXZhaWxhYmlsaXR5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBBdmFpbGFiaWxpdHkoCisgICAgICAgICAgICBtZXJnZU5vZGVzKG1fbm9kZSwgb3Ro
ZXIubV9ub2RlKSwKKyAgICAgICAgICAgIG1fZmx1c2hlZEF0Lm1lcmdlKG90aGVyLm1fZmx1c2hl
ZEF0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgc3RhdGljIE5vZGUqIG1lcmdlTm9kZXMoTm9kZSogYSwgTm9kZSog
YikKKyAgICB7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIHJldHVybiBiOworICAgICAg
ICBpZiAoIWIpCisgICAgICAgICAgICByZXR1cm4gYTsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAg
ICAgICAgICAgIHJldHVybiBhOworICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVNYXJrZXIoKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIE5vZGUqIHVuYXZhaWxhYmxlTWFya2VyKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Tm9kZSo+KHN0YXRpY19jYXN0PGludHB0cl90
PigxKSk7CisgICAgfQorICAgIAorICAgIE5vZGUqIG1fbm9kZTsKKyAgICBGbHVzaGVkQXQgbV9m
bHVzaGVkQXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0F2YWlsYWJpbGl0eV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNTkzNTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAi
REZHQWJzdHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eS5oIgogI2luY2x1
ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0ZsdXNoZWRBdC5oIgogI2lu
Y2x1ZGUgIkRGR05vZGUuaCIKQEAgLTE0MCw4ICsxNDEsOCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6
IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgc3RydWN0IFNTQURhdGEgewogICAgICAgICBPcGVy
YW5kczxGbHVzaGVkQXQ+IGZsdXNoQXRIZWFkOwogICAgICAgICBPcGVyYW5kczxGbHVzaGVkQXQ+
IGZsdXNoQXRUYWlsOwotICAgICAgICBPcGVyYW5kczxOb2RlKj4gYXZhaWxhYmlsaXR5QXRIZWFk
OwotICAgICAgICBPcGVyYW5kczxOb2RlKj4gYXZhaWxhYmlsaXR5QXRUYWlsOworICAgICAgICBP
cGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHlBdFRhaWw7CiAgICAgICAgIEhhc2hTZXQ8Tm9k
ZSo+IGxpdmVBdEhlYWQ7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdFRhaWw7CiAgICAg
ICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZp
c2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA3Myw2ICszMDczLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IGNlbGxDb25z
dGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1cy5zdHJ1Y3R1cmVTZXQo
KS5zaW5nbGV0b25TdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFu
dG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIGlmIChK
U1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKQogICAgICAgICAg
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGNlbGxDb25zdGFudChzcGVjaWZp
Y1ZhbHVlLmFzQ2VsbCgpKSk7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMzA4MSw2ICszMDgy
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgICAgICBjYXNlIEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAgICAgICAgICAgICAgICAg
U3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0
KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpIHx8ICFt
X2dyYXBoLndhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlkKGVudHJ5LndhdGNocG9pbnRTZXQoKSkp
IHsKICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBhZGRUb0dy
YXBoKEdldEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbikpKTsK
QEAgLTMxMzEsNiArMzEzMyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2so
Z2xvYmFsT2JqZWN0LCBzdGF0dXMub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAg
ICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBzdGF0aWNf
Y2FzdDxQcm9wZXJ0eU9mZnNldD4ob3BlcmFuZCksIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUp
KSk7CiAgICAgICAgICAgICAgICAgLy8gS2VlcCBzY29wZSBhbGl2ZSB1bnRpbCBhZnRlciBwdXQu
CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVy
KHNjb3BlKSkpOwpAQCAtMzEzOCw2ICszMTQxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBHbG9iYWxW
YXI6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
KyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUpKSk7CiAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2Jh
bE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHVpZCk7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KCFlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpIHx8ICFtX2dyYXBoLndhdGNocG9pbnRzKCkuaXNTdGls
bFZhbGlkKGVudHJ5LndhdGNocG9pbnRTZXQoKSkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUHV0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJs
ZXIuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogRGlzYXNzZW1ibGVyOjpEaXNhc3NlbWJsZXIoR3Jh
cGgmIGdyYXBoKQogICAgIDogbV9ncmFwaChncmFwaCkKIHsKKyAgICBtX2R1bXBDb250ZXh0Lmdy
YXBoID0gJm1fZ3JhcGg7CiAgICAgbV9sYWJlbEZvckJsb2NrSW5kZXgucmVzaXplKGdyYXBoLm51
bUJsb2NrcygpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVz
aEZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
bHVzaEZvcm1hdC5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw5IEBA
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBGbHUKICAgICBjYXNlIEZsdXNo
ZWRKU1ZhbHVlOgogICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRKU1ZhbHVlIik7CiAgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CisgICAgICAgIG91dC5wcmludCgi
Q29uZmxpY3RpbmdGbHVzaCIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZsdXNoRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGbHVzaEZvcm1hdC5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDgg
QEAgZW51bSBGbHVzaEZvcm1hdCB7CiAgICAgRmx1c2hlZERvdWJsZSwKICAgICBGbHVzaGVkQ2Vs
bCwKICAgICBGbHVzaGVkQm9vbGVhbiwKLSAgICBGbHVzaGVkSlNWYWx1ZQorICAgIEZsdXNoZWRK
U1ZhbHVlLAorICAgIENvbmZsaWN0aW5nRmx1c2gKIH07CiAKIGlubGluZSBOb2RlRmxhZ3MgcmVz
dWx0Rm9yKEZsdXNoRm9ybWF0IGZvcm1hdCkKQEAgLTU0LDYgKzU1LDcgQEAgaW5saW5lIE5vZGVG
bGFncyByZXN1bHRGb3IoRmx1c2hGb3JtYXQgZgogICAgIGNhc2UgRGVhZEZsdXNoOgogICAgIGNh
c2UgRmx1c2hlZEpTVmFsdWU6CiAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICBjYXNlIENvbmZs
aWN0aW5nRmx1c2g6CiAgICAgICAgIHJldHVybiBOb2RlUmVzdWx0SlM7CiAgICAgY2FzZSBGbHVz
aGVkSW50MzI6CiAgICAgICAgIHJldHVybiBOb2RlUmVzdWx0SW50MzI7CkBAIC03Myw2ICs3NSw3
IEBAIGlubGluZSBVc2VLaW5kIHVzZUtpbmRGb3IoRmx1c2hGb3JtYXQgZm8KICAgICBzd2l0Y2gg
KGZvcm1hdCkgewogICAgIGNhc2UgRGVhZEZsdXNoOgogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6
CisgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgogICAgICAgICByZXR1cm4gVW50eXBlZFVzZTsK
ICAgICBjYXNlIEZsdXNoZWRDZWxsOgogICAgICAgICByZXR1cm4gQ2VsbFVzZTsKQEAgLTkzLDYg
Kzk2LDcgQEAgaW5saW5lIERhdGFGb3JtYXQgZGF0YUZvcm1hdEZvcihGbHVzaEZvcgogewogICAg
IHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBEZWFkRmx1c2g6CisgICAgY2FzZSBDb25mbGlj
dGluZ0ZsdXNoOgogICAgICAgICByZXR1cm4gRGF0YUZvcm1hdERlYWQ7CiAgICAgY2FzZSBGbHVz
aGVkSlNWYWx1ZToKICAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRKUzsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZv
aWQgRmx1c2hlZEF0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgaWYgKG1f
Zm9ybWF0ID09IERlYWRGbHVzaCkKKyAgICBpZiAobV9mb3JtYXQgPT0gRGVhZEZsdXNoIHx8IG1f
Zm9ybWF0ID09IENvbmZsaWN0aW5nRmx1c2gpCiAgICAgICAgIG91dC5wcmludChtX2Zvcm1hdCk7
CiAgICAgZWxzZQogICAgICAgICBvdXQucHJpbnQoInIiLCBtX3ZpcnR1YWxSZWdpc3RlciwgIjoi
LCBtX2Zvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRB
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0
LmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1
c2hlZEF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDEyIEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogICAgIAorICAgIGV4cGxpY2l0IEZsdXNoZWRBdChGbHVzaEZvcm1hdCBmb3JtYXQp
CisgICAgICAgIDogbV9mb3JtYXQoZm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZvcm1h
dCA9PSBEZWFkRmx1c2ggfHwgZm9ybWF0ID09IENvbmZsaWN0aW5nRmx1c2gpOworICAgIH0KKyAg
ICAKICAgICBGbHVzaGVkQXQoRmx1c2hGb3JtYXQgZm9ybWF0LCBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyKQogICAgICAgICA6IG1fZm9ybWF0KGZvcm1hdCkKICAgICAgICAgLCBtX3Zp
cnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpCkBAIC02NSw2ICs3MSwxNyBAQCBwdWJsaWM6
CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZsdXNoZWRBdCYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAgICAgCisgICAgRmx1c2hlZEF0IG1lcmdl
KGNvbnN0IEZsdXNoZWRBdCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlz
KQorICAgICAgICAgICAgcmV0dXJuIG90aGVyOworICAgICAgICBpZiAoIW90aGVyKQorICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIHJldHVybiBGbHVzaGVkQXQoQ29uZmxpY3RpbmdG
bHVzaCk7CisgICAgfQorICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owog
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNp
b24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDExICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCiAKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0
aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCiAjaW5jbHVkZSAiREZHSklU
Q29kZS5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKKyNpbmNsdWRl
ICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZUR1
bXAuaCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25z
LmgiCkBAIC0zOTMsNiArMzk1LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50
U3RyZWFtJgogdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCog
Y29udGV4dCkKIHsKICAgICBEdW1wQ29udGV4dCBteUNvbnRleHQ7CisgICAgbXlDb250ZXh0Lmdy
YXBoID0gdGhpczsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIGNvbnRleHQgPSAmbXlDb250
ZXh0OwogICAgIApAQCAtNjQzLDYgKzY0Niw1OSBAQCB2b2lkIEdyYXBoOjppbml0aWFsaXplTm9k
ZU93bmVycygpCiAgICAgICAgICAgICBibG9jay0+YXQobm9kZUluZGV4KS0+bWlzYy5vd25lciA9
IGJsb2NrOwogICAgIH0KIH0KKworRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVz
c0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0
ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+OjppdGVyYXRvciBpdGVyID0gbV9i
eXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKKyAgICBpZiAoaXRlciAhPSBtX2J5dGVj
b2RlTGl2ZW5lc3MuZW5kKCkpCisgICAgICAgIHJldHVybiAqaXRlci0+dmFsdWU7CisgICAgCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPiBsaXZlbmVzcyA9IHN0ZDo6
bWFrZV91bmlxdWU8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+KCk7CisgICAgY29kZUJsb2NrLT5saXZl
bmVzc0FuYWx5c2lzKCkuY29tcHV0ZUZ1bGxMaXZlbmVzcygqbGl2ZW5lc3MpOworICAgIEZ1bGxC
eXRlY29kZUxpdmVuZXNzJiByZXN1bHQgPSAqbGl2ZW5lc3M7CisgICAgbV9ieXRlY29kZUxpdmVu
ZXNzLmFkZChjb2RlQmxvY2ssIHN0ZDo6bW92ZShsaXZlbmVzcykpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK0Z1bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3IoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIGxpdmVuZXNzRm9yKGJh
c2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSkpOworfQorCitib29sIEdyYXBoOjpp
c0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4pCit7CisgICAgZm9yICg7OykgeworICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA8
IGNvZGVPcmlnaW4uc3RhY2tPZmZzZXQoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUp
IHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoCisg
ICAgICAgICAgICAgICAgb3BlcmFuZC5vZmZzZXQoKSAtIGNvZGVPcmlnaW4uc3RhY2tPZmZzZXQo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlZy5vZmZzZXQoKSA+PSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFk
ZXJTaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJlZy5vZmZzZXQoKSA9PSBKU1N0YWNrOjpDYWxs
ZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGlm
IChyZWcub2Zmc2V0KCkgPT0gSlNTdGFjazo6U2NvcGVDaGFpbikKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4g
bGl2ZW5lc3NGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpLm9wZXJhbmRJc0xpdmUoCisg
ICAgICAgICAgICAgICAgcmVnLm9mZnNldCgpLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjb2RlT3JpZ2luID0g
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CiAgICAgCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDE2LDYg
KzQxNiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBleGVjdXRhYmxlRm9yKGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICB9CiAgICAgCisgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9ja0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICB7Cisg
ICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIG1fcHJvZmls
ZWRCbG9jazsKKyAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZy
YW1lKGlubGluZUNhbGxGcmFtZSk7CisgICAgfQorICAgIAogICAgIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2tGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKICAgICB7CiAgICAg
ICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2Nr
KGNvZGVPcmlnaW4sIG1fcHJvZmlsZWRCbG9jayk7CkBAIC03NzYsNiArNzgzLDEwIEBAIHB1Ymxp
YzoKICAgICBEZXNpcmVkV2F0Y2hwb2ludHMmIHdhdGNocG9pbnRzKCkgeyByZXR1cm4gbV9wbGFu
LndhdGNocG9pbnRzOyB9CiAgICAgRGVzaXJlZFN0cnVjdHVyZUNoYWlucyYgY2hhaW5zKCkgeyBy
ZXR1cm4gbV9wbGFuLmNoYWluczsgfQogICAgIAorICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBs
aXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisgICAgRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MmIGxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKTsKKyAgICBi
b29sIGlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbik7CisgICAgCiAgICAgVk0mIG1fdm07CiAgICAgUGxhbiYgbV9wbGFuOwogICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC03OTcsNiArODA4LDcgQEAgcHVibGljOgogICAg
IFNlZ21lbnRlZFZlY3RvcjxTd2l0Y2hEYXRhLCA0PiBtX3N3aXRjaERhdGE7CiAgICAgVmVjdG9y
PElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgT3duUHRy
PElubGluZUNhbGxGcmFtZVNldD4gbV9pbmxpbmVDYWxsRnJhbWVzOworICAgIEhhc2hNYXA8Q29k
ZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29k
ZUxpdmVuZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CiAgICAgSGFzaFNldDxFeGVjdXRh
YmxlQmFzZSo+IG1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQ7CiAgICAgQml0VmVj
dG9yIG1fbGF6eVZhcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9u
IDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDc3ICs0Nyw5NiBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKICAgICAg
ICAgCi0gICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKLSAgICAgICAgbV9n
cmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmZpbGwoQXZh
aWxhYmlsaXR5KCkpOworICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWls
LmZpbGwoQXZhaWxhYmlsaXR5KCkpOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBkZXB0aEZpcnN0W2ldOwotICAgICAgICAgICAgYmxvY2st
PnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmZpbGwoMCk7Ci0gICAgICAgICAgICBibG9jay0+c3Nh
LT5hdmFpbGFiaWxpdHlBdFRhaWwuZmlsbCgwKTsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9
IG1fZ3JhcGguYmxvY2soMCk7CisgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSByb290
LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0t
OykgeworICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuYXJndW1lbnQo
YXJndW1lbnQpID0KKyAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCku
d2l0aEZsdXNoKAorICAgICAgICAgICAgICAgICAgICBGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUs
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkpOwogICAgICAgICB9CisgICAg
ICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5u
dW1iZXJPZkxvY2FscygpOyBsb2NhbC0tOykKKyAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxh
YmlsaXR5QXRIZWFkLmxvY2FsKGxvY2FsKSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsK
ICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aEZpcnN0LnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGRlcHRoRmlyc3Rb
aV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIGVkaXQgYXZhaWxhYmlsaXR5QXRU
YWlsIGluLXBsYWNlLCBidXQgZmlyc3QgaW5pdGlhbGl6ZSBpdCB0bwotICAgICAgICAgICAgLy8g
YXZhaWxhYmlsaXR5QXRIZWFkLgotICAgICAgICAgICAgT3BlcmFuZHM8Tm9kZSo+JiBhdmFpbGFi
aWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWw7Ci0gICAgICAgICAgICBhdmFp
bGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxv
Y2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjYXNl
IE1vdkhpbnQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKLSAgICAg
ICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBab21i
aWVIaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3Vt
ZW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPmxv
Y2FsKCkpID0gbm9kZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIGlmICht
X2dyYXBoLm1fcGxhbi5tb2RlID09IEZUTEZvck9TUkVudHJ5TW9kZSkgeworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBsb2NhbCA9IG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrLT5tX251bUNhbGxl
ZVJlZ2lzdGVyczsgbG9jYWwtLTspIHsKKyAgICAgICAgICAgICAgICByb290LT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZC5sb2NhbChsb2NhbCkgPQorICAgICAgICAgICAgICAgICAgICBBdmFpbGFi
aWxpdHk6OnVuYXZhaWxhYmxlKCkud2l0aEZsdXNoKAorICAgICAgICAgICAgICAgICAgICAgICAg
Rmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbCkp
KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBj
b3VsZCBiZSBtYWRlIG1vcmUgZWZmaWNpZW50IGJ5IHByb2Nlc3NpbmcgYmxvY2tzIGluIHJldmVy
c2UgcG9zdG9yZGVyLgorICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0
eTsKKyAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFu
Z2VkID0gZmFsc2U7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICBCYXNpY0Js
b2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKGopOwotICAgICAgICAgICAgICAgIE9w
ZXJhbmRzPE5vZGUqPiYgc3VjY2Vzc29yQXZhaWxhYmlsaXR5ID0gc3VjY2Vzc29yLT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZDsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSBhdmFp
bGFiaWxpdHkuc2l6ZSgpOyBrLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG15Tm9k
ZSA9IGF2YWlsYWJpbGl0eVtrXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFteU5vZGUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzc29yLT5zc2EtPmxpdmVBdEhlYWQuY29udGFp
bnMobXlOb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IG92
ZXJ3cml0ZSBhdmFpbGFiaWxpdHkgd2l0aCBhIGJvZ3VzIG5vZGUKLSAgICAgICAgICAgICAgICAg
ICAgLy8gYXQgbWVyZ2UgcG9pbnRzLiBUaGlzIGlzIGZpbmUsIHNpbmNlIG1lcmdlIHBvaW50cyBo
YXZlCi0gICAgICAgICAgICAgICAgICAgIC8vIE1vdkhpbnQoUGhpKSdzIHRvIHdvcmsgYXJvdW5k
IHRoaXMuIFRoZSBvdXRjb21lIG9mIHRoaXMgaXMKLSAgICAgICAgICAgICAgICAgICAgLy8geW91
IG1pZ2h0IGhhdmUgYSBwcm9ncmFtIGluIHdoaWNoIGEgbm9kZSBoYXBwZW5zIHRvIHJlbWFpbgot
ICAgICAgICAgICAgICAgICAgICAvLyBsaXZlIGludG8gc29tZSBibG9jayBCLCBhbmQgc2VwYXJh
dGVseSAoZHVlIHRvIGNvcHkKLSAgICAgICAgICAgICAgICAgICAgLy8gcHJvcGFnYXRpb24pIGp1
c3Qgb25lIG9mIHRoZSBwcmVkZWNlc3NvcnMgb2YgQiBpc3N1ZWQgYQotICAgICAgICAgICAgICAg
ICAgICAvLyBNb3ZIaW50IHB1dHRpbmcgdGhhdCBub2RlIGludG8gc29tZSBsb2NhbC4gVGhlbiBp
biBCIHdlIG1pZ2h0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoaW5rIHRoYXQgdGhhdCBub2Rl
IGlzIGEgdmFsaWQgdmFsdWUgZm9yIHRoYXQgbG9jYWwuIE9mCi0gICAgICAgICAgICAgICAgICAg
IC8vIGNvdXJzZSBpZiB0aGF0IGxvY2FsIHdhcyBhY3R1YWxseSBsaXZlIGluIEIsIEIgd291bGQg
aGF2ZSBhCi0gICAgICAgICAgICAgICAgICAgIC8vIFBoaSBmb3IgaXQuIFNvIGVzc2VudGlhbGx5
IHdlJ2xsIGhhdmUgT1NSIGV4aXQgZHJvcHBpbmcgdGhpcwotICAgICAgICAgICAgICAgICAgICAv
LyBub2RlJ3MgdmFsdWUgaW50byB0aGUgbG9jYWwgd2hlbiB3ZSBvdGhlcndpc2UgKGluIHRoZSBE
RkcpCi0gICAgICAgICAgICAgICAgICAgIC8vIHdvdWxkIGhhdmUgZHJvcHBlZCB1bmRlZmluZWQg
aW50byB0aGUgbG9jYWwuIFRoaXMgc2VlbXMKLSAgICAgICAgICAgICAgICAgICAgLy8gaGFybWxl
c3MuCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3JB
dmFpbGFiaWxpdHlba10gPSBteU5vZGU7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXZhaWxh
YmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVudDogeworICAgICAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFi
aWxpdHkobm9kZSwgdmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIE1vdkhpbnRBbmRDaGVjazogeworICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hp
bGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBab21iaWVIaW50OiB7CisgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5ID09IGJsb2NrLT5zc2EtPmF2
YWlsYWJpbGl0eUF0VGFpbCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWls
ID0gYXZhaWxhYmlsaXR5OworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXgg
PSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgeworICAgICAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nl
c3NvckluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYXZhaWxh
YmlsaXR5LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29y
LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXSA9IGF2YWlsYWJpbGl0eVtpXS5tZXJnZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKICAgICAgICAg
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5o
CShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsOCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdyYXBoOwogCi0vLyBD
b21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRpeUF0SGVhZC9UYWlsLiBUaGlzIHJl
bGllcyBvbiBsaXZlbmVzcwotLy8gYW5hbHlzaXMgcGhhc2UgaGF2aW5nIGJlZW4gcnVuIGFuZCB0
aGUgZ3JhcGggbm90IGhhdmluZyBiZWVuIHRyYW5zZm9ybWVkCi0vLyBhZnRlciB0aGF0LgorLy8g
Q29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5hdmFpbGFiaWx0aXlBdEhlYWQvVGFpbC4gVGhpcyBp
cyBhIGZvcndhcmQgZmxvdyB0eXBlIGluZmVyZW5jZQorLy8gb3ZlciBNb3ZIaW50cyBhbmQgU2V0
TG9jYWxzLgogCiBib29sIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhHcmFwaCYpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE1OTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgogI2luY2x1
ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHUmVzdXJy
ZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU1NBQ29udmVyc2lvblBo
YXNlLmgiCiAjaW5jbHVkZSAiREZHU3RhY2tMYXlvdXRQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1Rp
ZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCIKQEAgLTI2OCw2ICsyNjksOCBAQCBQbGFuOjpDb21w
aWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1MSUNNKGRmZyk7
CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1D
RkEoZGZnKTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNz
KCkpCisgICAgICAgICAgICBwZXJmb3JtUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvbihkZmcpOwog
ICAgICAgICBwZXJmb3JtRENFKGRmZyk7IC8vIFdlIHJlbHkgb24gdGhpcyB0byBjb252ZXJ0IGRl
YWQgU2V0TG9jYWxzIGludG8gdGhlIGFwcHJvcHJpYXRlIGhpbnQsIGFuZCB0byBraWxsIGRlYWQg
Y29kZSB0aGF0IHdvbid0IGJlIHJlY29nbml6ZWQgYXMgZGVhZCBieSBMTFZNLgogICAgICAgICBw
ZXJmb3JtU3RhY2tMYXlvdXQoZGZnKTsKICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMo
ZGZnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdXJyZWN0aW9uRm9y
VmFsaWRhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAi
REZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQ
aGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitjbGFzcyBSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UgOiBwdWJs
aWMgUGhhc2UgeworcHVibGljOgorICAgIFJlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZShH
cmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJyZXN1cnJlY3Rpb24gZm9yIHZh
bGlkYXRpb24iKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAg
ICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBoKTsKKyAgICAgICAgCisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBu
b2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAo
IW5vZGUtPmhhc1Jlc3VsdCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIEVkZ2Uo
bm9kZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpbnNlcnRp
b25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KK307CisKK2Jvb2wgcGVyZm9ybVJlc3VycmVjdGlvbkZvclZhbGlkYXRp
b24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJE
RkcgUmVzdXJyZWN0aW9uIEZvciBWYWxpZGF0aW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBo
YXNlPFJlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VycmVj
dGlvbkZvclZhbGlkYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlX2gK
KyNkZWZpbmUgREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdD
b21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFw
aDsKKworLy8gUGxhY2VzIGEgUGhhbnRvbSBhZnRlciBldmVyeSB2YWx1ZS1wcm9kdWNpbmcgbm9k
ZSwgdGhlcmVieSBkaXNhYmxpbmcgRENFIGZyb20ga2lsbGluZyBpdC4KKy8vIFRoaXMgaXMgdXNl
ZnVsIGZvciB2YWxpZGF0aW5nIG91ciBPU1IgZXhpdCBtYWNoaW5lcnkgYnkgaW5zdGl0dXRpbmcg
dGhlIHJlcXVpcmVtZW50IHRoYXQKKy8vIGFueSBsaXZlLWluLWJ5dGVjb2RlIHZhcmlhYmxlIHNo
b3VsZCBiZSBPU1ItYXZhaWxhYmxlLiBXaXRob3V0IHRoaXMgcGhhc2UsIGl0J3MgaW1wb3NzaWJs
ZQorLy8gdG8gbWFrZSBzdWNoIGFuIGFzc2VydGlvbiBiZWNhdXNlIG91ciBEQ0UgaXMgbW9yZSBh
Z2dyZXNzaXZlIHRoYW4gdGhlIGJ5dGVjb2RlIGxpdmVuZXNzCisvLyBhbmFseXNpcy4KKworYm9v
bCBwZXJmb3JtUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDEzICsxNTgsMzUgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vz
c29ycy5zaXplKCk7IGotLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Js
b2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbal07CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJlZGVjZXNzb3ItPmFwcGVuZE5vblRlcm1pbmFsKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgVXBzaWxvbiwgYmxvY2st
Pmxhc3QoKS0+Y29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaCwgU3BlY05vbmUsIFVwc2lsb24sIHByZWRlY2Vzc29yLT5sYXN0KCktPmNvZGVPcmlnaW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlKSwgRWRnZShwcmVk
ZWNlc3Nvci0+dmFyaWFibGVzQXRUYWlsW2ldLCB1c2VLaW5kKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJs
ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nLiBGb3IgbXVsdGlwbGUgcmVh
c29ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBSZWFzb24gIzE6IElmIHRoZSBsb2NhbCBpcyBmbHVzaGVkIHRoZW4gd2UgZG9u
J3QgbmVlZCB0byBib3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGEg
TW92SGludCBzaW5jZSBldmVyeSBwYXRoIHRvIHRoaXMgcG9pbnQgaW4gdGhlIGNvZGUgd2lsbAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgZmx1c2hlZCB0aGUgYnl0ZWNvZGUg
dmFyaWFibGUgdXNpbmcgYSBTZXRMb2NhbCBhbmQgaGVuY2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0aGUgQXZhaWxhYmlsaXR5OjpmbHVzaGVkQXQoKSB3aWxsIGFncmVlLCBhbmQg
dGhhdCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VmZmljaWVudCBm
b3IgZmlndXJpbmcgb3V0IGhvdyB0byByZWNvdmVyIHRoZSB2YXJpYWJsZSdzIHZhbHVlLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFJlYXNvbiAjMjogSWYgd2UgaGFkIGluc2VydGVkIGEgTW92SGludCBhbmQgdGhlIFBoaSBmdW5j
dGlvbiBoYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkaWVkIChiZWNhdXNlIHRo
ZSBvbmx5IHVzZXIgb2YgdGhlIHZhbHVlIHdhcyB0aGUgImZsdXNoIiAtIGkuZS4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBzb21lIGFzeW5jaHJvbm91cyBydW50aW1lIHRoaW5neSkg
dGhlbiB0aGUgTW92SGludCB3b3VsZCB0dXJuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaW50byBhIFpvbWJpZUhpbnQsIHdoaWNoIHdvdWxkIGZvb2wgdXMgaW50byB0aGlua2luZyB0
aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlIGlzIGRlYWQu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gUmVhc29uICMzOiBJZiB3ZSBoYWQgaW5zZXJ0ZWQgYSBNb3ZIaW50IHRoZW4gZXZlbiBp
ZiB0aGUgUGhpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RheWVkIGFsaXZlLCB3
ZSB3b3VsZCBzdGlsbCBlbmQgdXAgZ2VuZXJhdGluZyBpbmVmZmljaWVudCBjb2RlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gc2luY2Ugd2Ugd291bGQgYmUgdGVsbGluZyB0aGUgT1NS
IGV4aXQgY29tcGlsZXIgdG8gdXNlIHNvbWUgU1NBCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdmFsdWUgZm9yIHRoZSBieXRlY29kZSB2YXJpYWJsZSByYXRoZXIgdGhhbiBqdXN0IHRl
bGxpbmcgaXQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSB3
YXMgYWxyZWFkeSBvbiB0aGUgc3RhY2suCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBu
b2RlLT5jb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFZGdlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlzaW9u
IDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAgICBjYXNl
IENvbmZsaWN0aW5nRmx1c2g6CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoU291cmNl
SXNEZWFkKTsKICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAgICAgICAgICAgIHJldHVy
biBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywgd2hlcmUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAx
NTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YV9oCiAjZGVmaW5lIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9oCiAKKyNpbmNsdWRl
ICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdEb3VibGVGb3JtYXRTdGF0ZS5oIgogI2luY2x1
ZGUgIkRGR0ZsdXNoRm9ybWF0LmgiCiAjaW5jbHVkZSAiREZHRmx1c2hlZEF0LmgiCkBAIC0zOSw2
ICs0MCw4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorc3RydWN0IE5v
ZGU7CisKIGVudW0gRG91YmxlQmFsbG90IHsgVm90ZVZhbHVlLCBWb3RlRG91YmxlIH07CiAKIGNs
YXNzIFZhcmlhYmxlQWNjZXNzRGF0YSA6IHB1YmxpYyBVbmlvbkZpbmQ8VmFyaWFibGVBY2Nlc3NE
YXRhPiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3Bw
CShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDE2ICs0OCwxNiBAQCB2b2lkIEV4aXRWYWx1
ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhCiAgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQo
IiwgaW5Db250ZXh0KGNvbnN0YW50KCksIGNvbnRleHQpLCAiKSIpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmludCgiSW5KU1N0
YWNrIik7CisgICAgICAgIG91dC5wcmludCgiSW5KU1N0YWNrOnIiLCB2aXJ0dWFsUmVnaXN0ZXIo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6
Ci0gICAgICAgIG91dC5wcmludCgiSW5KU1N0YWNrQXNJbnQzMiIpOworICAgICAgICBvdXQucHJp
bnQoIkluSlNTdGFja0FzSW50MzI6ciIsIHZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MjoKLSAgICAgICAgb3V0LnBy
aW50KCJJbkpTU3RhY2tBc0ludDUyIik7CisgICAgICAgIG91dC5wcmludCgiSW5KU1N0YWNrQXNJ
bnQ1MjpyIiwgdmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBF
eGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKLSAgICAgICAgb3V0LnByaW50KCJJbkpTU3RhY2tB
c0RvdWJsZSIpOworICAgICAgICBvdXQucHJpbnQoIkluSlNTdGFja0FzRG91YmxlOnIiLCB2aXJ0
dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCShyZXZp
c2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hl
U2l6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgewogCiBzaXplX3Qgc2l6ZU9mR2V0QnlJZCgpCiB7Ci0gICAgcmV0dXJu
IDI5OworICAgIHJldHVybiAzMDsKIH0KIAogc2l6ZV90IHNpemVPZlB1dEJ5SWQoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJl
dmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiRlRM
TG93ZXJlZE5vZGVWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTE91dHB1dC5oIgogI2luY2x1ZGUgIkZU
TFRodW5rcy5oIgotI2luY2x1ZGUgIkZUTFZhbHVlU291cmNlLmgiCiAjaW5jbHVkZSAiTGlua0J1
ZmZlci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKQEAgLTcwLDcgKzY5LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fZnRsU3RhdGUoc3Rh
dGUpCiAgICAgICAgICwgbV9oZWFwcyhzdGF0ZS5jb250ZXh0KQogICAgICAgICAsIG1fb3V0KHN0
YXRlLmNvbnRleHQpCi0gICAgICAgICwgbV92YWx1ZVNvdXJjZXMoT3BlcmFuZHNMaWtlLCBzdGF0
ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fYXZhaWxhYmls
aXR5KE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkK
ICAgICAgICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgICAgICAsIG1faW50ZXJwcmV0ZXIo
c3RhdGUuZ3JhcGgsIG1fc3RhdGUpCiAgICAgICAgICwgbV9zdGFja21hcElEcygwKQpAQCAtMjA0
LDggKzIwMyw2IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpbml0aWFsaXplT1NSRXhp
dFN0YXRlRm9yQmxvY2soKTsKICAgICAgICAgCi0gICAgICAgIG1fbGl2ZSA9IGJsb2NrLT5zc2Et
PmxpdmVBdEhlYWQ7Ci0gICAgICAgIAogICAgICAgICBtX3N0YXRlLnJlc2V0KCk7CiAgICAgICAg
IG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1faGlnaEJsb2NrKTsKICAgICAgICAgCkBAIC00NzUs
MTIgKzQ3Miw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAg
IERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG1fbm9kZSwgdXNlKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChtX25vZGUtPmFkanVzdGVkUmVmQ291bnQoKSkKLSAgICAgICAgICAgIG1f
bGl2ZS5hZGQobV9ub2RlKTsKLSAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZm
ZWN0cykKICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4
KTsKICAgICAgICAgCkBAIC02MTksMzYgKzYxMCwzMSBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IEZsdXNoZWRKU1ZhbHVlOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRk
cmVzc0Zvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVT
b3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpT
U3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
Rmx1c2hlZERvdWJsZTogewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKG1f
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUodmFsdWUsIGFk
ZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVl
U291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKERvdWJsZUlu
SlNTdGFjaywgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBGbHVzaGVkSW50MzI6IHsKICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9h
ZEZvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3Rh
Y2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1
c2hlZEludDUyOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQ1MihtX25vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3Io
dmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDUySW5KU1N0YWNrLCB2
YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWRD
ZWxsOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJs
ZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ssIHZhcmlhYmxl
LT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46
IHsKQEAgLTY1NiwxNSArNjQyLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5zdG9y
ZTY0KAogICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKSwKICAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKHZhcmlhYmxl
LT5tYWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywgdmFyaWFibGUt
Pm1hY2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBEZWFkRmx1c2g6CisgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0gQXZhaWxhYmlsaXR5KHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoKQpAQCAtNjc1LDcgKzY2MSw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlWm9tYmllSGludCgpCiAgICAgewogICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwot
ICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpID0gVmFsdWVTb3Vy
Y2UoU291cmNlSXNEZWFkKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZChkYXRhLT5s
b2NhbCgpKSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlTW92SGludEFuZENoZWNrKCkKQEAgLTEyODcsNyArMTI3Myw3IEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICAvLyBTZWUgYWJvdmU7IENlbGxVc2UgaXMgZWFzaWVyIHNvIHdl
IGRvIG9ubHkgdGhhdCBmb3Igbm93LgogICAgICAgICBBU1NFUlQobV9ub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gQ2VsbFVzZSk7Ci0KKyAgICAgICAgCiAgICAgICAgIExWYWx1ZSBiYXNlID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFw
aC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKQEAgLTI1NDQsMTIg
KzI1MzAsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCgp
CiAgICAgewogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAg
ICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3aXRoIHZhbHVlIHNvdXJjZXM6
ICIsIG1fdmFsdWVTb3VyY2VzLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnZh
bGlkYXRpb24gcG9pbnQgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIG1fYXZhaWxhYmlsaXR5LCAiXG4i
KTsKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQo
T1NSRXhpdCgKICAgICAgICAgICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCBJbnZhbGlkVmFs
dWVGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUoKSwKICAgICAgICAgICAgIG1f
Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAotICAg
ICAgICAgICAgbV92YWx1ZVNvdXJjZXMubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV92YWx1ZVNvdXJj
ZXMubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubnVtYmVy
T2ZBcmd1bWVudHMoKSwgbV9hdmFpbGFiaWxpdHkubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAg
ICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9u
SW5mbygpKTsKICAgICAgICAgCiAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmpp
dENvZGUtPm9zckV4aXQubGFzdCgpOwpAQCAtMjU1Nyw3ICsyNTQzLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgCiAgICAgICAgIEV4aXRBcmd1bWVudExpc3QgYXJndW1lbnRzOwogICAgICAgICAKLSAg
ICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXQsIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUo
KSk7CisgICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0LCBhcmd1bWVudHMsIEZvcm1hdHRl
ZFZhbHVlKCksIGV4aXQubV9jb2RlT3JpZ2luKTsKICAgICAgICAgY2FsbFN0YWNrbWFwKGV4aXQs
IGFyZ3VtZW50cyk7CiAgICAgICAgIAogICAgICAgICBpbmZvLm1faXNJbnZhbGlkYXRpb25Qb2lu
dCA9IHRydWU7CkBAIC0zODIyLDI1ICszODA4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgfQogICAgIAotICAgIGJvb2wg
aXNMaXZlKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbV9saXZlLmNvbnRhaW5z
KG5vZGUpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHVzZShFZGdlIGVkZ2UpCi0gICAgewotICAg
ICAgICBBU1NFUlQoZWRnZS0+aGFzUmVzdWx0KCkpOwotICAgICAgICBpZiAoIWVkZ2UuZG9lc0tp
bGwoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9saXZlLnJlbW92ZShlZGdlLm5v
ZGUoKSk7Ci0gICAgfQotICAgIAotICAgIC8vIFdyYXBwZXIgdXNlZCBvbmx5IGZvciBERkdfTk9E
RV9ET19UT19DSElMRFJFTgotICAgIHZvaWQgdXNlKE5vZGUqLCBFZGdlIGVkZ2UpCi0gICAgewot
ICAgICAgICB1c2UoZWRnZSk7Ci0gICAgfQotICAgIAogICAgIExCYXNpY0Jsb2NrIGxvd0Jsb2Nr
KEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYmxvY2tzLmdldChi
bG9jayk7CkBAIC0zODQ4LDQwICszODE1LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGlu
aXRpYWxpemVPU1JFeGl0U3RhdGVGb3JCbG9jaygpCiAgICAgewotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX3ZhbHVlU291cmNlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIEZsdXNo
ZWRBdCBmbHVzaCA9IG1faGlnaEJsb2NrLT5zc2EtPmZsdXNoQXRIZWFkW2ldOwotICAgICAgICAg
ICAgc3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgewotICAgICAgICAgICAgY2FzZSBEZWFkRmx1c2g6
IHsKLSAgICAgICAgICAgICAgICAvLyBNdXN0IGNvbnNpZGVyIGF2YWlsYWJsZSBub2RlcyBpbnN0
ZWFkLgotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hCbG9jay0+c3NhLT5hdmFp
bGFiaWxpdHlBdEhlYWRbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFk
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3Vy
Y2Uobm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKLSAgICAgICAgICAgICAg
ICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrLCBmbHVzaC52
aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoKLSAgICAgICAgICAgICAgICBtX3Zh
bHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDUySW5KU1N0YWNrLCBmbHVzaC52aXJ0dWFs
UmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZVNv
dXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2ssIGZsdXNoLnZpcnR1YWxSZWdp
c3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgRmx1c2hlZENlbGw6Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFu
OgotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKLSAgICAgICAgICAgICAgICBtX3Zh
bHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCBmbHVzaC52aXJ0dWFs
UmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KKyAgICAgICAgbV9hdmFpbGFiaWxpdHkgPSBtX2hpZ2hCbG9jay0+c3NhLT5hdmFpbGFi
aWxpdHlBdEhlYWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKQEAgLTM4
ODksMTQgKzM4MjMsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uLCBGb3JtYXR0ZWRWYWx1ZSByZWNvdmVyeSkKICAgICB7CiAgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NS
IGV4aXQgd2l0aCB2YWx1ZSBzb3VyY2VzOiAiLCBtX3ZhbHVlU291cmNlcywgIlxuIik7Ci0gICAg
ICAgIAorICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBleGl0ICMiLCBtX2Z0bFN0YXRlLmpp
dENvZGUtPm9zckV4aXQuc2l6ZSgpLCAiIHdpdGggYXZhaWxhYmlsaXR5OiAiLCBtX2F2YWlsYWJp
bGl0eSwgIlxuIik7CisKICAgICAgICAgQVNTRVJUKG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhp
dC5zaXplKCkgPT0gbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuc2l6ZSgpKTsKICAgICAg
ICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgK
ICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKICAgICAgICAgICAgIG1fY29kZU9yaWdp
bkZvckV4aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAotICAgICAgICAgICAg
bV92YWx1ZVNvdXJjZXMubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV92YWx1ZVNvdXJjZXMubnVtYmVy
T2ZMb2NhbHMoKSkpOworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubnVtYmVyT2ZBcmd1bWVu
dHMoKSwgbV9hdmFpbGFiaWxpdHkubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0
YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsK
ICAgICAgICAgCiAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9z
ckV4aXQubGFzdCgpOwpAQCAtMzkyNCwxMCArMzg1OCwyMyBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgRXhpdEFyZ3VtZW50TGlzdCBhcmd1bWVudHM7CiAgICAgICAgIAotICAgICAgICBidWls
ZEV4aXRBcmd1bWVudHMoZXhpdCwgYXJndW1lbnRzLCBsb3dWYWx1ZSk7CisgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOwogICAgICAgICAKLSAgICAgICAg
aWYgKGRpcmVjdGlvbiA9PSBGb3J3YXJkU3BlY3VsYXRpb24pIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX25vZGUpOworICAgICAgICBpZiAoZGlyZWN0aW9uID09IEJhY2t3YXJkU3BlY3VsYXRpb24p
CisgICAgICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMoZXhpdCwgYXJndW1lbnRzLCBsb3dWYWx1
ZSwgY29kZU9yaWdpbik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGRpcmVj
dGlvbiA9PSBGb3J3YXJkU3BlY3VsYXRpb24pOworICAgICAgICAgICAgaWYgKCFyZWNvdmVyeSkg
eworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gbV9ub2RlSW5kZXg7
IG5vZGVJbmRleCA8IG1faGlnaEJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hCbG9jay0+YXQobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID09IGNv
ZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAgICAgY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0OworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0LCBhcmd1
bWVudHMsIGxvd1ZhbHVlLCBjb2RlT3JpZ2luKTsKICAgICAgICAgICAgIGV4aXQuY29udmVydFRv
Rm9yd2FyZChtX2hpZ2hCbG9jaywgbV9ub2RlLCBtX25vZGVJbmRleCwgcmVjb3ZlcnksIGFyZ3Vt
ZW50cyk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0zOTM1LDM2ICszODgyLDU5IEBAIHByaXZh
dGU6CiAgICAgfQogICAgIAogICAgIHZvaWQgYnVpbGRFeGl0QXJndW1lbnRzKAotICAgICAgICBP
U1JFeGl0JiBleGl0LCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIEZvcm1hdHRlZFZhbHVl
IGxvd1ZhbHVlKQorICAgICAgICBPU1JFeGl0JiBleGl0LCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLAorICAgICAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4pCiAgICAgewogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fY2FsbEZyYW1lKTsKICAg
ICAgICAgaWYgKCEhbG93VmFsdWUpCiAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGxvd1Zh
bHVlLnZhbHVlKCkpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFZhbHVlU291cmNlIHNv
dXJjZSA9IG1fdmFsdWVTb3VyY2VzW2ldOworICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0
Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIGJvb2wgaXNMaXZlID0g
bV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgY29kZU9y
aWdpbik7CisgICAgICAgICAgICBpZiAoIWlzTGl2ZSkgeworICAgICAgICAgICAgICAgIGV4aXQu
bV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChzb3Vy
Y2Uua2luZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFZhbHVlSW5KU1N0YWNrOgotICAgICAgICAg
ICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFjayhzb3VyY2Uudmly
dHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBJbnQzMkluSlNTdGFjazoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhp
dFZhbHVlOjppbkpTU3RhY2tBc0ludDMyKHNvdXJjZS52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEludDUySW5KU1N0YWNrOgotICAg
ICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50
NTIoc291cmNlLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBh
dmFpbGFiaWxpdHkgPSBtX2F2YWlsYWJpbGl0eVtpXTsKKyAgICAgICAgICAgIEZsdXNoZWRBdCBm
bHVzaCA9IGF2YWlsYWJpbGl0eS5mbHVzaGVkQXQoKTsKKyAgICAgICAgICAgIHN3aXRjaCAoZmx1
c2guZm9ybWF0KCkpIHsKKyAgICAgICAgICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAgICAgICAg
Y2FzZSBDb25mbGljdGluZ0ZsdXNoOgorICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHku
aGFzTm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudEZvck5vZGUo
ZXhpdCwgYXJndW1lbnRzLCBpLCBhdmFpbGFiaWxpdHkubm9kZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkV4cGVjdGVkIHIiLCBvcGVyYW5kLCAiIHRvIGJl
IGF2YWlsYWJsZSBidXQgaXQgd2Fzbid0LlxuIik7CisgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgREZHJ3MgRENFIHBy
b3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBkZWFkIGluIGJ5dGVjb2RlCisgICAgICAgICAgICAgICAg
Ly8gZXZlbiB0aG91Z2ggdGhlIGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lzIHRoaW5rcyBpdCdz
IGxpdmUuIFRoaXMgaXMKKyAgICAgICAgICAgICAgICAvLyBhY2NlcHRhYmxlIHNpbmNlIHRoZSBE
RkcncyBEQ0UgaXMgYnkgZGVzaWduIG1vcmUgYWdncmVzc2l2ZSB3aGlsZSBzdGlsbAorICAgICAg
ICAgICAgICAgIC8vIGJlaW5nIHNvdW5kLgorICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNb
aV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgRG91YmxlSW5KU1N0YWNrOgotICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNb
aV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKHNvdXJjZS52aXJ0dWFsUmVnaXN0ZXIo
KSk7CisKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgICAgICBjYXNl
IEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAg
ICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2soZmx1c2gudmly
dHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBTb3VyY2VJc0RlYWQ6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRW
YWx1ZTo6ZGVhZCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBGbHVzaGVk
SW50MzI6CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5K
U1N0YWNrQXNJbnQzMihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEhhdmVOb2RlOgotICAgICAgICAgICAgICAgIGFkZEV4
aXRBcmd1bWVudEZvck5vZGUoZXhpdCwgYXJndW1lbnRzLCBpLCBzb3VyY2Uubm9kZSgpKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgorICAgICAgICAg
ICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50NTIoZmx1
c2gudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAg
ICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91
YmxlKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzk5MSw1MyArMzk2MSw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50RXhpdEFyZ3VtZW50KGV4aXQsIGluZGV4LCBub2Rl
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGlmICghaXNMaXZlKG5v
ZGUpKSB7Ci0gICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhub2RlLT5vcCgpKSkgewot
ICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRFeGl0QXJndW1lbnQoZXhpdCwgaW5kZXgsIG5vZGUp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKGlzTGl2
ZShub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAg
ICAgTm9kZSogYmVzdE5vZGUgPSAwOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJlc3RTY29y
ZSA9IDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46
Oml0ZXJhdG9yIGl0ZXIgPSBtX2xpdmUuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBIYXNoU2V0
PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9saXZlLmVuZCgpOwotICAgICAgICAgICAgICAgIGZv
ciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGNh
bmRpZGF0ZSA9ICppdGVyOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5mbGFn
cygpICYgTm9kZUhhc1ZhckFyZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUtPmNoaWxkMSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRh
dGUtPmNoaWxkMSgpICE9IG5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbXlTY29yZSA9IGZvcndhcmRSZXdpcmluZ1Nl
bGVjdGlvblNjb3JlKGNhbmRpZGF0ZS0+b3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICht
eVNjb3JlIDw9IGJlc3RTY29yZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgICAgICBiZXN0Tm9kZSA9IGNhbmRpZGF0ZTsKLSAgICAgICAgICAgICAg
ICAgICAgYmVzdFNjb3JlID0gbXlTY29yZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGJlc3ROb2RlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChpc0xpdmUoYmVzdE5vZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9
IGJlc3ROb2RlOwotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZv
dW5kKSB7Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpbmRleF0gPSBFeGl0VmFsdWU6
OmRlYWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChpc0xpdmUobm9kZSkpOwotCiAgICAgICAgIExv
d2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChub2RlKTsKICAgICAgICAg
aWYgKGlzVmFsaWQodmFsdWUpKSB7CiAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwg
YXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRJbnQzMiwgdmFsdWUudmFsdWUoKSk7CkBAIC00
MTE0LDcgKzQwMzcsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQgPSBub2RlLT5sb2NhbCgpOwogICAgICAgICAKLSAgICAgICAgbV92YWx1ZVNv
dXJjZXMub3BlcmFuZChvcGVyYW5kKSA9IFZhbHVlU291cmNlKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQob3BlcmFuZCkgPSBBdmFpbGFiaWxp
dHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRJbnQz
MihOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCkBAIC00MjcyLDExICs0MTk1LDEwIEBAIHByaXZh
dGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9ib29sZWFuVmFsdWVz
OwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fc3RvcmFnZVZhbHVlczsK
ICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2RvdWJsZVZhbHVlczsKLSAg
ICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7CiAgICAgCiAgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVl
PiBtX3BoaXM7CiAgICAgCi0gICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG1fdmFsdWVTb3VyY2Vz
OworICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbV9hdmFpbGFiaWxpdHk7CiAgICAgCiAgICAg
SW5QbGFjZUFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICBBYnN0cmFjdEludGVycHJldGVyPElu
UGxhY2VBYnN0cmFjdFN0YXRlPiBtX2ludGVycHJldGVyOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiArMTk5LDcgQEAg
cHVibGljOgogICAgIExWYWx1ZSBpbnRUb1B0cihMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsg
cmV0dXJuIGJ1aWxkSW50VG9QdHIobV9idWlsZGVyLCB2YWx1ZSwgdHlwZSk7IH0KICAgICBMVmFs
dWUgYml0Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkQml0Q2Fz
dChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIAorICAgIExWYWx1ZSBhbGxvY2EoTFR5
cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRBbGxvY2EobV9idWlsZGVyLCB0eXBlKTsgfQogICAgIExW
YWx1ZSBnZXQoTFZhbHVlIHJlZmVyZW5jZSkgeyByZXR1cm4gYnVpbGRMb2FkKG1fYnVpbGRlciwg
cmVmZXJlbmNlKTsgfQogICAgIExWYWx1ZSBzZXQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgcmVmZXJl
bmNlKSB7IHJldHVybiBidWlsZFN0b3JlKG1fYnVpbGRlciwgdmFsdWUsIHJlZmVyZW5jZSk7IH0K
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2Uu
Y3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZh
bHVlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJGVExWYWx1ZVNvdXJjZS5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotdm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2Fz
ZSBTb3VyY2VOb3RTZXQ6Ci0gICAgICAgIG91dC5wcmludCgiU291cmNlTm90U2V0Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIFZhbHVlSW5KU1N0YWNrOgotICAgICAgICBvdXQucHJpbnQo
IlZhbHVlSW5KU1N0YWNrOiIsIHZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSW50MzJJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmludCgiSW50MzJJbkpTU3Rh
Y2s6IiwgdmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbnQ1
MkluSlNTdGFjazoKLSAgICAgICAgb3V0LnByaW50KCJJbnQ1MkluSlNTdGFjazoiLCB2aXJ0dWFs
UmVnaXN0ZXIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIERvdWJsZUluSlNTdGFjazoK
LSAgICAgICAgb3V0LnByaW50KCJEb3VibGVJbkpTU3RhY2s6IiwgdmlydHVhbFJlZ2lzdGVyKCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBTb3VyY2VJc0RlYWQ6Ci0gICAgICAgIG91dC5w
cmludCgiU291cmNlSXNEZWFkIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEhhdmVOb2Rl
OgotICAgICAgICBvdXQucHJpbnQoIk5vZGUoIiwgbm9kZSgpLCAiKSIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0K
LXZvaWQgVmFsdWVTb3VyY2U6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqKSBjb25zdAotewotICAgIGR1bXAob3V0KTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIEZUTFZhbHVlU291cmNlX2gKLSNkZWZpbmUgRlRMVmFsdWVTb3VyY2Vf
aAotCi0jaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0KLSNpZiBFTkFCTEUoRlRMX0pJVCkKLQot
I2luY2x1ZGUgIkRGR05vZGUuaCIKLSNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KLSNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKLQotZW51bSBWYWx1ZVNvdXJjZUtpbmQgewotICAgIFNvdXJjZU5vdFNldCwKLSAgICBWYWx1
ZUluSlNTdGFjaywKLSAgICBJbnQzMkluSlNTdGFjaywKLSAgICBJbnQ1MkluSlNTdGFjaywKLSAg
ICBEb3VibGVJbkpTU3RhY2ssCi0gICAgU291cmNlSXNEZWFkLAotICAgIEhhdmVOb2RlCi19Owot
Ci1jbGFzcyBWYWx1ZVNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgVmFsdWVTb3VyY2UoKQotICAgICAg
ICA6IG1fa2luZChTb3VyY2VOb3RTZXQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBleHBsaWNp
dCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQga2luZCkKLSAgICAgICAgOiBtX2tpbmQoa2lu
ZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gU291cmNlSXNEZWFkKTsKLSAgICB9
Ci0gICAgCi0gICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoREZHOjpOb2RlKiBub2RlKQotICAgICAg
ICA6IG1fa2luZChIYXZlTm9kZSkKLSAgICB7Ci0gICAgICAgIG1fdmFsdWUubm9kZSA9IG5vZGU7
Ci0gICAgfQotICAgIAotICAgIFZhbHVlU291cmNlKFZhbHVlU291cmNlS2luZCBraW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQotICAgICAgICA6IG1fa2luZChraW5kKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fa2luZCA9PSBWYWx1ZUluSlNTdGFjayB8fCBtX2tpbmQgPT0gSW50MzJJbkpTU3Rh
Y2sgfHwgbV9raW5kID09IEludDUySW5KU1N0YWNrIHx8IG1fa2luZCA9PSBEb3VibGVJbkpTU3Rh
Y2spOwotICAgICAgICBtX3ZhbHVlLnZpcnR1YWxSZWdpc3RlciA9IHJlZy5vZmZzZXQoKTsKLSAg
ICB9Ci0gICAgCi0gICAgVmFsdWVTb3VyY2VLaW5kIGtpbmQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fa2luZDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiBraW5kKCkgPT0gU291cmNlTm90U2V0OyB9Ci0gICAgCi0gICAgREZHOjpOb2Rl
KiBub2RlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gSGF2ZU5vZGUp
OwotICAgICAgICByZXR1cm4gbV92YWx1ZS5ub2RlOwotICAgIH0KLSAgICAKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gVmFsdWVJbkpTU3RhY2sgfHwga2luZCgpID09IEludDMySW5KU1N0YWNrIHx8IGtp
bmQoKSA9PSBJbnQ1MkluSlNTdGFjayB8fCBraW5kKCkgPT0gRG91YmxlSW5KU1N0YWNrKTsKLSAg
ICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3ZhbHVlLnZpcnR1YWxSZWdpc3Rlcik7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Ci0KLXByaXZh
dGU6Ci0gICAgVmFsdWVTb3VyY2VLaW5kIG1fa2luZDsKLSAgICB1bmlvbiB7Ci0gICAgICAgIERG
Rzo6Tm9kZSogbm9kZTsKLSAgICAgICAgaW50IHZpcnR1YWxSZWdpc3RlcjsKLSAgICB9IG1fdmFs
dWU7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKLQotI2VuZGlmIC8vIEZUTFZhbHVlU291cmNlX2gKLQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsdm0vTExWTUFQSUZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUElGdW5jdGlvbnMuaAkocmV2aXNpb24gMTU5MzUy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vTExWTUFQSUZ1bmN0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MzUsNyArNTM1LDYgQEAKICAgICBtYWNybyhMTFZNQm9vbCwgVGFyZ2V0
SGFzSklULCAoTExWTVRhcmdldFJlZiBUKSkgXAogICAgIG1hY3JvKExMVk1Cb29sLCBUYXJnZXRI
YXNUYXJnZXRNYWNoaW5lLCAoTExWTVRhcmdldFJlZiBUKSkgXAogICAgIG1hY3JvKExMVk1Cb29s
LCBUYXJnZXRIYXNBc21CYWNrZW5kLCAoTExWTVRhcmdldFJlZiBUKSkgXAotICAgIG1hY3JvKExM
Vk1UYXJnZXRNYWNoaW5lUmVmLCBDcmVhdGVUYXJnZXRNYWNoaW5lLCAoTExWTVRhcmdldFJlZiBU
LCBjaGFyICpUcmlwbGUsIGNoYXIgKkNQVSwgY2hhciAqRmVhdHVyZXMsIExMVk1Db2RlR2VuT3B0
TGV2ZWwgTGV2ZWwsIExMVk1SZWxvY01vZGUgUmVsb2MsIExMVk1Db2RlTW9kZWwgQ29kZU1vZGVs
KSkgXAogICAgIG1hY3JvKHZvaWQsIERpc3Bvc2VUYXJnZXRNYWNoaW5lLCAoTExWTVRhcmdldE1h
Y2hpbmVSZWYgVCkpIFwKICAgICBtYWNybyhMTFZNVGFyZ2V0UmVmLCBHZXRUYXJnZXRNYWNoaW5l
VGFyZ2V0LCAoTExWTVRhcmdldE1hY2hpbmVSZWYgVCkpIFwKICAgICBtYWNybyhjaGFyICosIEdl
dFRhcmdldE1hY2hpbmVUcmlwbGUsIChMTFZNVGFyZ2V0TWFjaGluZVJlZiBUKSkgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRHVtcENvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmNwcAkocmV2aXNp
b24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRHVtcENvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotRHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KCkgeyB9CitEdW1wQ29udGV4dDo6RHVtcENvbnRl
eHQoKQorICAgIDogZ3JhcGgoMCkKK3sKK30KKwogRHVtcENvbnRleHQ6On5EdW1wQ29udGV4dCgp
IHsgfQogCiBib29sIER1bXBDb250ZXh0Ojppc0VtcHR5KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRHVtcENvbnRleHQuaAkocmV2aXNpb24gMTU5MzUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRHVtcENvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIERG
RyB7IGNsYXNzIEdyYXBoOyB9CisKIHN0cnVjdCBEdW1wQ29udGV4dCB7CiAgICAgRHVtcENvbnRl
eHQoKTsKICAgICB+RHVtcENvbnRleHQoKTsKQEAgLTQxLDYgKzQzLDcgQEAgc3RydWN0IER1bXBD
b250ZXh0IHsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgg
PSAiIikgY29uc3Q7CiAgICAgCiAgICAgU3RyaW5nSGFzaER1bXBDb250ZXh0PFN0cnVjdHVyZT4g
c3RydWN0dXJlczsKKyAgICBERkc6OkdyYXBoKiBncmFwaDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNp
b24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDcgQEAgdHlwZWRlZiBPcHRpb25SYW5nZSBvcHRp
b25SYW5nZTsKICAgICB2KGJvb2wsIGVuYWJsZUxMVk1GYXN0SVNlbCwgZmFsc2UpIFwKICAgICB2
KGJvb2wsIHVzZUxMVk1TbWFsbENvZGVNb2RlbCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIGR1bXBM
TFZNSVIsIGZhbHNlKSBcCisgICAgdihib29sLCB2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcywg
ZmFsc2UpIFwKICAgICB2KGJvb2wsIGxsdm1BbHdheXNGYWlsc0JlZm9yZUNvbXBpbGUsIGZhbHNl
KSBcCiAgICAgdihib29sLCBsbHZtQWx3YXlzRmFpbHNCZWZvcmVMaW5rLCBmYWxzZSkgXAogICAg
IHYoYm9vbCwgbGx2bVNpbXBsZU9wdCwgdHJ1ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NjksMTMgKzQ2OSwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCgpIHsg
cmV0dXJuIG1fdXNlc05vblN0cmljdEV2YWw7IH0KICAgICB2b2lkIHNldFVzZXNOb25TdHJpY3RF
dmFsKGJvb2wgdXNlc05vblN0cmljdEV2YWwpIHsgbV91c2VzTm9uU3RyaWN0RXZhbCA9IHVzZXNO
b25TdHJpY3RFdmFsOyB9CiAKLSAgICBpbnQgY2FwdHVyZVN0YXJ0KCkgeyByZXR1cm4gbV9jYXB0
dXJlU3RhcnQ7IH0KKyAgICBpbnQgY2FwdHVyZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9jYXB0
dXJlU3RhcnQ7IH0KICAgICB2b2lkIHNldENhcHR1cmVTdGFydChpbnQgY2FwdHVyZVN0YXJ0KSB7
IG1fY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZVN0YXJ0OyB9CiAKLSAgICBpbnQgY2FwdHVyZUVuZCgp
IHsgcmV0dXJuIG1fY2FwdHVyZUVuZDsgfQorICAgIGludCBjYXB0dXJlRW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYXB0dXJlRW5kOyB9CiAgICAgdm9pZCBzZXRDYXB0dXJlRW5kKGludCBjYXB0dXJl
RW5kKSB7IG1fY2FwdHVyZUVuZCA9IGNhcHR1cmVFbmQ7IH0KIAotICAgIGludCBjYXB0dXJlQ291
bnQoKSB7IHJldHVybiAtKG1fY2FwdHVyZUVuZCAtIG1fY2FwdHVyZVN0YXJ0KTsgfQorICAgIGlu
dCBjYXB0dXJlQ291bnQoKSBjb25zdCB7IHJldHVybiAtKG1fY2FwdHVyZUVuZCAtIG1fY2FwdHVy
ZVN0YXJ0KTsgfQogCiAgICAgaW50IHBhcmFtZXRlckNvdW50KCkgeyByZXR1cm4gbV9wYXJhbWV0
ZXJDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9CiAgICAgaW50IHBhcmFtZXRlckNvdW50SW5jbHVk
aW5nVGhpcygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217120</attachid>
            <date>2013-11-16 00:48:16 -0800</date>
            <delta_ts>2013-11-16 00:51:55 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>114831</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5Mzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MCBA
QAorMjAxMy0xMS0xNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgaGF2ZSBhbiBleHBsaWNpdCBub3Rpb24gb2YgYnl0ZWNvZGUgbGl2ZW5lc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDE4MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
VGhpcyBtYWtlcyBGVEwgT1NSIGV4aXQgdXNlIGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lzIHRv
IGRldGVybWluZSB3aGljaCB2YXJpYWJsZXMKKyAgICAgICAgdG8gaW5jbHVkZSB2YWx1ZXMgZm9y
LiBUaGUgZGVjaXNpb24gb2YgaG93IHRvIGdldCB0aGUgdmFsdWVzIG9mIHZhcmlhYmxlcyBpcyBi
YXNlZCBvbgorICAgICAgICBmb3J3YXJkIHByb3BhZ2F0aW9uIG9mIE1vdkhpbnRzIGFuZCBTZXRM
b2NhbHMuCisgICAgICAgIAorICAgICAgICBUaGlzIGZpeGVzIGEgYnVuY2ggb2YgYnVncyAobGlr
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MTM4IGJ1dAorICAg
ICAgICBhbHNvIG90aGVycyB0aGF0IEkgbm90aWNlZCB3aGVuIEkgc3RhcnRlZCB3cml0aW5nIG1v
cmUgdGFyZ2V0dGVkIHRlc3RzKSBhbmQgYWxsb3dzIHVzCisgICAgICAgIHRvIHJlbW92ZSBzb21l
IHNrZXRjaHkgY29kZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmg6
CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAg
ICAgKEpTQzo6aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpzZXRG
b3JPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6
CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpzdGVwT3Zlckluc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZUxvY2FsTGl2
ZW5lc3NGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpczo6cnVuTGl2ZW5lc3NGaXhwb2ludCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpczo6b3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpnZXRMaXZlbmVzc0luZm8pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MpOgorICAgICAgICAq
IGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOgorICAgICAgICAoSlNDOjpvcGVyYW5kVGhhdElzTm90QWx3
YXlzTGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xpdmUpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhcHR1cmVD
b3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FwdHVyZVN0YXJ0KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpjYXB0dXJlRW5kKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3Jp
Z2luLmNwcDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpkdW1wSW5Db250ZXh0KToK
KyAgICAgICAgKiBieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzKToKKyAg
ICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OmdldE91dCk6CisgICAgICAgIChKU0M6
OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlKToKKyAgICAgICAgKEpTQzo6RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M6OmdldExpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHQXZhaWxh
YmlsaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5OjpkdW1w
KToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OmR1bXBJbkNvbnRleHQpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6
QXZhaWxhYmlsaXR5OjpBdmFpbGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJp
bGl0eTo6dW5hdmFpbGFibGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6d2l0
aEZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OndpdGhOb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OndpdGhVbmF2YWlsYWJsZU5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6bm9kZUlzVW5kZWNpZGVkKToKKyAgICAgICAg
KEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6Om5vZGVJc1VuYXZhaWxhYmxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBdmFpbGFiaWxpdHk6Omhhc05vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWls
YWJpbGl0eTo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5OjpmbHVzaGVk
QXQpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6b3BlcmF0b3IhKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eTo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0
eTo6bWVyZ2VOb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5Ojp1bmF2YWls
YWJsZU1hcmtlcik6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdEaXNhc3NlbWJsZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxlcjo6RGlzYXNzZW1ibGVyKToKKyAgICAgICAgKiBkZmcv
REZHRmx1c2hGb3JtYXQuY3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBkZmcvREZHRmx1c2hGb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpyZXN1bHRGb3Ip
OgorICAgICAgICAoSlNDOjpERkc6OnVzZUtpbmRGb3IpOgorICAgICAgICAoSlNDOjpERkc6OmRh
dGFGb3JtYXRGb3IpOgorICAgICAgICAqIGRmZy9ERkdGbHVzaGVkQXQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkZsdXNoZWRBdDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0ZsdXNoZWRBdC5o
OgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoZWRBdDo6Rmx1c2hlZEF0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpGbHVzaGVkQXQ6Om1lcmdlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bGl2ZW5lc3NGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0xpdmVJbkJ5dGVj
b2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6YmFzZWxpbmVDb2RlQmxvY2tGb3IpOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdSZXN1cnJl
Y3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2U6OlJlc3VycmVjdGlvbkZvclZhbGlkYXRpb25Q
aGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6UmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1SZXN1cnJlY3Rpb25Gb3JWYWxpZGF0
aW9uKToKKyAgICAgICAgKiBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg6
IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZH
VmFsdWVTb3VyY2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6Zm9yRmx1c2hG
b3JtYXQpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAg
KiBmdGwvRlRMRXhpdFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmR1
bXBJbkNvbnRleHQpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Okxvd2VyREZHVG9MTFZNKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpjb21waWxlWm9tYmllSGludCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6aW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmVtaXRPU1JFeGl0Q2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudEZvck5vZGUpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpvYnNlcnZlTW92SGludCk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQp
OgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OmFsbG9jYSk6CisgICAgICAgICogZnRsL0ZUTFZhbHVlU291cmNlLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBmdGwvRlRMVmFsdWVTb3VyY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsbHZtL0xM
Vk1BUElGdW5jdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL0R1bXBDb250ZXh0LmNwcDoKKyAg
ICAgICAgKEpTQzo6RHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KToKKyAgICAgICAgKiBydW50aW1l
L0R1bXBDb250ZXh0Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICog
cnVudGltZS9TeW1ib2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6
Y2FwdHVyZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6U2hhcmVkU3ltYm9sVGFibGU6OmNhcHR1cmVF
bmQpOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6Y2FwdHVyZUNvdW50KToKKwog
MjAxMy0xMS0xNSAgcGVhdm9Ab3V0bG9vay5jb20gIDxwZWF2b0BvdXRsb29rLmNvbT4KIAogICAg
ICAgICBbV2luXSBKYXZhU2NyaXB0IGNyYXNoZXMgb24gNjQtYml0IHdpdGggSklUIGVuYWJsZWQu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTkzNTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTkxLDYgKzkxLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHQXJyYXlNb2RlLmNw
cAogICAgIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcAorICAgIGRmZy9ERkdBdmFpbGFi
aWxpdHkuY3BwCiAgICAgZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCiAgICAg
ZGZnL0RGR0Jhc2ljQmxvY2suY3BwCiAgICAgZGZnL0RGR0JpbmFyeVN3aXRjaC5jcHAKQEAgLTE1
OCw2ICsxNTksNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdQbGFu
LmNwcAogICAgIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdSZXN1cnJlY3Rpb25G
b3JWYWxpZGF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAK
ICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMCArMTAwLDExIEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVBy
b2ZpbGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxl
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaCBcCi0gICAg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgXAot
ICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaCBc
Ci0gICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAgXAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlQmFzaWNCbG9jay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUJhc2ljQmxvY2suaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaCBcCkBAIC0xMzIsNiArMTMzLDcgQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
aXRLaW5kLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeHByZXNzaW9uUmFuZ2VJbmZvLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oIFwKQEAgLTIwNyw2ICsyMDks
OCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXZhaWxhYmlsaXR5LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdmFpbGFiaWxpdHkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5jcHAgXApAQCAtMzU4LDYgKzM2Miw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVn
aXN0ZXJCYW5rLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdXJyZWN0aW9u
Rm9yVmFsaWRhdGlvblBoYXNlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmggXApAQCAtNDY5LDggKzQ3NSw2IEBAIGphdmFzY3Jp
cHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVG
b3JtYXQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0Lmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9tQmxvY2suaCBcCi0JU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAgXAotCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29kZUJsb2NrU2V0LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29k
ZUJsb2NrU2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEFsbG9jYXRv
ci5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNp
b24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM4LDYgKzMzOCw3
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fy
cmF5TW9kZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0VGFp
bEFic3RyYWN0U3RhdGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBdmFpbGFiaWxpdHkuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHQmFzaWNCbG9jay5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0JpbmFyeVN3aXRjaC5jcHAiIC8+DQpAQCAtNDAzLDYgKzQwNCw3IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGxhbi5jcHAiIC8+DQogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVzdXJy
ZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCIgLz4NCiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAiIC8+DQpAQCAtNzQ1LDYg
Kzc0Nyw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeVZhbEluZm8u
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZUJhc2lj
QmxvY2suaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmUuaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua0luZm8uaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua1N0YXR1cy5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0
LmgiIC8+DQpAQCAtNzYyLDYgKzc2NSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxFeGVjdXRpb25Db3VudGVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcRXhpdEtpbmQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxFeHByZXNzaW9uUmFuZ2VJbmZvLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcRnVsbEJ5dGVjb2RlTGl2ZW5zcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEdldEJ5SWRTdGF0dXMuaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxIYW5kbGVySW5mby5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXElubGluZUNhbGxGcmFtZVNldC5oIiAvPg0KQEAgLTgxMiw2
ICs4MTYsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5aWZ5U2xv
d1BhdGhHZW5lcmF0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
QXJyYXlNb2RlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0VGFp
bEFic3RyYWN0U3RhdGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
QXZhaWxhYmlsaXR5LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jh
Y2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHQmFzaWNCbG9jay5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYXNpY0Jsb2NrSW5saW5lcy5oIiAvPg0KQEAgLTg5NSw2ICs5MDAsNyBAQAogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1JlZ2lzdGVyQmFuay5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlclNldC5oIiAvPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0
aW9uUGhhc2UuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZVRv
RXhlY3V0ZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTYW5lU3Ry
aW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdTY29yZUJvYXJkLmgiIC8+DQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDQsOCArMTA0LDYgQEAKIAkJMEYyMzVCRTIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQ0Mx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjM1QkUzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExW
YWx1ZUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjIzNUJDRDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuY3BwICovOyB9
OwogCQkwRjIzNUJFNDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkNFMTcxNzhFMUMw
MDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTBGMjM1QkU1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1
ZVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjIzNUJDRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuY3BwICovOyB9Owot
CQkwRjIzNUJFNjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkQwMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMjM1QkVCMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIzNUJFNzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwICovOyB9OwogCQkw
RjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkU4MTcxNzhFNzMwMDY5MEM3
RiAvKiBERkdPU1JFeGl0QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMjM1QkVEMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJl
cGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyMzVCRTkxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAg
Ki87IH07CkBAIC0yNjAsNiArMjU4LDEyIEBACiAJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAv
KiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNjM5NDg0MTVFNDgxMTgwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0ODEx
NUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgKi87IH07CiAJCTBGNjM5NDg1MTVF
NDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJh
eU1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjY2
NkVDMTE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUJGMTgzNTY2RjkwMEQw
MTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjY2RUM2MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdB
dmFpbGFiaWxpdHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2NjZFQzIxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgKi87
IH07CisJCTBGNjY2RUM3MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUMzMTgzNTY3
MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjY2NkVDQzE4MzZCMzdFMDBEMDE3RjEgLyogREZH
UmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUNBMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwICovOyB9OworCQkwRjY2NkVDRDE4MzZC
MzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDQjE4MzZCMzdF
MDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0Yx
NjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGph
Y2VuY3lMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJF
NCAvKiBERkdFZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY3MDI1QTkxNzE0QjBGQTAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjcwMjVBNzE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCAq
LzsgfTsKQEAgLTEzOTUsOCArMTM5OSw2IEBACiAJCTBGMjM1QkNDMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVGh1bmtz
Lmg7IHBhdGggPSBmdGwvRlRMVGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMjM1QkNEMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExWYWx1ZUZvcm1hdC5jcHA7IHBhdGggPSBm
dGwvRlRMVmFsdWVGb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIz
NUJDRTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVGb3JtYXQuaDsgcGF0aCA9IGZ0bC9GVExWYWx1ZUZv
cm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjIzNUJDRjE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRlRMVmFsdWVTb3VyY2UuY3BwOyBwYXRoID0gZnRsL0ZUTFZhbHVlU291cmNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyMzVCRDAxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTFZhbHVlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TFZhbHVlU291cmNlLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVTb3VyY2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCRTcxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRC
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRC
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMjM1QkU4MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0QmFzZS5oOyBwYXRo
ID0gZGZnL0RGR09TUkV4aXRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MjM1QkU5MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdFByZXBhcmF0aW9uLmNw
cDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTU1MCw2ICsxNTUyLDEyIEBACiAJCTBGNjM5NDc2MTVEQ0UzNDcwMDZB
NTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJyYXlNb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdB
cnJheU1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzOTQ4MjE1RTQ4
MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0FycmF5TW9kZS5oOyBwYXRoID0gZGZnL0RGR0FycmF5TW9kZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZl
bmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdWxsQnl0ZWNvZGVMaXZl
bmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2NkVDMjE4MzU2NzJCMDBE
MDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0F2YWlsYWJpbGl0eS5jcHA7IHBhdGggPSBkZmcvREZHQXZhaWxhYmlsaXR5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQzMxODM1NjcyQjAwRDAx
N0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdBdmFpbGFiaWxpdHkuaDsgcGF0aCA9IGRmZy9ERkdBdmFpbGFiaWxpdHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQ0ExODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jl
c3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJl
Y3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHUmVz
dXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9IGRm
Zy9ERkdBZGphY2VuY3lMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZF
MTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0VkZ2UuaDsgcGF0aCA9IGRmZy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNzAyNUE3MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg0NCw4ICsyODUyLDYg
QEAKIAkJCQkwRjIzNUJDRDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuY3BwICov
LAogCQkJCTBGMjM1QkNFMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5oICovLAog
CQkJCTBGREIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oICovLAot
CQkJCTBGMjM1QkNGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5jcHAgKi8sCi0J
CQkJMEYyMzVCRDAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmggKi8sCiAJCQkp
OwogCQkJbmFtZSA9IGZ0bDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zNzQ0LDYg
KzM3NTAsOCBAQAogCQkJCTBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUu
aCAqLywKIAkJCQlBN0Q5QTI4RjE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RT
dGF0ZS5jcHAgKi8sCiAJCQkJQTdEOUEyOTAxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFi
c3RyYWN0U3RhdGUuaCAqLywKKwkJCQkwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZh
aWxhYmlsaXR5LmNwcCAqLywKKwkJCQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZh
aWxhYmlsaXR5LmggKi8sCiAJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJF
QiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCiAJCQkJQTdEODlDRTMxN0Ew
QjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2suY3BwICovLApAQCAtMzg5NCw2ICszOTAyLDgg
QEAKIAkJCQkwRkZGQzk1MTE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTUyMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oICovLAogCQkJCTg2RUM5REMxMTMyOERGODIwMDJCMkFE
NyAvKiBERkdSZWdpc3RlckJhbmsuaCAqLywKKwkJCQkwRjY2NkVDQTE4MzZCMzdFMDBEMDE3RjEg
LyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjY2NkVD
QjE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmgg
Ki8sCiAJCQkJQTc3QTQyM0MxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCAq
LywKIAkJCQlBNzQxMDE3RTE3OURBRjgwMDAyRUI4QkEgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFs
U2xvd1BhdGhHZW5lcmF0b3IuaCAqLywKIAkJCQk4NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcgLyog
REZHU2NvcmVCb2FyZC5oICovLApAQCAtNDAzNiwxNSArNDA0NiwxNiBAQAogCQk5NjlBMDc4RjBF
RDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCUMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJh
c2ljQmxvY2suY3BwICovLAotCQkJCUMyRkNBRTBEMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29k
ZUJhc2ljQmxvY2suaCAqLywKLQkJCQlDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLywKLQkJCQlDMkZDQUUwRjE3QTlDMjRFMDAzNEM3MzUg
LyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8sCiAJCQkJMEY4MzM1QjQxNjM5QzFFMzAw
MTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwICovLAogCQkJCTBGODMzNUI1MTYz
OUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi8sCiAJCQkJMEY2Mzk0
NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgKi8sCiAJCQkJMEY2Mzk0NTIx
NUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oICovLAorCQkJCUMyRkNBRTBDMTdBOUMy
NEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovLAorCQkJCUMyRkNBRTBEMTdB
OUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLywKIAkJCQkwRjIxQzI3RTE0
QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovLAorCQkJCUMyRkNBRTBF
MTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwICovLAorCQkJ
CUMyRkNBRTBGMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAq
LywKKwkJCQkwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzSW5saW5lcy5oICovLAogCQkJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbElu
Zm8uaCAqLywKIAkJCQkwRjBCODNBRTE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNw
cCAqLywKIAkJCQkwRjBCODNBRjE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggKi8s
CkBAIC00MDczLDYgKzQwODQsNyBAQAogCQkJCTBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBF
eGl0S2luZC5jcHAgKi8sCiAJCQkJMEZCMTA1ODMxNjc1NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5k
LmggKi8sCiAJCQkJMEYwQjgzQUExNEJDRjVCOTAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUlu
Zm8uaCAqLywKKwkJCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MuaCAqLywKIAkJCQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1
cy5jcHAgKi8sCiAJCQkJMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMu
aCAqLywKIAkJCQkwRjBCODNBODE0QkNGNTVFMDA4ODVCNEYgLyogSGFuZGxlckluZm8uaCAqLywK
QEAgLTQ0MzEsNyArNDQ0Myw2IEBACiAJCQkJMEZFQTBBMjAxNzA4QjAwNzAwQkI3MjJDIC8qIEZU
TFR5cGVkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRTQxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTFZhbHVlRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNDQTE3M0RB
NTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
MjM1QkU2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0MDQwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjBGMUEwMTZCNzJBMUEwMDVERjk1QiAvKiBGdW5jdGlvbkV4
ZWN1dGFibGVEdW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0
NjAgLyogRnVuY3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtNDQ2MSw2ICs0NDcy
LDcgQEAKIAkJCQkyQTZGNDYyNjE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTRGOTc0NDcxMzhDODUzRTAwREExQzY3IC8qIEhlYXBSb290Vmlz
aXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzI0RDMxRTMxNjFDRDY5NTAwMkFBNERCIC8qIEhl
YXBTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3
RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRTUyNkJF
MTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4
MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQwRjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRl
cnMgKi8sCkBAIC00NzAzLDYgKzQ3MTUsNyBAQAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4
RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MTBFMTZG
NUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUE1
MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QjkxNjZBRDM2MDAwMEY1QkEzIC8qIFBy
b2ZpbGVyQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjEzOTEyQTE2NzcxQzM2MDA5
Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCkBAIC00ODEzLDYgKzQ4MjYsNyBAQAogCQkJCUE3QThBRjNGMTdBREI1RjMwMDVBQjE3
NCAvKiBVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0MDE3QURCNUYzMDA1
QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUYwOENG
MTQ2Qzc2MzMwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjY2NkVDNzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0I2MDE4MjE2MzlGRDJBMDAzNzJCQTMgLyogVW5saW5rZWRDb2Rl
QmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBV
bnVzZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5
QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTQ4NDMsNiArNDg1Nyw3IEBA
CiAJCQkJMEZDODE1MEExNDA0M0JGNTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTk2ODhDQjE2MEVEMTJCNEUwMDFENjQ5RiAvKiBYODZBc3NlbWJs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ1MTUzOUI5MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2NkVDRDE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVz
dXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4
NTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJzICov
LApAQCAtNTQ1MSw3ICs1NDY2LDYgQEAKIAkJCQkwRkVBMEExNjE3MDZCQjkwMDBCQjcyMkMgLyog
RlRMU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRTExNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTFRodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFMzE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYyMzVCRTUx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUNCMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1
dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNDMTA3RUMzNzYwMDQyN0E0
OCAvKiBGdW5jdGlvblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU2MzAsNiArNTY0
NCw3IEBACiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ck9yaWdpblN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyRkNBRTEwMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NjZF
Q0MxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmls
ZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2
RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJC
MTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNTY5OCw2ICs1NzEzLDcgQEAKIAkJCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2
MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVEOTRGMkUxNzFF
M0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjMw
MTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjY2NkVDNjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOTE5RDI1MTU4NTNDRTAwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBQ0Y3Mzc3MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0RTg0RjlFMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDggKzM2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsK
IAotdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBGYXN0Qml0VmVjdG9yLCBXVEY6OkludEhhc2g8
dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPiA+
IEJ5dGVjb2RlVG9CaXRtYXBNYXA7Ci0KIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jayA6IHB1Ymxp
YyBSZWZDb3VudGVkPEJ5dGVjb2RlQmFzaWNCbG9jaz4gewogcHVibGljOgogICAgIGVudW0gU3Bl
Y2lhbEJsb2NrVHlwZSB7IEVudHJ5QmxvY2ssIEV4aXRCbG9jayB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw3ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmgiCiAKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MuaCIKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC0zOCw0NCArNDAsMjMgQEAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpCeXRlY29k
ZUxpdmVuZQogICAgIGNvbXB1dGUoKTsKIH0KIAotc3RhdGljIGludCBudW1iZXJPZkNhcHR1cmVk
VmFyaWFibGVzKENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5z
eW1ib2xUYWJsZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5z
eW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291bnQoKTsKLX0KLQotc3RhdGljIGludCBjYXB0dXJlU3Rh
cnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgaWYgKCFjb2RlQmxvY2stPnN5bWJvbFRh
YmxlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb2RlQmxvY2stPnN5bWJvbFRh
YmxlKCktPmNhcHR1cmVTdGFydCgpOwotfQotCi1zdGF0aWMgaW50IGNhcHR1cmVFbmQoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCi17Ci0gICAgaWYgKCFjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPmNh
cHR1cmVFbmQoKTsKLX0KLQogc3RhdGljIGJvb2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIGludCBvcGVyYW5kKQogewogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnKG9wZXJhbmQpOwogICAgIHJldHVybiAhY29kZUJsb2NrLT5pc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChvcGVyYW5kKSAvLyBEb24ndCBjYXJlIGFib3V0IGNvbnN0YW50cy4KICAg
ICAgICAgJiYgdmlydHVhbFJlZy5pc0xvY2FsKCkgLy8gRG9uJ3QgY2FyZSBhYm91dCBhcmd1bWVu
dHMuCi0gICAgICAgICYmICghbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhjb2RlQmxvY2spIC8v
IElmIHdlIGhhdmUgbm8gY2FwdHVyZWQgdmFyaWFibGVzLCB3ZSdyZSBnb29kIHRvIGdvLgotICAg
ICAgICAgICAgfHwgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPiBjYXB0dXJlU3RhcnQoY29kZUJsb2Nr
KSB8fCAodmlydHVhbFJlZy5vZmZzZXQoKSA8PSBjYXB0dXJlRW5kKGNvZGVCbG9jaykpKSk7Cisg
ICAgICAgICYmICghY29kZUJsb2NrLT5jYXB0dXJlQ291bnQoKSAvLyBJZiB3ZSBoYXZlIG5vIGNh
cHR1cmVkIHZhcmlhYmxlcywgd2UncmUgZ29vZCB0byBnby4KKyAgICAgICAgICAgIHx8ICh2aXJ0
dWFsUmVnLm9mZnNldCgpID4gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSB8fCAodmlydHVhbFJl
Zy5vZmZzZXQoKSA8PSBjb2RlQmxvY2stPmNhcHR1cmVFbmQoKSkpKTsKIH0KIAogc3RhdGljIHZv
aWQgc2V0Rm9yT3BlcmFuZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgRmFzdEJpdFZlY3RvciYgYml0
cywgaW50IG9wZXJhbmQpCiB7CiAgICAgQVNTRVJUKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNz
KGNvZGVCbG9jaywgb3BlcmFuZCkpOwogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnKG9w
ZXJhbmQpOwotICAgIGlmICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY2FwdHVyZVN0YXJ0KGNvZGVC
bG9jaykpCisgICAgaWYgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPiBjb2RlQmxvY2stPmNhcHR1cmVT
dGFydCgpKQogICAgICAgICBiaXRzLnNldCh2aXJ0dWFsUmVnLnRvTG9jYWwoKSk7CiAgICAgZWxz
ZQotICAgICAgICBiaXRzLnNldCh2aXJ0dWFsUmVnLnRvTG9jYWwoKSAtIG51bWJlck9mQ2FwdHVy
ZWRWYXJpYWJsZXMoY29kZUJsb2NrKSk7CisgICAgICAgIGJpdHMuc2V0KHZpcnR1YWxSZWcudG9M
b2NhbCgpIC0gY29kZUJsb2NrLT5jYXB0dXJlQ291bnQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNv
bXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiB1c2VzKQpAQCAtMzAzLDggKzI4NCw4IEBA
IHN0YXRpYyB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQKICAgICAgICAgaW50IGJh
c2UgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBjb3VudCA9IGluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKSB7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJs
b2NrLCBiYXNlICsgaSkpCi0gICAgICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ss
IHVzZXMsIGJhc2UgKyBpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZl
bmVzcyhjb2RlQmxvY2ssIGJhc2UgLSBpKSkKKyAgICAgICAgICAgICAgICBzZXRGb3JPcGVyYW5k
KGNvZGVCbG9jaywgdXNlcywgYmFzZSAtIGkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0zMTUsMTEgKzI5NiwxMSBAQCBzdGF0aWMgdm9pZCBjb21wdXRlVXNlc0ZvckJ5
dGVjb2RlT2Zmc2V0CiAgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2Rl
QmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCiAgICAgICAgICAgICBzZXRGb3JPcGVy
YW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAg
aW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICBpbnQgcmVn
aXN0ZXJPZmZzZXQgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisgICAgICAgIGludCByZWdp
c3Rlck9mZnNldCA9IC1pbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBsYXN0
QXJnID0gcmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOwot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHsKLSAgICAgICAgICAg
IGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGxhc3RBcmcgLSBpKSkK
LSAgICAgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgbGFzdEFyZyAt
IGkpOworICAgICAgICBmb3IgKGludCBpID0gb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gMSA6
IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVy
Rm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBsYXN0QXJnICsgaSkpCisgICAgICAgICAgICAgICAgc2V0
Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGxhc3RBcmcgKyBpKTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMzMzLDEwICszMTQsOSBAQCBzdGF0aWMgdm9pZCBjb21w
dXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0CiAgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVC
bG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSNkZWZpbmUgTExJTlRfSEVMUEVSX09QQ09ERVMob3Bjb2RlLCBsZW5ndGgpIGNhc2Ug
b3Bjb2RlOgotICAgIEZPUl9FQUNIX0xMSU5UX09QQ09ERV9FWFRFTlNJT04oTExJTlRfSEVMUEVS
X09QQ09ERVMpCi0gICAgICAgIHJldHVybjsKLSN1bmRlZiBMTElOVF9IRUxQRVJfT1BDT0RFUwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtNDkyLDggKzQ3Miw3IEBAIHN0YXRpYyB2b2lkIGNv
bXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQKICAgICBjYXNlIG9wX2VudGVyOiB7CiAgICAgICAg
IGRlZnMuc2V0QWxsKCk7CiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgfQorICAgIH0gfQog
fQogCiBzdGF0aWMgdW5zaWduZWQgZ2V0TGVhZGVyT2Zmc2V0Rm9yQmFzaWNCbG9jayhSZWZQdHI8
Qnl0ZWNvZGVCYXNpY0Jsb2NrPiogYmFzaWNCbG9jaykKQEAgLTU0MCwxMyArNTE5LDMyIEBAIHN0
YXRpYyBCeXRlY29kZUJhc2ljQmxvY2sqIGZpbmRCYXNpY0Jsb2MKICAgICByZXR1cm4gYmFzaWNC
bG9ja1sxXS5nZXQoKTsKIH0KIAorc3RhdGljIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+PiYgYmFz
aWNCbG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiB1c2VzLCBG
YXN0Qml0VmVjdG9yJiBkZWZzLCBGYXN0Qml0VmVjdG9yJiBvdXQpCit7CisgICAgdXNlcy5jbGVh
ckFsbCgpOworICAgIGRlZnMuY2xlYXJBbGwoKTsKKyAgICAKKyAgICBjb21wdXRlVXNlc0ZvckJ5
dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQsIHVzZXMpOworICAgIGNvbXB1
dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgZGVmcyk7
CisgICAgCisgICAgb3V0LmV4Y2x1ZGUoZGVmcyk7CisgICAgb3V0Lm1lcmdlKHVzZXMpOworICAg
IAorICAgIC8vIElmIHdlIGhhdmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIHdlIHdhbnQgdGhlIGxp
dmUtaW4gdmFyaWFibGVzIG9mIHRoZSAKKyAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9jayB0
byBiZSBpbmNsdWRlZCBpbiB0aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgYnl0ZWNvZGUu
CisgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSB7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9j
ayogaGFuZGxlckJsb2NrID0gZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGJhc2ljQmxv
Y2tzLCBoYW5kbGVyLT50YXJnZXQpOworICAgICAgICBBU1NFUlQoaGFuZGxlckJsb2NrKTsKKyAg
ICAgICAgb3V0Lm1lcmdlKGhhbmRsZXJCbG9jay0+aW4oKSk7CisgICAgfQorfQorCiBzdGF0aWMg
dm9pZCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrLCBWZWN0b3I8UmVmUHRyPEJ5dGVjb2Rl
QmFzaWNCbG9jaz4gPiYgYmFzaWNCbG9ja3MsIHVuc2lnbmVkIHRhcmdldE9mZnNldCwgRmFzdEJp
dFZlY3RvciYgcmVzdWx0KQogewogICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwog
ICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygpKTsKIAogICAgIEZhc3RCaXRWZWN0b3Ig
b3V0ID0gYmxvY2stPm91dCgpOwotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gMDsKIAogICAg
IEZhc3RCaXRWZWN0b3IgdXNlczsKICAgICBGYXN0Qml0VmVjdG9yIGRlZnM7CkBAIC01NTcsMjMg
KzU1NSw4IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWMKICAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+Ynl0ZWNvZGVPZmZzZXRzKClbaV07
CiAgICAgICAgIGlmICh0YXJnZXRPZmZzZXQgPiBieXRlY29kZU9mZnNldCkKICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIHVzZXMuY2xlYXJBbGwoKTsKLSAgICAgICAgZGVmcy5jbGVhckFs
bCgpOwotCi0gICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBi
eXRlY29kZU9mZnNldCwgdXNlcyk7Ci0gICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZz
ZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgZGVmcyk7Ci0KLSAgICAgICAgb3V0LmV4Y2x1
ZGUoZGVmcyk7Ci0gICAgICAgIG91dC5tZXJnZSh1c2VzKTsKLQotICAgICAgICAvLyBJZiB3ZSBo
YXZlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCB3ZSB3YW50IHRoZSBsaXZlLWluIHZhcmlhYmxlcyBv
ZiB0aGUgCi0gICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGVyIGJsb2NrIHRvIGJlIGluY2x1ZGVk
IGluIHRoZSBsaXZlLWluIG9mIHRoaXMgcGFydGljdWxhciBieXRlY29kZS4KLSAgICAgICAgaWYg
KChoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQpKSkgewotICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBoYW5kbGVyQmxvY2sg
PSBmaW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoYmFzaWNCbG9ja3MsIGhhbmRsZXItPnRh
cmdldCk7Ci0gICAgICAgICAgICBBU1NFUlQoaGFuZGxlckJsb2NrKTsKLSAgICAgICAgICAgIG91
dC5tZXJnZShoYW5kbGVyQmxvY2stPmluKCkpOwotICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBzdGVwT3Zlckluc3RydWN0aW9uKGNvZGVCbG9jaywgYmFzaWNCbG9ja3MsIGJ5dGVjb2RlT2Zm
c2V0LCB1c2VzLCBkZWZzLCBvdXQpOwogICAgIH0KIAogICAgIHJlc3VsdC5zZXQob3V0KTsKQEAg
LTU5MCw3ICs1NzMsNyBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6cnVuTGl2ZW5l
CiB7CiAgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZWYXJpYWJsZXMg
PSB1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzICsgCi0gICAgICAgIHVubGlua2VkQ29kZUJs
b2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAtIG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9j
b2RlQmxvY2spOworICAgICAgICB1bmxpbmtlZENvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3Rl
cnMgLSBtX2NvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9iYXNpY0Jsb2Nrcy5zaXplKCk7IGkrKykgewogICAgICAgICBCeXRlY29kZUJh
c2ljQmxvY2sqIGJsb2NrID0gbV9iYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKQEAgLTYyOSwzNiArNjEy
LDMwIEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmUKIAogYm9vbCBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6Om9wZXJhbmRJc0xpdmVBdEJ5dGVjb2RlT2Zmc2V0KGlu
dCBvcGVyYW5kLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsKLSAgICBpbnQgbnVtQ2FwdHVy
ZWRWYXJzID0gbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhtX2NvZGVCbG9jayk7Ci0gICAgaWYg
KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0FyZ3VtZW50KCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGlmIChvcGVyYW5kIDw9IGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykgJiYgb3Bl
cmFuZCA+IGNhcHR1cmVFbmQobV9jb2RlQmxvY2spKQorICAgIGlmIChvcGVyYW5kSXNBbHdheXNM
aXZlKG1fY29kZUJsb2NrLCBvcGVyYW5kKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgRmFz
dEJpdFZlY3RvciByZXN1bHQ7CiAgICAgZ2V0TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVyZWRWYXJz
QXRCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVz
dWx0LmdldChvcGVyYW5kIC0gbnVtQ2FwdHVyZWRWYXJzKTsKKyAgICByZXR1cm4gb3BlcmFuZFRo
YXRJc05vdEFsd2F5c0xpdmVJc0xpdmUobV9jb2RlQmxvY2ssIHJlc3VsdCwgb3BlcmFuZCk7CiB9
CiAKLUZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0lu
Zm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorRmFzdEJpdFZlY3Rv
ciBnZXRMaXZlbmVzc0luZm8oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEZhc3RCaXRWZWN0
b3ImIG91dCkKIHsKLSAgICBGYXN0Qml0VmVjdG9yIHRlbXA7CiAgICAgRmFzdEJpdFZlY3RvciBy
ZXN1bHQ7CiAKLSAgICBnZXRMaXZlbmVzc0luZm9Gb3JOb25DYXB0dXJlZFZhcnNBdEJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCB0ZW1wKTsKLQotICAgIHVuc2lnbmVkIG51bUNhcHR1cmVk
VmFycyA9IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9jb2RlQmxvY2spOworICAgIHVuc2ln
bmVkIG51bUNhcHR1cmVkVmFycyA9IGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCk7CiAgICAgaWYg
KG51bUNhcHR1cmVkVmFycykgewotICAgICAgICBpbnQgZmlyc3RDYXB0dXJlZExvY2FsID0gVmly
dHVhbFJlZ2lzdGVyKGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykpLnRvTG9jYWwoKTsKLSAgICAg
ICAgcmVzdWx0LnJlc2l6ZSh0ZW1wLm51bUJpdHMoKSArIG51bUNhcHR1cmVkVmFycyk7CisgICAg
ICAgIGludCBmaXJzdENhcHR1cmVkTG9jYWwgPSBWaXJ0dWFsUmVnaXN0ZXIoY29kZUJsb2NrLT5j
YXB0dXJlU3RhcnQoKSkudG9Mb2NhbCgpOworICAgICAgICByZXN1bHQucmVzaXplKG91dC5udW1C
aXRzKCkgKyBudW1DYXB0dXJlZFZhcnMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtQ2FwdHVyZWRWYXJzOyArK2kpCiAgICAgICAgICAgICByZXN1bHQuc2V0KGZpcnN0Q2Fw
dHVyZWRMb2NhbCArIGkpOwogICAgIH0gZWxzZQotICAgICAgICByZXN1bHQucmVzaXplKHRlbXAu
bnVtQml0cygpKTsKKyAgICAgICAgcmVzdWx0LnJlc2l6ZShvdXQubnVtQml0cygpKTsKIAotICAg
IGludCB0ZW1wTGVuZ3RoID0gdGVtcC5udW1CaXRzKCk7Ci0gICAgQVNTRVJUKHRlbXBMZW5ndGgg
Pj0gMCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZW1wTGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgaWYgKCF0ZW1wLmdldChpKSkKKyAgICBpbnQgb3V0TGVuZ3RoID0gb3V0Lm51bUJpdHMoKTsK
KyAgICBBU1NFUlQob3V0TGVuZ3RoID49IDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0
TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKCFvdXQuZ2V0KGkpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgaWYgKCFudW1DYXB0dXJlZFZhcnMpIHsKQEAgLTY2Niw3ICs2NDMs
NyBAQCBGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKS5vZmZzZXQoKSA+IGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykpCisgICAgICAgIGlm
ICh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKS5vZmZzZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVy
ZVN0YXJ0KCkpCiAgICAgICAgICAgICByZXN1bHQuc2V0KGkpOwogICAgICAgICBlbHNlIAogICAg
ICAgICAgICAgcmVzdWx0LnNldChudW1DYXB0dXJlZFZhcnMgKyBpKTsKQEAgLTY3NCw2ICs2NTEs
MzkgQEAgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OgogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK0Zhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpn
ZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQor
eworICAgIEZhc3RCaXRWZWN0b3Igb3V0OworICAgIGdldExpdmVuZXNzSW5mb0Zvck5vbkNhcHR1
cmVkVmFyc0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgcmV0dXJu
IGdldExpdmVuZXNzSW5mbyhtX2NvZGVCbG9jaywgb3V0KTsKK30KKwordm9pZCBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MoRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mm
IHJlc3VsdCkKK3sKKyAgICBGYXN0Qml0VmVjdG9yIG91dDsKKyAgICBGYXN0Qml0VmVjdG9yIHVz
ZXM7CisgICAgRmFzdEJpdFZlY3RvciBkZWZzOworICAgIAorICAgIHJlc3VsdC5tX2NvZGVCbG9j
ayA9IG1fY29kZUJsb2NrOworICAgIHJlc3VsdC5tX21hcC5jbGVhcigpOworICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fYmFzaWNCbG9ja3Muc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEJ5
dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jhc2ljQmxvY2tzW2ldLmdldCgpOworICAgICAg
ICBpZiAoYmxvY2stPmlzRW50cnlCbG9jaygpIHx8IGJsb2NrLT5pc0V4aXRCbG9jaygpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBvdXQgPSBibG9jay0+b3V0KCk7
CisgICAgICAgIHVzZXMucmVzaXplKG91dC5udW1CaXRzKCkpOworICAgICAgICBkZWZzLnJlc2l6
ZShvdXQubnVtQml0cygpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5ieXRlY29kZU9mZnNldHMoKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0cygpW2ldOworICAgICAg
ICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihtX2NvZGVCbG9jaywgbV9iYXNpY0Jsb2NrcywgYnl0
ZWNvZGVPZmZzZXQsIHVzZXMsIGRlZnMsIG91dCk7CisgICAgICAgICAgICByZXN1bHQubV9tYXAu
YWRkKGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMoKQogewogICAgIEludGVycHJldGVy
KiBpbnRlcnByZXRlciA9IG1fY29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRlcjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsMTMgKzM0LDE2IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOworY2xh
c3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3M7CiAKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cyB7CiBwdWJsaWM6CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzKENvZGVCbG9jayopOwot
CisgICAgCiAgICAgYm9vbCBvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9mZnNldChpbnQgb3BlcmFu
ZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5l
c3NJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAgCisg
ICAgdm9pZCBjb21wdXRlRnVsbExpdmVuZXNzKEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQp
OwogCiBwcml2YXRlOgogICAgIHZvaWQgY29tcHV0ZSgpOwpAQCAtNTMsNiArNTYsMTIgQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiBtX2Jhc2ljQmxv
Y2tzOwogfTsKIAoraW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShDb2RlQmxvY2sqLCBp
bnQgb3BlcmFuZCk7CitpbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2
ZShDb2RlQmxvY2sqLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKTsKK2lu
bGluZSBib29sIG9wZXJhbmRJc0xpdmUoQ29kZUJsb2NrKiwgY29uc3QgRmFzdEJpdFZlY3RvciYg
b3V0LCBpbnQgb3BlcmFuZCk7CisKK0Zhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvKENvZGVC
bG9jayosIGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpc0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzSW5saW5lc19oCisjZGVmaW5lIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGlu
ZXNfaAorCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgYm9vbCBvcGVyYW5kSXNB
bHdheXNMaXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBpbnQgb3BlcmFuZCkKK3sKKyAgICBpZiAo
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlzQXJndW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIG9wZXJhbmQgPD0gY29kZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSAmJiBv
cGVyYW5kID4gY29kZUJsb2NrLT5jYXB0dXJlRW5kKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJh
bmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBG
YXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKQoreworICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnKG9wZXJhbmQpOworICAgIGlmICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY29kZUJs
b2NrLT5jYXB0dXJlU3RhcnQoKSkKKyAgICAgICAgcmV0dXJuIG91dC5nZXQodmlydHVhbFJlZy50
b0xvY2FsKCkpOworICAgIHNpemVfdCBpbmRleCA9IHZpcnR1YWxSZWcudG9Mb2NhbCgpIC0gY29k
ZUJsb2NrLT5jYXB0dXJlQ291bnQoKTsKKyAgICBpZiAoaW5kZXggPj0gb3V0Lm51bUJpdHMoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBvdXQuZ2V0KGluZGV4KTsKK30KKwor
aW5saW5lIGJvb2wgb3BlcmFuZElzTGl2ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgRmFz
dEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK3sKKyAgICByZXR1cm4gb3BlcmFuZElzQWx3
YXlzTGl2ZShjb2RlQmxvY2ssIG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZl
SXNMaXZlKGNvZGVCbG9jaywgb3V0LCBvcGVyYW5kKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU5
MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTQsNiArMzU0LDI3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX25lZWRzQWN0aXZhdGlvbjsKICAgICB9CisgICAgCisgICAgdW5zaWduZWQgY2FwdHVy
ZUNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghc3ltYm9sVGFibGUoKSkKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNv
dW50KCk7CisgICAgfQorICAgIAorICAgIGludCBjYXB0dXJlU3RhcnQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKTsKKyAgICB9CisgICAgCisg
ICAgaW50IGNhcHR1cmVFbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFzeW1ib2xUYWJs
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZSgp
LT5jYXB0dXJlRW5kKCk7CisgICAgfQogCiAgICAgYm9vbCBpc0NhcHR1cmVkKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBJbmxpbmVDYWxsRnJhbWUqID0gMCkgY29uc3Q7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCShyZXZpc2lv
biAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIElubGluZUNhbGxGcmFt
ZTo6ZHVtcEluQ29udGV4dChQcmluCiAgICAgZWxzZQogICAgICAgICBvdXQucHJpbnQoIiwga25v
d24gY2FsbGVlOiAiLCBpbkNvbnRleHQoY2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKSwgY29udGV4
dCkpOwogICAgIG91dC5wcmludCgiLCBudW1BcmdzK3RoaXMgPSAiLCBhcmd1bWVudHMuc2l6ZSgp
KTsKLSAgICBvdXQucHJpbnQoIiwgc3RhY2sgPj0gciIsIHN0YWNrT2Zmc2V0KTsKKyAgICBvdXQu
cHJpbnQoIiwgc3RhY2sgPCBsb2MiLCBWaXJ0dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQpLnRvTG9j
YWwoKSk7CiAgICAgb3V0LnByaW50KCI+Iik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVu
ZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgRnVsbEJ5dGVjb2RlTGl2ZW5lc3NfaAorI2RlZmluZSBGdWxsQnl0ZWNvZGVMaXZlbmVzc19o
CisKKyNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworCit0eXBlZGVmIEhhc2hNYXA8dW5zaWdu
ZWQsIEZhc3RCaXRWZWN0b3IsIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+ID4gQnl0ZWNvZGVUb0JpdG1hcE1hcDsKKwor
Y2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MgeworcHVibGljOgorICAgIEZ1bGxCeXRlY29kZUxp
dmVuZXNzKCkgOiBtX2NvZGVCbG9jaygwKSB7IH0KKyAgICAKKyAgICAvLyBXZSBzYXkgIm91dCIg
dG8gcmVmZXIgdG8gdGhlIGJpdHZlY3RvciB0aGF0IGNvbnRhaW5zIHJhdyByZXN1bHRzIGZvciBh
IGJ5dGVjb2RlCisgICAgLy8gaW5zdHJ1Y3Rpb24uCisgICAgY29uc3QgRmFzdEJpdFZlY3RvciYg
Z2V0T3V0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBCeXRl
Y29kZVRvQml0bWFwTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChieXRlY29k
ZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9tYXAuZW5kKCkpOworICAgICAgICBy
ZXR1cm4gaXRlci0+dmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmFuZElzTGl2ZShp
bnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG1fY29kZUJsb2NrLCBvcGVyYW5kKSB8fCBvcGVy
YW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShtX2NvZGVCbG9jaywgZ2V0T3V0KGJ5dGVjb2Rl
SW5kZXgpLCBvcGVyYW5kKTsKKyAgICB9CisgICAgCisgICAgRmFzdEJpdFZlY3RvciBnZXRMaXZl
bmVzcyh1bnNpZ25lZCBieXRlY29kZUluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdldExpdmVuZXNzSW5mbyhtX2NvZGVCbG9jaywgZ2V0T3V0KGJ5dGVjb2RlSW5kZXgpKTsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM7CisgICAgCisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBCeXRlY29kZVRv
Qml0bWFwTWFwIG1fbWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBG
dWxsQnl0ZWNvZGVMaXZlbmVzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXZhaWxhYmlsaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQXZhaWxhYmlsaXR5LmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCit2b2lkIEF2YWlsYWJpbGl0eTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChtX2ZsdXNoZWRBdCwgIi8iKTsKKyAgICAKKyAgICBp
ZiAobm9kZUlzVW5kZWNpZGVkKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJVbmRlY2lkZWQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAobm9kZUlzVW5hdmFpbGFibGUo
KSkgeworICAgICAgICBvdXQucHJpbnQoIlVuYXZhaWxhYmxlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgb3V0LnByaW50KG5vZGUoKSk7Cit9CisKK3ZvaWQgQXZhaWxhYmls
aXR5OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KikgY29uc3QK
K3sKKyAgICBkdW1wKG91dCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F2YWlsYWJpbGl0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXZhaWxhYmlsaXR5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHQXZhaWxhYmlsaXR5X2gKKyNkZWZpbmUgREZHQXZhaWxhYmlsaXR5X2gKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRmx1c2hlZEF0LmgiCisjaW5jbHVkZSAiREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
c3RydWN0IE5vZGU7CisKK2NsYXNzIEF2YWlsYWJpbGl0eSB7CitwdWJsaWM6CisgICAgQXZhaWxh
YmlsaXR5KCkKKyAgICAgICAgOiBtX25vZGUoMCkKKyAgICAgICAgLCBtX2ZsdXNoZWRBdChEZWFk
Rmx1c2gpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBBdmFpbGFiaWxpdHkoTm9k
ZSogbm9kZSkKKyAgICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAgICAgLCBtX2ZsdXNoZWRBdChD
b25mbGljdGluZ0ZsdXNoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgQXZhaWxh
YmlsaXR5KEZsdXNoZWRBdCBmbHVzaGVkQXQpCisgICAgICAgIDogbV9ub2RlKHVuYXZhaWxhYmxl
TWFya2VyKCkpCisgICAgICAgICwgbV9mbHVzaGVkQXQoZmx1c2hlZEF0KQorICAgIHsKKyAgICB9
CisgICAgCisgICAgQXZhaWxhYmlsaXR5KE5vZGUqIG5vZGUsIEZsdXNoZWRBdCBmbHVzaGVkQXQp
CisgICAgICAgIDogbV9ub2RlKG5vZGUpCisgICAgICAgICwgbV9mbHVzaGVkQXQoZmx1c2hlZEF0
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEF2YWlsYWJpbGl0eSB1bmF2YWlsYWJs
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQXZhaWxhYmlsaXR5KHVuYXZhaWxhYmxlTWFya2Vy
KCksIEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CisgICAgfQorICAgIAorICAgIEF2YWls
YWJpbGl0eSB3aXRoRmx1c2goRmx1c2hlZEF0IGZsdXNoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIEF2YWlsYWJpbGl0eShtX25vZGUsIGZsdXNoKTsKKyAgICB9CisgICAgCisgICAgQXZh
aWxhYmlsaXR5IHdpdGhOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gQXZhaWxhYmlsaXR5KG5vZGUsIG1fZmx1c2hlZEF0KTsKKyAgICB9CisgICAgCisgICAgQXZh
aWxhYmlsaXR5IHdpdGhVbmF2YWlsYWJsZU5vZGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHdpdGhOb2RlKHVuYXZhaWxhYmxlTWFya2VyKCkpOworICAgIH0KKyAgICAKKyAgICBib29s
IG5vZGVJc1VuZGVjaWRlZCgpIGNvbnN0IHsgcmV0dXJuICFtX25vZGU7IH0KKyAgICBib29sIG5v
ZGVJc1VuYXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlID09IHVuYXZhaWxhYmxlTWFy
a2VyKCk7IH0KKyAgICAKKyAgICBib29sIGhhc05vZGUoKSBjb25zdCB7IHJldHVybiAhbm9kZUlz
VW5kZWNpZGVkKCkgJiYgIW5vZGVJc1VuYXZhaWxhYmxlKCk7IH0KKyAgICAKKyAgICBOb2RlKiBu
b2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghbm9kZUlzVW5kZWNpZGVkKCkpOwor
ICAgICAgICBBU1NFUlQoIW5vZGVJc1VuYXZhaWxhYmxlKCkpOworICAgICAgICByZXR1cm4gbV9u
b2RlOworICAgIH0KKyAgICAKKyAgICBGbHVzaGVkQXQgZmx1c2hlZEF0KCkgY29uc3QgeyByZXR1
cm4gbV9mbHVzaGVkQXQ7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuIG5vZGVJc1VuYXZhaWxhYmxlKCkgJiYgZmx1c2hlZEF0KCkuZm9ybWF0KCkgPT0gQ29uZmxp
Y3RpbmdGbHVzaDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF2YWlsYWJpbGl0eSYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ub2RlID09IG90aGVyLm1fbm9k
ZQorICAgICAgICAgICAgJiYgbV9mbHVzaGVkQXQgPT0gb3RoZXIubV9mbHVzaGVkQXQ7CisgICAg
fQorICAgIAorICAgIEF2YWlsYWJpbGl0eSBtZXJnZShjb25zdCBBdmFpbGFiaWxpdHkmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eSgKKyAgICAgICAgICAg
IG1lcmdlTm9kZXMobV9ub2RlLCBvdGhlci5tX25vZGUpLAorICAgICAgICAgICAgbV9mbHVzaGVk
QXQubWVyZ2Uob3RoZXIubV9mbHVzaGVkQXQpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiwgRHVtcENvbnRleHQqKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgTm9kZSogbWVy
Z2VOb2RlcyhOb2RlKiBhLCBOb2RlKiBiKQorICAgIHsKKyAgICAgICAgaWYgKCFhKQorICAgICAg
ICAgICAgcmV0dXJuIGI7CisgICAgICAgIGlmICghYikKKyAgICAgICAgICAgIHJldHVybiBhOwor
ICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgIHJldHVy
biB1bmF2YWlsYWJsZU1hcmtlcigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgTm9kZSogdW5h
dmFpbGFibGVNYXJrZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxOb2Rl
Kj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEpKTsKKyAgICB9CisgICAgCisgICAgTm9kZSogbV9u
b2RlOworICAgIEZsdXNoZWRBdCBtX2ZsdXNoZWRBdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQXZh
aWxhYmlsaXR5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAiREZH
QXZhaWxhYmlsaXR5LmgiCiAjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiREZHRmx1c2hlZEF0LmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgpAQCAtMTQwLDggKzE0MSw4
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICBzdHJ1Y3Qg
U1NBRGF0YSB7CiAgICAgICAgIE9wZXJhbmRzPEZsdXNoZWRBdD4gZmx1c2hBdEhlYWQ7CiAgICAg
ICAgIE9wZXJhbmRzPEZsdXNoZWRBdD4gZmx1c2hBdFRhaWw7Ci0gICAgICAgIE9wZXJhbmRzPE5v
ZGUqPiBhdmFpbGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgIE9wZXJhbmRzPE5vZGUqPiBhdmFpbGFi
aWxpdHlBdFRhaWw7CisgICAgICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5
QXRIZWFkOworICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGF2YWlsYWJpbGl0eUF0VGFp
bDsKICAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKICAgICAgICAgSGFzaFNldDxO
b2RlKj4gbGl2ZUF0VGFpbDsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4g
dmFsdWVzQXRIZWFkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDczLDYg
KzMwNzMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBOb2RlKiBiYXNlID0gY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKGdsb2JhbE9iamVj
dCwgc3RhdHVzLnN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKKyAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7
CiAgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IHN0YXR1cy5zcGVj
aWZpY1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0
KSwgY2VsbENvbnN0YW50KHNwZWNpZmljVmFsdWUuYXNDZWxsKCkpKTsKICAgICAgICAgICAgICAg
ICBlbHNlCkBAIC0zMDgxLDYgKzMwODIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoK
ICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29w
ZSkpKTsKICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWVudHJ5
LmNvdWxkQmVXYXRjaGVkKCkgfHwgIW1fZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQo
ZW50cnkud2F0Y2hwb2ludFNldCgpKSkgewogICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGRzdCksIGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCks
IE9wSW5mbyhwcmVkaWN0aW9uKSkpOwpAQCAtMzEzMSw2ICszMTMzLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IGNlbGxDb25z
dGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1cy5vbGRTdHJ1Y3R1cmUo
KSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lz
dGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlk
ZW50aWZpZXJOdW1iZXIsIHN0YXRpY19jYXN0PFByb3BlcnR5T2Zmc2V0PihvcGVyYW5kKSwgZ2V0
KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKICAgICAgICAgICAgICAgICAvLyBLZWVwIHNjb3Bl
IGFsaXZlIHVudGlsIGFmdGVyIHB1dC4KICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50
b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CkBAIC0zMTM4LDYgKzMxNDEsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRv
bSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBTeW1ib2xU
YWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQodWlkKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWVudHJ5LmNvdWxkQmVXYXRjaGVkKCkgfHwgIW1fZ3Jh
cGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoZW50cnkud2F0Y2hwb2ludFNldCgpKSk7CiAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwg
Z2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBEaXNhc3Nl
bWJsZXI6OkRpc2Fzc2VtYmxlcihHcmFwaCYgZ3JhcGgpCiAgICAgOiBtX2dyYXBoKGdyYXBoKQog
eworICAgIG1fZHVtcENvbnRleHQuZ3JhcGggPSAmbV9ncmFwaDsKICAgICBtX2xhYmVsRm9yQmxv
Y2tJbmRleC5yZXNpemUoZ3JhcGgubnVtQmxvY2tzKCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAkocmV2aXNpb24gMTU5MzUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDYgKzU2LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIEZsdQogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CiAgICAgICAgIG91dC5wcmludCgiRmx1
c2hlZEpTVmFsdWUiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVz
aDoKKyAgICAgICAgb3V0LnByaW50KCJDb25mbGljdGluZ0ZsdXNoIik7CisgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHJldmlzaW9uIDE1OTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNyArNDUsOCBAQCBlbnVtIEZsdXNoRm9ybWF0IHsKICAgICBGbHVzaGVk
RG91YmxlLAogICAgIEZsdXNoZWRDZWxsLAogICAgIEZsdXNoZWRCb29sZWFuLAotICAgIEZsdXNo
ZWRKU1ZhbHVlCisgICAgRmx1c2hlZEpTVmFsdWUsCisgICAgQ29uZmxpY3RpbmdGbHVzaAogfTsK
IAogaW5saW5lIE5vZGVGbGFncyByZXN1bHRGb3IoRmx1c2hGb3JtYXQgZm9ybWF0KQpAQCAtNTQs
NiArNTUsNyBAQCBpbmxpbmUgTm9kZUZsYWdzIHJlc3VsdEZvcihGbHVzaEZvcm1hdCBmCiAgICAg
Y2FzZSBEZWFkRmx1c2g6CiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAgICBjYXNlIEZsdXNo
ZWRDZWxsOgorICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKICAgICAgICAgcmV0dXJuIE5vZGVS
ZXN1bHRKUzsKICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKICAgICAgICAgcmV0dXJuIE5vZGVSZXN1
bHRJbnQzMjsKQEAgLTczLDYgKzc1LDcgQEAgaW5saW5lIFVzZUtpbmQgdXNlS2luZEZvcihGbHVz
aEZvcm1hdCBmbwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBEZWFkRmx1c2g6CiAg
ICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAg
ICAgIHJldHVybiBVbnR5cGVkVXNlOwogICAgIGNhc2UgRmx1c2hlZENlbGw6CiAgICAgICAgIHJl
dHVybiBDZWxsVXNlOwpAQCAtOTMsNiArOTYsNyBAQCBpbmxpbmUgRGF0YUZvcm1hdCBkYXRhRm9y
bWF0Rm9yKEZsdXNoRm9yCiB7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIERlYWRG
bHVzaDoKKyAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAgICAgIHJldHVybiBEYXRhRm9y
bWF0RGVhZDsKICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICByZXR1cm4gRGF0YUZv
cm1hdEpTOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmNw
cAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVz
aGVkQXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBGbHVzaGVkQXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKLSAgICBpZiAobV9mb3JtYXQgPT0gRGVhZEZsdXNoKQorICAgIGlmIChtX2Zv
cm1hdCA9PSBEZWFkRmx1c2ggfHwgbV9mb3JtYXQgPT0gQ29uZmxpY3RpbmdGbHVzaCkKICAgICAg
ICAgb3V0LnByaW50KG1fZm9ybWF0KTsKICAgICBlbHNlCiAgICAgICAgIG91dC5wcmludCgiciIs
IG1fdmlydHVhbFJlZ2lzdGVyLCAiOiIsIG1fZm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaGVkQXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiAr
NDIsMTIgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCisgICAgZXhwbGljaXQgRmx1c2hl
ZEF0KEZsdXNoRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgOiBtX2Zvcm1hdChmb3JtYXQpCisgICAg
eworICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERlYWRGbHVzaCB8fCBmb3JtYXQgPT0gQ29uZmxp
Y3RpbmdGbHVzaCk7CisgICAgfQorICAgIAogICAgIEZsdXNoZWRBdChGbHVzaEZvcm1hdCBmb3Jt
YXQsIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgIDogbV9mb3JtYXQo
Zm9ybWF0KQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlcikKQEAg
LTY1LDYgKzcxLDE3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
Rmx1c2hlZEF0JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KICAg
ICAKKyAgICBGbHVzaGVkQXQgbWVyZ2UoY29uc3QgRmx1c2hlZEF0JiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICghKnRoaXMpCisgICAgICAgICAgICByZXR1cm4gb3RoZXI7CisgICAg
ICAgIGlmICghb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIGlmICgq
dGhpcyA9PSBvdGhlcikKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgcmV0dXJu
IEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDEzIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKIAorI2luY2x1ZGUgIkJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIK
ICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJT
ZXQuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nl
c3NEYXRhRHVtcC5oIgorI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNzLmgiCiAjaW5jbHVk
ZSAiRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5o
IgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKQEAgLTM5Myw2ICszOTUsNyBAQCB2b2lkIEdyYXBo
OjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KQogewogICAgIER1bXBDb250ZXh0IG15Q29u
dGV4dDsKKyAgICBteUNvbnRleHQuZ3JhcGggPSB0aGlzOwogICAgIGlmICghY29udGV4dCkKICAg
ICAgICAgY29udGV4dCA9ICZteUNvbnRleHQ7CiAgICAgCkBAIC02NDMsNiArNjQ2LDU5IEBAIHZv
aWQgR3JhcGg6OmluaXRpYWxpemVOb2RlT3duZXJzKCkKICAgICAgICAgICAgIGJsb2NrLT5hdChu
b2RlSW5kZXgpLT5taXNjLm93bmVyID0gYmxvY2s7CiAgICAgfQogfQorCitGdWxsQnl0ZWNvZGVM
aXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAg
IEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNz
Pj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwor
ICAgIGlmIChpdGVyICE9IG1fYnl0ZWNvZGVMaXZlbmVzcy5lbmQoKSkKKyAgICAgICAgcmV0dXJu
ICppdGVyLT52YWx1ZTsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2
ZW5lc3M+IGxpdmVuZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4o
KTsKKyAgICBjb2RlQmxvY2stPmxpdmVuZXNzQW5hbHlzaXMoKS5jb21wdXRlRnVsbExpdmVuZXNz
KCpsaXZlbmVzcyk7CisgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIHJlc3VsdCA9ICpsaXZlbmVz
czsKKyAgICBtX2J5dGVjb2RlTGl2ZW5lc3MuYWRkKGNvZGVCbG9jaywgc3RkOjptb3ZlKGxpdmVu
ZXNzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdy
YXBoOjpsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKK3sKKyAg
ICByZXR1cm4gbGl2ZW5lc3NGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1l
KSk7Cit9CisKK2Jvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAg
IGlmIChvcGVyYW5kLm9mZnNldCgpIDwgY29kZU9yaWdpbi5zdGFja09mZnNldCgpICsgSlNTdGFj
azo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyA9IFZpcnR1YWxSZWdpc3RlcigKKyAgICAgICAgICAgICAgICBvcGVyYW5kLm9mZnNldCgpIC0g
Y29kZU9yaWdpbi5zdGFja09mZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KHJlZy5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVnLm9mZnNldCgpID49
IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocmVnLm9m
ZnNldCgpID09IEpTU3RhY2s6OkNhbGxlZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgaWYgKHJlZy5vZmZzZXQoKSA9PSBKU1N0YWNrOjpTY29wZUNo
YWluKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiBsaXZlbmVzc0Zvcihjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkub3BlcmFuZElzTGl2ZSgKKyAgICAgICAgICAgICAgICByZWcub2Zmc2V0KCksIGNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICgh
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgICAgIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVy
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KICAgICAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2
aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MTYsNiArNDE2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGV4ZWN1dGFibGVGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KICAgICAK
KyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCisgICAg
ICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrOworICAgICAgICByZXR1cm4gYmFzZWxpbmVD
b2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICB9CisgICAg
CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb25zdCBDb2RlT3JpZ2luJiBj
b2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3Jp
Z2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgbV9wcm9maWxlZEJsb2NrKTsKQEAg
LTc3Niw2ICs3ODMsMTAgQEAgcHVibGljOgogICAgIERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hw
b2ludHMoKSB7IHJldHVybiBtX3BsYW4ud2F0Y2hwb2ludHM7IH0KICAgICBEZXNpcmVkU3RydWN0
dXJlQ2hhaW5zJiBjaGFpbnMoKSB7IHJldHVybiBtX3BsYW4uY2hhaW5zOyB9CiAgICAgCisgICAg
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9jayopOworICAgIEZ1bGxC
eXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUqKTsKKyAgICBib29s
IGlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyLCBDb2RlT3JpZ2luKTsKKyAgICAKICAg
ICBWTSYgbV92bTsKICAgICBQbGFuJiBtX3BsYW47CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9j
azsKQEAgLTc5Nyw2ICs4MDgsNyBAQCBwdWJsaWM6CiAgICAgU2VnbWVudGVkVmVjdG9yPFN3aXRj
aERhdGEsIDQ+IG1fc3dpdGNoRGF0YTsKICAgICBWZWN0b3I8SW5saW5lVmFyaWFibGVEYXRhLCA0
PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBPd25QdHI8SW5saW5lQ2FsbEZyYW1lU2V0PiBt
X2lubGluZUNhbGxGcmFtZXM7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9w
dHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9vbCBt
X2hhc0FyZ3VtZW50czsKICAgICBIYXNoU2V0PEV4ZWN1dGFibGVCYXNlKj4gbV9leGVjdXRhYmxl
c1dob3NlQXJndW1lbnRzRXNjYXBlZDsKICAgICBCaXRWZWN0b3IgbV9sYXp5VmFyczsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDcsNzcgKzQ3LDk2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwogICAgICAgICAKLSAgICAgICAgVmVjdG9yPEJh
c2ljQmxvY2sqPiBkZXB0aEZpcnN0OwotICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhG
aXJzdE9yZGVyKGRlcHRoRmlyc3QpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBibG9j
ay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuZmlsbChBdmFpbGFiaWxpdHkoKSk7CisgICAgICAg
ICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwuZmlsbChBdmFpbGFiaWxpdHkoKSk7
CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
ZXB0aEZpcnN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IGRlcHRoRmlyc3RbaV07Ci0gICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhl
YWQuZmlsbCgwKTsKLSAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbC5m
aWxsKDApOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygwKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7CisgICAgICAgICAgICByb290
LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5hcmd1bWVudChhcmd1bWVudCkgPQorICAgICAgICAg
ICAgICAgIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKS53aXRoRmx1c2goCisgICAgICAgICAg
ICAgICAgICAgIEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoYXJndW1lbnQpKSk7CiAgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBsb2Nh
bCA9IHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLm51bWJlck9mTG9jYWxzKCk7IGxvY2Fs
LS07KQorICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubG9jYWwobG9j
YWwpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOwogICAgICAgICAKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhGaXJzdFtpXTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gV2UgZWRpdCBhdmFpbGFiaWxpdHlBdFRhaWwgaW4tcGxhY2UsIGJ1dCBmaXJz
dCBpbml0aWFsaXplIGl0IHRvCi0gICAgICAgICAgICAvLyBhdmFpbGFiaWxpdHlBdEhlYWQuCi0g
ICAgICAgICAgICBPcGVyYW5kczxOb2RlKj4mIGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2
YWlsYWJpbGl0eUF0VGFpbDsKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2Et
PmF2YWlsYWJpbGl0eUF0SGVhZDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRl
eCkgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIFNldExvY2FsOgotICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKLSAgICAgICAgICAg
ICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICAgICAgICAgICAgICBhdmFpbGFi
aWxpdHkub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSAwOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJndW1lbnQ6IHsKLSAgICAgICAgICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2RlOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0g
RlRMRm9yT1NSRW50cnlNb2RlKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0g
bV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyBsb2NhbC0tOykg
eworICAgICAgICAgICAgICAgIHJvb3QtPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmxvY2FsKGxv
Y2FsKSA9CisgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKS53
aXRoRmx1c2goCisgICAgICAgICAgICAgICAgICAgICAgICBGbHVzaGVkQXQoRmx1c2hlZEpTVmFs
dWUsIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGxvY2FsKSkpOwogICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIG1hZGUgbW9yZSBlZmZp
Y2llbnQgYnkgcHJvY2Vzc2luZyBibG9ja3MgaW4gcmV2ZXJzZSBwb3N0b3JkZXIuCisgICAgICAg
IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gYXZhaWxhYmlsaXR5OworICAgICAgICBib29sIGNoYW5n
ZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMo
KTsgai0tOykgewotICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2Nr
LT5zdWNjZXNzb3Ioaik7Ci0gICAgICAgICAgICAgICAgT3BlcmFuZHM8Tm9kZSo+JiBzdWNjZXNz
b3JBdmFpbGFiaWxpdHkgPSBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOwotICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IGF2YWlsYWJpbGl0eS5zaXplKCk7IGstLTsp
IHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogbXlOb2RlID0gYXZhaWxhYmlsaXR5W2tdOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIW15Tm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFzdWNjZXNzb3ItPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhteU5vZGUpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBtYXkgb3ZlcndyaXRlIGF2YWlsYWJpbGl0eSB3
aXRoIGEgYm9ndXMgbm9kZQotICAgICAgICAgICAgICAgICAgICAvLyBhdCBtZXJnZSBwb2ludHMu
IFRoaXMgaXMgZmluZSwgc2luY2UgbWVyZ2UgcG9pbnRzIGhhdmUKLSAgICAgICAgICAgICAgICAg
ICAgLy8gTW92SGludChQaGkpJ3MgdG8gd29yayBhcm91bmQgdGhpcy4gVGhlIG91dGNvbWUgb2Yg
dGhpcyBpcwotICAgICAgICAgICAgICAgICAgICAvLyB5b3UgbWlnaHQgaGF2ZSBhIHByb2dyYW0g
aW4gd2hpY2ggYSBub2RlIGhhcHBlbnMgdG8gcmVtYWluCi0gICAgICAgICAgICAgICAgICAgIC8v
IGxpdmUgaW50byBzb21lIGJsb2NrIEIsIGFuZCBzZXBhcmF0ZWx5IChkdWUgdG8gY29weQotICAg
ICAgICAgICAgICAgICAgICAvLyBwcm9wYWdhdGlvbikganVzdCBvbmUgb2YgdGhlIHByZWRlY2Vz
c29ycyBvZiBCIGlzc3VlZCBhCi0gICAgICAgICAgICAgICAgICAgIC8vIE1vdkhpbnQgcHV0dGlu
ZyB0aGF0IG5vZGUgaW50byBzb21lIGxvY2FsLiBUaGVuIGluIEIgd2UgbWlnaHQKLSAgICAgICAg
ICAgICAgICAgICAgLy8gdGhpbmsgdGhhdCB0aGF0IG5vZGUgaXMgYSB2YWxpZCB2YWx1ZSBmb3Ig
dGhhdCBsb2NhbC4gT2YKLSAgICAgICAgICAgICAgICAgICAgLy8gY291cnNlIGlmIHRoYXQgbG9j
YWwgd2FzIGFjdHVhbGx5IGxpdmUgaW4gQiwgQiB3b3VsZCBoYXZlIGEKLSAgICAgICAgICAgICAg
ICAgICAgLy8gUGhpIGZvciBpdC4gU28gZXNzZW50aWFsbHkgd2UnbGwgaGF2ZSBPU1IgZXhpdCBk
cm9wcGluZyB0aGlzCi0gICAgICAgICAgICAgICAgICAgIC8vIG5vZGUncyB2YWx1ZSBpbnRvIHRo
ZSBsb2NhbCB3aGVuIHdlIG90aGVyd2lzZSAoaW4gdGhlIERGRykKLSAgICAgICAgICAgICAgICAg
ICAgLy8gd291bGQgaGF2ZSBkcm9wcGVkIHVuZGVmaW5lZCBpbnRvIHRoZSBsb2NhbC4gVGhpcyBz
ZWVtcwotICAgICAgICAgICAgICAgICAgICAvLyBoYXJtbGVzcy4KLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NvckF2YWlsYWJpbGl0eVtrXSA9IG15Tm9k
ZTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5h
dmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25v
ZGVJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5v
ZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewor
ICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxh
YmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCB2YXJpYWJsZS0+Zmx1
c2hlZEF0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBj
YXNlIEdldEFyZ3VtZW50OiB7CisgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLCB2YXJpYWJsZS0+
Zmx1c2hlZEF0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNr
OiB7CisgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
dmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWls
YWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFp
bGFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIChhdmFpbGFiaWxpdHkgPT0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwgPSBhdmFpbGFiaWxpdHk7CisgICAg
ICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNjZXNzb3Jz
KCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOworICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhdmFpbGFiaWxpdHkuc2l6ZSgpOyBpLS07KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkW2ldID0gYXZhaWxhYmlsaXR5W2ldLm1lcmdlKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0pOworICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9Cisg
ICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDE1OTM1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAogY2xhc3MgR3JhcGg7CiAKLS8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNz
YS0+YXZhaWxhYmlsdGl5QXRIZWFkL1RhaWwuIFRoaXMgcmVsaWVzIG9uIGxpdmVuZXNzCi0vLyBh
bmFseXNpcyBwaGFzZSBoYXZpbmcgYmVlbiBydW4gYW5kIHRoZSBncmFwaCBub3QgaGF2aW5nIGJl
ZW4gdHJhbnNmb3JtZWQKLS8vIGFmdGVyIHRoYXQuCisvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpz
c2EtPmF2YWlsYWJpbHRpeUF0SGVhZC9UYWlsLiBUaGlzIGlzIGEgZm9yd2FyZCBmbG93IHR5cGUg
aW5mZXJlbmNlCisvLyBvdmVyIE1vdkhpbnRzIGFuZCBTZXRMb2NhbHMuCiAKIGJvb2wgcGVyZm9y
bU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKEdyYXBoJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAog
I2luY2x1ZGUgIkRGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhh
c2UuaCIKICNpbmNsdWRlICJERkdTU0FDb252ZXJzaW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdT
dGFja0xheW91dFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5oIgpAQCAtMjY4LDYgKzI2OSw4IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21w
aWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUxJQ00oZGZnKTsKICAgICAgICAgcGVyZm9ybUxpdmVu
ZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUNGQShkZmcpOworICAgICAgICBpZiAo
T3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKSkKKyAgICAgICAgICAgIHBlcmZv
cm1SZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uKGRmZyk7CiAgICAgICAgIHBlcmZvcm1EQ0UoZGZn
KTsgLy8gV2UgcmVseSBvbiB0aGlzIHRvIGNvbnZlcnQgZGVhZCBTZXRMb2NhbHMgaW50byB0aGUg
YXBwcm9wcmlhdGUgaGludCwgYW5kIHRvIGtpbGwgZGVhZCBjb2RlIHRoYXQgd29uJ3QgYmUgcmVj
b2duaXplZCBhcyBkZWFkIGJ5IExMVk0uCiAgICAgICAgIHBlcmZvcm1TdGFja0xheW91dChkZmcp
OwogICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdXJyZWN0aW9uRm9y
VmFsaWRhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdSZXN1cnJlY3Rpb25G
b3JWYWxpZGF0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUg
IkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFJl
c3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6Cisg
ICAgUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAg
OiBQaGFzZShncmFwaCwgInJlc3VycmVjdGlvbiBmb3IgdmFsaWRhdGlvbiIpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBJbnNlcnRpb25TZXQgaW5z
ZXJ0aW9uU2V0KG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXpl
KCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+aGFzUmVzdWx0KCkpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBTcGVjTm9u
ZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgRWRnZShub2RlKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwor
Ym9vbCBwZXJmb3JtUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvbihHcmFwaCYgZ3JhcGgpCit7Cisg
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBSZXN1cnJlY3Rpb24gRm9yIFZh
bGlkYXRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8UmVzdXJyZWN0aW9uRm9yVmFs
aWRhdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jlc3VycmVj
dGlvbkZvclZhbGlkYXRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2VfaAorI2RlZmluZSBERkdSZXN1cnJlY3Rp
b25Gb3JWYWxpZGF0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBQbGFjZXMgYSBQaGFu
dG9tIGFmdGVyIGV2ZXJ5IHZhbHVlLXByb2R1Y2luZyBub2RlLCB0aGVyZWJ5IGRpc2FibGluZyBE
Q0UgZnJvbSBraWxsaW5nIGl0LgorLy8gVGhpcyBpcyB1c2VmdWwgZm9yIHZhbGlkYXRpbmcgb3Vy
IE9TUiBleGl0IG1hY2hpbmVyeSBieSBpbnN0aXR1dGluZyB0aGUgcmVxdWlyZW1lbnQgdGhhdAor
Ly8gYW55IGxpdmUtaW4tYnl0ZWNvZGUgdmFyaWFibGUgc2hvdWxkIGJlIE9TUi1hdmFpbGFibGUu
IFdpdGhvdXQgdGhpcyBwaGFzZSwgaXQncyBpbXBvc3NpYmxlCisvLyB0byBtYWtlIHN1Y2ggYW4g
YXNzZXJ0aW9uIGJlY2F1c2Ugb3VyIERDRSBpcyBtb3JlIGFnZ3Jlc3NpdmUgdGhhbiB0aGUgYnl0
ZWNvZGUgbGl2ZW5lc3MKKy8vIGFuYWx5c2lzLgorCitib29sIHBlcmZvcm1SZXN1cnJlY3Rpb25G
b3JWYWxpZGF0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUmVzdXJyZWN0aW9uRm9yVmFs
aWRhdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FD
b252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTgsMTMgKzE1OCwzNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tOykgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxv
Y2stPnByZWRlY2Vzc29yc1tqXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWNl
c3Nvci0+YXBwZW5kTm9uVGVybWluYWwoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIFNwZWNOb25lLCBVcHNpbG9uLCBibG9jay0+bGFzdCgpLT5jb2RlT3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgVXBzaWxv
biwgcHJlZGVjZXNzb3ItPmxhc3QoKS0+Y29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKG5vZGUpLCBFZGdlKHByZWRlY2Vzc29yLT52YXJpYWJsZXNBdFRh
aWxbaV0sIHVzZUtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBTcGVjTm9uZSwgTW92SGlu
dCwgbm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFZGdlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2Zs
dXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIERvIG5vdGhpbmcuIEZvciBtdWx0aXBsZSByZWFzb25zLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYXNvbiAjMTog
SWYgdGhlIGxvY2FsIGlzIGZsdXNoZWQgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGJvdGhlcgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYSBNb3ZIaW50IHNpbmNlIGV2ZXJ5IHBh
dGggdG8gdGhpcyBwb2ludCBpbiB0aGUgY29kZSB3aWxsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaGF2ZSBmbHVzaGVkIHRoZSBieXRlY29kZSB2YXJpYWJsZSB1c2luZyBhIFNldExv
Y2FsIGFuZCBoZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBBdmFpbGFi
aWxpdHk6OmZsdXNoZWRBdCgpIHdpbGwgYWdyZWUsIGFuZCB0aGF0IHdpbGwgYmUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBzdWZmaWNpZW50IGZvciBmaWd1cmluZyBvdXQgaG93IHRv
IHJlY292ZXIgdGhlIHZhcmlhYmxlJ3MgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVhc29uICMyOiBJZiB3ZSBoYWQg
aW5zZXJ0ZWQgYSBNb3ZIaW50IGFuZCB0aGUgUGhpIGZ1bmN0aW9uIGhhZAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGRpZWQgKGJlY2F1c2UgdGhlIG9ubHkgdXNlciBvZiB0aGUgdmFs
dWUgd2FzIHRoZSAiZmx1c2giIC0gaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHNvbWUgYXN5bmNocm9ub3VzIHJ1bnRpbWUgdGhpbmd5KSB0aGVuIHRoZSBNb3ZIaW50IHdvdWxk
IHR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRvIGEgWm9tYmllSGludCwg
d2hpY2ggd291bGQgZm9vbCB1cyBpbnRvIHRoaW5raW5nIHRoYXQgdGhlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdmFyaWFibGUgaXMgZGVhZC4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFzb24gIzM6IElmIHdl
IGhhZCBpbnNlcnRlZCBhIE1vdkhpbnQgdGhlbiBldmVuIGlmIHRoZSBQaGkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBzdGF5ZWQgYWxpdmUsIHdlIHdvdWxkIHN0aWxsIGVuZCB1cCBn
ZW5lcmF0aW5nIGluZWZmaWNpZW50IGNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBzaW5jZSB3ZSB3b3VsZCBiZSB0ZWxsaW5nIHRoZSBPU1IgZXhpdCBjb21waWxlciB0byB1c2Ug
c29tZSBTU0EKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBmb3IgdGhlIGJ5
dGVjb2RlIHZhcmlhYmxlIHJhdGhlciB0aGFuIGp1c3QgdGVsbGluZyBpdCB0aGF0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHZhbHVlIHdhcyBhbHJlYWR5IG9uIHRoZSBzdGFj
ay4KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPmNvZGVPcmlnaW4sIE9wSW5m
byh2YXJpYWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUs
NiArMTQ1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAg
ICAgICAgY2FzZSBEZWFkRmx1c2g6CisgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKICAg
ICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwogICAgICAgICBjYXNl
IEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKFZhbHVlSW5K
U1N0YWNrLCB3aGVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgREZHVmFyaWFibGVBY2Nlc3NEYXRhX2gKICNkZWZpbmUg
REZHVmFyaWFibGVBY2Nlc3NEYXRhX2gKIAorI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1
ZGUgIkRGR0RvdWJsZUZvcm1hdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHRmx1c2hGb3JtYXQuaCIK
ICNpbmNsdWRlICJERkdGbHVzaGVkQXQuaCIKQEAgLTM5LDYgKzQwLDggQEAKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitzdHJ1Y3QgTm9kZTsKKwogZW51bSBEb3VibGVCYWxs
b3QgeyBWb3RlVmFsdWUsIFZvdGVEb3VibGUgfTsKIAogY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRh
IDogcHVibGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgsMTYgKzQ4LDE2IEBAIHZvaWQgRXhpdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50
U3RyZWEKICAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCgiLCBpbkNvbnRleHQoY29uc3RhbnQo
KSwgY29udGV4dCksICIpIik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEV4aXRWYWx1ZUlu
SlNTdGFjazoKLSAgICAgICAgb3V0LnByaW50KCJJbkpTU3RhY2siKTsKKyAgICAgICAgb3V0LnBy
aW50KCJJbkpTU3RhY2s6ciIsIHZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKLSAgICAgICAgb3V0LnByaW50KCJJ
bkpTU3RhY2tBc0ludDMyIik7CisgICAgICAgIG91dC5wcmludCgiSW5KU1N0YWNrQXNJbnQzMjpy
IiwgdmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBFeGl0VmFs
dWVJbkpTU3RhY2tBc0ludDUyOgotICAgICAgICBvdXQucHJpbnQoIkluSlNTdGFja0FzSW50NTIi
KTsKKyAgICAgICAgb3V0LnByaW50KCJJbkpTU3RhY2tBc0ludDUyOnIiLCB2aXJ0dWFsUmVnaXN0
ZXIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91
YmxlOgotICAgICAgICBvdXQucHJpbnQoIkluSlNTdGFja0FzRG91YmxlIik7CisgICAgICAgIG91
dC5wcmludCgiSW5KU1N0YWNrQXNEb3VibGU6ciIsIHZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIHNp
emVfdCBzaXplT2ZHZXRCeUlkKCkKIHsKLSAgICByZXR1cm4gMjk7CisgICAgcmV0dXJuIDMwOwog
fQogCiBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvY2F0aW9uLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcg
QEAgR1BSUmVnIExvY2F0aW9uOjpncHIoKSBjb25zdAogICAgIC8vIGZvciBleGFtcGxlLCB0aGUg
YXJjaGl0ZWN0dXJlIGVuY29kZXMgQ1ggYXMgMSBhbmQgRFggYXMgMiB3aGlsZSBEd2FyZiBkb2Vz
IHRoZQogICAgIC8vIG9wcG9zaXRlLiBIZW5jZSB3ZSBuZWVkIHRoZSBzd2l0Y2guCiAgICAgCi0g
ICAgQVNTRVJUKGludm9sdmVzR1BSKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGludm9sdmVzR1BS
KCkpOwogICAgIAogICAgIHN3aXRjaCAoZHdhcmZSZWdOdW0oKSkgewogICAgIGNhc2UgMDoKQEAg
LTEyNSw3ICsxMjUsNyBAQCBib29sIExvY2F0aW9uOjppc0ZQUigpIGNvbnN0CiAKIEZQUlJlZyBM
b2NhdGlvbjo6ZnByKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNGUFIoKSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoaXNGUFIoKSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZQUlJlZz4oZHdhcmZS
ZWdOdW0oKSAtIDE3KTsKIH0KIApAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgTG9jYXRpb246OnJl
c3RvcmVJbnRvKE1hY3JvQXNzZW1ibGUKIAogR1BSUmVnIExvY2F0aW9uOjpkaXJlY3RHUFIoKSBj
b25zdAogewotICAgIEFTU0VSVCghYWRkZW5kKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFhZGRl
bmQoKSk7CiAgICAgcmV0dXJuIGdwcigpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVlLmgi
CiAjaW5jbHVkZSAiRlRMT3V0cHV0LmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCi0jaW5jbHVk
ZSAiRlRMVmFsdWVTb3VyY2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAi
T3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAtNzAsNyArNjks
NyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9mdGxTdGF0ZShzdGF0ZSkKICAgICAgICAgLCBtX2hl
YXBzKHN0YXRlLmNvbnRleHQpCiAgICAgICAgICwgbV9vdXQoc3RhdGUuY29udGV4dCkKLSAgICAg
ICAgLCBtX3ZhbHVlU291cmNlcyhPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9hdmFpbGFiaWxpdHkoT3BlcmFuZHNMaWtlLCBz
dGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fc3RhdGUo
c3RhdGUuZ3JhcGgpCiAgICAgICAgICwgbV9pbnRlcnByZXRlcihzdGF0ZS5ncmFwaCwgbV9zdGF0
ZSkKICAgICAgICAgLCBtX3N0YWNrbWFwSURzKDApCkBAIC0yMDQsOCArMjAzLDYgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIGluaXRpYWxpemVPU1JFeGl0U3RhdGVGb3JCbG9jaygpOwog
ICAgICAgICAKLSAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZDsKLSAgICAg
ICAgCiAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2lj
QmxvY2sobV9oaWdoQmxvY2spOwogICAgICAgICAKQEAgLTQ3NSwxMiArNDcyLDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAo
bV9ub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJ
TERSRU4obV9ncmFwaCwgbV9ub2RlLCB1c2UpOwotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9k
ZS0+YWRqdXN0ZWRSZWZDb3VudCgpKQotICAgICAgICAgICAgbV9saXZlLmFkZChtX25vZGUpOwot
ICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEV4ZWN1dGVFZmZlY3RzKQogICAgICAgICAgICAg
bV9pbnRlcnByZXRlci5leGVjdXRlRWZmZWN0cyhub2RlSW5kZXgpOwogICAgICAgICAKQEAgLTYx
OSwzNiArNjEwLDMxIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6IHsK
ICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5t
YWNoaW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywgdmFyaWFibGUtPm1h
Y2hpbmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOiB7CiAg
ICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrLCB2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjogewog
ICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICBtX291dC5zdG9yZTMyKHZhbHVlLCBwYXlsb2FkRm9yKHZhcmlhYmxlLT5tYWNo
aW5lTG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjaywgdmFyaWFibGUtPm1hY2hp
bmVMb2NhbCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6IHsKICAgICAg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpID0gVmFsdWVTb3VyY2UoSW50NTJJbkpTU3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9j
YWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6IHsKICAgICAgICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBt
X291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkp
OwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaywgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKTsK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjogewpAQCAtNjU2LDE1ICs2NDIs
MTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCiAgICAgICAgICAgICAg
ICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
LAogICAgICAgICAgICAgICAgIGFkZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7
Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpOwot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBB
dmFpbGFiaWxpdHkodmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlTW92SGludCgpCkBAIC02NzUsNyArNjYxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGNvbXBpbGVab21iaWVIaW50KCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
ZGF0YSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fdmFsdWVTb3Vy
Y2VzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwor
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpID0gQXZhaWxhYmls
aXR5Ojp1bmF2YWlsYWJsZSgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVNb3ZIaW50
QW5kQ2hlY2soKQpAQCAtMTI4Nyw3ICsxMjczLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IC8vIFNlZSBhYm92ZTsgQ2VsbFVzZSBpcyBlYXNpZXIgc28gd2UgZG8gb25seSB0aGF0IGZvciBu
b3cuCiAgICAgICAgIEFTU0VSVChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNl
KTsKLQorICAgICAgICAKICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQy
KCkpOwogICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9u
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwpAQCAtMjU0NCwxMiArMjUzMCwxMiBAQCBwcml2YXRl
OgogICAgIHZvaWQgY29tcGlsZUludmFsaWRhdGlvblBvaW50KCkKICAgICB7CiAgICAgICAgIGlm
ICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAg
SW52YWxpZGF0aW9uIHBvaW50IHdpdGggdmFsdWUgc291cmNlczogIiwgbV92YWx1ZVNvdXJjZXMs
ICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3aXRo
IGF2YWlsYWJpbGl0eTogIiwgbV9hdmFpbGFiaWxpdHksICJcbiIpOwogICAgICAgICAKICAgICAg
ICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAg
ICAgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIEludmFsaWRWYWx1ZUZvcm1hdCwgTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZSgpLAogICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRh
cmdldCwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsCi0gICAgICAgICAgICBtX3ZhbHVlU291
cmNlcy5udW1iZXJPZkFyZ3VtZW50cygpLCBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkxvY2Fscygp
KSk7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2F2
YWlsYWJpbGl0eS5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxp
emVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAK
ICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0
KCk7CkBAIC0yNTU3LDcgKzI1NDMsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgRXhp
dEFyZ3VtZW50TGlzdCBhcmd1bWVudHM7CiAgICAgICAgIAotICAgICAgICBidWlsZEV4aXRBcmd1
bWVudHMoZXhpdCwgYXJndW1lbnRzLCBGb3JtYXR0ZWRWYWx1ZSgpKTsKKyAgICAgICAgYnVpbGRF
eGl0QXJndW1lbnRzKGV4aXQsIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUoKSwgZXhpdC5tX2Nv
ZGVPcmlnaW4pOwogICAgICAgICBjYWxsU3RhY2ttYXAoZXhpdCwgYXJndW1lbnRzKTsKICAgICAg
ICAgCiAgICAgICAgIGluZm8ubV9pc0ludmFsaWRhdGlvblBvaW50ID0gdHJ1ZTsKQEAgLTM4MjIs
MjUgKzM4MDgsNiBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0xpdmUoTm9kZSogbm9kZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xpdmUuY29udGFpbnMobm9kZSk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgdXNlKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChlZGdlLT5o
YXNSZXN1bHQoKSk7Ci0gICAgICAgIGlmICghZWRnZS5kb2VzS2lsbCgpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBtX2xpdmUucmVtb3ZlKGVkZ2Uubm9kZSgpKTsKLSAgICB9Ci0gICAg
Ci0gICAgLy8gV3JhcHBlciB1c2VkIG9ubHkgZm9yIERGR19OT0RFX0RPX1RPX0NISUxEUkVOCi0g
ICAgdm9pZCB1c2UoTm9kZSosIEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHVzZShlZGdlKTsK
LSAgICB9Ci0gICAgCiAgICAgTEJhc2ljQmxvY2sgbG93QmxvY2soQmFzaWNCbG9jayogYmxvY2sp
CiAgICAgewogICAgICAgICByZXR1cm4gbV9ibG9ja3MuZ2V0KGJsb2NrKTsKQEAgLTM4NDgsNDAg
KzM4MTUsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0
ZUZvckJsb2NrKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVTb3Vy
Y2VzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gbV9oaWdo
QmxvY2stPnNzYS0+Zmx1c2hBdEhlYWRbaV07Ci0gICAgICAgICAgICBzd2l0Y2ggKGZsdXNoLmZv
cm1hdCgpKSB7Ci0gICAgICAgICAgICBjYXNlIERlYWRGbHVzaDogewotICAgICAgICAgICAgICAg
IC8vIE11c3QgY29uc2lkZXIgYXZhaWxhYmxlIG5vZGVzIGluc3RlYWQuCi0gICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXTsK
LSAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShub2RlKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgRmx1c2hlZEludDMyOgotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ld
ID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2ssIGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgRmx1c2hlZEludDUyOgotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFs
dWVTb3VyY2UoSW50NTJJbkpTU3RhY2ssIGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgRmx1
c2hlZERvdWJsZToKLSAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291
cmNlKERvdWJsZUluSlNTdGFjaywgZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVk
Q2VsbDoKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICBjYXNl
IEZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFs
dWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ssIGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBtX2F2
YWlsYWJpbGl0eSA9IG1faGlnaEJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0KApAQCAtMzg4OSwxNCArMzgyMywxNCBAQCBw
cml2YXRlOgogICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRl
ZFZhbHVlIHJlY292ZXJ5KQogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCB3aXRoIHZhbHVlIHNv
dXJjZXM6ICIsIG1fdmFsdWVTb3VyY2VzLCAiXG4iKTsKLSAgICAgICAgCisgICAgICAgICAgICBk
YXRhTG9nKCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXpl
KCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIG1fYXZhaWxhYmlsaXR5LCAiXG4iKTsKKwogICAg
ICAgICBBU1NFUlQobV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSA9PSBtX2Z0bFN0
YXRlLmZpbmFsaXplci0+b3NyRXhpdC5zaXplKCkpOwogICAgICAgICAKICAgICAgICAgbV9mdGxT
dGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAga2luZCwg
bG93VmFsdWUuZm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZv
cihoaWdoVmFsdWUpLAogICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgbV9j
b2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsCi0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5udW1i
ZXJPZkFyZ3VtZW50cygpLCBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkxvY2FscygpKSk7CisgICAg
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2F2YWlsYWJpbGl0
eS5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JF
eGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAgICAg
T1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBAIC0z
OTI0LDEwICszODU4LDIzIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBFeGl0QXJndW1lbnRM
aXN0IGFyZ3VtZW50czsKICAgICAgICAgCi0gICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0
LCBhcmd1bWVudHMsIGxvd1ZhbHVlKTsKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
ZXhpdC5tX2NvZGVPcmlnaW47CiAgICAgICAgIAotICAgICAgICBpZiAoZGlyZWN0aW9uID09IEZv
cndhcmRTcGVjdWxhdGlvbikgewotICAgICAgICAgICAgQVNTRVJUKG1fbm9kZSk7CisgICAgICAg
IGlmIChkaXJlY3Rpb24gPT0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICAgICAgICAgIGJ1aWxk
RXhpdEFyZ3VtZW50cyhleGl0LCBhcmd1bWVudHMsIGxvd1ZhbHVlLCBjb2RlT3JpZ2luKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoZGlyZWN0aW9uID09IEZvcndhcmRTcGVj
dWxhdGlvbik7CisgICAgICAgICAgICBpZiAoIXJlY292ZXJ5KSB7CisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBtX25vZGVJbmRleDsgbm9kZUluZGV4IDwgbV9oaWdo
QmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG1faGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPT0gY29kZU9yaWdpbikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2lu
ID0gbm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQ7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXQsIGFyZ3VtZW50cywgbG93VmFsdWUsIGNv
ZGVPcmlnaW4pOwogICAgICAgICAgICAgZXhpdC5jb252ZXJ0VG9Gb3J3YXJkKG1faGlnaEJsb2Nr
LCBtX25vZGUsIG1fbm9kZUluZGV4LCByZWNvdmVyeSwgYXJndW1lbnRzKTsKICAgICAgICAgfQog
ICAgICAgICAKQEAgLTM5MzUsMzYgKzM4ODIsNTkgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBidWlsZEV4aXRBcmd1bWVudHMoCi0gICAgICAgIE9TUkV4aXQmIGV4aXQsIEV4aXRB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUpCisgICAgICAg
IE9TUkV4aXQmIGV4aXQsIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFs
dWUgbG93VmFsdWUsCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQobV9jYWxsRnJhbWUpOwogICAgICAgICBpZiAoISFsb3dWYWx1
ZSkKICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93VmFsdWUudmFsdWUoKSk7CiAgICAg
ICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgVmFsdWVTb3VyY2Ugc291cmNlID0gbV92YWx1ZVNvdXJj
ZXNbaV07CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3BlcmFuZEZv
ckluZGV4KGkpOworICAgICAgICAgICAgYm9vbCBpc0xpdmUgPSBtX2dyYXBoLmlzTGl2ZUluQnl0
ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBjb2RlT3JpZ2luKTsKKyAgICAgICAgICAg
IGlmICghaXNMaXZlKSB7CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRW
YWx1ZTo6ZGVhZCgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKHNvdXJjZS5raW5kKCkpIHsKLSAgICAg
ICAgICAgIGNhc2UgVmFsdWVJbkpTU3RhY2s6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVl
c1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrKHNvdXJjZS52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEludDMySW5KU1N0YWNrOgot
ICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0Fz
SW50MzIoc291cmNlLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgSW50NTJJbkpTU3RhY2s6Ci0gICAgICAgICAgICAgICAgZXhpdC5t
X3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQ1Mihzb3VyY2UudmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IG1fYXZh
aWxhYmlsaXR5W2ldOworICAgICAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5
LmZsdXNoZWRBdCgpOworICAgICAgICAgICAgc3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgeworICAg
ICAgICAgICAgY2FzZSBEZWFkRmx1c2g6CisgICAgICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1
c2g6CisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5oYXNOb2RlKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50Rm9yTm9kZShleGl0LCBhcmd1bWVudHMsIGks
IGF2YWlsYWJpbGl0eS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiRXhwZWN0ZWQgciIsIG9wZXJhbmQsICIgdG8gYmUgYXZhaWxhYmxlIGJ1dCBpdCB3
YXNuJ3QuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBERkcncyBEQ0UgcHJvdmVkIHRoYXQgdGhlIHZhbHVl
IGlzIGRlYWQgaW4gYnl0ZWNvZGUKKyAgICAgICAgICAgICAgICAvLyBldmVuIHRob3VnaCB0aGUg
Ynl0ZWNvZGUgbGl2ZW5lc3MgYW5hbHlzaXMgdGhpbmtzIGl0J3MgbGl2ZS4gVGhpcyBpcworICAg
ICAgICAgICAgICAgIC8vIGFjY2VwdGFibGUgc2luY2UgdGhlIERGRydzIERDRSBpcyBieSBkZXNp
Z24gbW9yZSBhZ2dyZXNzaXZlIHdoaWxlIHN0aWxsCisgICAgICAgICAgICAgICAgLy8gYmVpbmcg
c291bmQuCisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6ZGVh
ZCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBEb3VibGVJbkpT
U3RhY2s6Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5K
U1N0YWNrQXNEb3VibGUoc291cmNlLnZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgICAgICAgICAg
Y2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAg
ICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICAgICAgICAgIGV4aXQubV92YWx1
ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFjayhmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNvdXJjZUlzRGVhZDoKLSAg
ICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAg
ICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDMyKGZsdXNo
LnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgSGF2ZU5vZGU6Ci0gICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50Rm9yTm9kZShl
eGl0LCBhcmd1bWVudHMsIGksIHNvdXJjZS5ub2RlKCkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVl
c1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQ1MihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIo
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6CisgICAgICAgICAgICAgICAgZXhpdC5t
X3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gudmlydHVhbFJl
Z2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC0zOTkxLDUzICszOTYxLDYgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHRyeVRvU2V0
Q29uc3RhbnRFeGl0QXJndW1lbnQoZXhpdCwgaW5kZXgsIG5vZGUpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKLSAgICAgICAgaWYgKCFpc0xpdmUobm9kZSkpIHsKLSAgICAgICAgICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHBlcm1p
dHNPU1JCYWNrd2FyZFJld2lyaW5nKG5vZGUtPm9wKCkpKSB7Ci0gICAgICAgICAgICAgICAgbm9k
ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBpZiAodHJ5VG9TZXRD
b25zdGFudEV4aXRBcmd1bWVudChleGl0LCBpbmRleCwgbm9kZSkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAoaXNMaXZlKG5vZGUpKQotICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBiZXN0Tm9kZSA9
IDA7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgYmVzdFNjb3JlID0gMDsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG1f
bGl2ZS5iZWdpbigpOwotICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBl
bmQgPSBtX2xpdmUuZW5kKCk7Ci0gICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gKml0ZXI7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWNhbmRpZGF0ZS0+Y2hpbGQxKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+Y2hpbGQxKCkgIT0gbm9k
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBteVNjb3JlID0gZm9yd2FyZFJld2lyaW5nU2VsZWN0aW9uU2NvcmUoY2FuZGlk
YXRlLT5vcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG15U2NvcmUgPD0gYmVzdFNjb3Jl
KQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
IGJlc3ROb2RlID0gY2FuZGlkYXRlOwotICAgICAgICAgICAgICAgICAgICBiZXN0U2NvcmUgPSBt
eVNjb3JlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAoYmVzdE5vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzTGl2ZShi
ZXN0Tm9kZSkpOwotICAgICAgICAgICAgICAgICAgICBub2RlID0gYmVzdE5vZGU7Ci0gICAgICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAg
ICAgICBleGl0Lm1fdmFsdWVzW2luZGV4XSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgQVNTRVJUKGlzTGl2ZShub2RlKSk7Ci0KICAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1
ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KG5vZGUpOwogICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
IHsKICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBW
YWx1ZUZvcm1hdEludDMyLCB2YWx1ZS52YWx1ZSgpKTsKQEAgLTQxMTQsNyArNDAzNyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUt
PmxvY2FsKCk7CiAgICAgICAgIAotICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKG9wZXJh
bmQpID0gVmFsdWVTb3VyY2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgbV9hdmFp
bGFiaWxpdHkub3BlcmFuZChvcGVyYW5kKSA9IEF2YWlsYWJpbGl0eShub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldEludDMyKE5vZGUqIG5vZGUsIExWYWx1
ZSB2YWx1ZSkKQEAgLTQyNzIsMTEgKzQxOTUsMTAgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPE5v
ZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2Jvb2xlYW5WYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2Rl
KiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9zdG9yYWdlVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSos
IExvd2VyZWROb2RlVmFsdWU+IG1fZG91YmxlVmFsdWVzOwotICAgIEhhc2hTZXQ8Tm9kZSo+IG1f
bGl2ZTsKICAgICAKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fcGhpczsKICAgICAKLSAg
ICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gbV92YWx1ZVNvdXJjZXM7CisgICAgT3BlcmFuZHM8QXZh
aWxhYmlsaXR5PiBtX2F2YWlsYWJpbGl0eTsKICAgICAKICAgICBJblBsYWNlQWJzdHJhY3RTdGF0
ZSBtX3N0YXRlOwogICAgIEFic3RyYWN0SW50ZXJwcmV0ZXI8SW5QbGFjZUFic3RyYWN0U3RhdGU+
IG1faW50ZXJwcmV0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJ
KHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksNyBAQCBwdWJsaWM6CiAgICAgTFZhbHVl
IGludFRvUHRyKExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRUb1B0
cihtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIExWYWx1ZSBiaXRDYXN0KExWYWx1ZSB2
YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRCaXRDYXN0KG1fYnVpbGRlciwgdmFsdWUs
IHR5cGUpOyB9CiAgICAgCisgICAgTFZhbHVlIGFsbG9jYShMVHlwZSB0eXBlKSB7IHJldHVybiBi
dWlsZEFsbG9jYShtX2J1aWxkZXIsIHR5cGUpOyB9CiAgICAgTFZhbHVlIGdldChMVmFsdWUgcmVm
ZXJlbmNlKSB7IHJldHVybiBidWlsZExvYWQobV9idWlsZGVyLCByZWZlcmVuY2UpOyB9CiAgICAg
TFZhbHVlIHNldChMVmFsdWUgdmFsdWUsIExWYWx1ZSByZWZlcmVuY2UpIHsgcmV0dXJuIGJ1aWxk
U3RvcmUobV9idWlsZGVyLCB2YWx1ZSwgcmVmZXJlbmNlKTsgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHJldmlzaW9uIDE1OTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTFZhbHVl
U291cmNlLmgiCi0KLSNpZiBFTkFCTEUoRlRMX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewotCi12b2lkIFZhbHVlU291cmNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBjYXNlIFNvdXJjZU5vdFNldDoKLSAg
ICAgICAgb3V0LnByaW50KCJTb3VyY2VOb3RTZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgVmFsdWVJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmludCgiVmFsdWVJbkpTU3RhY2s6Iiwg
dmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbnQzMkluSlNT
dGFjazoKLSAgICAgICAgb3V0LnByaW50KCJJbnQzMkluSlNTdGFjazoiLCB2aXJ0dWFsUmVnaXN0
ZXIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEludDUySW5KU1N0YWNrOgotICAgICAg
ICBvdXQucHJpbnQoIkludDUySW5KU1N0YWNrOiIsIHZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgRG91YmxlSW5KU1N0YWNrOgotICAgICAgICBvdXQucHJpbnQo
IkRvdWJsZUluSlNTdGFjazoiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIFNvdXJjZUlzRGVhZDoKLSAgICAgICAgb3V0LnByaW50KCJTb3VyY2VJc0RlYWQi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSGF2ZU5vZGU6Ci0gICAgICAgIG91dC5wcmlu
dCgiTm9kZSgiLCBub2RlKCksICIpIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBWYWx1ZVNvdXJjZTo6
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCopIGNvbnN0Ci17Ci0g
ICAgZHVtcChvdXQpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExW
YWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
VmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExWYWx1ZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRlRM
VmFsdWVTb3VyY2VfaAotI2RlZmluZSBGVExWYWx1ZVNvdXJjZV9oCi0KLSNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KLQotI2lmIEVOQUJMRShGVExfSklUKQotCi0jaW5jbHVkZSAiREZHTm9kZS5o
IgotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi1lbnVtIFZhbHVlU291
cmNlS2luZCB7Ci0gICAgU291cmNlTm90U2V0LAotICAgIFZhbHVlSW5KU1N0YWNrLAotICAgIElu
dDMySW5KU1N0YWNrLAotICAgIEludDUySW5KU1N0YWNrLAotICAgIERvdWJsZUluSlNTdGFjaywK
LSAgICBTb3VyY2VJc0RlYWQsCi0gICAgSGF2ZU5vZGUKLX07Ci0KLWNsYXNzIFZhbHVlU291cmNl
IHsKLXB1YmxpYzoKLSAgICBWYWx1ZVNvdXJjZSgpCi0gICAgICAgIDogbV9raW5kKFNvdXJjZU5v
dFNldCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKFZhbHVl
U291cmNlS2luZCBraW5kKQotICAgICAgICA6IG1fa2luZChraW5kKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fa2luZCA9PSBTb3VyY2VJc0RlYWQpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNp
dCBWYWx1ZVNvdXJjZShERkc6Ok5vZGUqIG5vZGUpCi0gICAgICAgIDogbV9raW5kKEhhdmVOb2Rl
KQotICAgIHsKLSAgICAgICAgbV92YWx1ZS5ub2RlID0gbm9kZTsKLSAgICB9Ci0gICAgCi0gICAg
VmFsdWVTb3VyY2UoVmFsdWVTb3VyY2VLaW5kIGtpbmQsIFZpcnR1YWxSZWdpc3RlciByZWcpCi0g
ICAgICAgIDogbV9raW5kKGtpbmQpCi0gICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZh
bHVlSW5KU1N0YWNrIHx8IG1fa2luZCA9PSBJbnQzMkluSlNTdGFjayB8fCBtX2tpbmQgPT0gSW50
NTJJbkpTU3RhY2sgfHwgbV9raW5kID09IERvdWJsZUluSlNTdGFjayk7Ci0gICAgICAgIG1fdmFs
dWUudmlydHVhbFJlZ2lzdGVyID0gcmVnLm9mZnNldCgpOwotICAgIH0KLSAgICAKLSAgICBWYWx1
ZVNvdXJjZUtpbmQga2luZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9raW5kOwot
ICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9
PSBTb3VyY2VOb3RTZXQ7IH0KLSAgICAKLSAgICBERkc6Ok5vZGUqIG5vZGUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7Ci0gICAgICAgIHJldHVybiBt
X3ZhbHVlLm5vZGU7Ci0gICAgfQotICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBWYWx1ZUluSlNT
dGFjayB8fCBraW5kKCkgPT0gSW50MzJJbkpTU3RhY2sgfHwga2luZCgpID09IEludDUySW5KU1N0
YWNrIHx8IGtpbmQoKSA9PSBEb3VibGVJbkpTU3RhY2spOwotICAgICAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyKG1fdmFsdWUudmlydHVhbFJlZ2lzdGVyKTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBWYWx1ZVNvdXJj
ZUtpbmQgbV9raW5kOwotICAgIHVuaW9uIHsKLSAgICAgICAgREZHOjpOb2RlKiBub2RlOwotICAg
ICAgICBpbnQgdmlydHVhbFJlZ2lzdGVyOwotICAgIH0gbV92YWx1ZTsKLX07Ci0KLX0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCi0jZW5kaWYg
Ly8gRlRMVmFsdWVTb3VyY2VfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9M
TFZNQVBJRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
dm0vTExWTUFQSUZ1bmN0aW9ucy5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGx2bS9MTFZNQVBJRnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzNSw3
ICs1MzUsNiBAQAogICAgIG1hY3JvKExMVk1Cb29sLCBUYXJnZXRIYXNKSVQsIChMTFZNVGFyZ2V0
UmVmIFQpKSBcCiAgICAgbWFjcm8oTExWTUJvb2wsIFRhcmdldEhhc1RhcmdldE1hY2hpbmUsIChM
TFZNVGFyZ2V0UmVmIFQpKSBcCiAgICAgbWFjcm8oTExWTUJvb2wsIFRhcmdldEhhc0FzbUJhY2tl
bmQsIChMTFZNVGFyZ2V0UmVmIFQpKSBcCi0gICAgbWFjcm8oTExWTVRhcmdldE1hY2hpbmVSZWYs
IENyZWF0ZVRhcmdldE1hY2hpbmUsIChMTFZNVGFyZ2V0UmVmIFQsIGNoYXIgKlRyaXBsZSwgY2hh
ciAqQ1BVLCBjaGFyICpGZWF0dXJlcywgTExWTUNvZGVHZW5PcHRMZXZlbCBMZXZlbCwgTExWTVJl
bG9jTW9kZSBSZWxvYywgTExWTUNvZGVNb2RlbCBDb2RlTW9kZWwpKSBcCiAgICAgbWFjcm8odm9p
ZCwgRGlzcG9zZVRhcmdldE1hY2hpbmUsIChMTFZNVGFyZ2V0TWFjaGluZVJlZiBUKSkgXAogICAg
IG1hY3JvKExMVk1UYXJnZXRSZWYsIEdldFRhcmdldE1hY2hpbmVUYXJnZXQsIChMTFZNVGFyZ2V0
TWFjaGluZVJlZiBUKSkgXAogICAgIG1hY3JvKGNoYXIgKiwgR2V0VGFyZ2V0TWFjaGluZVRyaXBs
ZSwgKExMVk1UYXJnZXRNYWNoaW5lUmVmIFQpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EdW1wQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRHVtcENvbnRleHQuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EdW1wQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDcgKzI4LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1EdW1wQ29udGV4dDo6RHVt
cENvbnRleHQoKSB7IH0KK0R1bXBDb250ZXh0OjpEdW1wQ29udGV4dCgpCisgICAgOiBncmFwaCgw
KQoreworfQorCiBEdW1wQ29udGV4dDo6fkR1bXBDb250ZXh0KCkgeyB9CiAKIGJvb2wgRHVtcENv
bnRleHQ6OmlzRW1wdHkoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRHVtcENvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EdW1wQ29udGV4dC5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EdW1wQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCituYW1lc3BhY2UgREZHIHsgY2xhc3MgR3JhcGg7IH0K
Kwogc3RydWN0IER1bXBDb250ZXh0IHsKICAgICBEdW1wQ29udGV4dCgpOwogICAgIH5EdW1wQ29u
dGV4dCgpOwpAQCAtNDEsNiArNDMsNyBAQCBzdHJ1Y3QgRHVtcENvbnRleHQgewogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCA9ICIiKSBjb25zdDsKICAgICAK
ICAgICBTdHJpbmdIYXNoRHVtcENvbnRleHQ8U3RydWN0dXJlPiBzdHJ1Y3R1cmVzOworICAgIERG
Rzo6R3JhcGgqIGdyYXBoOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Niw2ICsxMjYsNyBAQCB0eXBlZGVmIE9wdGlvblJhbmdlIG9wdGlvblJhbmdlOwogICAgIHYoYm9v
bCwgZW5hYmxlTExWTUZhc3RJU2VsLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgdXNlTExWTVNtYWxs
Q29kZU1vZGVsLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgZHVtcExMVk1JUiwgZmFsc2UpIFwKKyAg
ICB2KGJvb2wsIHZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzLCBmYWxzZSkgXAogICAgIHYoYm9v
bCwgbGx2bUFsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSwgZmFsc2UpIFwKICAgICB2KGJvb2wsIGxs
dm1BbHdheXNGYWlsc0JlZm9yZUxpbmssIGZhbHNlKSBcCiAgICAgdihib29sLCBsbHZtU2ltcGxl
T3B0LCB0cnVlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xU
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJv
bFRhYmxlLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2OSwxMyArNDY5LDEzIEBAIHB1
YmxpYzoKICAgICBib29sIHVzZXNOb25TdHJpY3RFdmFsKCkgeyByZXR1cm4gbV91c2VzTm9uU3Ry
aWN0RXZhbDsgfQogICAgIHZvaWQgc2V0VXNlc05vblN0cmljdEV2YWwoYm9vbCB1c2VzTm9uU3Ry
aWN0RXZhbCkgeyBtX3VzZXNOb25TdHJpY3RFdmFsID0gdXNlc05vblN0cmljdEV2YWw7IH0KIAot
ICAgIGludCBjYXB0dXJlU3RhcnQoKSB7IHJldHVybiBtX2NhcHR1cmVTdGFydDsgfQorICAgIGlu
dCBjYXB0dXJlU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVTdGFydDsgfQogICAgIHZv
aWQgc2V0Q2FwdHVyZVN0YXJ0KGludCBjYXB0dXJlU3RhcnQpIHsgbV9jYXB0dXJlU3RhcnQgPSBj
YXB0dXJlU3RhcnQ7IH0KIAotICAgIGludCBjYXB0dXJlRW5kKCkgeyByZXR1cm4gbV9jYXB0dXJl
RW5kOyB9CisgICAgaW50IGNhcHR1cmVFbmQoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVFbmQ7
IH0KICAgICB2b2lkIHNldENhcHR1cmVFbmQoaW50IGNhcHR1cmVFbmQpIHsgbV9jYXB0dXJlRW5k
ID0gY2FwdHVyZUVuZDsgfQogCi0gICAgaW50IGNhcHR1cmVDb3VudCgpIHsgcmV0dXJuIC0obV9j
YXB0dXJlRW5kIC0gbV9jYXB0dXJlU3RhcnQpOyB9CisgICAgaW50IGNhcHR1cmVDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIC0obV9jYXB0dXJlRW5kIC0gbV9jYXB0dXJlU3RhcnQpOyB9CiAKICAgICBp
bnQgcGFyYW1ldGVyQ291bnQoKSB7IHJldHVybiBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhp
cyAtIDE7IH0KICAgICBpbnQgcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzKCkgeyByZXR1cm4g
bV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217121</attachid>
            <date>2013-11-16 00:51:55 -0800</date>
            <delta_ts>2013-11-17 14:22:24 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>114881</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5Mzc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MyBA
QAorMjAxMy0xMS0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgaGF2ZSBhbiBleHBsaWNpdCBub3Rpb24gb2YgYnl0ZWNvZGUgbGl2ZW5lc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDE4MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
VGhpcyBtYWtlcyBGVEwgT1NSIGV4aXQgdXNlIGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lzIHRv
IGRldGVybWluZSB3aGljaCB2YXJpYWJsZXMKKyAgICAgICAgdG8gaW5jbHVkZSB2YWx1ZXMgZm9y
LiBUaGUgZGVjaXNpb24gb2YgaG93IHRvIGdldCB0aGUgdmFsdWVzIG9mIHZhcmlhYmxlcyBpcyBi
YXNlZCBvbgorICAgICAgICBmb3J3YXJkIHByb3BhZ2F0aW9uIG9mIE1vdkhpbnRzIGFuZCBTZXRM
b2NhbHMuCisgICAgICAgIAorICAgICAgICBUaGlzIGZpeGVzIGEgYnVuY2ggb2YgYnVncyAobGlr
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MTM4IGJ1dAorICAg
ICAgICBhbHNvIG90aGVycyB0aGF0IEkgbm90aWNlZCB3aGVuIEkgc3RhcnRlZCB3cml0aW5nIG1v
cmUgdGFyZ2V0dGVkIHRlc3RzKSBhbmQgYWxsb3dzIHVzCisgICAgICAgIHRvIHJlbW92ZSBzb21l
IHNrZXRjaHkgY29kZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmg6
CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAg
ICAgKEpTQzo6aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpzZXRG
b3JPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6
CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpzdGVwT3Zlckluc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZUxvY2FsTGl2
ZW5lc3NGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpczo6cnVuTGl2ZW5lc3NGaXhwb2ludCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpczo6b3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpnZXRMaXZlbmVzc0luZm8pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MpOgorICAgICAgICAq
IGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6
Om9wZXJhbmRJc0Fsd2F5c0xpdmUpOgorICAgICAgICAoSlNDOjpvcGVyYW5kVGhhdElzTm90QWx3
YXlzTGl2ZUlzTGl2ZSk6CisgICAgICAgIChKU0M6Om9wZXJhbmRJc0xpdmUpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhcHR1cmVD
b3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FwdHVyZVN0YXJ0KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpjYXB0dXJlRW5kKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3Jp
Z2luLmNwcDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpkdW1wSW5Db250ZXh0KToK
KyAgICAgICAgKiBieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzKToKKyAg
ICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OmdldE91dCk6CisgICAgICAgIChKU0M6
OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpvcGVyYW5kSXNMaXZlKToKKyAgICAgICAgKEpTQzo6RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M6OmdldExpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHQXZhaWxh
YmlsaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5OjpkdW1w
KToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OmR1bXBJbkNvbnRleHQpOgorICAg
ICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6
QXZhaWxhYmlsaXR5OjpBdmFpbGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJp
bGl0eTo6dW5hdmFpbGFibGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6d2l0
aEZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OndpdGhOb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6OndpdGhVbmF2YWlsYWJsZU5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6bm9kZUlzVW5kZWNpZGVkKToKKyAgICAgICAg
KEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6Om5vZGVJc1VuYXZhaWxhYmxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBdmFpbGFiaWxpdHk6Omhhc05vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWls
YWJpbGl0eTo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5OjpmbHVzaGVk
QXQpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eTo6b3BlcmF0b3IhKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBdmFpbGFiaWxpdHk6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpE
Rkc6OkF2YWlsYWJpbGl0eTo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0
eTo6bWVyZ2VOb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QXZhaWxhYmlsaXR5Ojp1bmF2YWls
YWJsZU1hcmtlcik6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHRGlzYXNzZW1ibGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpEaXNhc3NlbWJsZXI6OkRpc2Fzc2VtYmxlcik6CisgICAgICAgICog
ZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6Cisg
ICAgICAgICogZGZnL0RGR0ZsdXNoRm9ybWF0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6cmVzdWx0
Rm9yKToKKyAgICAgICAgKEpTQzo6REZHOjp1c2VLaW5kRm9yKToKKyAgICAgICAgKEpTQzo6REZH
OjpkYXRhRm9ybWF0Rm9yKToKKyAgICAgICAgKiBkZmcvREZHRmx1c2hlZEF0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpGbHVzaGVkQXQ6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdGbHVzaGVk
QXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaGVkQXQ6OkZsdXNoZWRBdCk6CisgICAgICAg
IChKU0M6OkRGRzo6Rmx1c2hlZEF0OjptZXJnZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmxpdmVuZXNzRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZlSW5C
eXRlY29kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKToKKyAgICAgICAgKiBkZmcvREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5oOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBkZmcvREZHUmVz
dXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6UmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlOjpSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0
aW9uUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlJlc3VycmVjdGlvbkZvclZhbGlkYXRpb25Q
aGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtUmVzdXJyZWN0aW9uRm9yVmFs
aWRhdGlvbik6CisgICAgICAgICogZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFz
ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZn
L0RGR1ZhbHVlU291cmNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmZvckZs
dXNoRm9ybWF0KToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAg
ICAgICogZnRsL0ZUTEV4aXRWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVl
OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKiBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpzaXplT2ZHZXRCeUlkKToKKyAgICAgICAgKiBmdGwvRlRMTG9j
YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkxvY2F0aW9uOjpncHIpOgorICAgICAgICAo
SlNDOjpGVEw6OkxvY2F0aW9uOjpmcHIpOgorICAgICAgICAoSlNDOjpGVEw6OkxvY2F0aW9uOjpk
aXJlY3RHUFIpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Okxvd2VyREZHVG9MTFZNKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlWm9tYmllSGludCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6aW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OmVtaXRPU1JFeGl0Q2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudEZvck5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpvYnNlcnZlTW92SGludCk6CisgICAgICAgICogZnRsL0ZUTE91dHB1
dC5oOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6YWxsb2NhKToKKyAgICAgICAgKiBmdGwv
RlRMVmFsdWVTb3VyY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGZ0bC9GVExWYWx1ZVNvdXJj
ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGxsdm0vTExWTUFQSUZ1bmN0aW9ucy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvRHVtcENvbnRleHQuY3BwOgorICAgICAgICAoSlNDOjpEdW1wQ29udGV4dDo6
RHVtcENvbnRleHQpOgorICAgICAgICAqIHJ1bnRpbWUvRHVtcENvbnRleHQuaDoKKyAgICAgICAg
KiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmg6Cisg
ICAgICAgIChKU0M6OlNoYXJlZFN5bWJvbFRhYmxlOjpjYXB0dXJlU3RhcnQpOgorICAgICAgICAo
SlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6Y2FwdHVyZUVuZCk6CisgICAgICAgIChKU0M6OlNoYXJl
ZFN5bWJvbFRhYmxlOjpjYXB0dXJlQ291bnQpOgorCiAyMDEzLTExLTE1ICBBbGV4ZXkgUHJvc2t1
cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFN1cHBvcnQgZXhwb3J0aW5nIHN5bW1l
dHJpYyBrZXlzIGFzIEpXSwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VS
Q0VTCiAgICAgZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCiAgICAgZGZn
L0RGR0FycmF5TW9kZS5jcHAKICAgICBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAKKyAg
ICBkZmcvREZHQXZhaWxhYmlsaXR5LmNwcAogICAgIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlLmNwcAogICAgIGRmZy9ERkdCYXNpY0Jsb2NrLmNwcAogICAgIGRmZy9ERkdCaW5hcnlT
d2l0Y2guY3BwCkBAIC0xNTgsNiArMTU5LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMK
ICAgICBkZmcvREZHUGxhbi5jcHAKICAgICBkZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNl
LmNwcAogICAgIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKyAgICBkZmcv
REZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTU0FDb252
ZXJzaW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAogICAgIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsMTAgKzEwMCwx
MSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FycmF5UHJvZmlsZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlW
YWxJbmZvLmggXAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJh
c2ljQmxvY2suY3BwIFwKLSAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVCYXNpY0Jsb2NrLmggXAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIFwKLSAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmggXApAQCAtMTMyLDYg
KzEzMyw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGl0S2luZC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhwcmVz
c2lvblJhbmdlSW5mby5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRTdGF0dXMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaCBc
CkBAIC0yMDcsNiArMjA5LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAgXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwIFwKQEAgLTM1OCw2ICszNjIsOCBAQCBq
YXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlZ2lzdGVyQmFuay5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAgXAorCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oIFwKQEAgLTQ2OSw4ICs0
NzUsNiBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExWYWx1ZUZvcm1hdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRnJv
bUJsb2NrLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3Bw
IFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db3BpZWRBbGxvY2F0b3IuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2oJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTMzOCw2ICszMzgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAiIC8+DQogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2suY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPg0KQEAgLTQw
Myw2ICs0MDQsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uY3Bw
IiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+DQogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklULmNwcCIgLz4NCiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
IiAvPg0KQEAgLTc0NSw2ICs3NDcsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcQnlWYWxJbmZvLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtJbmZvLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtTdGF0dXMuaCIg
Lz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsUmV0dXJuT2Zmc2V0
VG9CeXRlY29kZU9mZnNldC5oIiAvPg0KQEAgLTc2Miw2ICs3NjUsNyBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhlY3V0aW9uQ291bnRlci5oIiAvPg0KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV4aXRLaW5kLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhwcmVzc2lvblJhbmdlSW5mby5oIiAvPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEZ1bGxCeXRlY29kZUxpdmVuc3MuaCIgLz4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxHZXRCeUlkU3RhdHVzLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSGFuZGxlckluZm8uaCIgLz4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxJbmxpbmVDYWxsRnJhbWVTZXQu
aCIgLz4NCkBAIC04MTIsNiArODE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR0F2YWlsYWJpbGl0eS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgiIC8+DQogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2suaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9ja0lubGluZXMuaCIgLz4NCkBAIC04OTUsNiAr
OTAwLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdS
ZWdpc3RlckJhbmsuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVn
aXN0ZXJTZXQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVzdXJy
ZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1NhZmVUb0V4ZWN1dGUuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2NvcmVCb2FyZC5oIiAvPg0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw2IEBACiAJCTBGMjM1QkUyMTcxNzhFMUMwMDY5MEM3
RiAvKiBGVExUaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMjM1QkNDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExUaHVua3MuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIzNUJFMzE3MTc4RTFD
MDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQ0QxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVl
Rm9ybWF0LmNwcCAqLzsgfTsKIAkJMEYyMzVCRTQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVl
Rm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIzNUJDRTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjIzNUJFNTE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQ0YxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291
cmNlLmNwcCAqLzsgfTsKLQkJMEYyMzVCRTYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIz
NUJEMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIzNUJFQjE3MTc4RTczMDA2OTBD
N0YgLyogREZHT1NSRXhpdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyMzVCRTcxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNl
LmNwcCAqLzsgfTsKIAkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJF
ODE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIzNUJFRDE3MTc4RTczMDA2OTBDN0Yg
LyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkU5MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
UHJlcGFyYXRpb24uY3BwICovOyB9OwpAQCAtMjYwLDYgKzI1OCwxMiBAQAogCQkwRjYzOTQ3ODE1
RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0NzYxNURDRTM0NzAwNkE1
OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYzOTQ4NDE1RTQ4MTE4MDA2QTU5N0MgLyog
REZHQXJyYXlNb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3BwICovOyB9
OwogCQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ4MjE1RTQ4MTE0MDA2
QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXNJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY2NjZFQzExODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVu
ZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjY2NkVDNjE4MzU2NzJC
MDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUMyMTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFp
bGFiaWxpdHkuY3BwICovOyB9OworCQkwRjY2NkVDNzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZh
aWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2NjZFQ0MxODM2QjM3
RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDQTE4MzZCMzdF
MDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCAqLzsgfTsK
KwkJMEY2NjZFQ0QxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25Q
aGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBC
N0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2
OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzAyNUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAgKi87IH07CkBAIC0xMzk1LDggKzEzOTksNiBAQAogCQkwRjIzNUJDQzE3
MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTFRodW5rcy5oOyBwYXRoID0gZnRsL0ZUTFRodW5rcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjIzNUJDRDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3Jt
YXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMVmFsdWVGb3Jt
YXQuY3BwOyBwYXRoID0gZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYyMzVCQ0UxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFZhbHVlRm9ybWF0Lmg7IHBhdGgg
PSBmdGwvRlRMVmFsdWVGb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYy
MzVCQ0YxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFZhbHVlU291cmNlLmNwcDsgcGF0aCA9IGZ0bC9G
VExWYWx1ZVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMjM1QkQw
MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGVExWYWx1ZVNvdXJjZS5oOyBwYXRoID0gZnRsL0ZUTFZhbHVlU291cmNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjM1QkU3MTcxNzhFNzMwMDY5MEM3
RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdPU1JFeGl0QmFzZS5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhpdEJhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIzNUJFODE3MTc4RTczMDA2OTBDN0YgLyog
REZHT1NSRXhpdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NS
RXhpdEJhc2UuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjIzNUJFOTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBh
cmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4
aXRQcmVwYXJhdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NTAsNiArMTU1MiwxMiBAQAogCQkwRjYz
OTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg7
IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjYzOTQ4MTE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FycmF5TW9kZS5jcHA7
IHBhdGggPSBkZmcvREZHQXJyYXlNb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY2Mzk0ODIxNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheU1vZGUuaDsgcGF0aCA9IGRmZy9ERkdBcnJh
eU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NjZFQkUxODM1NjZGOTAw
RDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyog
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
NjZFQzIxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBdmFpbGFiaWxpdHkuY3BwOyBwYXRoID0gZGZn
L0RGR0F2YWlsYWJpbGl0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjY2
RUMzMTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQXZhaWxhYmlsaXR5Lmg7IHBhdGggPSBkZmcvREZHQXZhaWxh
YmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjY2RUNBMTgzNkIzN0Uw
MEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlv
blBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2NkVDQjE4MzZCMzdFMDBEMDE3
RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oOyBw
YXRoID0gZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNl
bmN5TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGphY2VuY3lM
aXN0Lmg7IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZHRWRnZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcwMjVBNzE3MTRCMEY4MDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHBhdGggPSBkZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI4NDQsOCArMjg1Miw2IEBACiAJCQkJMEYyMzVCQ0QxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZh
bHVlRm9ybWF0LmNwcCAqLywKIAkJCQkwRjIzNUJDRTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFs
dWVGb3JtYXQuaCAqLywKIAkJCQkwRkRCMkNDODE3M0RBNTFFMDA3QjNDMUIgLyogRlRMVmFsdWVG
cm9tQmxvY2suaCAqLywKLQkJCQkwRjIzNUJDRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVT
b3VyY2UuY3BwICovLAotCQkJCTBGMjM1QkQwMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNv
dXJjZS5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBmdGw7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwpAQCAtMzc0NCw2ICszNzUwLDggQEAKIAkJCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0Mg
LyogREZHQXJyYXlNb2RlLmggKi8sCiAJCQkJQTdEOUEyOEYxN0EwQkM3NDAwRUUyNjE4IC8qIERG
R0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwICovLAogCQkJCUE3RDlBMjkwMTdBMEJDNzQwMEVFMjYx
OCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggKi8sCisJCQkJMEY2NjZFQzIxODM1NjcyQjAw
RDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgKi8sCisJCQkJMEY2NjZFQzMxODM1NjcyQjAw
RDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oICovLAogCQkJCTBGNzE0Q0ExMTZFQTkyRUQwMEYz
RUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjcxNENB
MjE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovLAog
CQkJCUE3RDg5Q0UzMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCAqLywKQEAg
LTM4OTQsNiArMzkwMiw4IEBACiAJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBD
NzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCAqLywKIAkJCQk4NkVDOURD
MTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8sCisJCQkJMEY2NjZFQ0Ex
ODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAg
Ki8sCisJCQkJMEY2NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZh
bGlkYXRpb25QaGFzZS5oICovLAogCQkJCUE3N0E0MjNDMTdBMEJCRkQwMEE4REI4MSAvKiBERkdT
YWZlVG9FeGVjdXRlLmggKi8sCiAJCQkJQTc0MTAxN0UxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1Nh
bmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggKi8sCiAJCQkJODZFQ0EzRjkxMzJE
RjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCAqLywKQEAgLTQwMzYsMTUgKzQwNDYsMTYg
QEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlDMkZDQUUwQzE3QTlDMjRFMDAzNEM3
MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAqLywKLQkJCQlDMkZDQUUwRDE3QTlDMjRFMDAz
NEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggKi8sCi0JCQkJQzJGQ0FFMEUxN0E5QzI0RTAw
MzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgKi8sCi0JCQkJQzJGQ0FFMEYx
N0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oICovLAogCQkJCTBG
ODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLywK
IAkJCQkwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5o
ICovLAogCQkJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3BwICov
LAogCQkJCTBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCAqLywKKwkJ
CQlDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAqLywK
KwkJCQlDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggKi8s
CiAJCQkJMEYyMUMyN0UxNEJFQUE4MDAwQURDNjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCAq
LywKKwkJCQlDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmNwcCAqLywKKwkJCQlDMkZDQUUwRjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmggKi8sCisJCQkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLywKIAkJCQkwRjgwMjNFOTE2MTM4MzIzMDBB
MEJBNDUgLyogQnlWYWxJbmZvLmggKi8sCiAJCQkJMEYwQjgzQUUxNEJDRjcxNDAwODg1QjRGIC8q
IENhbGxMaW5rSW5mby5jcHAgKi8sCiAJCQkJMEYwQjgzQUYxNEJDRjcxNDAwODg1QjRGIC8qIENh
bGxMaW5rSW5mby5oICovLApAQCAtNDA3Myw2ICs0MDg0LDcgQEAKIAkJCQkwRkIxMDU4MjE2NzU0
ODBDMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwICovLAogCQkJCTBGQjEwNTgzMTY3NTQ4MEMwMEY4
QUI2RSAvKiBFeGl0S2luZC5oICovLAogCQkJCTBGMEI4M0FBMTRCQ0Y1QjkwMDg4NUI0RiAvKiBF
eHByZXNzaW9uUmFuZ2VJbmZvLmggKi8sCisJCQkJMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8q
IEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi8sCiAJCQkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2
IC8qIEdldEJ5SWRTdGF0dXMuY3BwICovLAogCQkJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAv
KiBHZXRCeUlkU3RhdHVzLmggKi8sCiAJCQkJMEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhh
bmRsZXJJbmZvLmggKi8sCkBAIC00NDMxLDcgKzQ0NDMsNiBAQAogCQkJCTBGRUEwQTIwMTcwOEIw
MDcwMEJCNzIyQyAvKiBGVExUeXBlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1
QkU0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkwRjIzNUJFNjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDA0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlv
bkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYwRjFBMDE2QjcyQTFBMDA1REY5
NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
MDUwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywK
QEAgLTQ0NjEsNiArNDQ3Miw3IEBACiAJCQkJMkE2RjQ2MjYxN0U5NTlDRTAwQzQ1Qzk4IC8qIEhl
YXBPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2
NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyNEQzMUUzMTYxQ0Q2
OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjZF
QzExODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDMkU1MjZCRTE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MEYwRTE2RjVDRDAwQjM0NDYwIC8qIElkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNDcwMyw2ICs0NzE1LDcgQEAKIAkJCQk5NUNENDU3
NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0NTEwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGVOb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkY3MjlBNTE2NkFEMzUxMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUI5MTY2QUQz
NjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYx
MzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGls
YXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNDgxMyw2ICs0ODI2LDcgQEAKIAkJCQlBN0E4QUYz
RjE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdB
OEFGNDAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjVGMDhDRjE0NkM3NjMzMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXpl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjZFQzcxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2
YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCNjAxODIxNjM5RkQyQTAwMzcyQkEz
IC8qIFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyQzE2RDAy
OEFEMDA5RTRGRDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NjNC
MzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC00
ODQzLDYgKzQ4NTcsNyBAQAogCQkJCTBGQzgxNTBBMTQwNDNCRjUwMENGQTYwMyAvKiBXcml0ZUJh
cnJpZXJTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Njg4Q0IxNjBFRDEyQjRFMDAxRDY0
OUYgLyogWDg2QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NTE1MzlCOTEyREM5OTQ1
MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NjZFQ0QxODM2QjM3RTAw
RDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2Vy
LmggaW4gSGVhZGVycyAqLywKQEAgLTU0NTEsNyArNTQ2Niw2IEBACiAJCQkJMEZFQTBBMTYxNzA2
QkI5MDAwQkI3MjJDIC8qIEZUTFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkUx
MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYy
MzVCRTMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTBGMjM1QkU1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDdGMzlDQjEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Db25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5RjE2QjcyQTE3MDA1REY5NUIg
LyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
QzEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC01NjMwLDYgKzU2NDQsNyBAQAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBGNUJBMyAvKiBQ
cm9maWxlck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCNDE2NkFEMzVDMDAw
RjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkZD
QUUxMDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGNjY2RUNDMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JW
YWxpZGF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAw
RjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4
RDE2NzU0ODM3MDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjEzOTEyQjE2NzcxQzNBMDA5Q0NCMDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVj
b2Rlcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU2OTgsNiArNTcxMyw3IEBACiAJCQkJMEZDODE1
MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUZFRDk0RjJFMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlGRUQ5NEYzMDE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2dNYWMuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0
Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUNGNzM3NzE3MUNBNkZCMDBDOUJCMUUg
LyogV2Vhay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEU4NEY5RTE0RUUxQUNDMDBENkQ1RDQg
LyogV2Vha0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaAkocmV2aXNpb24gMTU5
MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBDb2RlQmxvY2s7CiAKLXR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgRmFzdEJpdFZlY3Rv
ciwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czx1bnNpZ25lZD4gPiBCeXRlY29kZVRvQml0bWFwTWFwOwotCiBjbGFzcyBCeXRlY29kZUJh
c2ljQmxvY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxCeXRlY29kZUJhc2ljQmxvY2s+IHsKIHB1Ymxp
YzoKICAgICBlbnVtIFNwZWNpYWxCbG9ja1R5cGUgeyBFbnRyeUJsb2NrLCBFeGl0QmxvY2sgfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgogCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkZ1bGxCeXRlY29kZUxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzgsNDQgKzQwLDIzIEBAIEJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpczo6Qnl0ZWNvZGVMaXZlbmUKICAgICBjb21wdXRlKCk7CiB9CiAKLXN0YXRpYyBpbnQg
bnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBp
ZiAoIWNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50KCk7Ci19Ci0KLXN0YXRp
YyBpbnQgY2FwdHVyZVN0YXJ0KENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIGlmICghY29k
ZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29k
ZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKTsKLX0KLQotc3RhdGljIGludCBj
YXB0dXJlRW5kKENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIGlmICghY29kZUJsb2NrLT5z
eW1ib2xUYWJsZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5z
eW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7Ci19Ci0KIHN0YXRpYyBib29sIGlzVmFsaWRSZWdp
c3RlckZvckxpdmVuZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBpbnQgb3BlcmFuZCkKIHsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKICAgICByZXR1cm4gIWNvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgob3BlcmFuZCkgLy8gRG9uJ3QgY2FyZSBhYm91
dCBjb25zdGFudHMuCiAgICAgICAgICYmIHZpcnR1YWxSZWcuaXNMb2NhbCgpIC8vIERvbid0IGNh
cmUgYWJvdXQgYXJndW1lbnRzLgotICAgICAgICAmJiAoIW51bWJlck9mQ2FwdHVyZWRWYXJpYWJs
ZXMoY29kZUJsb2NrKSAvLyBJZiB3ZSBoYXZlIG5vIGNhcHR1cmVkIHZhcmlhYmxlcywgd2UncmUg
Z29vZCB0byBnby4KLSAgICAgICAgICAgIHx8ICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY2FwdHVy
ZVN0YXJ0KGNvZGVCbG9jaykgfHwgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPD0gY2FwdHVyZUVuZChj
b2RlQmxvY2spKSkpOworICAgICAgICAmJiAoIWNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkgLy8g
SWYgd2UgaGF2ZSBubyBjYXB0dXJlZCB2YXJpYWJsZXMsIHdlJ3JlIGdvb2QgdG8gZ28uCisgICAg
ICAgICAgICB8fCAodmlydHVhbFJlZy5vZmZzZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0
KCkgfHwgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPD0gY29kZUJsb2NrLT5jYXB0dXJlRW5kKCkpKSk7
CiB9CiAKIHN0YXRpYyB2b2lkIHNldEZvck9wZXJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZh
c3RCaXRWZWN0b3ImIGJpdHMsIGludCBvcGVyYW5kKQogewogICAgIEFTU0VSVChpc1ZhbGlkUmVn
aXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIG9wZXJhbmQpKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKLSAgICBpZiAodmlydHVhbFJlZy5vZmZzZXQoKSA+IGNh
cHR1cmVTdGFydChjb2RlQmxvY2spKQorICAgIGlmICh2aXJ0dWFsUmVnLm9mZnNldCgpID4gY29k
ZUJsb2NrLT5jYXB0dXJlU3RhcnQoKSkKICAgICAgICAgYml0cy5zZXQodmlydHVhbFJlZy50b0xv
Y2FsKCkpOwogICAgIGVsc2UKLSAgICAgICAgYml0cy5zZXQodmlydHVhbFJlZy50b0xvY2FsKCkg
LSBudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVzKGNvZGVCbG9jaykpOworICAgICAgICBiaXRzLnNl
dCh2aXJ0dWFsUmVnLnRvTG9jYWwoKSAtIGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkpOwogfQog
CiBzdGF0aWMgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29k
ZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgdXNlcykKQEAg
LTMwMyw4ICsyODQsOCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0
CiAgICAgICAgIGludCBiYXNlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICBp
bnQgY291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZv
ckxpdmVuZXNzKGNvZGVCbG9jaywgYmFzZSArIGkpKQotICAgICAgICAgICAgICAgIHNldEZvck9w
ZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBiYXNlICsgaSk7CisgICAgICAgICAgICBpZiAoaXNWYWxp
ZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBiYXNlIC0gaSkpCisgICAgICAgICAgICAg
ICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGJhc2UgLSBpKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzE1LDExICsyOTYsMTEgQEAgc3RhdGljIHZvaWQg
Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldAogICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVy
Rm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKQogICAgICAg
ICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7CiAgICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
LSAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwor
ICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwog
ICAgICAgICBpbnQgbGFzdEFyZyA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJn
dW1lbnRPZmZzZXQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsr
KSB7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2Nr
LCBsYXN0QXJnIC0gaSkpCi0gICAgICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ss
IHVzZXMsIGxhc3RBcmcgLSBpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IG9wY29kZUlEID09IG9w
X2NvbnN0cnVjdCA/IDEgOiAwOyBpIDwgYXJnQ291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYg
KGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgbGFzdEFyZyArIGkpKQorICAg
ICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBsYXN0QXJnICsgaSk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMzMywxMCArMzE0LDkgQEAg
c3RhdGljIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldAogICAgICAgICAgICAgc2V0
Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0jZGVmaW5lIExMSU5UX0hFTFBFUl9PUENPREVTKG9wY29k
ZSwgbGVuZ3RoKSBjYXNlIG9wY29kZToKLSAgICBGT1JfRUFDSF9MTElOVF9PUENPREVfRVhURU5T
SU9OKExMSU5UX0hFTFBFUl9PUENPREVTKQotICAgICAgICByZXR1cm47Ci0jdW5kZWYgTExJTlRf
SEVMUEVSX09QQ09ERVMKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTQ5Miw4ICs0NzIsNyBA
QCBzdGF0aWMgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0CiAgICAgY2FzZSBvcF9l
bnRlcjogewogICAgICAgICBkZWZzLnNldEFsbCgpOwogICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIH0KKyAgICB9IH0KIH0KIAogc3RhdGljIHVuc2lnbmVkIGdldExlYWRlck9mZnNldEZvckJh
c2ljQmxvY2soUmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4qIGJhc2ljQmxvY2spCkBAIC01NDAs
MTMgKzUxOSwzMiBAQCBzdGF0aWMgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBmaW5kQmFzaWNCbG9jCiAg
ICAgcmV0dXJuIGJhc2ljQmxvY2tbMV0uZ2V0KCk7CiB9CiAKK3N0YXRpYyB2b2lkIHN0ZXBPdmVy
SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVC
YXNpY0Jsb2NrPj4mIGJhc2ljQmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJp
dFZlY3RvciYgdXNlcywgRmFzdEJpdFZlY3RvciYgZGVmcywgRmFzdEJpdFZlY3RvciYgb3V0KQor
eworICAgIHVzZXMuY2xlYXJBbGwoKTsKKyAgICBkZWZzLmNsZWFyQWxsKCk7CisgICAgCisgICAg
Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCB1
c2VzKTsKKyAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNv
ZGVPZmZzZXQsIGRlZnMpOworICAgIAorICAgIG91dC5leGNsdWRlKGRlZnMpOworICAgIG91dC5t
ZXJnZSh1c2VzKTsKKyAgICAKKyAgICAvLyBJZiB3ZSBoYXZlIGFuIGV4Y2VwdGlvbiBoYW5kbGVy
LCB3ZSB3YW50IHRoZSBsaXZlLWluIHZhcmlhYmxlcyBvZiB0aGUgCisgICAgLy8gZXhjZXB0aW9u
IGhhbmRsZXIgYmxvY2sgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGxpdmUtaW4gb2YgdGhpcyBwYXJ0
aWN1bGFyIGJ5dGVjb2RlLgorICAgIGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9j
ay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkgeworICAgICAgICBC
eXRlY29kZUJhc2ljQmxvY2sqIGhhbmRsZXJCbG9jayA9IGZpbmRCYXNpY0Jsb2NrV2l0aExlYWRl
ck9mZnNldChiYXNpY0Jsb2NrcywgaGFuZGxlci0+dGFyZ2V0KTsKKyAgICAgICAgQVNTRVJUKGhh
bmRsZXJCbG9jayk7CisgICAgICAgIG91dC5tZXJnZShoYW5kbGVyQmxvY2stPmluKCkpOworICAg
IH0KK30KKwogc3RhdGljIHZvaWQgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNl
dChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaywgVmVjdG9y
PFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+ID4mIGJhc2ljQmxvY2tzLCB1bnNpZ25lZCB0YXJn
ZXRPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoIWJsb2NrLT5p
c0V4aXRCbG9jaygpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0VudHJ5QmxvY2soKSk7CiAKICAg
ICBGYXN0Qml0VmVjdG9yIG91dCA9IGJsb2NrLT5vdXQoKTsKLSAgICBIYW5kbGVySW5mbyogaGFu
ZGxlciA9IDA7CiAKICAgICBGYXN0Qml0VmVjdG9yIHVzZXM7CiAgICAgRmFzdEJpdFZlY3RvciBk
ZWZzOwpAQCAtNTU3LDIzICs1NTUsOCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlTG9jYWxMaXZlbmVz
c0ZvckJ5dGVjCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmJ5dGVj
b2RlT2Zmc2V0cygpW2ldOwogICAgICAgICBpZiAodGFyZ2V0T2Zmc2V0ID4gYnl0ZWNvZGVPZmZz
ZXQpCiAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICB1c2VzLmNsZWFyQWxsKCk7Ci0gICAg
ICAgIGRlZnMuY2xlYXJBbGwoKTsKLQotICAgICAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zm
c2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQsIHVzZXMpOwotICAgICAgICBjb21wdXRlRGVm
c0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQsIGRlZnMpOwotCi0g
ICAgICAgIG91dC5leGNsdWRlKGRlZnMpOwotICAgICAgICBvdXQubWVyZ2UodXNlcyk7Ci0KLSAg
ICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBleGNlcHRpb24gaGFuZGxlciwgd2Ugd2FudCB0aGUgbGl2
ZS1pbiB2YXJpYWJsZXMgb2YgdGhlIAotICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9j
ayB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgYnl0ZWNv
ZGUuCi0gICAgICAgIGlmICgoaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkpIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9j
ayogaGFuZGxlckJsb2NrID0gZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGJhc2ljQmxv
Y2tzLCBoYW5kbGVyLT50YXJnZXQpOwotICAgICAgICAgICAgQVNTRVJUKGhhbmRsZXJCbG9jayk7
Ci0gICAgICAgICAgICBvdXQubWVyZ2UoaGFuZGxlckJsb2NrLT5pbigpKTsKLSAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGJhc2ljQmxv
Y2tzLCBieXRlY29kZU9mZnNldCwgdXNlcywgZGVmcywgb3V0KTsKICAgICB9CiAKICAgICByZXN1
bHQuc2V0KG91dCk7CkBAIC01OTAsNyArNTczLDcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OnJ1bkxpdmVuZQogewogICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVC
bG9jayA9IG1fY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogICAgIHVuc2lnbmVkIG51
bWJlck9mVmFyaWFibGVzID0gdW5saW5rZWRDb2RlQmxvY2stPm1fbnVtVmFycyArIAotICAgICAg
ICB1bmxpbmtlZENvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgLSBudW1iZXJPZkNhcHR1
cmVkVmFyaWFibGVzKG1fY29kZUJsb2NrKTsKKyAgICAgICAgdW5saW5rZWRDb2RlQmxvY2stPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzIC0gbV9jb2RlQmxvY2stPmNhcHR1cmVDb3VudCgpOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmFzaWNCbG9ja3Muc2l6ZSgpOyBpKyspIHsKICAg
ICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmFzaWNCbG9ja3NbaV0uZ2V0KCk7
CkBAIC02MjksMzYgKzYxMiwzMCBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0
TGl2ZW5lCiAKIGJvb2wgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpvcGVyYW5kSXNMaXZlQXRC
eXRlY29kZU9mZnNldChpbnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7Ci0g
ICAgaW50IG51bUNhcHR1cmVkVmFycyA9IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9jb2Rl
QmxvY2spOwotICAgIGlmIChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNBcmd1bWVudCgpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAob3BlcmFuZCA8PSBjYXB0dXJlU3RhcnQobV9j
b2RlQmxvY2spICYmIG9wZXJhbmQgPiBjYXB0dXJlRW5kKG1fY29kZUJsb2NrKSkKKyAgICBpZiAo
b3BlcmFuZElzQWx3YXlzTGl2ZShtX2NvZGVCbG9jaywgb3BlcmFuZCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIEZhc3RCaXRWZWN0b3IgcmVzdWx0OwogICAgIGdldExpdmVuZXNzSW5mb0Zv
ck5vbkNhcHR1cmVkVmFyc0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIHJlc3VsdCk7
Ci0gICAgcmV0dXJuIHJlc3VsdC5nZXQob3BlcmFuZCAtIG51bUNhcHR1cmVkVmFycyk7CisgICAg
cmV0dXJuIG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKG1fY29kZUJsb2NrLCByZXN1
bHQsIG9wZXJhbmQpOwogfQogCi1GYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
czo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCkKK0Zhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvKENvZGVCbG9jayogY29kZUJsb2NrLCBj
b25zdCBGYXN0Qml0VmVjdG9yJiBvdXQpCiB7Ci0gICAgRmFzdEJpdFZlY3RvciB0ZW1wOwogICAg
IEZhc3RCaXRWZWN0b3IgcmVzdWx0OwogCi0gICAgZ2V0TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVy
ZWRWYXJzQXRCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgdGVtcCk7Ci0KLSAgICB1bnNp
Z25lZCBudW1DYXB0dXJlZFZhcnMgPSBudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVzKG1fY29kZUJs
b2NrKTsKKyAgICB1bnNpZ25lZCBudW1DYXB0dXJlZFZhcnMgPSBjb2RlQmxvY2stPmNhcHR1cmVD
b3VudCgpOwogICAgIGlmIChudW1DYXB0dXJlZFZhcnMpIHsKLSAgICAgICAgaW50IGZpcnN0Q2Fw
dHVyZWRMb2NhbCA9IFZpcnR1YWxSZWdpc3RlcihjYXB0dXJlU3RhcnQobV9jb2RlQmxvY2spKS50
b0xvY2FsKCk7Ci0gICAgICAgIHJlc3VsdC5yZXNpemUodGVtcC5udW1CaXRzKCkgKyBudW1DYXB0
dXJlZFZhcnMpOworICAgICAgICBpbnQgZmlyc3RDYXB0dXJlZExvY2FsID0gVmlydHVhbFJlZ2lz
dGVyKGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkpLnRvTG9jYWwoKTsKKyAgICAgICAgcmVzdWx0
LnJlc2l6ZShvdXQubnVtQml0cygpICsgbnVtQ2FwdHVyZWRWYXJzKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bUNhcHR1cmVkVmFyczsgKytpKQogICAgICAgICAgICAgcmVz
dWx0LnNldChmaXJzdENhcHR1cmVkTG9jYWwgKyBpKTsKICAgICB9IGVsc2UKLSAgICAgICAgcmVz
dWx0LnJlc2l6ZSh0ZW1wLm51bUJpdHMoKSk7CisgICAgICAgIHJlc3VsdC5yZXNpemUob3V0Lm51
bUJpdHMoKSk7CiAKLSAgICBpbnQgdGVtcExlbmd0aCA9IHRlbXAubnVtQml0cygpOwotICAgIEFT
U0VSVCh0ZW1wTGVuZ3RoID49IDApOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVtcExlbmd0
aDsgaSsrKSB7Ci0gICAgICAgIGlmICghdGVtcC5nZXQoaSkpCisgICAgaW50IG91dExlbmd0aCA9
IG91dC5udW1CaXRzKCk7CisgICAgQVNTRVJUKG91dExlbmd0aCA+PSAwKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG91dExlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmICghb3V0LmdldChpKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmICghbnVtQ2FwdHVyZWRWYXJzKSB7
CkBAIC02NjYsNyArNjQzLDcgQEAgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXM6OgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkub2Zmc2V0KCkgPiBjYXB0dXJlU3RhcnQobV9jb2RlQmxv
Y2spKQorICAgICAgICBpZiAodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkub2Zmc2V0KCkgPiBj
b2RlQmxvY2stPmNhcHR1cmVTdGFydCgpKQogICAgICAgICAgICAgcmVzdWx0LnNldChpKTsKICAg
ICAgICAgZWxzZSAKICAgICAgICAgICAgIHJlc3VsdC5zZXQobnVtQ2FwdHVyZWRWYXJzICsgaSk7
CkBAIC02NzQsNiArNjUxLDM5IEBAIEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzOjoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCkKK3sKKyAgICBGYXN0Qml0VmVjdG9yIG91dDsKKyAgICBnZXRMaXZlbmVz
c0luZm9Gb3JOb25DYXB0dXJlZFZhcnNBdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBv
dXQpOworICAgIHJldHVybiBnZXRMaXZlbmVzc0luZm8obV9jb2RlQmxvY2ssIG91dCk7Cit9CisK
K3ZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKEZ1bGxC
eXRlY29kZUxpdmVuZXNzJiByZXN1bHQpCit7CisgICAgRmFzdEJpdFZlY3RvciBvdXQ7CisgICAg
RmFzdEJpdFZlY3RvciB1c2VzOworICAgIEZhc3RCaXRWZWN0b3IgZGVmczsKKyAgICAKKyAgICBy
ZXN1bHQubV9jb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKKyAgICByZXN1bHQubV9tYXAuY2xlYXIo
KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2Jhc2ljQmxvY2tzLnNpemUoKTsgaS0t
OykgeworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9iYXNpY0Jsb2Nrc1tp
XS5nZXQoKTsKKyAgICAgICAgaWYgKGJsb2NrLT5pc0VudHJ5QmxvY2soKSB8fCBibG9jay0+aXNF
eGl0QmxvY2soKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgb3V0
ID0gYmxvY2stPm91dCgpOworICAgICAgICB1c2VzLnJlc2l6ZShvdXQubnVtQml0cygpKTsKKyAg
ICAgICAgZGVmcy5yZXNpemUob3V0Lm51bUJpdHMoKSk7CisgICAgICAgIAorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBibG9jay0+Ynl0ZWNvZGVPZmZzZXRzKCkuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5ieXRlY29kZU9mZnNl
dHMoKVtpXTsKKyAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24obV9jb2RlQmxvY2ssIG1f
YmFzaWNCbG9ja3MsIGJ5dGVjb2RlT2Zmc2V0LCB1c2VzLCBkZWZzLCBvdXQpOworICAgICAgICAg
ICAgcmVzdWx0Lm1fbWFwLmFkZChieXRlY29kZU9mZnNldCwgb3V0KTsKKyAgICAgICAgfQorICAg
IH0KK30KKwogdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKCkKIHsK
ICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2NvZGVCbG9jay0+dm0oKS0+aW50ZXJw
cmV0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDEzICszNCwxNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IENvZGVCbG9jazsKK2NsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzOwogCiBjbGFzcyBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMgewogcHVibGljOgogICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cyhDb2RlQmxvY2sqKTsKLQorICAgIAogICAgIGJvb2wgb3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVP
ZmZzZXQoaW50IG9wZXJhbmQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICBGYXN0Qml0
VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQpOworICAgIAorICAgIHZvaWQgY29tcHV0ZUZ1bGxMaXZlbmVzcyhGdWxsQnl0ZWNvZGVM
aXZlbmVzcyYgcmVzdWx0KTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGUoKTsKQEAgLTUz
LDYgKzU2LDEyIEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxv
Y2s+ID4gbV9iYXNpY0Jsb2NrczsKIH07CiAKK2lubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xp
dmUoQ29kZUJsb2NrKiwgaW50IG9wZXJhbmQpOworaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05v
dEFsd2F5c0xpdmVJc0xpdmUoQ29kZUJsb2NrKiwgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBp
bnQgb3BlcmFuZCk7CitpbmxpbmUgYm9vbCBvcGVyYW5kSXNMaXZlKENvZGVCbG9jayosIGNvbnN0
IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpOworCitGYXN0Qml0VmVjdG9yIGdldExp
dmVuZXNzSW5mbyhDb2RlQmxvY2sqLCBjb25zdCBGYXN0Qml0VmVjdG9yJiBvdXQpOworCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc19oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXNfaAorI2RlZmluZSBCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXNJbmxpbmVzX2gKKworI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5l
IGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50IG9wZXJh
bmQpCit7CisgICAgaWYgKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0FyZ3VtZW50KCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBvcGVyYW5kIDw9IGNvZGVCbG9jay0+Y2Fw
dHVyZVN0YXJ0KCkgJiYgb3BlcmFuZCA+IGNvZGVCbG9jay0+Y2FwdHVyZUVuZCgpOworfQorCitp
bmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKK3sKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKKyAgICBpZiAodmlydHVhbFJlZy5v
ZmZzZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkpCisgICAgICAgIHJldHVybiBvdXQu
Z2V0KHZpcnR1YWxSZWcudG9Mb2NhbCgpKTsKKyAgICBzaXplX3QgaW5kZXggPSB2aXJ0dWFsUmVn
LnRvTG9jYWwoKSAtIGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCk7CisgICAgaWYgKGluZGV4ID49
IG91dC5udW1CaXRzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gb3V0Lmdl
dChpbmRleCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhbmRJc0xpdmUoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpCit7CisgICAgcmV0
dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUoY29kZUJsb2NrLCBvcGVyYW5kKSB8fCBvcGVyYW5kVGhh
dElzTm90QWx3YXlzTGl2ZUlzTGl2ZShjb2RlQmxvY2ssIG91dCwgb3BlcmFuZCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDYgKzM1NCwyNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gbV9uZWVkc0FjdGl2YXRpb247CiAgICAgfQorICAgIAorICAg
IHVuc2lnbmVkIGNhcHR1cmVDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIXN5bWJv
bFRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHN5bWJvbFRh
YmxlKCktPmNhcHR1cmVDb3VudCgpOworICAgIH0KKyAgICAKKyAgICBpbnQgY2FwdHVyZVN0YXJ0
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghc3ltYm9sVGFibGUoKSkKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCk7
CisgICAgfQorICAgIAorICAgIGludCBjYXB0dXJlRW5kKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghc3ltYm9sVGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOworICAgIH0KIAogICAgIGJvb2wgaXNDYXB0
dXJlZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgSW5saW5lQ2FsbEZyYW1lKiA9IDApIGNvbnN0
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3Jp
Z2luLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgdm9p
ZCBJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRleHQoUHJpbgogICAgIGVsc2UKICAgICAgICAg
b3V0LnByaW50KCIsIGtub3duIGNhbGxlZTogIiwgaW5Db250ZXh0KGNhbGxlZVJlY292ZXJ5LmNv
bnN0YW50KCksIGNvbnRleHQpKTsKICAgICBvdXQucHJpbnQoIiwgbnVtQXJncyt0aGlzID0gIiwg
YXJndW1lbnRzLnNpemUoKSk7Ci0gICAgb3V0LnByaW50KCIsIHN0YWNrID49IHIiLCBzdGFja09m
ZnNldCk7CisgICAgb3V0LnByaW50KCIsIHN0YWNrIDwgbG9jIiwgVmlydHVhbFJlZ2lzdGVyKHN0
YWNrT2Zmc2V0KS50b0xvY2FsKCkpOwogICAgIG91dC5wcmludCgiPiIpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9G
dWxsQnl0ZWNvZGVMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEZ1bGxCeXRlY29kZUxpdmVuZXNzX2gKKyNkZWZpbmUgRnVsbEJ5
dGVjb2RlTGl2ZW5lc3NfaAorCisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKKwordHlwZWRl
ZiBIYXNoTWFwPHVuc2lnbmVkLCBGYXN0Qml0VmVjdG9yLCBXVEY6OkludEhhc2g8dW5zaWduZWQ+
LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPiA+IEJ5dGVjb2Rl
VG9CaXRtYXBNYXA7CisKK2NsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKK3B1YmxpYzoKKyAg
ICBGdWxsQnl0ZWNvZGVMaXZlbmVzcygpIDogbV9jb2RlQmxvY2soMCkgeyB9CisgICAgCisgICAg
Ly8gV2Ugc2F5ICJvdXQiIHRvIHJlZmVyIHRvIHRoZSBiaXR2ZWN0b3IgdGhhdCBjb250YWlucyBy
YXcgcmVzdWx0cyBmb3IgYSBieXRlY29kZQorICAgIC8vIGluc3RydWN0aW9uLgorICAgIGNvbnN0
IEZhc3RCaXRWZWN0b3ImIGdldE91dCh1bnNpZ25lZCBieXRlY29kZUluZGV4KSBjb25zdAorICAg
IHsKKyAgICAgICAgQnl0ZWNvZGVUb0JpdG1hcE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1f
bWFwLmZpbmQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VSVChpdGVyICE9IG1fbWFwLmVu
ZCgpKTsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhbmRJc0xpdmUoaW50IG9wZXJhbmQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShtX2NvZGVCbG9jaywg
b3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUobV9jb2RlQmxvY2ss
IGdldE91dChieXRlY29kZUluZGV4KSwgb3BlcmFuZCk7CisgICAgfQorICAgIAorICAgIEZhc3RC
aXRWZWN0b3IgZ2V0TGl2ZW5lc3ModW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBnZXRMaXZlbmVzc0luZm8obV9jb2RlQmxvY2ssIGdldE91dChieXRl
Y29kZUluZGV4KSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworICAgIAorICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CisgICAgQnl0ZWNvZGVUb0JpdG1hcE1hcCBtX21hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRnVsbEJ5dGVjb2RlTGl2ZW5lc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0
eS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBBdmFpbGFiaWxpdHk6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9mbHVzaGVkQXQsICIv
Iik7CisgICAgCisgICAgaWYgKG5vZGVJc1VuZGVjaWRlZCgpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiVW5kZWNpZGVkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKG5v
ZGVJc1VuYXZhaWxhYmxlKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJVbmF2YWlsYWJsZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG91dC5wcmludChub2RlKCkpOworfQor
Cit2b2lkIEF2YWlsYWJpbGl0eTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1w
Q29udGV4dCopIGNvbnN0Cit7CisgICAgZHVtcChvdXQpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR0F2YWlsYWJpbGl0eV9oCisjZGVmaW5lIERGR0F2YWlsYWJpbGl0
eV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0ZsdXNoZWRBdC5oIgor
I2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK3N0cnVjdCBOb2RlOworCitjbGFzcyBBdmFpbGFiaWxpdHkgeworcHVi
bGljOgorICAgIEF2YWlsYWJpbGl0eSgpCisgICAgICAgIDogbV9ub2RlKDApCisgICAgICAgICwg
bV9mbHVzaGVkQXQoRGVhZEZsdXNoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQg
QXZhaWxhYmlsaXR5KE5vZGUqIG5vZGUpCisgICAgICAgIDogbV9ub2RlKG5vZGUpCisgICAgICAg
ICwgbV9mbHVzaGVkQXQoQ29uZmxpY3RpbmdGbHVzaCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IGV4cGxpY2l0IEF2YWlsYWJpbGl0eShGbHVzaGVkQXQgZmx1c2hlZEF0KQorICAgICAgICA6IG1f
bm9kZSh1bmF2YWlsYWJsZU1hcmtlcigpKQorICAgICAgICAsIG1fZmx1c2hlZEF0KGZsdXNoZWRB
dCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEF2YWlsYWJpbGl0eShOb2RlKiBub2RlLCBGbHVz
aGVkQXQgZmx1c2hlZEF0KQorICAgICAgICA6IG1fbm9kZShub2RlKQorICAgICAgICAsIG1fZmx1
c2hlZEF0KGZsdXNoZWRBdCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBBdmFpbGFi
aWxpdHkgdW5hdmFpbGFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eSh1
bmF2YWlsYWJsZU1hcmtlcigpLCBGbHVzaGVkQXQoQ29uZmxpY3RpbmdGbHVzaCkpOworICAgIH0K
KyAgICAKKyAgICBBdmFpbGFiaWxpdHkgd2l0aEZsdXNoKEZsdXNoZWRBdCBmbHVzaCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBBdmFpbGFiaWxpdHkobV9ub2RlLCBmbHVzaCk7CisgICAg
fQorICAgIAorICAgIEF2YWlsYWJpbGl0eSB3aXRoTm9kZShOb2RlKiBub2RlKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIEF2YWlsYWJpbGl0eShub2RlLCBtX2ZsdXNoZWRBdCk7CisgICAg
fQorICAgIAorICAgIEF2YWlsYWJpbGl0eSB3aXRoVW5hdmFpbGFibGVOb2RlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiB3aXRoTm9kZSh1bmF2YWlsYWJsZU1hcmtlcigpKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBub2RlSXNVbmRlY2lkZWQoKSBjb25zdCB7IHJldHVybiAhbV9ub2Rl
OyB9CisgICAgYm9vbCBub2RlSXNVbmF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZSA9
PSB1bmF2YWlsYWJsZU1hcmtlcigpOyB9CisgICAgCisgICAgYm9vbCBoYXNOb2RlKCkgY29uc3Qg
eyByZXR1cm4gIW5vZGVJc1VuZGVjaWRlZCgpICYmICFub2RlSXNVbmF2YWlsYWJsZSgpOyB9Cisg
ICAgCisgICAgTm9kZSogbm9kZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIW5vZGVJ
c1VuZGVjaWRlZCgpKTsKKyAgICAgICAgQVNTRVJUKCFub2RlSXNVbmF2YWlsYWJsZSgpKTsKKyAg
ICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICB9CisgICAgCisgICAgRmx1c2hlZEF0IGZsdXNoZWRB
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZmx1c2hlZEF0OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiBub2RlSXNVbmF2YWlsYWJsZSgpICYmIGZsdXNoZWRBdCgpLmZv
cm1hdCgpID09IENvbmZsaWN0aW5nRmx1c2g7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBBdmFpbGFiaWxpdHkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbm9k
ZSA9PSBvdGhlci5tX25vZGUKKyAgICAgICAgICAgICYmIG1fZmx1c2hlZEF0ID09IG90aGVyLm1f
Zmx1c2hlZEF0OworICAgIH0KKyAgICAKKyAgICBBdmFpbGFiaWxpdHkgbWVyZ2UoY29uc3QgQXZh
aWxhYmlsaXR5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBBdmFpbGFiaWxp
dHkoCisgICAgICAgICAgICBtZXJnZU5vZGVzKG1fbm9kZSwgb3RoZXIubV9ub2RlKSwKKyAgICAg
ICAgICAgIG1fZmx1c2hlZEF0Lm1lcmdlKG90aGVyLm1fZmx1c2hlZEF0KSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
c3RhdGljIE5vZGUqIG1lcmdlTm9kZXMoTm9kZSogYSwgTm9kZSogYikKKyAgICB7CisgICAgICAg
IGlmICghYSkKKyAgICAgICAgICAgIHJldHVybiBiOworICAgICAgICBpZiAoIWIpCisgICAgICAg
ICAgICByZXR1cm4gYTsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiBh
OworICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVNYXJrZXIoKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIE5vZGUqIHVuYXZhaWxhYmxlTWFya2VyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8Tm9kZSo+KHN0YXRpY19jYXN0PGludHB0cl90PigxKSk7CisgICAgfQorICAg
IAorICAgIE5vZGUqIG1fbm9kZTsKKyAgICBGbHVzaGVkQXQgbV9mbHVzaGVkQXQ7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwor
I2VuZGlmIC8vIERGR0F2YWlsYWJpbGl0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5o
IgorI2luY2x1ZGUgIkRGR0F2YWlsYWJpbGl0eS5oIgogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVj
dGlvbi5oIgogI2luY2x1ZGUgIkRGR0ZsdXNoZWRBdC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIK
QEAgLTE0MCw4ICsxNDEsOCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNC
bG9jCiAgICAgc3RydWN0IFNTQURhdGEgewogICAgICAgICBPcGVyYW5kczxGbHVzaGVkQXQ+IGZs
dXNoQXRIZWFkOwogICAgICAgICBPcGVyYW5kczxGbHVzaGVkQXQ+IGZsdXNoQXRUYWlsOwotICAg
ICAgICBPcGVyYW5kczxOb2RlKj4gYXZhaWxhYmlsaXR5QXRIZWFkOwotICAgICAgICBPcGVyYW5k
czxOb2RlKj4gYXZhaWxhYmlsaXR5QXRUYWlsOworICAgICAgICBPcGVyYW5kczxBdmFpbGFiaWxp
dHk+IGF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBh
dmFpbGFiaWxpdHlBdFRhaWw7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdEhlYWQ7CiAg
ICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdFRhaWw7CiAgICAgICAgIEhhc2hNYXA8Tm9kZSos
IEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzA3Myw2ICszMDczLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVD
aGVjayhnbG9iYWxPYmplY3QsIHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1
cmUoKSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJl
Z2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHNwZWNpZmljVmFs
dWUgPSBzdGF0dXMuc3BlY2lmaWNWYWx1ZSgpKQogICAgICAgICAgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKGRzdCksIGNlbGxDb25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7
CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMzA4MSw2ICszMDgyLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Y2FzZSBHbG9iYWxWYXI6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBl
bnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHVpZCk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpIHx8ICFtX2dyYXBoLndhdGNocG9pbnRz
KCkuaXNTdGlsbFZhbGlkKGVudHJ5LndhdGNocG9pbnRTZXQoKSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwg
T3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbikpKTsKQEAgLTMxMzEsNiArMzEzMyw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIE5vZGUq
IGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0
dXMub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
Z2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBoYW5kbGVQdXRC
eU9mZnNldChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eU9mZnNl
dD4ob3BlcmFuZCksIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAgICAgICAgICAgICAg
ICAgLy8gS2VlcCBzY29wZSBhbGl2ZSB1bnRpbCBhZnRlciBwdXQuCiAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwpAQCAtMzEz
OCw2ICszMTQxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgICAgICBj
YXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAgICAgICAg
ICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFi
bGUoKS0+Z2V0KHVpZCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFlbnRyeS5jb3VsZEJlV2F0
Y2hlZCgpIHx8ICFtX2dyYXBoLndhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlkKGVudHJ5LndhdGNo
cG9pbnRTZXQoKSkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0R2xvYmFsVmFyLCBP
cEluZm8ob3BlcmFuZCksIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAx
NTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogRGlzYXNzZW1ibGVyOjpEaXNhc3NlbWJsZXIoR3JhcGgmIGdyYXBoKQogICAgIDog
bV9ncmFwaChncmFwaCkKIHsKKyAgICBtX2R1bXBDb250ZXh0LmdyYXBoID0gJm1fZ3JhcGg7CiAg
ICAgbV9sYWJlbEZvckJsb2NrSW5kZXgucmVzaXplKGdyYXBoLm51bUJsb2NrcygpKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAJKHJl
dmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3Jt
YXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw5IEBAIHZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBGbHUKICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAg
ICBvdXQucHJpbnQoIkZsdXNoZWRKU1ZhbHVlIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENvbmZsaWN0aW5nRmx1c2g6CisgICAgICAgIG91dC5wcmludCgiQ29uZmxpY3RpbmdGbHVzaCIp
OworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5o
CShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNo
Rm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDggQEAgZW51bSBGbHVzaEZvcm1h
dCB7CiAgICAgRmx1c2hlZERvdWJsZSwKICAgICBGbHVzaGVkQ2VsbCwKICAgICBGbHVzaGVkQm9v
bGVhbiwKLSAgICBGbHVzaGVkSlNWYWx1ZQorICAgIEZsdXNoZWRKU1ZhbHVlLAorICAgIENvbmZs
aWN0aW5nRmx1c2gKIH07CiAKIGlubGluZSBOb2RlRmxhZ3MgcmVzdWx0Rm9yKEZsdXNoRm9ybWF0
IGZvcm1hdCkKQEAgLTU0LDYgKzU1LDcgQEAgaW5saW5lIE5vZGVGbGFncyByZXN1bHRGb3IoRmx1
c2hGb3JtYXQgZgogICAgIGNhc2UgRGVhZEZsdXNoOgogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6
CiAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAgICAg
ICAgIHJldHVybiBOb2RlUmVzdWx0SlM7CiAgICAgY2FzZSBGbHVzaGVkSW50MzI6CiAgICAgICAg
IHJldHVybiBOb2RlUmVzdWx0SW50MzI7CkBAIC03Myw2ICs3NSw3IEBAIGlubGluZSBVc2VLaW5k
IHVzZUtpbmRGb3IoRmx1c2hGb3JtYXQgZm8KICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNh
c2UgRGVhZEZsdXNoOgogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgY2FzZSBDb25mbGlj
dGluZ0ZsdXNoOgogICAgICAgICByZXR1cm4gVW50eXBlZFVzZTsKICAgICBjYXNlIEZsdXNoZWRD
ZWxsOgogICAgICAgICByZXR1cm4gQ2VsbFVzZTsKQEAgLTkzLDYgKzk2LDcgQEAgaW5saW5lIERh
dGFGb3JtYXQgZGF0YUZvcm1hdEZvcihGbHVzaEZvcgogewogICAgIHN3aXRjaCAoZm9ybWF0KSB7
CiAgICAgY2FzZSBEZWFkRmx1c2g6CisgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgogICAgICAg
ICByZXR1cm4gRGF0YUZvcm1hdERlYWQ7CiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAgICAg
ICAgcmV0dXJuIERhdGFGb3JtYXRKUzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRmx1c2hlZEF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZsdXNoZWRBdC5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRmx1c2hlZEF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgRmx1c2hlZEF0OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZm9ybWF0ID09IERlYWRGbHVz
aCkKKyAgICBpZiAobV9mb3JtYXQgPT0gRGVhZEZsdXNoIHx8IG1fZm9ybWF0ID09IENvbmZsaWN0
aW5nRmx1c2gpCiAgICAgICAgIG91dC5wcmludChtX2Zvcm1hdCk7CiAgICAgZWxzZQogICAgICAg
ICBvdXQucHJpbnQoInIiLCBtX3ZpcnR1YWxSZWdpc3RlciwgIjoiLCBtX2Zvcm1hdCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoZWRBdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgJKHJldmlzaW9uIDE1OTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hlZEF0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDYgKzQyLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAorICAg
IGV4cGxpY2l0IEZsdXNoZWRBdChGbHVzaEZvcm1hdCBmb3JtYXQpCisgICAgICAgIDogbV9mb3Jt
YXQoZm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEZWFkRmx1c2ggfHwg
Zm9ybWF0ID09IENvbmZsaWN0aW5nRmx1c2gpOworICAgIH0KKyAgICAKICAgICBGbHVzaGVkQXQo
Rmx1c2hGb3JtYXQgZm9ybWF0LCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAg
ICAgICA6IG1fZm9ybWF0KGZvcm1hdCkKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3Rlcih2aXJ0
dWFsUmVnaXN0ZXIpCkBAIC02NSw2ICs3MSwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEZsdXNoZWRBdCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOyB9CiAgICAgCisgICAgRmx1c2hlZEF0IG1lcmdlKGNvbnN0IEZsdXNoZWRBdCYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzKQorICAgICAgICAgICAgcmV0
dXJuIG90aGVyOworICAgICAgICBpZiAoIW90aGVyKQorICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgIHJldHVybiBGbHVzaGVkQXQoQ29uZmxpY3RpbmdGbHVzaCk7CisgICAgfQorICAg
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDExICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CiAKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNs
dWRlICJERkdDbG9iYmVyU2V0LmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUg
IkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKKyNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZl
bmVzcy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCIKICNpbmNsdWRlICJP
cGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCkBAIC0zOTMsNiArMzk1
LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogdm9pZCBHcmFw
aDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkKIHsKICAgICBE
dW1wQ29udGV4dCBteUNvbnRleHQ7CisgICAgbXlDb250ZXh0LmdyYXBoID0gdGhpczsKICAgICBp
ZiAoIWNvbnRleHQpCiAgICAgICAgIGNvbnRleHQgPSAmbXlDb250ZXh0OwogICAgIApAQCAtNjQz
LDYgKzY0Niw1OCBAQCB2b2lkIEdyYXBoOjppbml0aWFsaXplTm9kZU93bmVycygpCiAgICAgICAg
ICAgICBibG9jay0+YXQobm9kZUluZGV4KS0+bWlzYy5vd25lciA9IGJsb2NrOwogICAgIH0KIH0K
KworRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKK3sKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxs
Qnl0ZWNvZGVMaXZlbmVzcz4+OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZp
bmQoY29kZUJsb2NrKTsKKyAgICBpZiAoaXRlciAhPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZW5kKCkp
CisgICAgICAgIHJldHVybiAqaXRlci0+dmFsdWU7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRy
PEZ1bGxCeXRlY29kZUxpdmVuZXNzPiBsaXZlbmVzcyA9IHN0ZDo6bWFrZV91bmlxdWU8RnVsbEJ5
dGVjb2RlTGl2ZW5lc3M+KCk7CisgICAgY29kZUJsb2NrLT5saXZlbmVzc0FuYWx5c2lzKCkuY29t
cHV0ZUZ1bGxMaXZlbmVzcygqbGl2ZW5lc3MpOworICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBy
ZXN1bHQgPSAqbGl2ZW5lc3M7CisgICAgbV9ieXRlY29kZUxpdmVuZXNzLmFkZChjb2RlQmxvY2ss
IHN0ZDo6bW92ZShsaXZlbmVzcykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Z1bGxCeXRl
Y29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUpCit7CisgICAgcmV0dXJuIGxpdmVuZXNzRm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9y
KGlubGluZUNhbGxGcmFtZSkpOworfQorCitib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCit7CisgICAgZm9y
ICg7OykgeworICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA8IGNvZGVPcmlnaW4uc3RhY2tP
ZmZzZXQoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpIHsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciByZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgb3Bl
cmFuZC5vZmZzZXQoKSAtIGNvZGVPcmlnaW4uc3RhY2tPZmZzZXQoKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVnLm9mZnNldCgpIDwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZWcub2Zmc2V0KCkg
PT0gSlNTdGFjazo6Q2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBpZiAocmVnLm9mZnNldCgpID09IEpTU3RhY2s6OlNjb3BlQ2hhaW4pCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgcmV0dXJuIGxpdmVuZXNzRm9yKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKS5v
cGVyYW5kSXNMaXZlKAorICAgICAgICAgICAgICAgIHJlZy5vZmZzZXQoKSwgY29kZU9yaWdpbi5i
eXRlY29kZUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAg
ICAgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CisgICAg
fQorICAgIAorICAgIHJldHVybiB0cnVlOworfQogICAgIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAx
NTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxNiw2ICs0MTYsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXhlY3V0
YWJsZUZvcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAgIAorICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUpCisgICAgeworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAg
IHJldHVybiBtX3Byb2ZpbGVkQmxvY2s7CisgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9j
a0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOworICAgIH0KKyAgICAKICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmln
aW4pCiAgICAgewogICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBtX3Byb2ZpbGVkQmxvY2spOwpAQCAtNzc2LDYg
Kzc4MywxMCBAQCBwdWJsaWM6CiAgICAgRGVzaXJlZFdhdGNocG9pbnRzJiB3YXRjaHBvaW50cygp
IHsgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50czsgfQogICAgIERlc2lyZWRTdHJ1Y3R1cmVDaGFp
bnMmIGNoYWlucygpIHsgcmV0dXJuIG1fcGxhbi5jaGFpbnM7IH0KICAgICAKKyAgICBGdWxsQnl0
ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2NrKik7CisgICAgRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFtZSopOworICAgIGJvb2wgaXNMaXZl
SW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIsIENvZGVPcmlnaW4pOworICAgIAogICAgIFZNJiBt
X3ZtOwogICAgIFBsYW4mIG1fcGxhbjsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAt
Nzk3LDYgKzgwOCw3IEBAIHB1YmxpYzoKICAgICBTZWdtZW50ZWRWZWN0b3I8U3dpdGNoRGF0YSwg
ND4gbV9zd2l0Y2hEYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5s
aW5lVmFyaWFibGVEYXRhOwogICAgIE93blB0cjxJbmxpbmVDYWxsRnJhbWVTZXQ+IG1faW5saW5l
Q2FsbEZyYW1lczsKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxs
Qnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAgICBib29sIG1faGFzQXJn
dW1lbnRzOwogICAgIEhhc2hTZXQ8RXhlY3V0YWJsZUJhc2UqPiBtX2V4ZWN1dGFibGVzV2hvc2VB
cmd1bWVudHNFc2NhcGVkOwogICAgIEJpdFZlY3RvciBtX2xhenlWYXJzOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3NyArNDcsOTYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
Z3JhcGgubV9mb3JtID09IFNTQSk7CiAgICAgICAgIAotICAgICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IGRlcHRoRmlyc3Q7Ci0gICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3Jk
ZXIoZGVwdGhGaXJzdCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9n
cmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2Et
PmF2YWlsYWJpbGl0eUF0SGVhZC5maWxsKEF2YWlsYWJpbGl0eSgpKTsKKyAgICAgICAgICAgIGJs
b2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbC5maWxsKEF2YWlsYWJpbGl0eSgpKTsKKyAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmly
c3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhG
aXJzdFtpXTsKLSAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5maWxs
KDApOwotICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLmZpbGwoMCk7
CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2dyYXBoLmJsb2NrKDApOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspIHsKKyAgICAgICAgICAgIHJvb3QtPnNzYS0+
YXZhaWxhYmlsaXR5QXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSA9CisgICAgICAgICAgICAgICAg
QXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpLndpdGhGbHVzaCgKKyAgICAgICAgICAgICAgICAg
ICAgRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChh
cmd1bWVudCkpKTsKICAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gcm9v
dC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspCisg
ICAgICAgICAgICByb290LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5sb2NhbChsb2NhbCkgPSBB
dmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBkZXB0aEZpcnN0W2ldOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBXZSBlZGl0IGF2YWlsYWJpbGl0eUF0VGFpbCBpbi1wbGFjZSwgYnV0IGZpcnN0IGluaXRp
YWxpemUgaXQgdG8KLSAgICAgICAgICAgIC8vIGF2YWlsYWJpbGl0eUF0SGVhZC4KLSAgICAgICAg
ICAgIE9wZXJhbmRzPE5vZGUqPiYgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmls
aXR5QXRUYWlsOwotICAgICAgICAgICAgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxh
YmlsaXR5QXRIZWFkOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7Ci0g
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgU2V0
TG9jYWw6Ci0gICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAgICAgIGNh
c2UgTW92SGludEFuZENoZWNrOiB7Ci0gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICAgICAgICAgICAg
ICBhdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVudDogewotICAgICAgICAgICAgICAgICAgICBh
dmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGU7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQorICAgICAgICBpZiAobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JP
U1JFbnRyeU1vZGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSBtX2dyYXBo
Lm1fcHJvZmlsZWRCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7IGxvY2FsLS07KSB7CisgICAg
ICAgICAgICAgICAgcm9vdC0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQubG9jYWwobG9jYWwpID0K
KyAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpLndpdGhGbHVz
aCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9jYWwpKSk7CiAgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGVmZmljaWVudCBi
eSBwcm9jZXNzaW5nIGJsb2NrcyBpbiByZXZlcnNlIHBvc3RvcmRlci4KKyAgICAgICAgT3BlcmFu
ZHM8QXZhaWxhYmlsaXR5PiBhdmFpbGFiaWxpdHk7CisgICAgICAgIGJvb2wgY2hhbmdlZDsKKyAg
ICAgICAgZG8geworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBqLS07
KSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nl
c3NvcihqKTsKLSAgICAgICAgICAgICAgICBPcGVyYW5kczxOb2RlKj4mIHN1Y2Nlc3NvckF2YWls
YWJpbGl0eSA9IHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7Ci0gICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBrID0gYXZhaWxhYmlsaXR5LnNpemUoKTsgay0tOykgewotICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBteU5vZGUgPSBhdmFpbGFiaWxpdHlba107Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghbXlOb2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nl
c3Nvci0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKG15Tm9kZSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBvdmVyd3JpdGUgYXZhaWxhYmlsaXR5IHdpdGggYSBi
b2d1cyBub2RlCi0gICAgICAgICAgICAgICAgICAgIC8vIGF0IG1lcmdlIHBvaW50cy4gVGhpcyBp
cyBmaW5lLCBzaW5jZSBtZXJnZSBwb2ludHMgaGF2ZQotICAgICAgICAgICAgICAgICAgICAvLyBN
b3ZIaW50KFBoaSkncyB0byB3b3JrIGFyb3VuZCB0aGlzLiBUaGUgb3V0Y29tZSBvZiB0aGlzIGlz
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHlvdSBtaWdodCBoYXZlIGEgcHJvZ3JhbSBpbiB3aGlj
aCBhIG5vZGUgaGFwcGVucyB0byByZW1haW4KLSAgICAgICAgICAgICAgICAgICAgLy8gbGl2ZSBp
bnRvIHNvbWUgYmxvY2sgQiwgYW5kIHNlcGFyYXRlbHkgKGR1ZSB0byBjb3B5Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIHByb3BhZ2F0aW9uKSBqdXN0IG9uZSBvZiB0aGUgcHJlZGVjZXNzb3JzIG9m
IEIgaXNzdWVkIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gTW92SGludCBwdXR0aW5nIHRoYXQg
bm9kZSBpbnRvIHNvbWUgbG9jYWwuIFRoZW4gaW4gQiB3ZSBtaWdodAotICAgICAgICAgICAgICAg
ICAgICAvLyB0aGluayB0aGF0IHRoYXQgbm9kZSBpcyBhIHZhbGlkIHZhbHVlIGZvciB0aGF0IGxv
Y2FsLiBPZgotICAgICAgICAgICAgICAgICAgICAvLyBjb3Vyc2UgaWYgdGhhdCBsb2NhbCB3YXMg
YWN0dWFsbHkgbGl2ZSBpbiBCLCBCIHdvdWxkIGhhdmUgYQotICAgICAgICAgICAgICAgICAgICAv
LyBQaGkgZm9yIGl0LiBTbyBlc3NlbnRpYWxseSB3ZSdsbCBoYXZlIE9TUiBleGl0IGRyb3BwaW5n
IHRoaXMKLSAgICAgICAgICAgICAgICAgICAgLy8gbm9kZSdzIHZhbHVlIGludG8gdGhlIGxvY2Fs
IHdoZW4gd2Ugb3RoZXJ3aXNlIChpbiB0aGUgREZHKQotICAgICAgICAgICAgICAgICAgICAvLyB3
b3VsZCBoYXZlIGRyb3BwZWQgdW5kZWZpbmVkIGludG8gdGhlIGxvY2FsLiBUaGlzIHNlZW1zCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGhhcm1sZXNzLgotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yQXZhaWxhYmlsaXR5W2tdID0gbXlOb2RlOworICAg
ICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJp
bGl0eUF0SGVhZDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4
KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHku
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEF2YWlsYWJpbGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCksIHZhcmlhYmxlLT5mbHVzaGVkQXQo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0
QXJndW1lbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUsIHZhcmlhYmxlLT5mbHVzaGVk
QXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
TW92SGludDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAg
ICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGF2
YWlsYWJpbGl0eSA9PSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJs
b2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCA9IGF2YWlsYWJpbGl0eTsKKyAgICAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3Vj
Y2Vzc29ySW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vz
c29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eS5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV0g
PSBhdmFpbGFiaWxpdHlbaV0ubWVyZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vj
Y2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXSk7CisgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAg
fSB3aGlsZSAoY2hhbmdlZCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCiBjbGFzcyBHcmFwaDsKIAotLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5hdmFp
bGFiaWx0aXlBdEhlYWQvVGFpbC4gVGhpcyByZWxpZXMgb24gbGl2ZW5lc3MKLS8vIGFuYWx5c2lz
IHBoYXNlIGhhdmluZyBiZWVuIHJ1biBhbmQgdGhlIGdyYXBoIG5vdCBoYXZpbmcgYmVlbiB0cmFu
c2Zvcm1lZAotLy8gYWZ0ZXIgdGhhdC4KKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+YXZh
aWxhYmlsdGl5QXRIZWFkL1RhaWwuIFRoaXMgaXMgYSBmb3J3YXJkIGZsb3cgdHlwZSBpbmZlcmVu
Y2UKKy8vIG92ZXIgTW92SGludHMgYW5kIFNldExvY2Fscy4KIAogYm9vbCBwZXJmb3JtT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXMoR3JhcGgmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVk
ZSAiREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0
aW9uSW5qZWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5oIgorI2luY2x1ZGUgIkRGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIgog
I2luY2x1ZGUgIkRGR1NTQUNvbnZlcnNpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0YWNrTGF5
b3V0UGhhc2UuaCIKICNpbmNsdWRlICJERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmgiCkBA
IC0yNjgsNiArMjY5LDggQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRo
cgogICAgICAgICBwZXJmb3JtTElDTShkZmcpOwogICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFs
eXNpcyhkZmcpOwogICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CisgICAgICAgIGlmIChPcHRpb25z
Ojp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpKQorICAgICAgICAgICAgcGVyZm9ybVJlc3Vy
cmVjdGlvbkZvclZhbGlkYXRpb24oZGZnKTsKICAgICAgICAgcGVyZm9ybURDRShkZmcpOyAvLyBX
ZSByZWx5IG9uIHRoaXMgdG8gY29udmVydCBkZWFkIFNldExvY2FscyBpbnRvIHRoZSBhcHByb3By
aWF0ZSBoaW50LCBhbmQgdG8ga2lsbCBkZWFkIGNvZGUgdGhhdCB3b24ndCBiZSByZWNvZ25pemVk
IGFzIGRlYWQgYnkgTExWTS4KICAgICAgICAgcGVyZm9ybVN0YWNrTGF5b3V0KGRmZyk7CiAgICAg
ICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1Jlc3VycmVjdGlvbkZvclZhbGlk
YXRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNp
Y0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5z
ZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25z
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgUmVzdXJyZWN0
aW9uRm9yVmFsaWRhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBSZXN1
cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNl
KGdyYXBoLCAicmVzdXJyZWN0aW9uIGZvciB2YWxpZGF0aW9uIikKKyAgICB7CisgICAgfQorICAg
IAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEluc2VydGlvblNldCBpbnNlcnRpb25T
ZXQobV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytu
b2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5oYXNSZXN1bHQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBQaGFu
dG9tLCBub2RlLT5jb2RlT3JpZ2luLCBFZGdlKG5vZGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitib29sIHBl
cmZvcm1SZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFJlc3VycmVjdGlvbiBGb3IgVmFsaWRhdGlv
biBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9u
UGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVzdXJyZWN0aW9uRm9y
VmFsaWRhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1Jlc3Vy
cmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZV9oCisjZGVmaW5lIERGR1Jlc3VycmVjdGlvbkZvclZh
bGlkYXRpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFBsYWNlcyBhIFBoYW50b20gYWZ0
ZXIgZXZlcnkgdmFsdWUtcHJvZHVjaW5nIG5vZGUsIHRoZXJlYnkgZGlzYWJsaW5nIERDRSBmcm9t
IGtpbGxpbmcgaXQuCisvLyBUaGlzIGlzIHVzZWZ1bCBmb3IgdmFsaWRhdGluZyBvdXIgT1NSIGV4
aXQgbWFjaGluZXJ5IGJ5IGluc3RpdHV0aW5nIHRoZSByZXF1aXJlbWVudCB0aGF0CisvLyBhbnkg
bGl2ZS1pbi1ieXRlY29kZSB2YXJpYWJsZSBzaG91bGQgYmUgT1NSLWF2YWlsYWJsZS4gV2l0aG91
dCB0aGlzIHBoYXNlLCBpdCdzIGltcG9zc2libGUKKy8vIHRvIG1ha2Ugc3VjaCBhbiBhc3NlcnRp
b24gYmVjYXVzZSBvdXIgRENFIGlzIG1vcmUgYWdncmVzc2l2ZSB0aGFuIHRoZSBieXRlY29kZSBs
aXZlbmVzcworLy8gYW5hbHlzaXMuCisKK2Jvb2wgcGVyZm9ybVJlc3VycmVjdGlvbkZvclZhbGlk
YXRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9u
UGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
U0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1OCwxMyArMTU4LDM1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJl
ZGVjZXNzb3JzW2pdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yLT5h
cHBlbmROb25UZXJtaW5hbCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgU3BlY05vbmUsIFVwc2lsb24sIGJsb2NrLT5sYXN0KCktPmNvZGVPcmlnaW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBVcHNpbG9uLCBwcmVk
ZWNlc3Nvci0+bGFzdCgpLT5jb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8obm9kZSksIEVkZ2UocHJlZGVjZXNzb3ItPnZhcmlhYmxlc0F0VGFpbFtpXSwg
dXNlS2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBub2Rl
LT5jb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEVkZ2Uobm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZmx1c2hlZExv
Y2FsT3BzLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RG8gbm90aGluZy4gRm9yIG11bHRpcGxlIHJlYXNvbnMuCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVhc29uICMxOiBJZiB0aGUg
bG9jYWwgaXMgZmx1c2hlZCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gYm90aGVyCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gd2l0aCBhIE1vdkhpbnQgc2luY2UgZXZlcnkgcGF0aCB0byB0
aGlzIHBvaW50IGluIHRoZSBjb2RlIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBoYXZlIGZsdXNoZWQgdGhlIGJ5dGVjb2RlIHZhcmlhYmxlIHVzaW5nIGEgU2V0TG9jYWwgYW5k
IGhlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIEF2YWlsYWJpbGl0eTo6
Zmx1c2hlZEF0KCkgd2lsbCBhZ3JlZSwgYW5kIHRoYXQgd2lsbCBiZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHN1ZmZpY2llbnQgZm9yIGZpZ3VyaW5nIG91dCBob3cgdG8gcmVjb3Zl
ciB0aGUgdmFyaWFibGUncyB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFzb24gIzI6IElmIHdlIGhhZCBpbnNlcnRl
ZCBhIE1vdkhpbnQgYW5kIHRoZSBQaGkgZnVuY3Rpb24gaGFkCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gZGllZCAoYmVjYXVzZSB0aGUgb25seSB1c2VyIG9mIHRoZSB2YWx1ZSB3YXMg
dGhlICJmbHVzaCIgLSBpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc29tZSBh
c3luY2hyb25vdXMgcnVudGltZSB0aGluZ3kpIHRoZW4gdGhlIE1vdkhpbnQgd291bGQgdHVybgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludG8gYSBab21iaWVIaW50LCB3aGljaCB3
b3VsZCBmb29sIHVzIGludG8gdGhpbmtpbmcgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB2YXJpYWJsZSBpcyBkZWFkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYXNvbiAjMzogSWYgd2UgaGFkIGlu
c2VydGVkIGEgTW92SGludCB0aGVuIGV2ZW4gaWYgdGhlIFBoaQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHN0YXllZCBhbGl2ZSwgd2Ugd291bGQgc3RpbGwgZW5kIHVwIGdlbmVyYXRp
bmcgaW5lZmZpY2llbnQgY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNl
IHdlIHdvdWxkIGJlIHRlbGxpbmcgdGhlIE9TUiBleGl0IGNvbXBpbGVyIHRvIHVzZSBzb21lIFNT
QQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIGZvciB0aGUgYnl0ZWNvZGUg
dmFyaWFibGUgcmF0aGVyIHRoYW4ganVzdCB0ZWxsaW5nIGl0IHRoYXQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgdmFsdWUgd2FzIGFscmVhZHkgb24gdGhlIHN0YWNrLgorICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKHZhcmlh
YmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhbHVlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWx1ZVNvdXJjZS5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICAgICBj
YXNlIERlYWRGbHVzaDoKKyAgICAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgogICAgICAgICAg
ICAgcmV0dXJuIFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgICAgIGNhc2UgRmx1c2hl
ZEpTVmFsdWU6CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2ss
IHdoZXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nl
c3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2lmbmRlZiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFfaAogI2RlZmluZSBERkdWYXJp
YWJsZUFjY2Vzc0RhdGFfaAogCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZH
RG91YmxlRm9ybWF0U3RhdGUuaCIKICNpbmNsdWRlICJERkdGbHVzaEZvcm1hdC5oIgogI2luY2x1
ZGUgIkRGR0ZsdXNoZWRBdC5oIgpAQCAtMzksNiArNDAsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKK3N0cnVjdCBOb2RlOworCiBlbnVtIERvdWJsZUJhbGxvdCB7IFZv
dGVWYWx1ZSwgVm90ZURvdWJsZSB9OwogCiBjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGEgOiBwdWJs
aWMgVW5pb25GaW5kPFZhcmlhYmxlQWNjZXNzRGF0YT4gewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OCwxNiArNDgsMTYgQEAgdm9pZCBFeGl0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYQog
ICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50KCIsIGluQ29udGV4dChjb25zdGFudCgpLCBjb250
ZXh0KSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNr
OgotICAgICAgICBvdXQucHJpbnQoIkluSlNTdGFjayIpOworICAgICAgICBvdXQucHJpbnQoIklu
SlNTdGFjazpyIiwgdmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOgotICAgICAgICBvdXQucHJpbnQoIkluSlNTdGFj
a0FzSW50MzIiKTsKKyAgICAgICAgb3V0LnByaW50KCJJbkpTU3RhY2tBc0ludDMyOnIiLCB2aXJ0
dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEV4aXRWYWx1ZUluSlNT
dGFja0FzSW50NTI6Ci0gICAgICAgIG91dC5wcmludCgiSW5KU1N0YWNrQXNJbnQ1MiIpOworICAg
ICAgICBvdXQucHJpbnQoIkluSlNTdGFja0FzSW50NTI6ciIsIHZpcnR1YWxSZWdpc3RlcigpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU6Ci0g
ICAgICAgIG91dC5wcmludCgiSW5KU1N0YWNrQXNEb3VibGUiKTsKKyAgICAgICAgb3V0LnByaW50
KCJJbkpTU3RhY2tBc0RvdWJsZTpyIiwgdmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxp
bmVDYWNoZVNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSW5saW5lQ2FjaGVTaXplLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogc2l6ZV90IHNp
emVPZkdldEJ5SWQoKQogewotICAgIHJldHVybiAyOTsKKyAgICByZXR1cm4gMzA7CiB9CiAKIHNp
emVfdCBzaXplT2ZQdXRCeUlkKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG9jYXRpb24uY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBHUFJS
ZWcgTG9jYXRpb246OmdwcigpIGNvbnN0CiAgICAgLy8gZm9yIGV4YW1wbGUsIHRoZSBhcmNoaXRl
Y3R1cmUgZW5jb2RlcyBDWCBhcyAxIGFuZCBEWCBhcyAyIHdoaWxlIER3YXJmIGRvZXMgdGhlCiAg
ICAgLy8gb3Bwb3NpdGUuIEhlbmNlIHdlIG5lZWQgdGhlIHN3aXRjaC4KICAgICAKLSAgICBBU1NF
UlQoaW52b2x2ZXNHUFIoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaW52b2x2ZXNHUFIoKSk7CiAg
ICAgCiAgICAgc3dpdGNoIChkd2FyZlJlZ051bSgpKSB7CiAgICAgY2FzZSAwOgpAQCAtMTI1LDcg
KzEyNSw3IEBAIGJvb2wgTG9jYXRpb246OmlzRlBSKCkgY29uc3QKIAogRlBSUmVnIExvY2F0aW9u
OjpmcHIoKSBjb25zdAogewotICAgIEFTU0VSVChpc0ZQUigpKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChpc0ZQUigpKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPihkd2FyZlJlZ051bSgp
IC0gMTcpOwogfQogCkBAIC0yMDAsNyArMjAwLDcgQEAgdm9pZCBMb2NhdGlvbjo6cmVzdG9yZUlu
dG8oTWFjcm9Bc3NlbWJsZQogCiBHUFJSZWcgTG9jYXRpb246OmRpcmVjdEdQUigpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKCFhZGRlbmQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWFkZGVuZCgpKTsK
ICAgICByZXR1cm4gZ3ByKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUuaCIKICNpbmNs
dWRlICJGVExPdXRwdXQuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKLSNpbmNsdWRlICJGVExW
YWx1ZVNvdXJjZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJPcGVyYW5k
c0lubGluZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCkBAIC03MCw3ICs2OSw3IEBAIHB1
YmxpYzoKICAgICAgICAgLCBtX2Z0bFN0YXRlKHN0YXRlKQogICAgICAgICAsIG1faGVhcHMoc3Rh
dGUuY29udGV4dCkKICAgICAgICAgLCBtX291dChzdGF0ZS5jb250ZXh0KQotICAgICAgICAsIG1f
dmFsdWVTb3VyY2VzKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZCkKKyAgICAgICAgLCBtX2F2YWlsYWJpbGl0eShPcGVyYW5kc0xpa2UsIHN0YXRlLmdy
YXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCiAgICAgICAgICwgbV9zdGF0ZShzdGF0ZS5n
cmFwaCkKICAgICAgICAgLCBtX2ludGVycHJldGVyKHN0YXRlLmdyYXBoLCBtX3N0YXRlKQogICAg
ICAgICAsIG1fc3RhY2ttYXBJRHMoMCkKQEAgLTIwNCw4ICsyMDMsNiBAQCBwcml2YXRlOgogICAg
ICAgICAKICAgICAgICAgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKCk7CiAgICAgICAg
IAotICAgICAgICBtX2xpdmUgPSBibG9jay0+c3NhLT5saXZlQXRIZWFkOwotICAgICAgICAKICAg
ICAgICAgbV9zdGF0ZS5yZXNldCgpOwogICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayht
X2hpZ2hCbG9jayk7CiAgICAgICAgIApAQCAtNDc1LDEyICs0NzIsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUt
PnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTiht
X2dyYXBoLCBtX25vZGUsIHVzZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5hZGp1
c3RlZFJlZkNvdW50KCkpCi0gICAgICAgICAgICBtX2xpdmUuYWRkKG1fbm9kZSk7Ci0gICAgICAg
IAogICAgICAgICBpZiAoc2hvdWxkRXhlY3V0ZUVmZmVjdHMpCiAgICAgICAgICAgICBtX2ludGVy
cHJldGVyLmV4ZWN1dGVFZmZlY3RzKG5vZGVJbmRleCk7CiAgICAgICAgIApAQCAtNjE5LDM2ICs2
MTAsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZTogewogICAgICAg
ICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVM
b2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6IHsKICAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIG1fb3V0LnN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5tYWNoaW5l
TG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5l
TG9jYWwoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOiB7CiAgICAgICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBheWxvYWRGb3IodmFyaWFibGUtPm1hY2hpbmVMb2Nh
bCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxvY2Fs
KCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjogewogICAgICAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBt
X291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkp
OwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZShJbnQ1MkluSlNTdGFjaywgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKTsK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDogewogICAgICAgICAgICAgTFZhbHVl
IHZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1fb3V0LnN0
b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7Ci0gICAg
ICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVl
U291cmNlKFZhbHVlSW5KU1N0YWNrLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpOwotICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOiB7CkBAIC02NTYsMTUgKzY0MiwxNSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKICAgICAgICAgICAgICAgICBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiksCiAgICAg
ICAgICAgICAgICAgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKLSAgICAg
ICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVT
b3VyY2UoVmFsdWVJbkpTU3RhY2ssIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSk7Ci0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IEF2YWlsYWJp
bGl0eSh2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBp
bGVNb3ZIaW50KCkKQEAgLTY3NSw3ICs2NjEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGls
ZVpvbWJpZUhpbnQoKQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhID0g
bV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV92YWx1ZVNvdXJjZXMub3Bl
cmFuZChkYXRhLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CisgICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkgPSBBdmFpbGFiaWxpdHk6OnVu
YXZhaWxhYmxlKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU1vdkhpbnRBbmRDaGVj
aygpCkBAIC0xMjg3LDcgKzEyNzMsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgLy8gU2Vl
IGFib3ZlOyBDZWxsVXNlIGlzIGVhc2llciBzbyB3ZSBkbyBvbmx5IHRoYXQgZm9yIG5vdy4KICAg
ICAgICAgQVNTRVJUKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpOwotCisg
ICAgICAgIAogICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CiAg
ICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlk
ZW50aWZpZXJOdW1iZXIoKV07CkBAIC0yNTQ0LDEyICsyNTMwLDEyIEBAIHByaXZhdGU6CiAgICAg
dm9pZCBjb21waWxlSW52YWxpZGF0aW9uUG9pbnQoKQogICAgIHsKICAgICAgICAgaWYgKHZlcmJv
c2VDb21waWxhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnZhbGlk
YXRpb24gcG9pbnQgd2l0aCB2YWx1ZSBzb3VyY2VzOiAiLCBtX3ZhbHVlU291cmNlcywgIlxuIik7
CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW52YWxpZGF0aW9uIHBvaW50IHdpdGggYXZhaWxh
YmlsaXR5OiAiLCBtX2F2YWlsYWJpbGl0eSwgIlxuIik7CiAgICAgICAgIAogICAgICAgICBtX2Z0
bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBVbmNv
dW50YWJsZUludmFsaWRhdGlvbiwgSW52YWxpZFZhbHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlKCksCiAgICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBt
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm51
bWJlck9mQXJndW1lbnRzKCksIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mTG9jYWxzKCkpKTsKKyAg
ICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm51bWJlck9mQXJndW1lbnRzKCksIG1fYXZhaWxhYmls
aXR5Lm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9z
ckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIAogICAgICAg
ICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKQEAg
LTI1NTcsNyArMjU0Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBFeGl0QXJndW1l
bnRMaXN0IGFyZ3VtZW50czsKICAgICAgICAgCi0gICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhl
eGl0LCBhcmd1bWVudHMsIEZvcm1hdHRlZFZhbHVlKCkpOworICAgICAgICBidWlsZEV4aXRBcmd1
bWVudHMoZXhpdCwgYXJndW1lbnRzLCBGb3JtYXR0ZWRWYWx1ZSgpLCBleGl0Lm1fY29kZU9yaWdp
bik7CiAgICAgICAgIGNhbGxTdGFja21hcChleGl0LCBhcmd1bWVudHMpOwogICAgICAgICAKICAg
ICAgICAgaW5mby5tX2lzSW52YWxpZGF0aW9uUG9pbnQgPSB0cnVlOwpAQCAtMzgyMiwyNSArMzgw
OCw2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzTGl2ZShOb2RlKiBub2RlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fbGl2ZS5jb250YWlucyhub2RlKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCB1c2UoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGVkZ2UtPmhhc1Jlc3Vs
dCgpKTsKLSAgICAgICAgaWYgKCFlZGdlLmRvZXNLaWxsKCkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIG1fbGl2ZS5yZW1vdmUoZWRnZS5ub2RlKCkpOwotICAgIH0KLSAgICAKLSAgICAv
LyBXcmFwcGVyIHVzZWQgb25seSBmb3IgREZHX05PREVfRE9fVE9fQ0hJTERSRU4KLSAgICB2b2lk
IHVzZShOb2RlKiwgRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgdXNlKGVkZ2UpOwotICAgIH0K
LSAgICAKICAgICBMQmFzaWNCbG9jayBsb3dCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7
CiAgICAgICAgIHJldHVybiBtX2Jsb2Nrcy5nZXQoYmxvY2spOwpAQCAtMzg0OCw0MCArMzgxNSw3
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBpbml0aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxv
Y2soKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YWx1ZVNvdXJjZXMuc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBtX2hpZ2hCbG9jay0+
c3NhLT5mbHVzaEF0SGVhZFtpXTsKLSAgICAgICAgICAgIHN3aXRjaCAoZmx1c2guZm9ybWF0KCkp
IHsKLSAgICAgICAgICAgIGNhc2UgRGVhZEZsdXNoOiB7Ci0gICAgICAgICAgICAgICAgLy8gTXVz
dCBjb25zaWRlciBhdmFpbGFibGUgbm9kZXMgaW5zdGVhZC4KLSAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gbV9oaWdoQmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ldOwotICAgICAg
ICAgICAgICAgIGlmICghbm9kZSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNl
c1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKG5vZGUpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2Fz
ZSBGbHVzaGVkSW50MzI6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1
ZVNvdXJjZShJbnQzMkluSlNTdGFjaywgZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVz
aGVkSW50NTI6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJj
ZShJbnQ1MkluSlNTdGFjaywgZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaGVkRG91
YmxlOgotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoRG91
YmxlSW5KU1N0YWNrLCBmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgot
ICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAgICAgICAgICAgIGNhc2UgRmx1c2hl
ZEpTVmFsdWU6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJj
ZShWYWx1ZUluSlNTdGFjaywgZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIG1fYXZhaWxhYmls
aXR5ID0gbV9oaWdoQmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCkBAIC0zODg5LDE0ICszODIzLDE0IEBAIHByaXZhdGU6
CiAgICAgICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUg
cmVjb3ZlcnkpCiAgICAgewogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgp
KQotICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBleGl0IHdpdGggdmFsdWUgc291cmNlczog
IiwgbV92YWx1ZVNvdXJjZXMsICJcbiIpOwotICAgICAgICAKKyAgICAgICAgICAgIGRhdGFMb2co
IiAgICBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSwgIiB3
aXRoIGF2YWlsYWJpbGl0eTogIiwgbV9hdmFpbGFiaWxpdHksICJcbiIpOworCiAgICAgICAgIEFT
U0VSVChtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpID09IG1fZnRsU3RhdGUuZmlu
YWxpemVyLT5vc3JFeGl0LnNpemUoKSk7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmpp
dENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBraW5kLCBsb3dWYWx1
ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKGhpZ2hW
YWx1ZSksCiAgICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmln
aW5Gb3JFeGl0UHJvZmlsZSwKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mQXJn
dW1lbnRzKCksIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICAgICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm51bWJlck9mQXJndW1lbnRzKCksIG1fYXZhaWxhYmlsaXR5Lm51bWJl
ck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBw
ZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIAogICAgICAgICBPU1JFeGl0
JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKQEAgLTM5MjQsMTAg
KzM4NTgsMjMgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEV4aXRBcmd1bWVudExpc3QgYXJn
dW1lbnRzOwogICAgICAgICAKLSAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXQsIGFyZ3Vt
ZW50cywgbG93VmFsdWUpOworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1f
Y29kZU9yaWdpbjsKICAgICAgICAgCi0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yd2FyZFNw
ZWN1bGF0aW9uKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9ub2RlKTsKKyAgICAgICAgaWYgKGRp
cmVjdGlvbiA9PSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgICAgICAgICAgYnVpbGRFeGl0QXJn
dW1lbnRzKGV4aXQsIGFyZ3VtZW50cywgbG93VmFsdWUsIGNvZGVPcmlnaW4pOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChkaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9u
KTsKKyAgICAgICAgICAgIGlmICghcmVjb3ZlcnkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IG1fbm9kZUluZGV4OyBub2RlSW5kZXggPCBtX2hpZ2hCbG9jay0+
c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9oaWdoQmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9PSBjb2RlT3JpZ2luKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4gPSBub2Rl
LT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBidWlsZEV4aXRBcmd1bWVudHMoZXhpdCwgYXJndW1lbnRzLCBsb3dWYWx1ZSwgY29kZU9yaWdp
bik7CiAgICAgICAgICAgICBleGl0LmNvbnZlcnRUb0ZvcndhcmQobV9oaWdoQmxvY2ssIG1fbm9k
ZSwgbV9ub2RlSW5kZXgsIHJlY292ZXJ5LCBhcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAg
IApAQCAtMzkzNSwzNiArMzg4Miw1OSBAQCBwcml2YXRlOgogICAgIH0KICAgICAKICAgICB2b2lk
IGJ1aWxkRXhpdEFyZ3VtZW50cygKLSAgICAgICAgT1NSRXhpdCYgZXhpdCwgRXhpdEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSkKKyAgICAgICAgT1NSRXhp
dCYgZXhpdCwgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBGb3JtYXR0ZWRWYWx1ZSBsb3dW
YWx1ZSwKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChtX2NhbGxGcmFtZSk7CiAgICAgICAgIGlmICghIWxvd1ZhbHVlKQogICAg
ICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBWYWx1ZVNvdXJjZSBzb3VyY2UgPSBtX3ZhbHVlU291cmNlc1tpXTsK
KyAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgo
aSk7CisgICAgICAgICAgICBib29sIGlzTGl2ZSA9IG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIGNvZGVPcmlnaW4pOworICAgICAgICAgICAgaWYgKCFp
c0xpdmUpIHsKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpk
ZWFkKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoc291cmNlLmtpbmQoKSkgewotICAgICAgICAgICAg
Y2FzZSBWYWx1ZUluSlNTdGFjazoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0g
RXhpdFZhbHVlOjppbkpTU3RhY2soc291cmNlLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSW50MzJJbkpTU3RhY2s6Ci0gICAgICAg
ICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQzMihz
b3VyY2UudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBJbnQ1MkluSlNTdGFjazoKLSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVz
W2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDUyKHNvdXJjZS52aXJ0dWFsUmVnaXN0ZXIo
KSk7CisgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gbV9hdmFpbGFiaWxp
dHlbaV07CisgICAgICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBhdmFpbGFiaWxpdHkuZmx1c2hl
ZEF0KCk7CisgICAgICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgpKSB7CisgICAgICAgICAg
ICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKKyAg
ICAgICAgICAgICAgICBpZiAoYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBhZGRFeGl0QXJndW1lbnRGb3JOb2RlKGV4aXQsIGFyZ3VtZW50cywgaSwgYXZhaWxh
YmlsaXR5Lm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFs
aWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJFeHBlY3RlZCByIiwgb3BlcmFuZCwgIiB0byBiZSBhdmFpbGFibGUgYnV0IGl0IHdhc24ndC5c
biIpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBU
aGlzIG1lYW5zIHRoYXQgdGhlIERGRydzIERDRSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgZGVh
ZCBpbiBieXRlY29kZQorICAgICAgICAgICAgICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBieXRlY29k
ZSBsaXZlbmVzcyBhbmFseXNpcyB0aGlua3MgaXQncyBsaXZlLiBUaGlzIGlzCisgICAgICAgICAg
ICAgICAgLy8gYWNjZXB0YWJsZSBzaW5jZSB0aGUgREZHJ3MgRENFIGlzIGJ5IGRlc2lnbiBtb3Jl
IGFnZ3Jlc3NpdmUgd2hpbGUgc3RpbGwKKyAgICAgICAgICAgICAgICAvLyBiZWluZyBzb3VuZC4K
KyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERvdWJsZUluSlNTdGFjazoK
LSAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tB
c0RvdWJsZShzb3VyY2UudmlydHVhbFJlZ2lzdGVyKCkpOworCisgICAgICAgICAgICBjYXNlIEZs
dXNoZWRKU1ZhbHVlOgorICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgICAg
IGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9
IEV4aXRWYWx1ZTo6aW5KU1N0YWNrKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU291cmNlSXNEZWFkOgotICAgICAgICAg
ICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICAgICAgICAgIGV4
aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50MzIoZmx1c2gudmlydHVh
bFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBI
YXZlTm9kZToKLSAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnRGb3JOb2RlKGV4aXQsIGFy
Z3VtZW50cywgaSwgc291cmNlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIEZsdXNoZWRJbnQ1MjoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0g
RXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVz
W2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0RvdWJsZShmbHVzaC52aXJ0dWFsUmVnaXN0ZXIo
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTM5OTEsNTMgKzM5NjEsNiBAQCBwcml2YXRlOgogICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFu
dEV4aXRBcmd1bWVudChleGl0LCBpbmRleCwgbm9kZSkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIAotICAgICAgICBpZiAoIWlzTGl2ZShub2RlKSkgewotICAgICAgICAgICAgYm9vbCBm
b3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAocGVybWl0c09TUkJh
Y2t3YXJkUmV3aXJpbmcobm9kZS0+b3AoKSkpIHsKLSAgICAgICAgICAgICAgICBub2RlID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50
RXhpdEFyZ3VtZW50KGV4aXQsIGluZGV4LCBub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIGlmIChpc0xpdmUobm9kZSkpCi0gICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFmb3VuZCkgewotICAgICAgICAgICAgICAgIE5vZGUqIGJlc3ROb2RlID0gMDsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBiZXN0U2NvcmUgPSAwOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbV9saXZlLmJl
Z2luKCk7Ci0gICAgICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1f
bGl2ZS5lbmQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikg
ewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSAqaXRlcjsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
Y2FuZGlkYXRlLT5jaGlsZDEoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5jaGlsZDEoKSAhPSBub2RlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG15U2NvcmUgPSBmb3J3YXJkUmV3aXJpbmdTZWxlY3Rpb25TY29yZShjYW5kaWRhdGUtPm9w
KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAobXlTY29yZSA8PSBiZXN0U2NvcmUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgYmVzdE5v
ZGUgPSBjYW5kaWRhdGU7Ci0gICAgICAgICAgICAgICAgICAgIGJlc3RTY29yZSA9IG15U2NvcmU7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
IChiZXN0Tm9kZSkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNMaXZlKGJlc3ROb2Rl
KSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBiZXN0Tm9kZTsKLSAgICAgICAgICAgICAg
ICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICAgICAgICAgIGV4
aXQubV92YWx1ZXNbaW5kZXhdID0gRXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBBU1NF
UlQoaXNMaXZlKG5vZGUpKTsKLQogICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9p
bnQzMlZhbHVlcy5nZXQobm9kZSk7CiAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgewogICAg
ICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9y
bWF0SW50MzIsIHZhbHVlLnZhbHVlKCkpOwpAQCAtNDExNCw3ICs0MDM3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+bG9jYWwo
KTsKICAgICAgICAgCi0gICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQob3BlcmFuZCkgPSBW
YWx1ZVNvdXJjZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0
eS5vcGVyYW5kKG9wZXJhbmQpID0gQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0SW50MzIoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVl
KQpAQCAtNDI3MiwxMSArNDE5NSwxMCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8Tm9kZSosIExv
d2VyZWROb2RlVmFsdWU+IG1fYm9vbGVhblZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dl
cmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJl
ZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7Ci0gICAgSGFzaFNldDxOb2RlKj4gbV9saXZlOwog
ICAgIAogICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9waGlzOwogICAgIAotICAgIE9wZXJh
bmRzPFZhbHVlU291cmNlPiBtX3ZhbHVlU291cmNlczsKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxp
dHk+IG1fYXZhaWxhYmlsaXR5OwogICAgIAogICAgIEluUGxhY2VBYnN0cmFjdFN0YXRlIG1fc3Rh
dGU7CiAgICAgQWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNlQWJzdHJhY3RTdGF0ZT4gbV9pbnRl
cnByZXRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNp
b24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSw3IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgaW50VG9Q
dHIoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBidWlsZEludFRvUHRyKG1fYnVp
bGRlciwgdmFsdWUsIHR5cGUpOyB9CiAgICAgTFZhbHVlIGJpdENhc3QoTFZhbHVlIHZhbHVlLCBM
VHlwZSB0eXBlKSB7IHJldHVybiBidWlsZEJpdENhc3QobV9idWlsZGVyLCB2YWx1ZSwgdHlwZSk7
IH0KICAgICAKKyAgICBMVmFsdWUgYWxsb2NhKExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkQWxs
b2NhKG1fYnVpbGRlciwgdHlwZSk7IH0KICAgICBMVmFsdWUgZ2V0KExWYWx1ZSByZWZlcmVuY2Up
IHsgcmV0dXJuIGJ1aWxkTG9hZChtX2J1aWxkZXIsIHJlZmVyZW5jZSk7IH0KICAgICBMVmFsdWUg
c2V0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHJlZmVyZW5jZSkgeyByZXR1cm4gYnVpbGRTdG9yZSht
X2J1aWxkZXIsIHZhbHVlLCByZWZlcmVuY2UpOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAkocmV2aXNpb24gMTU5MzUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRlRMVmFsdWVTb3VyY2Uu
aCIKLQotI2lmIEVOQUJMRShGVExfSklUKQotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7Ci0KLXZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsK
LSAgICBzd2l0Y2ggKGtpbmQoKSkgewotICAgIGNhc2UgU291cmNlTm90U2V0OgotICAgICAgICBv
dXQucHJpbnQoIlNvdXJjZU5vdFNldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBWYWx1
ZUluSlNTdGFjazoKLSAgICAgICAgb3V0LnByaW50KCJWYWx1ZUluSlNTdGFjazoiLCB2aXJ0dWFs
UmVnaXN0ZXIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEludDMySW5KU1N0YWNrOgot
ICAgICAgICBvdXQucHJpbnQoIkludDMySW5KU1N0YWNrOiIsIHZpcnR1YWxSZWdpc3RlcigpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW50NTJJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5w
cmludCgiSW50NTJJbkpTU3RhY2s6IiwgdmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmludCgiRG91Ymxl
SW5KU1N0YWNrOiIsIHZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgU291cmNlSXNEZWFkOgotICAgICAgICBvdXQucHJpbnQoIlNvdXJjZUlzRGVhZCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBIYXZlTm9kZToKLSAgICAgICAgb3V0LnByaW50KCJOb2Rl
KCIsIG5vZGUoKSwgIikiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFZhbHVlU291cmNlOjpkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KikgY29uc3QKLXsKLSAgICBkdW1w
KG91dCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291
cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNv
dXJjZS5oCShyZXZpc2lvbiAxNTkzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFZhbHVlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBGVExWYWx1ZVNv
dXJjZV9oCi0jZGVmaW5lIEZUTFZhbHVlU291cmNlX2gKLQotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJERkdOb2RlLmgiCi0jaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgot
Ci1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLWVudW0gVmFsdWVTb3VyY2VLaW5k
IHsKLSAgICBTb3VyY2VOb3RTZXQsCi0gICAgVmFsdWVJbkpTU3RhY2ssCi0gICAgSW50MzJJbkpT
U3RhY2ssCi0gICAgSW50NTJJbkpTU3RhY2ssCi0gICAgRG91YmxlSW5KU1N0YWNrLAotICAgIFNv
dXJjZUlzRGVhZCwKLSAgICBIYXZlTm9kZQotfTsKLQotY2xhc3MgVmFsdWVTb3VyY2UgewotcHVi
bGljOgotICAgIFZhbHVlU291cmNlKCkKLSAgICAgICAgOiBtX2tpbmQoU291cmNlTm90U2V0KQot
ICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoVmFsdWVTb3VyY2VL
aW5kIGtpbmQpCi0gICAgICAgIDogbV9raW5kKGtpbmQpCi0gICAgewotICAgICAgICBBU1NFUlQo
bV9raW5kID09IFNvdXJjZUlzRGVhZCk7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IFZhbHVl
U291cmNlKERGRzo6Tm9kZSogbm9kZSkKLSAgICAgICAgOiBtX2tpbmQoSGF2ZU5vZGUpCi0gICAg
ewotICAgICAgICBtX3ZhbHVlLm5vZGUgPSBub2RlOwotICAgIH0KLSAgICAKLSAgICBWYWx1ZVNv
dXJjZShWYWx1ZVNvdXJjZUtpbmQga2luZCwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLSAgICAgICAg
OiBtX2tpbmQoa2luZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFsdWVJbkpT
U3RhY2sgfHwgbV9raW5kID09IEludDMySW5KU1N0YWNrIHx8IG1fa2luZCA9PSBJbnQ1MkluSlNT
dGFjayB8fCBtX2tpbmQgPT0gRG91YmxlSW5KU1N0YWNrKTsKLSAgICAgICAgbV92YWx1ZS52aXJ0
dWFsUmVnaXN0ZXIgPSByZWcub2Zmc2V0KCk7Ci0gICAgfQotICAgIAotICAgIFZhbHVlU291cmNl
S2luZCBraW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2tpbmQ7Ci0gICAgfQot
ICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IFNvdXJj
ZU5vdFNldDsgfQotICAgIAotICAgIERGRzo6Tm9kZSogbm9kZSgpIGNvbnN0Ci0gICAgewotICAg
ICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUu
bm9kZTsKLSAgICB9Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rlcigp
IGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IFZhbHVlSW5KU1N0YWNrIHx8
IGtpbmQoKSA9PSBJbnQzMkluSlNTdGFjayB8fCBraW5kKCkgPT0gSW50NTJJbkpTU3RhY2sgfHwg
a2luZCgpID09IERvdWJsZUluSlNTdGFjayk7Ci0gICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0
ZXIobV92YWx1ZS52aXJ0dWFsUmVnaXN0ZXIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
LCBEdW1wQ29udGV4dCopIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFZhbHVlU291cmNlS2luZCBt
X2tpbmQ7Ci0gICAgdW5pb24gewotICAgICAgICBERkc6Ok5vZGUqIG5vZGU7Ci0gICAgICAgIGlu
dCB2aXJ0dWFsUmVnaXN0ZXI7Ci0gICAgfSBtX3ZhbHVlOwotfTsKLQotfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KLSNlbmRpZiAvLyBGVExW
YWx1ZVNvdXJjZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUElG
dW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9MTFZN
QVBJRnVuY3Rpb25zLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbHZtL0xMVk1BUElGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTM1LDcgKzUzNSw2
IEBACiAgICAgbWFjcm8oTExWTUJvb2wsIFRhcmdldEhhc0pJVCwgKExMVk1UYXJnZXRSZWYgVCkp
IFwKICAgICBtYWNybyhMTFZNQm9vbCwgVGFyZ2V0SGFzVGFyZ2V0TWFjaGluZSwgKExMVk1UYXJn
ZXRSZWYgVCkpIFwKICAgICBtYWNybyhMTFZNQm9vbCwgVGFyZ2V0SGFzQXNtQmFja2VuZCwgKExM
Vk1UYXJnZXRSZWYgVCkpIFwKLSAgICBtYWNybyhMTFZNVGFyZ2V0TWFjaGluZVJlZiwgQ3JlYXRl
VGFyZ2V0TWFjaGluZSwgKExMVk1UYXJnZXRSZWYgVCwgY2hhciAqVHJpcGxlLCBjaGFyICpDUFUs
IGNoYXIgKkZlYXR1cmVzLCBMTFZNQ29kZUdlbk9wdExldmVsIExldmVsLCBMTFZNUmVsb2NNb2Rl
IFJlbG9jLCBMTFZNQ29kZU1vZGVsIENvZGVNb2RlbCkpIFwKICAgICBtYWNybyh2b2lkLCBEaXNw
b3NlVGFyZ2V0TWFjaGluZSwgKExMVk1UYXJnZXRNYWNoaW5lUmVmIFQpKSBcCiAgICAgbWFjcm8o
TExWTVRhcmdldFJlZiwgR2V0VGFyZ2V0TWFjaGluZVRhcmdldCwgKExMVk1UYXJnZXRNYWNoaW5l
UmVmIFQpKSBcCiAgICAgbWFjcm8oY2hhciAqLCBHZXRUYXJnZXRNYWNoaW5lVHJpcGxlLCAoTExW
TVRhcmdldE1hY2hpbmVSZWYgVCkpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0R1bXBDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EdW1wQ29udGV4dC5jcHAJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUR1bXBDb250ZXh0OjpEdW1wQ29udGV4
dCgpIHsgfQorRHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KCkKKyAgICA6IGdyYXBoKDApCit7Cit9
CisKIER1bXBDb250ZXh0Ojp+RHVtcENvbnRleHQoKSB7IH0KIAogYm9vbCBEdW1wQ29udGV4dDo6
aXNFbXB0eSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EdW1w
Q29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1
bXBDb250ZXh0LmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0R1bXBDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSBERkcgeyBjbGFzcyBHcmFwaDsgfQorCiBzdHJ1
Y3QgRHVtcENvbnRleHQgewogICAgIER1bXBDb250ZXh0KCk7CiAgICAgfkR1bXBDb250ZXh0KCk7
CkBAIC00MSw2ICs0Myw3IEBAIHN0cnVjdCBEdW1wQ29udGV4dCB7CiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4ID0gIiIpIGNvbnN0OwogICAgIAogICAgIFN0
cmluZ0hhc2hEdW1wQ29udGV4dDxTdHJ1Y3R1cmU+IHN0cnVjdHVyZXM7CisgICAgREZHOjpHcmFw
aCogZ3JhcGg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE1OTM1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEy
Niw3IEBAIHR5cGVkZWYgT3B0aW9uUmFuZ2Ugb3B0aW9uUmFuZ2U7CiAgICAgdihib29sLCBlbmFi
bGVMTFZNRmFzdElTZWwsIGZhbHNlKSBcCiAgICAgdihib29sLCB1c2VMTFZNU21hbGxDb2RlTW9k
ZWwsIGZhbHNlKSBcCiAgICAgdihib29sLCBkdW1wTExWTUlSLCBmYWxzZSkgXAorICAgIHYoYm9v
bCwgdmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MsIGZhbHNlKSBcCiAgICAgdihib29sLCBsbHZt
QWx3YXlzRmFpbHNCZWZvcmVDb21waWxlLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgbGx2bUFsd2F5
c0ZhaWxzQmVmb3JlTGluaywgZmFsc2UpIFwKICAgICB2KGJvb2wsIGxsdm1TaW1wbGVPcHQsIHRy
dWUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUu
aAkocmV2aXNpb24gMTU5MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDEzICs0NjksMTMgQEAgcHVibGljOgog
ICAgIGJvb2wgdXNlc05vblN0cmljdEV2YWwoKSB7IHJldHVybiBtX3VzZXNOb25TdHJpY3RFdmFs
OyB9CiAgICAgdm9pZCBzZXRVc2VzTm9uU3RyaWN0RXZhbChib29sIHVzZXNOb25TdHJpY3RFdmFs
KSB7IG1fdXNlc05vblN0cmljdEV2YWwgPSB1c2VzTm9uU3RyaWN0RXZhbDsgfQogCi0gICAgaW50
IGNhcHR1cmVTdGFydCgpIHsgcmV0dXJuIG1fY2FwdHVyZVN0YXJ0OyB9CisgICAgaW50IGNhcHR1
cmVTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZVN0YXJ0OyB9CiAgICAgdm9pZCBzZXRD
YXB0dXJlU3RhcnQoaW50IGNhcHR1cmVTdGFydCkgeyBtX2NhcHR1cmVTdGFydCA9IGNhcHR1cmVT
dGFydDsgfQogCi0gICAgaW50IGNhcHR1cmVFbmQoKSB7IHJldHVybiBtX2NhcHR1cmVFbmQ7IH0K
KyAgICBpbnQgY2FwdHVyZUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZUVuZDsgfQogICAg
IHZvaWQgc2V0Q2FwdHVyZUVuZChpbnQgY2FwdHVyZUVuZCkgeyBtX2NhcHR1cmVFbmQgPSBjYXB0
dXJlRW5kOyB9CiAKLSAgICBpbnQgY2FwdHVyZUNvdW50KCkgeyByZXR1cm4gLShtX2NhcHR1cmVF
bmQgLSBtX2NhcHR1cmVTdGFydCk7IH0KKyAgICBpbnQgY2FwdHVyZUNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gLShtX2NhcHR1cmVFbmQgLSBtX2NhcHR1cmVTdGFydCk7IH0KIAogICAgIGludCBwYXJh
bWV0ZXJDb3VudCgpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzIC0gMTsg
fQogICAgIGludCBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoKSB7IHJldHVybiBtX3BhcmFt
ZXRlckNvdW50SW5jbHVkaW5nVGhpczsgfQo=
</data>
<flag name="review"
          id="240204"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>