<?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>118546</bug_id>
          
          <creation_ts>2013-07-10 18:27:02 -0700</creation_ts>
          <short_desc>CodeBlocks should be able to determine bytecode liveness</short_desc>
          <delta_ts>2013-11-12 12:33: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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>124181</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>907509</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-07-10 18:27:02 -0700</bug_when>
    <thetext>This would simplify some things in the DFG related to OSR exits and determining which bytecode variables are live at which points during execution. It would also be useful for making our conservative GC scan more precise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907510</commentid>
    <comment_count>1</comment_count>
      <attachid>206423</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-07-10 18:47:19 -0700</bug_when>
    <thetext>Created attachment 206423
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907511</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-07-10 18:48:16 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=206423) [details]
&gt; Patch

This is a first draft. There&apos;s a couple rough edges still, e.g. some instructions I&apos;m not sure about when calculated uses and defs. I&apos;d like to start getting feedback though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907512</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-07-10 18:49:01 -0700</bug_when>
    <thetext>&gt; calculated 
calculating</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907513</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-07-10 18:54:21 -0700</bug_when>
    <thetext>One thing is that I have two separate maps for liveness-in and liveness-out. An alternative would have been to say that liveness[bytecodeOffset] is for liveness-in at bytecodeOffset and liveness[bytecodeOffset + bytecodeLength] is for liveness-out at bytecodeOffset (which also corresponds to liveness-in for the next bytecode after bytecodeOffset). 

I avoided this because basic block boundaries seem like they pose a problem in that the next bytecode after bytecodeOffset, by virtue of being at the head of a basic block, could have multiple sources for liveness-in and I could potentially overwrite that with the &quot;out&quot; of the last instruction from the preceding block. By maintaining separate maps I side-stepped this issue. I suppose I could unify the maps at the end of processing since there&apos;s a lot of duplicate information in them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914689</commentid>
    <comment_count>5</comment_count>
      <attachid>208147</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-08-05 14:26:39 -0700</bug_when>
    <thetext>Created attachment 208147
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914691</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-05 14:27:54 -0700</bug_when>
    <thetext>Attachment 208147 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeBasicBlock.cpp&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/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/PreciseJumpTargets.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/PreciseJumpTargets.h&apos;, u&apos;Source/JavaScriptCore/heap/Heap.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/JSStack.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Options.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/interpreter/JSStack.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 14 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>914694</commentid>
    <comment_count>7</comment_count>
      <attachid>208147</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-05 14:38:27 -0700</bug_when>
    <thetext>Comment on attachment 208147
Patch

Attachment 208147 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1363081</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914695</commentid>
    <comment_count>8</comment_count>
      <attachid>208147</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-05 14:38:59 -0700</bug_when>
    <thetext>Comment on attachment 208147
Patch

Attachment 208147 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1370297</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914696</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-05 14:40:51 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=208147&amp;action=review

&gt; Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:75
&gt; +        &amp;&amp; (!numberOfCapturedVariables(codeBlock) // If we have no captured variables, we&apos;re good to go.
&gt; +        || (operand &lt; captureStart(codeBlock) // If we have captured variables but the operand is outside of the captured range, we&apos;re good to go.
&gt; +        || operand &gt;= captureEnd(codeBlock)));

Indent the || four spaces, since it&apos;s within the parantheses on line 73.  Also, doesn&apos;t CodeBlock have an isCaptured() method?  If it doesn&apos;t, it might be cool to give it that.

&gt; Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:501
&gt; +    for (unsigned i = 0; i &lt; basicBlocks.size(); i++) {
&gt; +        if (leaderOffset == basicBlocks[i]-&gt;leaderBytecodeOffset())
&gt; +            return basicBlocks[i].get();
&gt; +    }

WTF binary search?

&gt; Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:512
&gt; +    for (unsigned i = 0; i &lt; basicBlocks.size(); i++) {
&gt; +        BytecodeBasicBlock* block = basicBlocks[i].get();
&gt; +        if (bytecodeOffset &gt;= block-&gt;leaderBytecodeOffset() &amp;&amp; bytecodeOffset &lt; block-&gt;leaderBytecodeOffset() + block-&gt;totalBytecodeLength())
&gt; +            return block;
&gt; +    }
&gt; +    return 0;

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914697</commentid>
    <comment_count>10</comment_count>
      <attachid>208147</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-05 14:40:57 -0700</bug_when>
    <thetext>Comment on attachment 208147
Patch

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

&gt; Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:75
&gt; +        &amp;&amp; (!numberOfCapturedVariables(codeBlock) // If we have no captured variables, we&apos;re good to go.
&gt; +        || (operand &lt; captureStart(codeBlock) // If we have captured variables but the operand is outside of the captured range, we&apos;re good to go.
&gt; +        || operand &gt;= captureEnd(codeBlock)));

Indent the || four spaces, since it&apos;s within the parantheses on line 73.  Also, doesn&apos;t CodeBlock have an isCaptured() method?  If it doesn&apos;t, it might be cool to give it that.

&gt; Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:501
&gt; +    for (unsigned i = 0; i &lt; basicBlocks.size(); i++) {
&gt; +        if (leaderOffset == basicBlocks[i]-&gt;leaderBytecodeOffset())
&gt; +            return basicBlocks[i].get();
&gt; +    }

WTF binary search?

&gt; Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:512
&gt; +    for (unsigned i = 0; i &lt; basicBlocks.size(); i++) {
&gt; +        BytecodeBasicBlock* block = basicBlocks[i].get();
&gt; +        if (bytecodeOffset &gt;= block-&gt;leaderBytecodeOffset() &amp;&amp; bytecodeOffset &lt; block-&gt;leaderBytecodeOffset() + block-&gt;totalBytecodeLength())
&gt; +            return block;
&gt; +    }
&gt; +    return 0;

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914708</commentid>
    <comment_count>11</comment_count>
      <attachid>208147</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-05 15:01:02 -0700</bug_when>
    <thetext>Comment on attachment 208147
Patch

Attachment 208147 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1346078</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914711</commentid>
    <comment_count>12</comment_count>
      <attachid>208147</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-05 15:12:32 -0700</bug_when>
    <thetext>Comment on attachment 208147
Patch

Attachment 208147 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1362055</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914723</commentid>
    <comment_count>13</comment_count>
      <attachid>208147</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-08-05 15:53:30 -0700</bug_when>
    <thetext>Comment on attachment 208147
Patch

Attachment 208147 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1397010</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914724</commentid>
    <comment_count>14</comment_count>
      <attachid>208147</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-08-05 16:03:30 -0700</bug_when>
    <thetext>Comment on attachment 208147
Patch

Attachment 208147 did not pass gtk-wk2-ews (gtk-wk2):
Output: http://webkit-queues.appspot.com/results/1351016</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915252</commentid>
    <comment_count>15</comment_count>
      <attachid>208295</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-08-07 13:17:45 -0700</bug_when>
    <thetext>Created attachment 208295
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915253</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-07 13:20:22 -0700</bug_when>
    <thetext>Attachment 208295 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.vcxproj/JavaScriptCore.vcxproj.filters&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeBasicBlock.cpp&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/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/PreciseJumpTargets.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/PreciseJumpTargets.h&apos;, u&apos;Source/JavaScriptCore/heap/Heap.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/JSStack.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/interpreter/JSStack.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 18 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>915254</commentid>
    <comment_count>17</comment_count>
      <attachid>208295</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-07 13:25:26 -0700</bug_when>
    <thetext>Comment on attachment 208295
Patch

Attachment 208295 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1382307</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915255</commentid>
    <comment_count>18</comment_count>
      <attachid>208295</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-07 13:25:50 -0700</bug_when>
    <thetext>Comment on attachment 208295
Patch

Attachment 208295 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1382306</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915257</commentid>
    <comment_count>19</comment_count>
      <attachid>208295</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-07 13:29:21 -0700</bug_when>
    <thetext>Comment on attachment 208295
Patch

Attachment 208295 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1377336</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915259</commentid>
    <comment_count>20</comment_count>
      <attachid>208296</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-08-07 13:41:20 -0700</bug_when>
    <thetext>Created attachment 208296
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915261</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-07 13:43:56 -0700</bug_when>
    <thetext>Attachment 208296 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.vcxproj/JavaScriptCore.vcxproj.filters&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeBasicBlock.cpp&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/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/PreciseJumpTargets.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/PreciseJumpTargets.h&apos;, u&apos;Source/JavaScriptCore/heap/Heap.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/JSStack.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/WTF/wtf/FastBitVector.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/interpreter/JSStack.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 19 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>915264</commentid>
    <comment_count>22</comment_count>
      <attachid>208296</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-07 14:03:26 -0700</bug_when>
    <thetext>Comment on attachment 208296
Patch

Attachment 208296 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1379360</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945665</commentid>
    <comment_count>23</comment_count>
      <attachid>208296</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-10-31 13:34:34 -0700</bug_when>
    <thetext>Comment on attachment 208296
Patch

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

r=me, but remove the silly bits :0

&gt; Source/JavaScriptCore/heap/Heap.cpp:57
&gt; +#define ENABLE_GC_LOGGING 1

nope :)

&gt;&gt; Source/JavaScriptCore/interpreter/JSStack.cpp:33
&gt;&gt; +#include &quot;CallFrameInlines.h&quot;
&gt; 
&gt; Alphabetical sorting problem.  [build/include_order] [4]

fix :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949773</commentid>
    <comment_count>24</comment_count>
      <attachid>216700</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-12 12:01:18 -0800</bug_when>
    <thetext>Created attachment 216700
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949781</commentid>
    <comment_count>25</comment_count>
      <attachid>216700</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-12 12:06:44 -0800</bug_when>
    <thetext>Comment on attachment 216700
Patch

Attachment 216700 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/22779678</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949783</commentid>
    <comment_count>26</comment_count>
      <attachid>216700</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-12 12:08:41 -0800</bug_when>
    <thetext>Comment on attachment 216700
Patch

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

&gt; Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:674
&gt; +        if (virtualRegisterForLocal(i).offset() &gt; captureStart(m_codeBlock))
&gt; +            result.set(i);
&gt; +        else 
&gt; +            result.set(numCapturedVars + i);

Is this arithmetic right for the stack flipping that we did?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949784</commentid>
    <comment_count>27</comment_count>
      <attachid>216700</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-12 12:08:54 -0800</bug_when>
    <thetext>Comment on attachment 216700
Patch

Attachment 216700 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/22749590</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949785</commentid>
    <comment_count>28</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-12 12:09:11 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 216700 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=216700&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:674
&gt; &gt; +        if (virtualRegisterForLocal(i).offset() &gt; captureStart(m_codeBlock))
&gt; &gt; +            result.set(i);
&gt; &gt; +        else 
&gt; &gt; +            result.set(numCapturedVars + i);
&gt; 
&gt; Is this arithmetic right for the stack flipping that we did?

(I&apos;m not saying it&apos;s wrong - I just to make sure you checked it.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949791</commentid>
    <comment_count>29</comment_count>
      <attachid>216700</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-12 12:13:49 -0800</bug_when>
    <thetext>Comment on attachment 216700
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:674
&gt;&gt;&gt; +            result.set(numCapturedVars + i);
&gt;&gt; 
&gt;&gt; Is this arithmetic right for the stack flipping that we did?
&gt; 
&gt; (I&apos;m not saying it&apos;s wrong - I just to make sure you checked it.)

I think it&apos;s right. I went back and changed the old logic from before the stack was flipped. captureStart() and captureEnd() return offsets which will all be negative now for locals, so if the offset is greater than the captureStart() offset then we&apos;re not captured, and if it&apos;s less than or equal to the captureEnd() offset then we&apos;re also outside the captured range. I ran tests with the analysis enabled and it didn&apos;t crash and the dumped output of the analysis seemed reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949792</commentid>
    <comment_count>30</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-12 12:14:20 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 216700 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=216700&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:674
&gt; &gt;&gt;&gt; +            result.set(numCapturedVars + i);
&gt; &gt;&gt; 
&gt; &gt;&gt; Is this arithmetic right for the stack flipping that we did?
&gt; &gt; 
&gt; &gt; (I&apos;m not saying it&apos;s wrong - I just to make sure you checked it.)
&gt; 
&gt; I think it&apos;s right. I went back and changed the old logic from before the stack was flipped. captureStart() and captureEnd() return offsets which will all be negative now for locals, so if the offset is greater than the captureStart() offset then we&apos;re not captured, and if it&apos;s less than or equal to the captureEnd() offset then we&apos;re also outside the captured range. I ran tests with the analysis enabled and it didn&apos;t crash and the dumped output of the analysis seemed reasonable.

Sweet!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949806</commentid>
    <comment_count>31</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-12 12:31:26 -0800</bug_when>
    <thetext>I think your build errors can be fixed by adding this to FastBitVector:

#include &lt;string.h&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949807</commentid>
    <comment_count>32</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-12 12:31:49 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; I think your build errors can be fixed by adding this to FastBitVector:
&gt; 
&gt; #include &lt;string.h&gt;

Yep. About to land...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949809</commentid>
    <comment_count>33</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-12 12:33:31 -0800</bug_when>
    <thetext>Committed r159136: &lt;http://trac.webkit.org/changeset/159136&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206423</attachid>
            <date>2013-07-10 18:47:19 -0700</date>
            <delta_ts>2013-08-05 14:26:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118546-20130710184504.patch</filename>
            <type>text/plain</type>
            <size>64110</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNTU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBA
CisyMDEzLTA3LTEwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQ29kZUJsb2NrcyBzaG91bGQgYmUgYWJsZSB0byBkZXRlcm1pbmUgYnl0ZWNvZGUg
bGl2ZW5lc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExODU0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgd291bGQgc2ltcGxpZnkgc29tZSB0aGluZ3MgaW4gdGhlIERGRyByZWxhdGVkIHRvIE9T
UiBleGl0cyBhbmQgZGV0ZXJtaW5pbmcgd2hpY2ggCisgICAgICAgIGJ5dGVjb2RlIHZhcmlhYmxl
cyBhcmUgbGl2ZSBhdCB3aGljaCBwb2ludHMgZHVyaW5nIGV4ZWN1dGlvbi4gSXQgd291bGQgYWxz
byBiZSB1c2VmdWwgCisgICAgICAgIGZvciBtYWtpbmcgb3VyIGNvbnNlcnZhdGl2ZSBHQyBzY2Fu
IG1vcmUgcHJlY2lzZS4KKworICAgICAgICBUaGUgZ2VuZXJhbCBhcHByb2FjaCBpcyB0byBzcGxp
dCBieXRlY29kZXMgaW50byBiYXNpYyBibG9ja3MuIFRoZW4gd2UgcnVuIHRoZSBiYWNrd2FyZHMK
KyAgICAgICAgZmxvdyBsaXZlbmVzcyBhbmFseXNpcy4gCisKKyAgICAgICAgRWFjaCBCeXRlY29k
ZUJhc2ljQmxvY2sgbWFpbnRhaW5zIGEgYml0IHZlY3RvciBpbmRpY2F0aW5nIHdoYXQncyBsaXZl
IGF0IHRoZSBoZWFkIGFuZCB0aGUgCisgICAgICAgIHRhaWwgb2YgdGhlIGJsb2NrLiBEdXJpbmcg
YSBwYXNzLCBhIGJsb2NrJ3MgIm91dCIgYml0IHZlY3RvciBpcyBjYWxjdWxhdGVkIGFzIHRoZSAK
KyAgICAgICAgYml0d2lzZS1vciAodW5pb24pIG9mIHRoZSAiaW4iIGJpdCB2ZWN0b3JzIG9mIGVh
Y2ggb2YgaXRzIHN1Y2Nlc3NvcnMuIFRoZW4sIGJsb2NrLWxvY2FsCisgICAgICAgIGxpdmVuZXNz
IGlzIGNvbXB1dGVkIGJ5IGZsb3dpbmcgdGhlIGJsb2NrJ3MgbmV3bHkgY2FsY3VsYXRlZCAib3V0
IiBiaXQgdmVjdG9yIGJhY2t3YXJkcyB0aHJvdWdoCisgICAgICAgIGl0cyBsaW5lYXIgc3RyZWFt
IG9mIGJ5dGVjb2Rlcy4gV2hlbiBub25lIG9mIHRoZSBibG9ja3MgY2hhbmdlIHRoZW4gdGhlIGZp
eHBvaW50IGhhcyAKKyAgICAgICAgY29udmVyZ2VkIGFuZCB0aGUgYWxnb3JpdGhtIGlzIGRvbmUu
CisKKyAgICAgICAgQ3VycmVudGx5LCB0aGUgYW5hbHlzaXMgaXMgb25seSBjb21wdXRlZCB3aGVu
IHRoZSBkdW1wQnl0ZWNvZGVMaXZlbmVzc1Jlc3VsdHMgcnVudGltZSAKKyAgICAgICAgb3B0aW9u
IGlzIGVuYWJsZWQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjppc0JyYW5jaCk6CisgICAgICAgIChKU0M6OmlzVW5jb25kaXRp
b25hbEJyYW5jaCk6CisgICAgICAgIChKU0M6OmlzVGVybWluYWwpOgorICAgICAgICAoSlNDOjpp
c0p1bXBUYXJnZXQpOgorICAgICAgICAoSlNDOjpsaW5rQmxvY2tzKToKKyAgICAgICAgKEpTQzo6
Y29tcHV0ZUJ5dGVjb2RlQmFzaWNCbG9ja3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2Rl
QmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEJ5dGVjb2RlQmFzaWNCbG9jayk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlQmFzaWNCbG9jazo6aXNFbnRyeUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjppc0V4aXRCbG9jayk6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlQmFzaWNCbG9jazo6bGVhZGVyQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUJhc2ljQmxvY2s6OnRvdGFsQnl0ZWNvZGVMZW5ndGgpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUJhc2ljQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0cyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUJhc2lj
QmxvY2s6OmFkZFN1Y2Nlc3Nvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlQmFzaWNCbG9jazo6
cHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpzdWNjZXNz
b3JzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjppbik6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlQmFzaWNCbG9jazo6b3V0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNp
Y0Jsb2NrOjpCeXRlY29kZUJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUJhc2lj
QmxvY2s6OmFkZEJ5dGVjb2RlTGVuZ3RoKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMpOgorICAgICAgICAoSlNDOjppc1Zh
bGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0
ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNBbmREZWZzRm9yQmxvY2spOgorICAgICAgICAo
SlNDOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzOjpydW5MaXZlbmVzc0ZpeHBvaW50KToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cyk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y2xlYXJJbnRlcm1lZGlhdGVEYXRhU3RydWN0dXJlcyk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZSk6CisgICAg
ICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmg6IEFkZGVkLgorICAgICAg
ICAoQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpsaXZlbmVzc0JlZm9yZUJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpsaXZlbmVzc0FmdGVyQnl0ZWNvZGVPZmZzZXQp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6Omhhc0JlZW5Db21wdXRl
ZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6aW52YWxpZGF0ZSk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAg
ICAoQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3Bw
OiBSZWZhY3RvcmVkIHRoZSBtYWluIGJvZHkgb2YgY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyBv
dXQgc28gdGhhdAorICAgICAgICBpdCBjb3VsZCBiZSByZXVzZWQuCisgICAgICAgIChKU0M6Omdl
dEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpjb21wdXRlUHJl
Y2lzZUp1bXBUYXJnZXRzKToKKyAgICAgICAgKEpTQzo6ZmluZEp1bXBUYXJnZXRzRm9yQnl0ZWNv
ZGVPZmZzZXQpOiBVc2VzIHRoZSByZWZhY3RvcmVkIG1haW4gYm9keSBvZiBjb21wdXRlUHJlY2lz
ZUp1bXBUYXJnZXRzIHRvIAorICAgICAgICBkZXRlcm1pbmUgdGhlIGFic29sdXRlIG9mZnNldCB0
aGF0IGEgcGFydGljdWxhciBieXRlY29kZSBqdW1wcyB0by4gV2UgdXNlIHRoaXMgaW5mb3JtYXRp
b24gd2hlbiB3ZSdyZQorICAgICAgICBsaW5raW5nIEJ5dGVjb2RlQmFzaWNCbG9ja3MgdG9nZXRo
ZXIuCisgICAgICAgICogYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmg6CisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmg6IEFkZGVkIGEgbmV3IG9wdGlvbiB0byBndWFyZCBydW5uaW5nIHRo
ZSBsaXZlbmVzcyBhbmFseXNpcy4KKwogMjAxMy0wNy0xMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBh
cHBsZS5jb20+CiAKICAgICAgICAgTWVyZ2VkIGZyb20gaHR0cDovL3N2bi53ZWJraXQub3JnL3Jl
cG9zaXRvcnkvd2Via2l0L3RydW5rCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTUyNTU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwxMyArMTcw
LDEzIEBACiAJCTBGNDZFNkI5MTc2Rjg5REIwMEUxRjc1NSAvKiBGVExTd2l0Y2hDYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZCNzE3NkY4
OUQ5MDBFMUY3NTUgLyogRlRMU3dpdGNoQ2FzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkM1MTc2RjhBNUUwMEUxRjc1NSAvKiBERkdM
YXp5SlNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovOyB9
OwogCQkwRjQ2RTZDNjE3NkY4QTYwMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMzMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTBGNDZFNkVGMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdBbmFs
eXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi87IH07Ci0JCTBGNDZFNkYz
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8q
IERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07Ci0JCTBGNDZFNkY0MTc3Q0YwRDIwMEUxRjc1NSAv
KiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ2RTZE
OTE3N0NCOTAwMDBFMUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZENzE3N0NCOEZDMDBFMUY3NTUg
LyogTExWTURpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGNDZFNkUzMTc3Q0MzNjYwMEUxRjc1
NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fzc2VtYmxl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NDZFNkU0MTc3Q0MzNjYwMEUxRjc1NSAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUxMTc3Q0MzNjYwMEUx
Rjc1NSAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ2RTZFNTE3N0NDMzY2MDBFMUY3NTUgLyogWDg2RGlz
YXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNDZFNkUyMTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwICovOyB9
OworCQkwRjQ2RTZFRjE3N0NFOTVBMDBFMUY3NTUgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkVFMTc3Q0U5NUEwMEUx
Rjc1NSAvKiBERkdBbmFseXNpcy5oICovOyB9OworCQkwRjQ2RTZGMzE3N0NGMEQyMDBFMUY3NTUg
LyogREZHTmF0dXJhbExvb3BzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNDZFNkYxMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMu
Y3BwICovOyB9OworCQkwRjQ2RTZGNDE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3Bz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZG
MjE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhC
IC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5j
cHAgKi87IH07CiAJCTBGNEUxQTBFMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAq
LzsgfTsKIAkJMEY0RTFBMEYxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUx
QTBEMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkyOSw2ICs5MjksOCBA
QAogCQlDMjIzOUQxQjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDE2MTYyNjJCREQwMDVBQzVG
RCAvKiBHQ1RocmVhZC5oICovOyB9OwogCQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4OTggLyogU2xv
dFZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLzsgfTsKIAkJ
QzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOEUxNDAyRkRENjAwNzhF
QjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUMyMzY2MzJEMTc4REZCNjEwMDE4RjNBQyAvKiBCeXRlY29kZUJh
c2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzIzNjYzMkIxNzhERkI2MTAwMThGM0FDIC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgKi87
IH07CisJCUMyMzY2MzJFMTc4REZCNjEwMDE4RjNBQyAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMzY2MzJDMTc4
REZCNjEwMDE4RjNBQyAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLzsgfTsKIAkJQzI0MDMwNTUx
NEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyNDAzMDUzMTRCNDA0QzkwMDc5RUI2NCAvKiBDb3Bp
ZWRTcGFjZS5jcHAgKi87IH07CiAJCUMyNEQzMUUyMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3Rh
dGlzdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMjREMzFFMDE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuY3BwICovOyB9Owog
CQlDMjREMzFFMzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyNEQzMUUxMTYxQ0Q2OTUwMDJB
QTREQiAvKiBIZWFwU3RhdGlzdGljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC05NTAsNiArOTUyLDggQEAKIAkJQzJFQUEzRkExNDlBODM1RTAw
RkNFMTEyIC8qIENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMkVBQTNGODE0OUE4MzA4MDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMkVBRDJG
QzE0RjAyNDk4MDBBNEIxNTkgLyogQ29waWVkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkVBRDJGQjE0RjAyNDk4MDBBNEIxNTkgLyog
Q29waWVkQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQzJGMEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRjBG
MkQwMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi87IH07CisJCUMy
RjRFREFGMTc4QzYxRTUwMDEzNUI4MiAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGNEVEQUQxNzhD
NjFFNTAwMTM1QjgyIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgKi87IH07CisJCUMy
RjRFREIwMTc4QzYxRTUwMDEzNUI4MiAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRjRFREFFMTc4QzYx
RTUwMDEzNUI4MiAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLzsgfTsKIAkJQzJGQzlC
RDMxNjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQzlCRDIxNjY0NERGQjAwODEwRDMz
IC8qIENvcGllZEJsb2NrSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVS
YXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzJGRTE4QTMxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRERGN0FCRDQxMUY2MEVE
MjAwMTA4RTM2IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRERGN0FCRDIxMUY2MEVEMjAwMTA4RTM2IC8qIEdDQWN0
aXZpdHlDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xMTg2LDEzICsxMTkwLDEzIEBACiAJCTBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1
NSAvKiBGVExTd2l0Y2hDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TFN3aXRjaENhc2UuaDsgcGF0aCA9IGZ0bC9GVExTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNDZFNkMyMTc2RjhBNUIwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMYXp5SlNWYWx1
ZS5jcHA7IHBhdGggPSBkZmcvREZHTGF6eUpTVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMzE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuaDsgcGF0aCA9
IGRmZy9ERkdMYXp5SlNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjQ2
RTZFRTE3N0NFOTVBMDBFMUY3NTUgLyogREZHQW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQW5hbHlzaXMuaDsgcGF0aCA9IGRmZy9ERkdBbmFseXNpcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyog
REZHTmF0dXJhbExvb3BzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR05hdHVyYWxMb29wcy5jcHA7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjIxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOYXR1
cmFsTG9vcHMuaDsgcGF0aCA9IGRmZy9ERkdOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0NkU2RDcxNzdDQjhGQzAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExWTURpc2Fzc2Vt
Ymxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDZFNkUwMTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZN
RGlzYXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMVk1EaXNh
c3NlbWJsZXIuaDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9MTFZNRGlzYXNzZW1ibGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDZFNkUxMTc3Q0MzNjYwMEUxRjc1NSAvKiBVRGlz
ODZEaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVURpczg2
RGlzYXNzZW1ibGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDZFNkUyMTc3Q0MzNjYwMEUxRjc1NSAv
KiBYODZEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gWDg2RGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9YODZEaXNhc3NlbWJs
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ2RTZFRTE3N0NFOTVBMDBF
MUY3NTUgLyogREZHQW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHQW5hbHlzaXMuaDsgcGF0aCA9IGRmZy9ERkdBbmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3Bz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR05hdHVyYWxMb29w
cy5jcHA7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY0NkU2RjIxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuaDsgcGF0
aCA9IGRmZy9ERkdOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RTFBMEMxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVk
U3RydWN0dXJlQ2hhaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNEUxQTBEMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NDYsNiArMTk1MCw4IEBACiAJCUMyMjM5
RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBHQ1RocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyMjM5RDE2MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHQ1RocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2xvdFZpc2l0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMjM2NjMyQjE3OERGQjYxMDAxOEYzQUMgLyogQnl0ZWNvZGVC
YXNpY0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVj
b2RlQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzY2MzJD
MTc4REZCNjEwMDE4RjNBQyAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyNDAzMDUzMTRCNDA0QzkwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3BpZWRTcGFjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNEQzMUUwMTYxQ0Q2OTUwMDJBQTREQiAvKiBI
ZWFwU3RhdGlzdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBI
ZWFwU3RhdGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNEQzMUUx
MTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBIZWFwU3RhdGlzdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTk2Nyw2ICsxOTczLDggQEAKIAkJQzJFQUEzRjgxNDlBODMwODAwRkNFMTEyIC8qIENv
cGllZFNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcGllZFNwYWNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRUFEMkZCMTRGMDI0OTgwMEE0QjE1
OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29waWVkQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRjBGMkQw
MTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyRjRFREFEMTc4QzYxRTUwMDEzNUI4MiAvKiBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzJGNEVEQUUxNzhDNjFFNTAwMTM1QjgyIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJGQzlCRDIxNjY0NERGQjAwODEw
RDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb3BpZWRCbG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzJGRTE4QTMxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVJhcmVEYXRhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI4MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVy
c2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0ZUNvbnZl
cnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzI3MSw2ICszMjc5LDEw
IEBACiAJCQkJMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICov
LAogCQkJCTBGOTE5RDIyMTU4NTNDREUwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmNwcCAqLywKIAkJ
CQkwRjkxOUQyMzE1ODUzQ0RFMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oICovLAorCQkJCUMyRjRF
REFEMTc4QzYxRTUwMDEzNUI4MiAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwICovLAor
CQkJCUMyRjRFREFFMTc4QzYxRTUwMDEzNUI4MiAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMu
aCAqLywKKwkJCQlDMjM2NjMyQjE3OERGQjYxMDAxOEYzQUMgLyogQnl0ZWNvZGVCYXNpY0Jsb2Nr
LmNwcCAqLywKKwkJCQlDMjM2NjMyQzE3OERGQjYxMDAxOEYzQUMgLyogQnl0ZWNvZGVCYXNpY0Js
b2NrLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGJ5dGVjb2RlOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKQEAgLTM0NjksNiArMzQ4MSw3IEBACiAJCQkJQkMxOEM0MDQwRTE2RjVDRDAwQjM0
NDYwIC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjBGMUEw
MTZCNzJBMUEwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Qcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLAorCQkJCUMyMzY2MzJFMTc4REZCNjEwMDE4RjNBQyAvKiBCeXRlY29kZUJh
c2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCURERjdBQkQ0MTFGNjBFRDIwMDEwOEUzNiAv
KiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkUyQ0FFMTRFOTg1
QUEwMDA1OTNBRCAvKiBHQ0Fzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDMw
MTVBOERDRTIwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICov
LApAQCAtMzc1MCw2ICszNzYzLDcgQEAKIAkJCQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyog
U3RyaW5nUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyNjBFMTZGQ0E3MDBC
MzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMx
M0IxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9uZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzJGNEVE
QjAxNzhDNjFFNTAwMTM1QjgyIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDREUzQUI4MEU2QzgyRjUwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1
cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8sCkBAIC00MjM5LDYgKzQyNTMsNyBAQAogCQkJCTBGRjBG
MTlFMTZCNzJBMEIwMDVERjk1QiAvKiBERkdFZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
QkMwQUU3MTQ5NkM3QzQwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDMkNGMzlDMTE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUMyRjRFREFGMTc4QzYxRTUwMDEzNUI4MiAvKiBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDMTUxNTFDNUQ0
RDAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVC
REExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC00MjU5LDYgKzQyNzQsNyBAQAogCQkJCTBGREIyQ0RCMTc0MkQ4MDQwMDdCM0MxQiAvKiBE
RkdGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NUIxNEVGOTBBRDAwQzcy
NTMyIC8qIERGR1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVEMTRFRjkwQjMw
MEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlDMjM2NjMyRDE3OERGQjYxMDAxOEYzQUMgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2QkIwOUMwMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBh
dGNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REQyMTMyOERGODIwMDJCMkFENyAvKiBE
RkdTcGVjdWxhdGl2ZUpJVC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxRjE0MzI4QkI5
MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJh
c2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVC
YXNpY0Jsb2NrLmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJQcmVjaXNl
SnVtcFRhcmdldHMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBib29sIGlzQnJhbmNo
KE9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICBjYXNl
IG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAgIGNh
c2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9qbmVx
X3B0cjoKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNl
IG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVz
czoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNh
c2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bf
c3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfZ2V0
X3BuYW1lczoKKyAgICBjYXNlIG9wX25leHRfcG5hbWU6CisgICAgY2FzZSBvcF9jaGVja19oYXNf
aW5zdGFuY2U6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBi
b29sIGlzVW5jb25kaXRpb25hbEJyYW5jaChPcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICBzd2l0
Y2ggKG9wY29kZUlEKSB7CisgICAgY2FzZSBvcF9qbXA6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBi
b29sIGlzVGVybWluYWwoT3Bjb2RlSUQgb3Bjb2RlSUQpCit7CisgICAgc3dpdGNoIChvcGNvZGVJ
RCkgeworICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3BfcmV0X29iamVjdF9vcl90aGlzOgor
ICAgIGNhc2Ugb3BfZW5kOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc0p1bXBUYXJnZXQo
VmVjdG9yPHVuc2lnbmVkLCAzMj4mIGp1bXBUYXJnZXRzLCB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwganVtcFRhcmdldHMuc2l6ZSgpOyBp
KyspIHsKKyAgICAgICAgaWYgKGJ5dGVjb2RlT2Zmc2V0ID09IGp1bXBUYXJnZXRzW2ldKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIHZvaWQgbGlua0Jsb2NrcyhCeXRlY29kZUJhc2ljQmxvY2sqIHByZWRlY2Vzc29yLCBCeXRl
Y29kZUJhc2ljQmxvY2sqIHN1Y2Nlc3NvcikKK3sKKyAgICBwcmVkZWNlc3Nvci0+YWRkU3VjY2Vz
c29yKHN1Y2Nlc3Nvcik7CisgICAgc3VjY2Vzc29yLT5hZGRQcmVkZWNlc3NvcihwcmVkZWNlc3Nv
cik7Cit9CisKK3ZvaWQgY29tcHV0ZUJ5dGVjb2RlQmFzaWNCbG9ja3MoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFZlY3RvcjxPd25QdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiA+JiBiYXNpY0Jsb2NrcykK
K3sKKyAgICBWZWN0b3I8dW5zaWduZWQsIDMyPiBqdW1wVGFyZ2V0czsKKyAgICBjb21wdXRlUHJl
Y2lzZUp1bXBUYXJnZXRzKGNvZGVCbG9jaywganVtcFRhcmdldHMpOworCisgICAgLy8gQ3JlYXRl
IHRoZSBlbnRyeSBhbmQgZXhpdCBiYXNpYyBibG9ja3MuCisgICAgQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBlbnRyeSA9IG5ldyBCeXRlY29kZUJhc2ljQmxvY2soQnl0ZWNvZGVCYXNpY0Jsb2NrOjpFbnRy
eUJsb2NrKTsKKyAgICBiYXNpY0Jsb2Nrcy5hcHBlbmQoYWRvcHRQdHIoZW50cnkpKTsKKyAgICBC
eXRlY29kZUJhc2ljQmxvY2sqIGV4aXQgPSBuZXcgQnl0ZWNvZGVCYXNpY0Jsb2NrKEJ5dGVjb2Rl
QmFzaWNCbG9jazo6RXhpdEJsb2NrKTsKKworICAgIC8vIEZpbmQgYmFzaWMgYmxvY2sgYm91bmRh
cmllcy4KKyAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGN1cnJlbnQgPSBuZXcgQnl0ZWNvZGVCYXNp
Y0Jsb2NrKDAsIDApOworICAgIGxpbmtCbG9ja3MoZW50cnksIGN1cnJlbnQpOworICAgIGJhc2lj
QmxvY2tzLmFwcGVuZChhZG9wdFB0cihjdXJyZW50KSk7CisKKyAgICBib29sIG5leHRJbnN0cnVj
dGlvbklzTGVhZGVyID0gZmFsc2U7CisKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBj
b2RlQmxvY2stPnZtKCktPmludGVycHJldGVyOworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
bnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKyAgICB1bnNpZ25l
ZCBpbnN0cnVjdGlvbkNvdW50ID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgaW5z
dHJ1Y3Rpb25Db3VudDspIHsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2Rl
KTsKKyAgICAgICAgdW5zaWduZWQgb3Bjb2RlTGVuZ3RoID0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJ
RF07CisKKyAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgYnl0ZWNvZGUgaXMgYSBqdW1wIHRhcmdl
dCwgdGhlbiBpdCdzIHRoZSBsZWFkZXIgb2YgaXRzIG93biBiYXNpYyBibG9jay4KKyAgICAgICAg
aWYgKGlzSnVtcFRhcmdldChqdW1wVGFyZ2V0cywgYnl0ZWNvZGVPZmZzZXQpIHx8IG5leHRJbnN0
cnVjdGlvbklzTGVhZGVyKSB7CisgICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2Nr
ID0gbmV3IEJ5dGVjb2RlQmFzaWNCbG9jayhieXRlY29kZU9mZnNldCwgb3Bjb2RlTGVuZ3RoKTsK
KyAgICAgICAgICAgIGJhc2ljQmxvY2tzLmFwcGVuZChhZG9wdFB0cihibG9jaykpOworICAgICAg
ICAgICAgY3VycmVudCA9IGJsb2NrOworICAgICAgICAgICAgbmV4dEluc3RydWN0aW9uSXNMZWFk
ZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IG9wY29kZUxlbmd0aDsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlIGN1
cnJlbnQgYnl0ZWNvZGUgaXMgYSBicmFuY2ggb3IgYSByZXR1cm4sIHRoZW4gdGhlIG5leHQgaW5z
dHJ1Y3Rpb24gaXMgdGhlIGxlYWRlciBvZiBpdHMgb3duIGJhc2ljIGJsb2NrLgorICAgICAgICBp
ZiAoaXNCcmFuY2gob3Bjb2RlSUQpKQorICAgICAgICAgICAgbmV4dEluc3RydWN0aW9uSXNMZWFk
ZXIgPSB0cnVlOworCisgICAgICAgIC8vIE90aGVyd2lzZSwganVzdCBhZGQgdG8gdGhlIGxlbmd0
aCBvZiB0aGUgY3VycmVudCBibG9jay4KKyAgICAgICAgY3VycmVudC0+YWRkQnl0ZWNvZGVMZW5n
dGgob3Bjb2RlTGVuZ3RoKTsKKyAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gb3Bjb2RlTGVuZ3Ro
OworICAgIH0KKworICAgIC8vIExpbmsgYmFzaWMgYmxvY2tzIHRvZ2V0aGVyLgorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2Nrcy5zaXplKCk7IGkrKykgeworICAgICAgICBC
eXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gYmFzaWNCbG9ja3NbaV0uZ2V0KCk7CisKKyAgICAg
ICAgaWYgKGJsb2NrLT5pc0VudHJ5QmxvY2soKSB8fCBibG9jay0+aXNFeGl0QmxvY2soKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGJvb2wgZmFsbHNUaHJvdWdoID0gdHJ1ZTsg
CisgICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+bGVhZGVyQnl0
ZWNvZGVPZmZzZXQoKTsgYnl0ZWNvZGVPZmZzZXQgPCBibG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZz
ZXQoKSArIGJsb2NrLT50b3RhbEJ5dGVjb2RlTGVuZ3RoKCk7KSB7CisgICAgICAgICAgICBjb25z
dCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0
ZWNvZGVPZmZzZXRdOworICAgICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLnUub3Bjb2RlKTsKKyAgICAgICAgICAg
IC8vIElmIHdlIGZvdW5kIGEgdGVybWluYWwgYnl0ZWNvZGUsIGxpbmsgdG8gdGhlIGV4aXQgYmxv
Y2suCisgICAgICAgICAgICBpZiAoaXNUZXJtaW5hbChvcGNvZGVJRCkpIHsKKyAgICAgICAgICAg
ICAgICBsaW5rQmxvY2tzKGJsb2NrLCBleGl0KTsKKyAgICAgICAgICAgICAgICBmYWxsc1Rocm91
Z2ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIElmIHdlIGZvdW5kIGEgYnJhbmNoLCBsaW5rIHRvIHRoZSBibG9jayhzKSB0aGF0
IHdlIGp1bXAgdG8uCisgICAgICAgICAgICBpZiAoaXNCcmFuY2gob3Bjb2RlSUQpKSB7CisgICAg
ICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVkLCAxPiBieXRlY29kZU9mZnNldHNKdW1wZWRUbzsK
KyAgICAgICAgICAgICAgICBmaW5kSnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxv
Y2ssIGJ5dGVjb2RlT2Zmc2V0LCBieXRlY29kZU9mZnNldHNKdW1wZWRUbyk7CisKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9ja3Muc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBvdGhlckJsb2NrID0g
YmFzaWNCbG9ja3NbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChieXRlY29kZU9m
ZnNldHNKdW1wZWRUby5jb250YWlucyhvdGhlckJsb2NrLT5sZWFkZXJCeXRlY29kZU9mZnNldCgp
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCbG9ja3MoYmxvY2ssIG90aGVyQmxvY2sp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChpc1VuY29uZGl0aW9u
YWxCcmFuY2gob3Bjb2RlSUQpKQorICAgICAgICAgICAgICAgICAgICBmYWxsc1Rocm91Z2ggPSBm
YWxzZTsKKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdW5zaWduZWQgb3Bjb2RlTGVuZ3RoID0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CisgICAg
ICAgICAgICBieXRlY29kZU9mZnNldCArPSBvcGNvZGVMZW5ndGg7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBJZiB3ZSBmYWxsIHRocm91Z2ggdGhlbiBsaW5rIHRvIHRoZSBuZXh0IGJsb2NrIGlu
IHByb2dyYW0gb3JkZXIuCisgICAgICAgIGlmIChmYWxsc1Rocm91Z2gpIHsKKyAgICAgICAgICAg
IEFTU0VSVChpICsgMSA8IGJhc2ljQmxvY2tzLnNpemUoKSk7CisgICAgICAgICAgICBCeXRlY29k
ZUJhc2ljQmxvY2sqIG5leHRCbG9jayA9IGJhc2ljQmxvY2tzW2kgKyAxXS5nZXQoKTsKKyAgICAg
ICAgICAgIGxpbmtCbG9ja3MoYmxvY2ssIG5leHRCbG9jayk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBiYXNpY0Jsb2Nrcy5hcHBlbmQoYWRvcHRQdHIoZXhpdCkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJh
c2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQnl0ZWNvZGVCYXNpY0Jsb2NrX2gKKyNkZWZp
bmUgQnl0ZWNvZGVCYXNpY0Jsb2NrX2gKKworI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CisKK3R5cGVkZWYgSGFzaE1hcDx1bnNp
Z25lZCwgRmFzdEJpdFZlY3RvciwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4gPiBCeXRlY29kZVRvQml0bWFwTWFwOwor
CitjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2sgeworcHVibGljOgorICAgIGVudW0gU3BlY2lhbEJs
b2NrVHlwZSB7IEVudHJ5QmxvY2ssIEV4aXRCbG9jayB9OworICAgIEJ5dGVjb2RlQmFzaWNCbG9j
ayh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBCeXRlY29kZUJhc2ljQmxv
Y2soU3BlY2lhbEJsb2NrVHlwZSk7CisKKyAgICBib29sIGlzRW50cnlCbG9jaygpIHsgcmV0dXJu
ICFtX2xlYWRlckJ5dGVjb2RlT2Zmc2V0ICYmICFtX3RvdGFsQnl0ZWNvZGVMZW5ndGg7IH0KKyAg
ICBib29sIGlzRXhpdEJsb2NrKCkgeyByZXR1cm4gIW1fbGVhZGVyQnl0ZWNvZGVPZmZzZXQgICYm
IG1fdG90YWxCeXRlY29kZUxlbmd0aCA9PSBVSU5UX01BWDsgfQorCisgICAgdW5zaWduZWQgbGVh
ZGVyQnl0ZWNvZGVPZmZzZXQoKSB7IHJldHVybiBtX2xlYWRlckJ5dGVjb2RlT2Zmc2V0OyB9Cisg
ICAgdW5zaWduZWQgdG90YWxCeXRlY29kZUxlbmd0aCgpIHsgcmV0dXJuIG1fdG90YWxCeXRlY29k
ZUxlbmd0aDsgfQorCisgICAgVmVjdG9yPHVuc2lnbmVkPiYgYnl0ZWNvZGVPZmZzZXRzKCkgeyBy
ZXR1cm4gbV9ieXRlY29kZU9mZnNldHM7IH0KKyAgICB2b2lkIGFkZEJ5dGVjb2RlTGVuZ3RoKHVu
c2lnbmVkKTsKKworICAgIHZvaWQgYWRkUHJlZGVjZXNzb3IoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBi
bG9jaykgeyBtX3ByZWRlY2Vzc29ycy5hcHBlbmQoYmxvY2spOyB9CisgICAgdm9pZCBhZGRTdWNj
ZXNzb3IoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaykgeyBtX3N1Y2Nlc3NvcnMuYXBwZW5kKGJs
b2NrKTsgfQorCisgICAgVmVjdG9yPEJ5dGVjb2RlQmFzaWNCbG9jayo+JiBwcmVkZWNlc3NvcnMo
KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQorICAgIFZlY3RvcjxCeXRlY29kZUJhc2ljQmxv
Y2sqPiYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCisgICAgRmFzdEJp
dFZlY3RvciYgaW4oKSB7IHJldHVybiBtX2luOyB9CisgICAgRmFzdEJpdFZlY3RvciYgb3V0KCkg
eyByZXR1cm4gbV9vdXQ7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2xlYWRlckJ5dGVj
b2RlT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fdG90YWxCeXRlY29kZUxlbmd0aDsKKworICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gbV9ieXRlY29kZU9mZnNldHM7CisKKyAgICBWZWN0b3I8Qnl0ZWNvZGVC
YXNpY0Jsb2NrKj4gbV9wcmVkZWNlc3NvcnM7CisgICAgVmVjdG9yPEJ5dGVjb2RlQmFzaWNCbG9j
ayo+IG1fc3VjY2Vzc29yczsKKworICAgIEZhc3RCaXRWZWN0b3IgbV9pbjsKKyAgICBGYXN0Qml0
VmVjdG9yIG1fb3V0OworfTsKKwordm9pZCBjb21wdXRlQnl0ZWNvZGVCYXNpY0Jsb2NrcyhDb2Rl
QmxvY2sqLCBWZWN0b3I8T3duUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiYpOworCitpbmxpbmUg
Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpCeXRlY29kZUJhc2ljQmxvY2sodW5zaWduZWQgc3RhcnQsIHVu
c2lnbmVkIGxlbmd0aCkKKyAgICA6IG1fbGVhZGVyQnl0ZWNvZGVPZmZzZXQoc3RhcnQpCisgICAg
LCBtX3RvdGFsQnl0ZWNvZGVMZW5ndGgobGVuZ3RoKQoreworICAgIG1fYnl0ZWNvZGVPZmZzZXRz
LmFwcGVuZChtX2xlYWRlckJ5dGVjb2RlT2Zmc2V0KTsKK30KKworaW5saW5lIEJ5dGVjb2RlQmFz
aWNCbG9jazo6Qnl0ZWNvZGVCYXNpY0Jsb2NrKEJ5dGVjb2RlQmFzaWNCbG9jazo6U3BlY2lhbEJs
b2NrVHlwZSBibG9ja1R5cGUpCisgICAgOiBtX2xlYWRlckJ5dGVjb2RlT2Zmc2V0KDApCisgICAg
LCBtX3RvdGFsQnl0ZWNvZGVMZW5ndGgoYmxvY2tUeXBlID09IEJ5dGVjb2RlQmFzaWNCbG9jazo6
RW50cnlCbG9jayA/IDAgOiBVSU5UX01BWCkKK3sKK30KKworaW5saW5lIHZvaWQgQnl0ZWNvZGVC
YXNpY0Jsb2NrOjphZGRCeXRlY29kZUxlbmd0aCh1bnNpZ25lZCBieXRlY29kZUxlbmd0aCkKK3sK
KyAgICBtX2J5dGVjb2RlT2Zmc2V0cy5hcHBlbmQobV9sZWFkZXJCeXRlY29kZU9mZnNldCArIG1f
dG90YWxCeXRlY29kZUxlbmd0aCk7CisgICAgbV90b3RhbEJ5dGVjb2RlTGVuZ3RoICs9IGJ5dGVj
b2RlTGVuZ3RoOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ5dGVjb2Rl
QmFzaWNCbG9ja19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTk4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgorCisj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKK3sKKyAgICBBU1NFUlQobV9jb2RlQmxvY2spOworfQorCitzdGF0aWMgYm9vbCBp
c1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50IG9wZXJh
bmQpCit7CisgICAgcmV0dXJuICFjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KG9w
ZXJhbmQpICYmIG9wZXJhbmQgPj0gMDsKK30KKworc3RhdGljIHZvaWQgY29tcHV0ZVVzZXNGb3JC
eXRlY29kZU9mZnNldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW50ZXJwcmV0ZXIqIGludGVycHJl
dGVyLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIEZhc3RCaXRWZWN0b3ImIHVzZXMpCit7Cisg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rp
b24tPnUub3Bjb2RlKTsKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgLy8gTm8gdXNlcy4K
KyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9u
b3A6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgIGNhc2Ugb3BfdGhyb3dfc3Rh
dGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3Bl
OgorICAgIGNhc2Ugb3BfY2F0Y2g6CisgICAgY2FzZSBvcF9wb3Bfc2NvcGU6CisgICAgY2FzZSBv
cF9qbmVxX3B0cjoKKyAgICBjYXNlIG9wX25ld19mdW5jOgorICAgIGNhc2Ugb3BfbmV3X2Z1bmNf
ZXhwOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfam1wOgorICAgIGNhc2Ug
b3BfbmV3X29iamVjdDoKKyAgICBjYXNlIG9wX2luaXRfbGF6eV9yZWc6CisgICAgY2FzZSBvcF9n
ZXRfY2FsbGVlOgorICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX2Ny
ZWF0ZV9hY3RpdmF0aW9uOgorICAgIGNhc2Ugb3BfZW50ZXI6CisgICAgICAgIHJldHVybjsKKyAg
ICAvLyBGaXJzdCBhcmd1bWVudC4KKyAgICBjYXNlIG9wX3RvX3RoaXM6CisgICAgY2FzZSBvcF90
ZWFyX29mZl9hY3RpdmF0aW9uOiAvLyBUT0RPOiBOb3QgY29uZmlkZW50IGluIHRoaXMgZWl0aGVy
LgorICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6CisgICAgY2FzZSBvcF9wcm9maWxlX2Rp
ZF9jYWxsOgorICAgIGNhc2Ugb3BfZW5zdXJlX3Byb3BlcnR5X2V4aXN0czoKKyAgICBjYXNlIG9w
X3Rocm93OgorICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgIGNhc2Ugb3BfZW5kOgor
ICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6
CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNl
IG9wX2RlYzoKKyAgICBjYXNlIG9wX2luYzogeworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVy
Rm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQorICAgICAg
ICAgICAgdXNlcy5zZXQoaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGFyZ3VtZW50cy4KKyAgICBjYXNlIG9w
X3RlYXJfb2ZmX2FyZ3VtZW50czogLy8gVE9ETzogTm90IGNvbmZpZGVudCBpbiB0aGlzLgorICAg
IGNhc2Ugb3BfcmV0X29iamVjdF9vcl90aGlzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBj
YXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pu
bGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAg
IGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbGVzczogeworICAgICAgICBpZiAo
aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpKQorICAgICAgICAgICAgdXNlcy5zZXQoaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
KyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHVzZXMuc2V0KGluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRmlyc3QgYW5kIHRo
aXJkIGFyZ3VtZW50cy4KKyAgICBjYXNlIG9wX3B1dF90b19zY29wZTogeworICAgICAgICBpZiAo
aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpKQorICAgICAgICAgICAgdXNlcy5zZXQoaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
KyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHVzZXMuc2V0KGluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gU2Vjb25kIGFyZ3Vt
ZW50LgorICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6CisgICAgY2FzZSBvcF9wdXNoX25h
bWVfc2NvcGU6CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICBjYXNlIG9wX3RvX3By
aW1pdGl2ZToKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoK
KyAgICBjYXNlIG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZToKKyAgICBjYXNlIG9wX2dldF9ieV9p
ZF9zZWxmOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkX2NoYWluOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9zZWxmOgorICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkX2dldHRlcl9wcm90bzoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJf
Y2hhaW46CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3NlbGY6CisgICAgY2FzZSBvcF9n
ZXRfYnlfaWRfY3VzdG9tX3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9jaGFp
bjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9nZW5lcmljOgorICAgIGNhc2Ugb3BfZ2V0X2FycmF5
X2xlbmd0aDoKKyAgICBjYXNlIG9wX2dldF9zdHJpbmdfbGVuZ3RoOgorICAgIGNhc2Ugb3BfZ2V0
X2FyZ3VtZW50c19sZW5ndGg6CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgY2FzZSBvcF9pc191
bmRlZmluZWQ6CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgorICAgIGNhc2Ugb3BfaXNfbnVtYmVy
OgorICAgIGNhc2Ugb3BfaXNfc3RyaW5nOgorICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgIGNh
c2Ugb3BfaXNfZnVuY3Rpb246CisgICAgY2FzZSBvcF90b19udW1iZXI6CisgICAgY2FzZSBvcF9u
ZWdhdGU6CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAg
Y2FzZSBvcF9ub3Q6CisgICAgY2FzZSBvcF9tb3Y6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0
aF9zaXplOgorICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkK
KyAgICAgICAgICAgIHVzZXMuc2V0KGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgLy8gU2Vjb25kIGFuZCB0aGlyZCBhcmd1bWVudHMuCisgICAg
Y2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAgICBjYXNlIG9w
X2dldF9ieV92YWw6CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRfYnlfdmFsOgorICAgIGNhc2Ug
b3BfaW46CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2lu
c3RhbmNlOgorICAgIGNhc2Ugb3BfYWRkOgorICAgIGNhc2Ugb3BfbXVsOgorICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3BfbW9kOgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbHNo
aWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OgorICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICBjYXNl
IG9wX2JpdGFuZDoKKyAgICBjYXNlIG9wX2JpdHhvcjoKKyAgICBjYXNlIG9wX2JpdG9yOgorICAg
IGNhc2Ugb3BfbGVzczoKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICBjYXNlIG9wX2dyZWF0ZXI6
CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgY2Fz
ZSBvcF9zdHJpY3RlcToKKyAgICBjYXNlIG9wX25lcToKKyAgICBjYXNlIG9wX2VxOiB7CisgICAg
ICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCkpCisgICAgICAgICAgICB1c2VzLnNldChpbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgdXNlcy5zZXQoaW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBTZWNv
bmQsIHRoaXJkLCBhbmQgZm91cnRoIGFyZ3VtZW50cy4KKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJn
czoKKyAgICBjYXNlIG9wX2dldF9wbmFtZXM6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKKyAgICAg
ICAgICAgIHVzZXMuc2V0KGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgIGlmIChp
c1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpCisgICAgICAgICAgICB1c2VzLnNldChpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwor
ICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgdXNlcy5zZXQoaW5zdHJ1Y3Rpb25bNF0u
dS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBTZWNvbmQsIHRoaXJk
LCBmb3VydGgsIGFuZCBmaWZ0aCBhcmd1bWVudHMuCisgICAgY2FzZSBvcF9uZXh0X3BuYW1lOiB7
CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCkpCisgICAgICAgICAgICB1c2VzLnNldChpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29k
ZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgdXNlcy5zZXQo
aW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZv
ckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSkKKyAgICAgICAg
ICAgIHVzZXMuc2V0KGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CisgICAgICAgIGlmIChpc1Zh
bGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzVdLnUub3BlcmFu
ZCkpCisgICAgICAgICAgICB1c2VzLnNldChpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgZmlmdGgs
IGFuZCBzaXh0aCBhcmd1bWVudHMuIAorICAgIGNhc2Ugb3BfZ2V0X2J5X3BuYW1lOiB7CisgICAg
ICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCkpCisgICAgICAgICAgICB1c2VzLnNldChpbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgdXNlcy5zZXQoaW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVu
ZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHVz
ZXMuc2V0KGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CisgICAgICAgIGlmIChpc1ZhbGlkUmVn
aXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzVdLnUub3BlcmFuZCkpCisg
ICAgICAgICAgICB1c2VzLnNldChpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpOworICAgICAgICBp
ZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls2XS51
Lm9wZXJhbmQpKQorICAgICAgICAgICAgdXNlcy5zZXQoaW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5k
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBUaGlyZCBhcmd1bWVudC4KKyAgICBj
YXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNl
IG9wX3N3aXRjaF9pbW06CisgICAgY2FzZSBvcF9wdXRfYnlfaW5kZXg6CisgICAgY2FzZSBvcF9w
dXRfYnlfaWRfcmVwbGFjZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uOgorICAg
IGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X2J5
X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lk
X3RyYW5zaXRpb25fbm9ybWFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9y
bWFsX291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX2dlbmVyaWM6CisgICAgY2Fz
ZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKKyAg
ICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHVzZXMuc2V0KGluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gVGhpcmQgYW5kIGZvdXJ0
aCBhcmd1bWVudHMuCisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcjogeworICAgICAgICBp
ZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpKQorICAgICAgICAgICAgdXNlcy5zZXQoaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHVzZXMuc2V0KGluc3RydWN0aW9u
WzRdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gVmFyaWFibGUg
bnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICBjYXNlIG9w
X3N0cmNhdDogeworICAgICAgICBpbnQgYmFzZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
KyAgICAgICAgaW50IGNvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlk
UmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGJhc2UgKyBpKSkKKyAgICAgICAgICAgICAg
ICB1c2VzLnNldChiYXNlICsgaSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAvLyBDcmF6eSBzdHVmZiBmb3IgY2FsbHMuCisgICAgLy8gVE9ETzogSXMgdGhpcyBjb3Jy
ZWN0PworICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAg
IGNhc2Ugb3BfY2FsbDogeworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mo
Y29kZUJsb2NrLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgdXNlcy5z
ZXQoaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBpbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBsYXN0QXJnID0gcmVnaXN0ZXJPZmZz
ZXQgLSBDYWxsRnJhbWU6Om9mZnNldEZvcihhcmdDb3VudCk7CisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgYXJnQ291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGNvZGVCbG9jaywgbGFzdEFyZyAtIGkpKQorICAgICAgICAgICAgICAgIHVz
ZXMuc2V0KGxhc3RBcmcgLSBpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyLCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIEZhc3RCaXRWZWN0b3ImIGRlZnMpCit7CisgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKKyAg
ICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgLy8gVGhlc2UgZG9uJ3QgZGVmaW5lIGFueXRoaW5n
LgorICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wOgorICAgIGNhc2Ugb3BfZW5zdXJl
X3Byb3BlcnR5X2V4aXN0czoKKyAgICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKKyAgICBjYXNl
IG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNl
IG9wX3BvcF9zY29wZToKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfd2ls
bF9jYWxsOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9kaWRfY2FsbDoKKyAgICBjYXNlIG9wX3Rocm93
OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6Cisg
ICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9yZXRfb2JqZWN0X29yX3RoaXM6CisgICAgY2Fz
ZSBvcF9qbXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBj
YXNlIG9wX2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3Bfam5l
cV9wdHI6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2Fz
ZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxl
c3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBj
YXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bf
c3dpdGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNo
X3N0cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9v
dXRfb2ZfbGluZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXBsYWNlOgorICAgIGNhc2Ugb3Bf
cHV0X2J5X2lkX3RyYW5zaXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9k
aXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xp
bmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CisgICAgY2FzZSBv
cF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9w
dXRfYnlfaWRfZ2VuZXJpYzoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyOgorICAgIGNh
c2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDoKKyAgICBjYXNlIG9w
X2RlbF9ieV9pZDoKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6CisgICAgY2FzZSBvcF9lbnRlcjoK
KyAgICAgICAgcmV0dXJuOworICAgIC8vIFRoZXNlIGFsbCBoYXZlIGEgc2luZ2xlIGRlc3RpbmF0
aW9uIGZvciB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAgY2FzZSBvcF9uZXh0X3BuYW1lOgorICAg
IGNhc2Ugb3BfZ2V0X3BuYW1lczoKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAgY2Fz
ZSBvcF9zdHJjYXQ6CisgICAgY2FzZSBvcF90ZWFyX29mZl9hY3RpdmF0aW9uOgorICAgIGNhc2Ug
b3BfdG9fcHJpbWl0aXZlOgorICAgIGNhc2Ugb3BfY2F0Y2g6CisgICAgY2FzZSBvcF9jcmVhdGVf
dGhpczoKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICBjYXNlIG9wX25ld19hcnJheV9idWZm
ZXI6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgIGNhc2Ugb3BfbmV3X3Jl
Z2V4cDoKKyAgICBjYXNlIG9wX25ld19mdW5jOgorICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgor
ICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6Cisg
ICAgY2FzZSBvcF9jYWxsOgorICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgIGNhc2Ugb3BfY29u
c3RydWN0OgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX291
dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6CisgICAgY2FzZSBvcF9nZXRf
YnlfaWRfcHJvdG86CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY2hhaW46CisgICAgY2FzZSBvcF9n
ZXRfYnlfaWRfZ2V0dGVyX3NlbGY6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3Rv
OgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9jaGFpbjoKKyAgICBjYXNlIG9wX2dldF9i
eV9pZF9jdXN0b21fc2VsZjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fcHJvdG86Cisg
ICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX2NoYWluOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X2dlbmVyaWM6CisgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgorICAgIGNhc2Ugb3BfZ2V0
X3N0cmluZ19sZW5ndGg6CisgICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6CisgICAgY2Fz
ZSBvcF9pbnN0YW5jZW9mOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX2dl
dF9hcmd1bWVudF9ieV92YWw6CisgICAgY2FzZSBvcF9nZXRfYnlfcG5hbWU6CisgICAgY2FzZSBv
cF9nZXRfYXJndW1lbnRzX2xlbmd0aDoKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICBjYXNlIG9w
X2lzX3VuZGVmaW5lZDoKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgY2FzZSBvcF9pc19u
dW1iZXI6CisgICAgY2FzZSBvcF9pc19zdHJpbmc6CisgICAgY2FzZSBvcF9pc19vYmplY3Q6Cisg
ICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKKyAgICBjYXNlIG9wX2luOgorICAgIGNhc2Ugb3BfdG9f
bnVtYmVyOgorICAgIGNhc2Ugb3BfbmVnYXRlOgorICAgIGNhc2Ugb3BfYWRkOgorICAgIGNhc2Ug
b3BfbXVsOgorICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3BfbW9kOgorICAgIGNhc2Ugb3Bf
c3ViOgorICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OgorICAgIGNhc2Ug
b3BfdXJzaGlmdDoKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICBjYXNlIG9wX2JpdHhvcjoKKyAg
ICBjYXNlIG9wX2JpdG9yOgorICAgIGNhc2Ugb3BfaW5jOgorICAgIGNhc2Ugb3BfZGVjOgorICAg
IGNhc2Ugb3BfZXE6CisgICAgY2FzZSBvcF9uZXE6CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAg
ICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgY2FzZSBvcF9sZXNz
ZXE6CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3BfbmVxX251bGw6CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgIGNhc2Ugb3Bfbm90Ogor
ICAgIGNhc2Ugb3BfbW92OgorICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICBjYXNlIG9wX3Rv
X3RoaXM6CisgICAgY2FzZSBvcF9nZXRfY2FsbGVlOgorICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3Jl
ZzoKKyAgICBjYXNlIG9wX2NyZWF0ZV9hY3RpdmF0aW9uOgorICAgIGNhc2Ugb3BfY3JlYXRlX2Fy
Z3VtZW50czogeworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJs
b2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgZGVmcy5zZXQoaW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBU
T0RPOiBJcyB0aGlzIGNvcnJlY3Q/CisgICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6IHsK
KyAgICAgICAgaW50IHIwID0gaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgICAgICBpZiAo
aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCByMCAtIDEpKQorICAgICAgICAg
ICAgZGVmcy5zZXQocjAgLSAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBUT0RP
OiBOb3Qgc3VyZSB3aGF0IHRvIGRvIHdpdGggdGhpcy4KKyAgICBjYXNlIG9wX2luaXRfZ2xvYmFs
X2NvbnN0OiB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCBjb21wdXRlVXNlc0FuZERlZnNGb3JCbG9jayhCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVUb0JpdG1hcE1hcCYgdXNlc01hcCwgQnl0ZWNv
ZGVUb0JpdG1hcE1hcCYgZGVmc01hcCkKK3sKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIg
PSBjb2RlQmxvY2stPnZtKCktPmludGVycHJldGVyOworICAgIEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKyAgICBGYXN0
Qml0VmVjdG9yIHVzZXM7CisgICAgRmFzdEJpdFZlY3RvciBkZWZzOworICAgIHVzZXMucmVzaXpl
KGJsb2NrLT5pbigpLm51bUJpdHMoKSk7CisgICAgZGVmcy5yZXNpemUoYmxvY2stPm91dCgpLm51
bUJpdHMoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5ieXRlY29kZU9m
ZnNldHMoKS5zaXplKCk7IGkrKykgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGJsb2NrLT5ieXRlY29kZU9mZnNldHMoKVtpXTsKKyAgICAgICAgdXNlcy5jbGVhckFsbCgpOwor
ICAgICAgICBkZWZzLmNsZWFyQWxsKCk7CisgICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVP
ZmZzZXQoY29kZUJsb2NrLCBpbnRlcnByZXRlciwgJmluc3RydWN0aW9uc0JlZ2luW2J5dGVjb2Rl
T2Zmc2V0XSwgdXNlcyk7CisgICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoY29k
ZUJsb2NrLCBpbnRlcnByZXRlciwgJmluc3RydWN0aW9uc0JlZ2luW2J5dGVjb2RlT2Zmc2V0XSwg
ZGVmcyk7CisgICAgICAgIHVzZXNNYXAuc2V0KGJ5dGVjb2RlT2Zmc2V0LCB1c2VzKTsKKyAgICAg
ICAgZGVmc01hcC5zZXQoYnl0ZWNvZGVPZmZzZXQsIGRlZnMpOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhCeXRlY29kZUJhc2ljQmxvY2sqIGJs
b2NrLCBCeXRlY29kZVRvQml0bWFwTWFwJiBpbkxpdmVuZXNzTWFwLCBCeXRlY29kZVRvQml0bWFw
TWFwJiBvdXRMaXZlbmVzc01hcCwgQnl0ZWNvZGVUb0JpdG1hcE1hcCYgdXNlc01hcCwgQnl0ZWNv
ZGVUb0JpdG1hcE1hcCYgZGVmc01hcCkKK3sKKyAgICBpZiAoYmxvY2stPmlzRXhpdEJsb2NrKCkg
fHwgYmxvY2stPmlzRW50cnlCbG9jaygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBIYW5k
bGUgdmVyeSBsYXN0IGJ5dGVjb2RlIGluIHRoZSBibG9jay4KKyAgICB1bnNpZ25lZCBsYXN0Qnl0
ZWNvZGVPZmZzZXQgPSBibG9jay0+Ynl0ZWNvZGVPZmZzZXRzKCkubGFzdCgpOworICAgIG91dExp
dmVuZXNzTWFwLnNldChsYXN0Qnl0ZWNvZGVPZmZzZXQsIGJsb2NrLT5vdXQoKSk7CisgICAgRmFz
dEJpdFZlY3RvciBvdXQgPSBibG9jay0+b3V0KCk7CisgICAgRmFzdEJpdFZlY3RvciB1c2VzID0g
dXNlc01hcC5nZXQobGFzdEJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBGYXN0Qml0VmVjdG9yIGRlZnMg
PSBkZWZzTWFwLmdldChsYXN0Qnl0ZWNvZGVPZmZzZXQpOworICAgIG91dC5leGNsdWRlKGRlZnMp
OworICAgIHVzZXMubWVyZ2Uob3V0KTsKKyAgICBpbkxpdmVuZXNzTWFwLnNldChsYXN0Qnl0ZWNv
ZGVPZmZzZXQsIHVzZXMpOworCisgICAgLy8gSGFuZGxlIHRoZSByZXN0IG9mIHRoZSBieXRlY29k
ZXMuCisgICAgZm9yIChpbnQgaSA9IGJsb2NrLT5ieXRlY29kZU9mZnNldHMoKS5zaXplKCkgLSAy
OyBpID49IDA7IGktLSkgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2Nr
LT5ieXRlY29kZU9mZnNldHMoKVtpXTsKKyAgICAgICAgdW5zaWduZWQgbmV4dEJ5dGVjb2RlT2Zm
c2V0ID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0cygpW2kgKyAxXTsKKyAgICAgICAgRmFzdEJpdFZl
Y3RvciBvdXQgPSBpbkxpdmVuZXNzTWFwLmdldChuZXh0Qnl0ZWNvZGVPZmZzZXQpOworICAgICAg
ICBvdXRMaXZlbmVzc01hcC5zZXQoYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisKKyAgICAgICAgRmFz
dEJpdFZlY3RvciB1c2VzID0gdXNlc01hcC5nZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBG
YXN0Qml0VmVjdG9yIGRlZnMgPSBkZWZzTWFwLmdldChieXRlY29kZU9mZnNldCk7CisgICAgICAg
IG91dC5leGNsdWRlKGRlZnMpOworICAgICAgICB1c2VzLm1lcmdlKG91dCk7CisgICAgICAgIGlu
TGl2ZW5lc3NNYXAuc2V0KGJ5dGVjb2RlT2Zmc2V0LCB1c2VzKTsKKyAgICB9CisKKyAgICAvLyBT
ZXQgdGhlIG5ldyAnaW4nIGZvciB0aGUgYmxvY2suCisgICAgdW5zaWduZWQgZmlyc3RCeXRlY29k
ZU9mZnNldCA9IGJsb2NrLT5ieXRlY29kZU9mZnNldHMoKS5maXJzdCgpOworICAgIEZhc3RCaXRW
ZWN0b3IgZmlyc3RJbiA9IGluTGl2ZW5lc3NNYXAuZ2V0KGZpcnN0Qnl0ZWNvZGVPZmZzZXQpOwor
ICAgIGJsb2NrLT5pbigpLnNldChmaXJzdEluKTsKK30KKwordm9pZCBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM6OnJ1bkxpdmVuZXNzRml4cG9pbnQoKQoreworICAgIEFTU0VSVCghbV9jb21wdXRl
ZCk7CisgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkQ29kZUJsb2NrKCk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZWYXJpYWJsZXMg
PSB1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzICsgCisgICAgICAgIHVubGlua2VkQ29kZUJs
b2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKKworICAgIEJ5dGVjb2RlVG9CaXRtYXBNYXAgdXNl
c01hcDsKKyAgICBCeXRlY29kZVRvQml0bWFwTWFwIGRlZnNNYXA7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9iYXNpY0Jsb2Nrcy5zaXplKCk7IGkrKykgeworICAgICAgICBCeXRl
Y29kZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9iYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKKyAgICAgICAg
YmxvY2stPmluKCkucmVzaXplKG51bWJlck9mVmFyaWFibGVzKTsKKyAgICAgICAgYmxvY2stPm91
dCgpLnJlc2l6ZShudW1iZXJPZlZhcmlhYmxlcyk7CisgICAgICAgIGNvbXB1dGVVc2VzQW5kRGVm
c0ZvckJsb2NrKGJsb2NrLCBtX2NvZGVCbG9jaywgdXNlc01hcCwgZGVmc01hcCk7CisgICAgfQor
CisgICAgYm9vbCBjaGFuZ2VkOworICAgIG1fYmFzaWNCbG9ja3MubGFzdCgpLT5pbigpLmNsZWFy
QWxsKCk7CisgICAgbV9iYXNpY0Jsb2Nrcy5sYXN0KCktPm91dCgpLmNsZWFyQWxsKCk7CisgICAg
ZG8geworICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoaW50IGkgPSBtX2Jh
c2ljQmxvY2tzLnNpemUoKSAtIDI7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBCeXRlY29k
ZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9iYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKKyAgICAgICAgICAg
IEZhc3RCaXRWZWN0b3IgbmV3T3V0OworICAgICAgICAgICAgbmV3T3V0LnJlc2l6ZShibG9jay0+
b3V0KCkubnVtQml0cygpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBi
bG9jay0+c3VjY2Vzc29ycygpLnNpemUoKTsgaisrKQorICAgICAgICAgICAgICAgIG5ld091dC5t
ZXJnZShibG9jay0+c3VjY2Vzc29ycygpW2pdLT5pbigpKTsKKyAgICAgICAgICAgIGJvb2wgb3V0
RGlkQ2hhbmdlID0gYmxvY2stPm91dCgpLnNldEFuZENoZWNrKG5ld091dCk7CisgICAgICAgICAg
ICBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKGJsb2NrLCBtX2luTGl2ZW5lc3NNYXAsIG1f
b3V0TGl2ZW5lc3NNYXAsIHVzZXNNYXAsIGRlZnNNYXApOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBvdXREaWRDaGFuZ2U7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKK30KKwor
dm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKCkKK3sKKyAgICBBU1NF
UlQobV9jb21wdXRlZCk7CisgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9jb2RlQmxv
Y2stPnZtKCktPmludGVycHJldGVyOworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdp
biA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2Jhc2ljQmxvY2tzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEJ5dGVj
b2RlQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jhc2ljQmxvY2tzW2ldLmdldCgpOworICAgICAgICBk
YXRhTG9nRigiXG5CeXRlY29kZSBiYXNpYyBibG9jayAldTogJXAgKG9mZnNldDogJXUsIGxlbmd0
aDogJXUpXG4iLCBpLCBibG9jaywgYmxvY2stPmxlYWRlckJ5dGVjb2RlT2Zmc2V0KCksIGJsb2Nr
LT50b3RhbEJ5dGVjb2RlTGVuZ3RoKCkpOworICAgICAgICBkYXRhTG9nRigiUHJlZGVjZXNzb3Jz
OiAiKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGJsb2NrLT5wcmVkZWNlc3Nv
cnMoKS5zaXplKCk7IGorKykgeworICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBwcmVk
ZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKVtqXTsKKyAgICAgICAgICAgIGRhdGFMb2dG
KCIlcCAiLCBwcmVkZWNlc3Nvcik7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0YoIlxuIik7
CisgICAgICAgIGRhdGFMb2dGKCJTdWNjZXNzb3JzOiAiKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gMDsgaiA8IGJsb2NrLT5zdWNjZXNzb3JzKCkuc2l6ZSgpOyBqKyspIHsKKyAgICAgICAg
ICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcnMoKVtq
XTsKKyAgICAgICAgICAgIGRhdGFMb2dGKCIlcCAiLCBzdWNjZXNzb3IpOworICAgICAgICB9Cisg
ICAgICAgIGRhdGFMb2dGKCJcbiIpOworICAgICAgICBpZiAoYmxvY2stPmlzRW50cnlCbG9jaygp
KSB7CisgICAgICAgICAgICBkYXRhTG9nRigiRW50cnkgYmxvY2sgJXBcbiIsIGJsb2NrKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChibG9jay0+aXNFeGl0
QmxvY2soKSkgeworICAgICAgICAgICAgZGF0YUxvZ0YoIkV4aXQgYmxvY2s6ICVwXG4iLCBibG9j
ayk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmxlYWRlckJ5dGVjb2RlT2Zmc2V0KCk7IGJ5dGVj
b2RlT2Zmc2V0IDwgYmxvY2stPmxlYWRlckJ5dGVjb2RlT2Zmc2V0KCkgKyBibG9jay0+dG90YWxC
eXRlY29kZUxlbmd0aCgpOykgeworICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CisKKyAg
ICAgICAgICAgIGRhdGFMb2dGKCJMaXZlIHZhcmlhYmxlczogIik7CisgICAgICAgICAgICBGYXN0
Qml0VmVjdG9yIGxpdmVCZWZvcmUgPSBtX2luTGl2ZW5lc3NNYXAuZ2V0KGJ5dGVjb2RlT2Zmc2V0
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBsaXZlQmVmb3JlLm51bUJp
dHMoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgaWYgKGxpdmVCZWZvcmUuZ2V0KGopKQorICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nRigiJXUgIiwgaik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBkYXRhTG9nRigiXG4iKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5kdW1wQnl0
ZWNvZGUoV1RGOjpkYXRhRmlsZSgpLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKSwgaW5zdHJ1Y3Rpb25zQmVnaW4sIGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICAg
ICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3Ry
dWN0aW9uc0JlZ2luW2J5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSk7CisgICAgICAgICAgICB1bnNp
Z25lZCBvcGNvZGVMZW5ndGggPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsKKyAgICAgICAgICAg
IGJ5dGVjb2RlT2Zmc2V0ICs9IG9wY29kZUxlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAgIGRh
dGFMb2dGKCJMaXZlIHZhcmlhYmxlczogIik7CisgICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUFm
dGVyID0gYmxvY2stPm91dCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbGl2
ZUFmdGVyLm51bUJpdHMoKTsgaisrKSB7CisgICAgICAgICAgICBpZiAobGl2ZUFmdGVyLmdldChq
KSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiJXUgIiwgaik7CisgICAgICAgIH0KKyAgICAg
ICAgZGF0YUxvZ0YoIlxuIik7CisgICAgICAgIAorICAgIH0KK30KKwordm9pZCBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXM6OmNsZWFySW50ZXJtZWRpYXRlRGF0YVN0cnVjdHVyZXMoKQoreworICAg
IEFTU0VSVChtX2NvbXB1dGVkKTsKKyAgICBtX2Jhc2ljQmxvY2tzLmNsZWFyKCk7Cit9CisKK3Zv
aWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlKCkKK3sKKyAgICBpZiAobV9jb21w
dXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29tcHV0ZUJ5dGVjb2RlQmFzaWNCbG9ja3Mo
bV9jb2RlQmxvY2ssIG1fYmFzaWNCbG9ja3MpOworICAgIHJ1bkxpdmVuZXNzRml4cG9pbnQoKTsK
KyAgICBtX2NvbXB1dGVkID0gdHJ1ZTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wQnl0ZWNvZGVM
aXZlbmVzc1Jlc3VsdHMoKSkKKyAgICAgICAgZHVtcFJlc3VsdHMoKTsKKyAgICBjbGVhckludGVy
bWVkaWF0ZURhdGFTdHJ1Y3R1cmVzKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNf
aAorI2RlZmluZSBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNfaAorCisjaW5jbHVkZSAiQnl0ZWNv
ZGVCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIENvZGVCbG9jazsKKworY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
IHsKK3B1YmxpYzoKKyAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKik7CisK
KyAgICBGYXN0Qml0VmVjdG9yIGxpdmVuZXNzQmVmb3JlQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlQobV9jb21wdXRlZCk7CisgICAg
ICAgIHJldHVybiBtX2luTGl2ZW5lc3NNYXAuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB9CisK
KyAgICBGYXN0Qml0VmVjdG9yIGxpdmVuZXNzQWZ0ZXJCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NvbXB1dGVkKTsKKyAgICAg
ICAgcmV0dXJuIG1fb3V0TGl2ZW5lc3NNYXAuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB9CisK
KyAgICBib29sIGhhc0JlZW5Db21wdXRlZCgpIHsgcmV0dXJuIG1fY29tcHV0ZWQ7IH0KKyAgICB2
b2lkIGNvbXB1dGUoKTsKKyAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fY29tcHV0ZWQgPSBmYWxz
ZTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgcnVuTGl2ZW5lc3NGaXhwb2ludCgpOworICAgIHZv
aWQgZHVtcFJlc3VsdHMoKTsKKyAgICB2b2lkIGNsZWFySW50ZXJtZWRpYXRlRGF0YVN0cnVjdHVy
ZXMoKTsKKworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgVmVjdG9yPE93blB0cjxC
eXRlY29kZUJhc2ljQmxvY2s+ID4gbV9iYXNpY0Jsb2NrczsKKyAgICBCeXRlY29kZVRvQml0bWFw
TWFwIG1faW5MaXZlbmVzc01hcDsKKyAgICBCeXRlY29kZVRvQml0bWFwTWFwIG1fb3V0TGl2ZW5l
c3NNYXA7CisKKyAgICBib29sIG1fY29tcHV0ZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc19oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTUyNTU5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0ODksNiArMTQ4OSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJz
ZWRCbG9ja1RhZywKICAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCiAgICAgLCBt
X3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCiAgICAgLCBtX2hhc2gob3RoZXIubV9oYXNo
KQorICAgICwgbV9saXZlbmVzc0FuYWx5c2lzKHRoaXMpCiAjaWYgRU5BQkxFKEpJVCkKICAgICAs
IG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCiAjZW5k
aWYKQEAgLTE1MDUsNiArMTUwNiw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRC
bG9ja1RhZywKICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gb3RoZXIu
bV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzOwogICAgICAgICBtX3JhcmVEYXRhLT5tX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXM7CiAgICAgfQorCisgICAgaWYgKE9wdGlvbnM6OmR1bXBCeXRlY29kZUxpdmVuZXNz
UmVzdWx0cygpKQorICAgICAgICBtX2xpdmVuZXNzQW5hbHlzaXMuY29tcHV0ZSgpOwogfQogCiBD
b2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsIFBhc3NS
ZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZz
ZXQpCkBAIC0xNTI4LDYgKzE1MzIsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgLCBtX29zckV4aXRDb3VudGVyKDApCiAgICAgLCBtX29wdGltaXphdGlv
bkRlbGF5Q291bnRlcigwKQogICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQor
ICAgICwgbV9saXZlbmVzc0FuYWx5c2lzKHRoaXMpCiAjaWYgRU5BQkxFKEpJVCkKICAgICAsIG1f
Y2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCiAjZW5kaWYK
QEAgLTE4MjYsOSArMTgzMSwxMyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRh
YmxlKiBvCiAgICAgICAgIHx8IE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpKQogICAgICAg
ICBoYXNoKCk7CiAKKyAgICBpZiAoT3B0aW9uczo6ZHVtcEJ5dGVjb2RlTGl2ZW5lc3NSZXN1bHRz
KCkpCisgICAgICAgIG1fbGl2ZW5lc3NBbmFseXNpcy5jb21wdXRlKCk7CisKICAgICBpZiAoT3B0
aW9uczo6ZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcygpKQogICAgICAgICBkdW1wQnl0ZWNvZGUoKTsK
ICAgICBtX3ZtLT5maW5pc2hlZENvbXBpbGluZyh0aGlzKTsKKwogfQogCiBDb2RlQmxvY2s6On5D
b2RlQmxvY2soKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMTUyNTU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi
QXJyYXlQcm9maWxlLmgiCiAjaW5jbHVkZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgog
I2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUgIkNhbGxSZXR1cm5PZmZzZXRUb0J5
dGVjb2RlT2Zmc2V0LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSGFzaC5oIgpAQCAtOTEsNiArOTIs
NyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1RoaXNPYmplCiAKIGNsYXNzIENv
ZGVCbG9jayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDb2RlQmxvY2s+LCBwdWJsaWMg
VW5jb25kaXRpb25hbEZpbmFsaXplciwgcHVibGljIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXM7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBmcmllbmQgY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogcHVibGljOgpAQCAtMTA5NCw2ICsxMDk2LDggQEAgcHJp
dmF0ZToKICAgICAKICAgICBtdXRhYmxlIENvZGVCbG9ja0hhc2ggbV9oYXNoOwogCisgICAgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIG1fbGl2ZW5lc3NBbmFseXNpczsKKwogICAgIHN0cnVjdCBS
YXJlRGF0YSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNl
SnVtcFRhcmdldHMuY3BwCShyZXZpc2lvbiAxNTI1NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNjYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3RlbXBsYXRlIDxzaXplX3QgdmVjdG9y
U2l6ZT4KK3N0YXRpYyB2b2lkIGdldEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEludGVycHJldGVyKiBpbnRlcnByZXRlciwgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uc0JlZ2luLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgVmVjdG9yPHVuc2lnbmVk
LCB2ZWN0b3JTaXplPiYgb3V0KQoreworICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0
ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uc0JlZ2luW2J5dGVjb2RlT2Zmc2V0XS51Lm9wY29k
ZSk7CisgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnQgPSBpbnN0cnVjdGlvbnNCZWdpbiArIGJ5dGVj
b2RlT2Zmc2V0OworICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICBjYXNlIG9wX2ptcDoKKyAg
ICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbMV0udS5vcGVyYW5kKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToK
KyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgICAgICBv
dXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFsyXS51Lm9wZXJhbmQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAg
Y2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3Jl
YXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAg
Y2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICAgICAgb3V0
LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbM10udS5vcGVyYW5kKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6
IHsKKyAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKGN1cnJlbnRbMV0udS5vcGVyYW5kKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
dGFibGUuYnJhbmNoT2Zmc2V0cy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBvdXQuYXBwZW5k
KGJ5dGVjb2RlT2Zmc2V0ICsgdGFibGUuYnJhbmNoT2Zmc2V0c1tpXSk7CisgICAgICAgIG91dC5h
cHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzJdLnUub3BlcmFuZCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6IHsKKyAgICAgICAgU3RyaW5n
SnVtcFRhYmxlJiB0YWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGN1cnJl
bnRbMV0udS5vcGVyYW5kKTsKKyAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRU
YWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLm9mZnNldFRhYmxlLmJlZ2luKCk7CisgICAgICAg
IFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxl
Lm9mZnNldFRhYmxlLmVuZCgpOworICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikK
KyAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBpdGVyLT52YWx1ZS5icmFu
Y2hPZmZzZXQpOworICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFsy
XS51Lm9wZXJhbmQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9nZXRfcG5h
bWVzOgorICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFs1XS51Lm9w
ZXJhbmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25leHRfcG5hbWU6CisgICAgICAg
IG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzZdLnUub3BlcmFuZCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNlOgorICAgICAgICBvdXQu
YXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFs0XS51Lm9wZXJhbmQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICAgICAgb3V0LmFwcGVuZChieXRlY29k
ZU9mZnNldCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKwogdm9pZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKENvZGVCbG9jayogY29k
ZUJsb2NrLCBWZWN0b3I8dW5zaWduZWQsIDMyPiYgb3V0KQogewogICAgIEFTU0VSVChvdXQuaXNF
bXB0eSgpKTsKQEAgLTQ1LDYwICsxMDUsNyBAQCB2b2lkIGNvbXB1dGVQcmVjaXNlSnVtcFRhcmdl
dHMoQ29kZUJsb2NrCiAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQg
PSAwOyBieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9uQ291bnQ7KSB7CiAgICAgICAgIE9wY29k
ZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uc0JlZ2lu
W2J5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSk7Ci0gICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50
ID0gaW5zdHJ1Y3Rpb25zQmVnaW4gKyBieXRlY29kZU9mZnNldDsKLSAgICAgICAgc3dpdGNoIChv
cGNvZGVJRCkgewotICAgICAgICBjYXNlIG9wX2ptcDoKLSAgICAgICAgICAgIG91dC5hcHBlbmQo
Ynl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBvcF9qdHJ1ZToKLSAgICAgICAgY2FzZSBvcF9qZmFsc2U6Ci0gICAg
ICAgIGNhc2Ugb3BfamVxX251bGw6Ci0gICAgICAgIGNhc2Ugb3Bfam5lcV9udWxsOgotICAgICAg
ICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbMl0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIG9wX2puZXFfcHRyOgotICAgICAgICBj
YXNlIG9wX2psZXNzOgotICAgICAgICBjYXNlIG9wX2psZXNzZXE6Ci0gICAgICAgIGNhc2Ugb3Bf
amdyZWF0ZXI6Ci0gICAgICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKLSAgICAgICAgY2FzZSBvcF9q
bmxlc3M6Ci0gICAgICAgIGNhc2Ugb3Bfam5sZXNzZXE6Ci0gICAgICAgIGNhc2Ugb3Bfam5ncmVh
dGVyOgotICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgotICAgICAgICAgICAgb3V0LmFwcGVu
ZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIG9wX3N3aXRjaF9pbW06Ci0gICAgICAgIGNhc2Ugb3Bfc3dpdGNo
X2NoYXI6IHsKLSAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBjb2RlQmxvY2st
PnN3aXRjaEp1bXBUYWJsZShjdXJyZW50WzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSB0YWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKTsgaS0tOykKLSAgICAgICAg
ICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgdGFibGUuYnJhbmNoT2Zmc2V0c1tp
XSk7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFsyXS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9zd2l0Y2hfc3RyaW5nOiB7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0g
Y29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoY3VycmVudFsxXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3Ig
aXRlciA9IHRhYmxlLm9mZnNldFRhYmxlLmJlZ2luKCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1w
VGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS5vZmZzZXRUYWJs
ZS5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAg
ICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBpdGVyLT52YWx1ZS5icmFuY2hP
ZmZzZXQpOwotICAgICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRb
Ml0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfZ2V0X3BuYW1lczoKLSAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQg
KyBjdXJyZW50WzVdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBvcF9uZXh0X3BuYW1lOgotICAgICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCAr
IGN1cnJlbnRbNl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IG9wX2NoZWNrX2hhc19pbnN0YW5jZToKLSAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVP
ZmZzZXQgKyBjdXJyZW50WzRdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBvcF9sb29wX2hpbnQ6Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zm
c2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZ2V0SnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNl
dChjb2RlQmxvY2ssIGludGVycHJldGVyLCBpbnN0cnVjdGlvbnNCZWdpbiwgYnl0ZWNvZGVPZmZz
ZXQsIG91dCk7CiAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IG9wY29kZUxlbmd0aHNbb3Bjb2Rl
SURdOwogICAgIH0KICAgICAKQEAgLTExOCw1ICsxMjUsMTIgQEAgdm9pZCBjb21wdXRlUHJlY2lz
ZUp1bXBUYXJnZXRzKENvZGVCbG9jawogICAgIG91dC5yZXNpemUodG9JbmRleCk7CiB9CiAKK3Zv
aWQgZmluZEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBWZWN0b3I8dW5zaWduZWQsIDE+JiBvdXQpCit7Cisg
ICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gY29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRl
cjsKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmJlZ2luKCk7CisgICAgZ2V0SnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldChj
b2RlQmxvY2ssIGludGVycHJldGVyLCBpbnN0cnVjdGlvbnNCZWdpbiwgYnl0ZWNvZGVPZmZzZXQs
IG91dCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5oCShyZXZpc2lvbiAx
NTI1NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJn
ZXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiB2b2lkIGNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMoQ29kZUJsb2NrKiwgVmVjdG9yPHVuc2ln
bmVkLCAzMj4mIG91dCk7Cit2b2lkIGZpbmRKdW1wVGFyZ2V0c0ZvckJ5dGVjb2RlT2Zmc2V0KENv
ZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBWZWN0b3I8dW5zaWduZWQsIDE+JiBv
dXQpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTUyNTU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIHYoYm9vbCwgZm9yY2VERkdDb2RlQmxvY2tMaXZlbmVzcywgZmFs
c2UpIFwKICAgICBcCiAgICAgdihib29sLCBkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzLCBmYWxzZSkg
XAorICAgIHYoYm9vbCwgZHVtcEJ5dGVjb2RlTGl2ZW5lc3NSZXN1bHRzLCBmYWxzZSkgXAogICAg
IFwKICAgICAvKiBzaG93RGlzYXNzZW1ibHkgaW1wbGllcyBzaG93REZHRGlzYXNzZW1ibHkuICov
IFwKICAgICB2KGJvb2wsIHNob3dEaXNhc3NlbWJseSwgZmFsc2UpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208147</attachid>
            <date>2013-08-05 14:26:39 -0700</date>
            <delta_ts>2013-08-07 13:17:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118546-20130805142639.patch</filename>
            <type>text/plain</type>
            <size>70342</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzNzIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBA
QAorMjAxMy0wOC0wMiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvZGVCbG9ja3Mgc2hvdWxkIGJlIGFibGUgdG8gZGV0ZXJtaW5lIGJ5dGVjb2Rl
IGxpdmVuZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTg1NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHdpbGwgc2ltcGxpZnkgc29tZSB0aGluZ3MgaW4gdGhlIERGRyByZWxhdGVkIHRvIE9T
UiBleGl0cyBhbmQgZGV0ZXJtaW5pbmcgCisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIHZhcmlhYmxl
cyBhcmUgbGl2ZSBhdCB3aGljaCBwb2ludHMgZHVyaW5nIGV4ZWN1dGlvbi4gSXQgd2lsbAorICAg
ICAgICBhbHNvIGJlIHVzZWZ1bCBmb3IgbWFraW5nIG91ciBjb25zZXJ2YXRpdmUgR0Mgc2NhbiBt
b3JlIHByZWNpc2UuIEN1cnJlbnRseSBpdCAKKyAgICAgICAgZG9lc24ndCBwcm9wZXJseSBhY2Nv
dW50IGZvciBsaXZlbmVzcyB3aGlsZSB0aGUgREZHIGlzIHJ1bm5pbmcsIHNvIGl0IHdpbGwgYmUg
CisgICAgICAgIG9mZiBieSBkZWZhdWx0IGJlaGluZyBhIHJ1bnRpbWUgT3B0aW9ucyBmbGFnLgor
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6aXNCcmFuY2gpOiBVc2VkIHRvIGRldGVybWluZSB0aGUgZW5kIG9mIGJhc2ljIGJsb2Nr
cy4KKyAgICAgICAgKEpTQzo6aXNVbmNvbmRpdGlvbmFsQnJhbmNoKTogVXNlZCB0byBkZXRlcm1p
bmUgd2hlbiBhIGJyYW5jaCBhdCB0aGUgZW5kIG9mIGEgCisgICAgICAgIGJhc2ljIGJsb2NrIGNh
bid0IHBvc3NpYmx5IGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBiYXNpYyBibG9jayBpbiBwcm9n
cmFtIG9yZGVyLgorICAgICAgICAoSlNDOjppc1Rlcm1pbmFsKTogQWxzbyB1c2VkIHRvIGRldGVj
dCB0aGUgZW5kIG9mIGEgYmxvY2suCisgICAgICAgIChKU0M6OmlzVGhyb3cpOgorICAgICAgICAo
SlNDOjppc0p1bXBUYXJnZXQpOiBVc2VkIHRvIGNvcnJlY3RseSBzZXBhcmF0ZSBiYXNpYyBibG9j
a3MuIEFueSBqdW1wIGRlc3RpbmF0aW9uIAorICAgICAgICBtdXN0IGJlIHRoZSBoZWFkIG9mIGl0
cyBvd24gYmFzaWMgYmxvY2suCisgICAgICAgIChKU0M6OmxpbmtCbG9ja3MpOiBMaW5rcyB0d28g
YmxvY2tzIHRvZ2V0aGVyIGluIGEgYmktZGlyZWNpdG9uYWwgZmFzaGlvbi4KKyAgICAgICAgKEpT
Qzo6Y29tcHV0ZUJ5dGVjb2RlQmFzaWNCbG9ja3MpOiBDcmVhdGVzIGEgc2V0IG9mIGJhc2ljIGJs
b2NrcyBnaXZlbiBhIHBhcnRpY3VsYXIgCisgICAgICAgIENvZGVCbG9jayBhbmQgbGlua3MgdGhl
bSB0b2dldGhlci4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlQmFzaWNCbG9jazo6aXNFbnRyeUJsb2NrKTogRW50
cnkgYmxvY2tzIGFyZSBhIHNwZWNpYWwgYmFzaWMgYmxvY2tzIAorICAgICAgICB0aGF0IGluZGlj
YXRlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUJhc2ljQmxvY2s6OmlzRXhpdEJsb2NrKTogRXhpdCBibG9ja3MgYXJlIGEgc3BlY2lhbCBiYXNp
YyBibG9jayB0aGF0IAorICAgICAgICBhbGwgYmxvY2tzIHRoYXQgZXhpdCB0aGUgZnVuY3Rpb24g
aGF2ZSBhcyBhIHN1Y2Nlc3Nvci4gRW50cnkgYW5kIGV4aXQgYmxvY2tzIGFsbG93cyAKKyAgICAg
ICAgdGhlIHZhcmlvdXMgY29kZSBwYXRocyB0byBiZSBtb3JlIHJlZ3VsYXIuCisgICAgICAgIChK
U0M6OkJ5dGVjb2RlQmFzaWNCbG9jazo6bGVhZGVyQnl0ZWNvZGVPZmZzZXQpOiBUaGUgbGVhZGVy
IGJ5dGVjb2RlIG9mZnNldCBpcyB0aGUgCisgICAgICAgIGJ5dGVjb2RlIG9mZnNldCBvZiB0aGUg
Zmlyc3QgaW5zdHJ1Y3Rpb24gaW4gdGhlIGJsb2NrLgorICAgICAgICAoSlNDOjpCeXRlY29kZUJh
c2ljQmxvY2s6OnRvdGFsQnl0ZWNvZGVMZW5ndGgpOiBUaGUgdG90YWwgbGVuZ3RoIG9mIGFsbCB0
aGUgYnl0ZWNvZGVzIAorICAgICAgICBpbiB0aGlzIGJsb2NrLgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUJhc2ljQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0cyk6IFRoZSBieXRlY29kZSBvZmZzZXRzIGlu
IHRoaXMgcGFydGljdWxhciAKKyAgICAgICAgYmFzaWMgYmxvY2suIFRoaXMgVmVjdG9yIGFsbG93
cyB1cyB0byBpdGVyYXRlIG92ZXIgdGhlIGJ5dGVjb2RlcyBpbiByZXZlcnNlIG9yZGVyIAorICAg
ICAgICB3aGljaCB3b3VsZG4ndCBiZSBwb3NzaWJsZSBub3JtYWxseSBzaW5jZSB0aGV5IGFyZSBv
ZiB2YXJpYWJsZSBzaXplLgorICAgICAgICAoSlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6OmFkZFBy
ZWRlY2Vzc29yKTogTGlua3MgYSBibG9jayB0byBhIHNwZWNpZmllZCBwcmVkZWNlc3Nvci4gCisg
ICAgICAgIE9ubHkgY3JlYXRlcyBvbmUgZGlyZWN0aW9uIG9mIHRoZSBsaW5rLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6OmFkZFN1Y2Nlc3Nvcik6IFNhbWUgYXMgYWRkUHJlZGVj
ZXNzb3IsIGJ1dCBmb3Igc3VjY2Vzc29ycy4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Js
b2NrOjpwcmVkZWNlc3NvcnMpOiBHZXR0ZXIgZm9yIHByZWRlY2Vzc29ycy4KKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKTogR2V0dGVyIGZvciBzdWNjZXNzb3Jz
LgorICAgICAgICAoSlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6OmluKTogR2V0dGVyIGZvciB0aGUg
bGl2ZW5lc3MgaW5mbyBhdCB0aGUgaGVhZCBvZiB0aGUgYmxvY2suCisgICAgICAgIChKU0M6OkJ5
dGVjb2RlQmFzaWNCbG9jazo6b3V0KTogR2V0dGVyIGZvciB0aGUgbGl2ZW5lc3MgaW5mbyBhdCAg
dGhlIHRhaWwgb2YgdGhlIGJsb2NrLgorICAgICAgICAoSlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6
OkJ5dGVjb2RlQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlQmFzaWNCbG9jazo6
YWRkQnl0ZWNvZGVMZW5ndGgpOiBXaGVuIGNyZWF0aW5nIGJhc2ljIGJsb2NrcyB3ZSBjYWxsIAor
ICAgICAgICB0aGlzIGZ1bmN0aW9uIHdoZW4gd2Ugd2FudCB0byBhZGQgdGhlIG5leHQgYnl0ZWNv
ZGUgaW4gcHJvZ3JhbSBvcmRlciB0byB0aGlzIGJsb2NrLgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyk6CisgICAgICAgIChK
U0M6Om51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMpOiBDb252ZW5pZW5jZSB3cmFwcGVyLiBSZXR1
cm5zIHRoZQorICAgICAgICBudW1iZXIgb2YgY2FwdHVyZWQgdmFyaWFibGVzIGZvciBhIHBhcnRp
Y3VsYXIgQ29kZUJsb2NrLCBvciAwIGlmIAorICAgICAgICB0aGUgQ29kZUJsb2NrIGhhcyBubyBT
eW1ib2xUYWJsZS4KKyAgICAgICAgKEpTQzo6Y2FwdHVyZVN0YXJ0KTogRGl0dG8sIGJ1dCBmb3Ig
Y2FwdHVyZVN0YXJ0KCkuCisgICAgICAgIChKU0M6OmNhcHR1cmVFbmQpOiBEaXR0bywgYnV0IGZv
ciBjYXB0dXJlRW5kKCkuCisgICAgICAgIChKU0M6OmlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNz
KTogUmV0dXJucyB0cnVlIGlmIHRoZSBsaXZlbmVzcyBhbmFseXNpcyBzaG91bGQgCisgICAgICAg
IHRyYWNrIHRoZSBsaXZlbmVzcyBvZiBhIHBhcnRpY3VsYXIgb3BlcmFuZC4gV2UgaWdub3JlIGNv
bnN0YW50cywgYXJndW1lbnRzLCBhbmQgCisgICAgICAgIGNhcHR1cmVkIHZhcmlhYmxlcy4gV2Ug
aWdub3JlIGFyZ3VtZW50cyBiZWNhdXNlIHRoZXkncmUgbGl2ZSBmb3IgdGhlIGR1cmF0aW9uIG9m
IAorICAgICAgICBhIGZ1bmN0aW9uIGNhbGwuIFdlIGlnbm9yZSBjYXB0dXJlZCB2YXJpYWJsZXMg
YmVjYXVzZSB3ZSBhbHNvIHRyZWF0IHRoZW0gYXMgbGl2ZSAKKyAgICAgICAgZm9yIHRoZSBkdXJh
dGlvbiBvZiB0aGUgZnVuY3Rpb24uIFRoaXMgY291bGQgcHJvYmFibHkgYmUgaW1wcm92ZWQgdG8g
YmUgbW9yZSBwcmVjaXNlLCAKKyAgICAgICAgYnV0IGl0IGRpZG4ndCBzZWVtIHdvcnRoIGl0IGZv
ciBub3cuCisgICAgICAgIChKU0M6OnNldEZvck9wZXJhbmQpOiBDb252ZW5pZW5jZSB3cmFwcGVy
IHRoYXQgc2V0cyB0aGUgYml0IGluIHRoZSBwcm92aWRlZCBiaXQgCisgICAgICAgIHZlY3RvciBm
b3IgdGhlIHByb3ZpZGVkIG9wZXJhbmQuIEl0IGhhbmRsZXMgc2tpcHBpbmcgb3ZlciBjYXB0dXJl
ZCB2YXJpYWJsZXMuCisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQp
OiBDb21wdXRlcyB3aGljaCBvcGVyYW5kcyBhcmUgdXNlZCBieSBhIHBhcnRpY3VsYXIgYnl0ZWNv
ZGUuCisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOiBDb21wdXRl
cyB3aGljaCBvcGVyYW5kcyBhcmUgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgCisgICAgICAgIGJ5
dGVjb2RlLiBUeXBpY2FsbHkgdGhpcyBpcyBqdXN0IHRoZSBsZWZ0LW1vc3Qgb3BlcmFuZC4KKyAg
ICAgICAgKEpTQzo6ZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KTogCisgICAgICAgIChK
U0M6OmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQpOiBTY2FucyBvdmVyIGJhc2ljIGJs
b2NrcyB0byBmaW5kIHRoZSBibG9jayAKKyAgICAgICAgd2hpY2ggY29udGFpbnMgYSBwYXJ0aWN1
bGFyIGJ5dGVjb2RlIG9mZnNldC4KKyAgICAgICAgKEpTQzo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NG
b3JCeXRlY29kZU9mZnNldCk6IENvbXB1dGVzIGJsb2NrLWxvY2FsIGxpdmVuZXNzIGZyb20gdGhl
IAorICAgICAgICBib3R0b20gb2YgdGhlIGJsb2NrIHVudGlsIGEgc3BlY2lmaWVkIGJ5dGVjb2Rl
IG9mZnNldCBpcyByZWFjaGVkLiAKKyAgICAgICAgKEpTQzo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NG
b3JCbG9jayk6IENvbXB1dGVzIGxpdmVuZXNzIGZvciB0aGUgZW50aXJlIGJsb2NrIGFuZCAKKyAg
ICAgICAgc3RvcmVzIHRoZSByZXN1bHRpbmcgbGl2ZW5lc3MgYXQgdGhlIGhlYWQuCisgICAgICAg
IChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6cnVuTGl2ZW5lc3NGaXhwb2ludCk6IFJ1
bnMgYmFja3dhcmQgZmxvdyBsaXZlbmVzcyAKKyAgICAgICAgYW5hbHlzaXMgdG8gZml4cG9pbnQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZv
Rm9yTm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldCk6IAorICAgICAgICBTbG93IHBhdGgg
dG8gZ2V0IGxpdmVuZXNzIGluZm8gZm9yIG5vbi1jYXB0dXJlZCwgbm9uLWFyZ3VtZW50IHZhcmlh
YmxlLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6Om9wZXJhbmRJc0xp
dmVBdEJ5dGVjb2RlT2Zmc2V0KTogCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCk6IFJldHVybnMgdGhlIGxpdmVu
ZXNzIAorICAgICAgICBpbmZvIGZvciBib3RoIGNhcHR1cmVkIGFuZCBub24tY2FwdHVyZWQgdmFy
cyBhdCBhIHBhcnRpY3VsYXIgYnl0ZWNvZGUgb2Zmc2V0LgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKTogRHVtcHMgdGhlIG91dHB1dCBvZiB0aGUg
bGl2ZW5lc3MgYW5hbHlzaXMuIAorICAgICAgICBDb250cm9sbGVkIGJ5IG5ldyBmbGFnIGluIE9w
dGlvbnMuaC8uY3BwLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNv
bXB1dGUpOiBDcmVhdGVzIGJ5dGVjb2RlIGJhc2ljIGJsb2NrcyBhbmQgcnVucyAKKyAgICAgICAg
ZnVsbCBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6aGFzQmVlbkNvbXB1dGVkKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzOjpjb21wdXRlSWZOZWNlc3NhcnkpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaXZlbmVzc0Fu
YWx5c2lzKToKKyAgICAgICAgKiBieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwOiBSZWZh
Y3RvcmVkIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBqdW1wIHRhcmdldHMgZm9yIAorICAgICAgICBh
IHBhcnRpY3VsYXIgYnl0ZWNvZGUgb2Zmc2V0IGZvciB1c2UgZHVyaW5nIGJ5dGVjb2RlIGJhc2lj
IGJsb2NrIGNvbnN0cnVjdGlvbi4KKyAgICAgICAgKEpTQzo6Z2V0SnVtcFRhcmdldHNGb3JCeXRl
Y29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMpOgor
ICAgICAgICAoSlNDOjpmaW5kSnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAg
ICogYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIv
SlNTdGFjay5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJv
b3RzKTogQ2hhbmdlZCB0byB1c2UgdGhlIGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lzIAorICAg
ICAgICBkdXJpbmcgY29uc2VydmF0aXZlIHN0YWNrIHNjYW5uaW5nLiBFbmFibGVkIGJ5IGZsYWcg
aW4gT3B0aW9ucy5oLy5jcHAuCisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAg
ICAgKEpTQzo6T3B0aW9uczo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25z
Lmg6CisKIDIwMTMtMDgtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDb3BpZWQgc3BhY2Ugc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIG1vcmUgdGhhbiBvbmUg
Y29waWVkIGJhY2tpbmcgc3RvcmUgcGVyIEpTQ2VsbApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE1MzcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDE1LDYgKzEwMTUsMTAgQEAKIAkJQzJFQUQyRkMxNEYwMjQ5ODAwQTRCMTU5IC8qIENvcGllZEFs
bG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzJFQUQyRkIxNEYwMjQ5ODAwQTRCMTU5IC8qIENvcGllZEFsbG9jYXRvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyRjBGMkQxMTZCQUVFRTkw
MDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkYwRjJEMDE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0
dXJlUmFyZURhdGEuY3BwICovOyB9OwogCQlDMkZDOUJEMzE2NjQ0REZCMDA4MTBEMzMgLyogQ29w
aWVkQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMkZDOUJEMjE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxpbmVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzJGQ0FF
MTAxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwQzE3QTlDMjRFMDAzNEM3
MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAqLzsgfTsKKwkJQzJGQ0FFMTExN0E5QzI0RTAw
MzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2Rl
QmFzaWNCbG9jay5oICovOyB9OworCQlDMkZDQUUxMjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEMyRkNBRTBFMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMuY3BwICovOyB9OworCQlDMkZDQUUxMzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMkZDQUUwRjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzLmggKi87IH07CiAJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVS
YXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzJGRTE4QTMxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRERGN0FCRDQxMUY2MEVE
MjAwMTA4RTM2IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRERGN0FCRDIxMUY2MEVEMjAwMTA4RTM2IC8qIEdDQWN0
aXZpdHlDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjUwRTU1
NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIwODgsNiArMjA5MiwxMCBAQAogCQlDMkVBRDJG
QjE0RjAyNDk4MDBBNEIxNTkgLyogQ29waWVkQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvcGllZEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMkYwRjJEMDE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlUmFyZURhdGEu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkZDOUJEMjE2NjQ0REZCMDA4MTBE
MzMgLyogQ29waWVkQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvcGllZEJsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
MkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVjb2RlQmFzaWNCbG9jay5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyRkNBRTBEMTdBOUMyNEUwMDM0QzczNSAvKiBC
eXRlY29kZUJhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0
ZWNvZGVCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyRkNBRTBF
MTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1
IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzJGRTE4QTMxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVJhcmVEYXRhLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI4MEFENDMxMEMwMEVENzlCNiAvKiBE
YXRlQ29udmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGF0ZUNvbnZlcnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIy
OTBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zMzc1LDYgKzMzODMsMTAgQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8q
IGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQlDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAqLywK
KwkJCQlDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggKi8s
CisJCQkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHAgKi8sCisJCQkJQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5oICovLAogCQkJCTBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFs
bG9jYXRpb25Qcm9maWxlLmNwcCAqLywKIAkJCQkwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyog
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovLAogCQkJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3
QyAvKiBBcnJheVByb2ZpbGUuY3BwICovLApAQCAtMzQ4Niw2ICszNDk4LDcgQEAKIAkJCQkwRjgz
MzVCODE2MzlDMUVBMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5Q29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNv
bnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUg
LyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQ1NTE1RDA3
MDU3MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNF
NzBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNTI0MEUxNkZDOEEwMEIzNDQ2MCAvKiBBcnJheVByb3RvdHlwZS5sdXQuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzk4NSw2ICszOTk4LDcgQEAKIAkJCQlBNzMwQjYxMjEyNTAwNjhGMDA5RDI1
QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY2
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0NjgwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ09iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0
cmluZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MjYwRTE2RkNBNzAwQjM0
NDYwIC8qIFN0cmluZ1Byb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNC
MTM0RkYwQTYwMEFGQURCNSAvKiBTdHJvbmcuaCBpbiBIZWFkZXJzICovLApAQCAtNDQyNiw2ICs0
NDQwLDcgQEAKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnZlcnNpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzUxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVJ
bnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNjEwN0VDMzc2MDA0MjdBNDgg
LyogRGF0ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDMkZDQUUxMjE3QTlDMjRF
MDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzMxMzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dl
ckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ2OTIsNiArNDcwNyw3IEBACiAJCQkJ
MEZGNzI5QjIxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ck9yaWdpblN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUMyRkNBRTEwMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1
OEIxNjc1NDgzMTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkIxMDU4RDE2NzU0ODM3MDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyQjE2NzcxQzNBMDA5Q0NCMDcgLyogUHJvZmlsZXJQ
cm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiCisKKyNp
bmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBib29sIGlzQnJhbmNoKE9wY29kZUlEIG9wY29kZUlE
KQoreworICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNl
IG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6Cisg
ICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBjYXNlIG9w
X2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAg
IGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pu
bGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6
CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAg
Y2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfZ2V0X3BuYW1lczoKKyAgICBjYXNl
IG9wX25leHRfcG5hbWU6CisgICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK3N0YXRpYyBib29sIGlzVW5jb25kaXRpb25hbEJyYW5jaChPcGNvZGVJRCBvcGNvZGVJ
RCkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgY2FzZSBvcF9qbXA6CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK3N0YXRpYyBib29sIGlzVGVybWluYWwoT3Bjb2RlSUQgb3Bjb2RlSUQpCit7CisgICAg
c3dpdGNoIChvcGNvZGVJRCkgeworICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3BfcmV0X29i
amVjdF9vcl90aGlzOgorICAgIGNhc2Ugb3BfZW5kOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgYm9v
bCBpc1Rocm93KE9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsK
KyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitzdGF0aWMgYm9vbCBpc0p1bXBUYXJnZXQoT3Bjb2RlSUQgb3Bjb2RlSUQsIFZl
Y3Rvcjx1bnNpZ25lZCwgMzI+JiBqdW1wVGFyZ2V0cywgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQp
Cit7CisgICAgaWYgKG9wY29kZUlEID09IG9wX2NhdGNoKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqdW1wVGFyZ2V0cy5zaXplKCk7IGkrKykg
eworICAgICAgICBpZiAoYnl0ZWNvZGVPZmZzZXQgPT0ganVtcFRhcmdldHNbaV0pCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMg
dm9pZCBsaW5rQmxvY2tzKEJ5dGVjb2RlQmFzaWNCbG9jayogcHJlZGVjZXNzb3IsIEJ5dGVjb2Rl
QmFzaWNCbG9jayogc3VjY2Vzc29yKQoreworICAgIHByZWRlY2Vzc29yLT5hZGRTdWNjZXNzb3Io
c3VjY2Vzc29yKTsKKyAgICBzdWNjZXNzb3ItPmFkZFByZWRlY2Vzc29yKHByZWRlY2Vzc29yKTsK
K30KKwordm9pZCBjb21wdXRlQnl0ZWNvZGVCYXNpY0Jsb2NrcyhDb2RlQmxvY2sqIGNvZGVCbG9j
aywgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+ID4mIGJhc2ljQmxvY2tzKQorewor
ICAgIFZlY3Rvcjx1bnNpZ25lZCwgMzI+IGp1bXBUYXJnZXRzOworICAgIGNvbXB1dGVQcmVjaXNl
SnVtcFRhcmdldHMoY29kZUJsb2NrLCBqdW1wVGFyZ2V0cyk7CisKKyAgICAvLyBDcmVhdGUgdGhl
IGVudHJ5IGFuZCBleGl0IGJhc2ljIGJsb2Nrcy4KKyAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGVu
dHJ5ID0gbmV3IEJ5dGVjb2RlQmFzaWNCbG9jayhCeXRlY29kZUJhc2ljQmxvY2s6OkVudHJ5Qmxv
Y2spOworICAgIGJhc2ljQmxvY2tzLmFwcGVuZChhZG9wdFJlZihlbnRyeSkpOworICAgIEJ5dGVj
b2RlQmFzaWNCbG9jayogZXhpdCA9IG5ldyBCeXRlY29kZUJhc2ljQmxvY2soQnl0ZWNvZGVCYXNp
Y0Jsb2NrOjpFeGl0QmxvY2spOworCisgICAgLy8gRmluZCBiYXNpYyBibG9jayBib3VuZGFyaWVz
LgorICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogY3VycmVudCA9IG5ldyBCeXRlY29kZUJhc2ljQmxv
Y2soMCwgMCk7CisgICAgbGlua0Jsb2NrcyhlbnRyeSwgY3VycmVudCk7CisgICAgYmFzaWNCbG9j
a3MuYXBwZW5kKGFkb3B0UmVmKGN1cnJlbnQpKTsKKworICAgIGJvb2wgbmV4dEluc3RydWN0aW9u
SXNMZWFkZXIgPSBmYWxzZTsKKworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVC
bG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0Jl
Z2luID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIHVuc2lnbmVkIGlu
c3RydWN0aW9uQ291bnQgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVj
dGlvbkNvdW50OykgeworICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5n
ZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF0udS5vcGNvZGUpOwor
ICAgICAgICB1bnNpZ25lZCBvcGNvZGVMZW5ndGggPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsK
KworICAgICAgICBib29sIGNyZWF0ZWRCbG9jayA9IGZhbHNlOworICAgICAgICAvLyBJZiB0aGUg
Y3VycmVudCBieXRlY29kZSBpcyBhIGp1bXAgdGFyZ2V0LCB0aGVuIGl0J3MgdGhlIGxlYWRlciBv
ZiBpdHMgb3duIGJhc2ljIGJsb2NrLgorICAgICAgICBpZiAoaXNKdW1wVGFyZ2V0KG9wY29kZUlE
LCBqdW1wVGFyZ2V0cywgYnl0ZWNvZGVPZmZzZXQpIHx8IG5leHRJbnN0cnVjdGlvbklzTGVhZGVy
KSB7CisgICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gbmV3IEJ5dGVjb2Rl
QmFzaWNCbG9jayhieXRlY29kZU9mZnNldCwgb3Bjb2RlTGVuZ3RoKTsKKyAgICAgICAgICAgIGJh
c2ljQmxvY2tzLmFwcGVuZChhZG9wdFJlZihibG9jaykpOworICAgICAgICAgICAgY3VycmVudCA9
IGJsb2NrOworICAgICAgICAgICAgY3JlYXRlZEJsb2NrID0gdHJ1ZTsKKyAgICAgICAgICAgIG5l
eHRJbnN0cnVjdGlvbklzTGVhZGVyID0gZmFsc2U7CisgICAgICAgICAgICBieXRlY29kZU9mZnNl
dCArPSBvcGNvZGVMZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGUgY3VycmVu
dCBieXRlY29kZSBpcyBhIGJyYW5jaCBvciBhIHJldHVybiwgdGhlbiB0aGUgbmV4dCBpbnN0cnVj
dGlvbiBpcyB0aGUgbGVhZGVyIG9mIGl0cyBvd24gYmFzaWMgYmxvY2suCisgICAgICAgIGlmIChp
c0JyYW5jaChvcGNvZGVJRCkgfHwgaXNUZXJtaW5hbChvcGNvZGVJRCkgfHwgaXNUaHJvdyhvcGNv
ZGVJRCkpCisgICAgICAgICAgICBuZXh0SW5zdHJ1Y3Rpb25Jc0xlYWRlciA9IHRydWU7CisKKyAg
ICAgICAgaWYgKGNyZWF0ZWRCbG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IC8vIE90aGVyd2lzZSwganVzdCBhZGQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCBibG9j
ay4KKyAgICAgICAgY3VycmVudC0+YWRkQnl0ZWNvZGVMZW5ndGgob3Bjb2RlTGVuZ3RoKTsKKyAg
ICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gb3Bjb2RlTGVuZ3RoOworICAgIH0KKworICAgIC8vIExp
bmsgYmFzaWMgYmxvY2tzIHRvZ2V0aGVyLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
YXNpY0Jsb2Nrcy5zaXplKCk7IGkrKykgeworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJs
b2NrID0gYmFzaWNCbG9ja3NbaV0uZ2V0KCk7CisKKyAgICAgICAgaWYgKGJsb2NrLT5pc0VudHJ5
QmxvY2soKSB8fCBibG9jay0+aXNFeGl0QmxvY2soKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGJvb2wgZmFsbHNUaHJvdWdoID0gdHJ1ZTsgCisgICAgICAgIGZvciAodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZzZXQoKTsgYnl0ZWNv
ZGVPZmZzZXQgPCBibG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZzZXQoKSArIGJsb2NrLT50b3RhbEJ5
dGVjb2RlTGVuZ3RoKCk7KSB7CisgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVu
dEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRdOworICAgICAg
ICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVu
dEluc3RydWN0aW9uLnUub3Bjb2RlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9wY29kZUxlbmd0
aCA9IG9wY29kZUxlbmd0aHNbb3Bjb2RlSURdOworICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQg
YSB0ZXJtaW5hbCBieXRlY29kZSwgbGluayB0byB0aGUgZXhpdCBibG9jay4KKyAgICAgICAgICAg
IGlmIChpc1Rlcm1pbmFsKG9wY29kZUlEKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChieXRl
Y29kZU9mZnNldCArIG9wY29kZUxlbmd0aCA9PSBibG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZzZXQo
KSArIGJsb2NrLT50b3RhbEJ5dGVjb2RlTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGxpbmtC
bG9ja3MoYmxvY2ssIGV4aXQpOworICAgICAgICAgICAgICAgIGZhbGxzVGhyb3VnaCA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBJZiB3ZSBmb3VuZCBhIHRocm93LCBnZXQgdGhlIEhhbmRsZXJJbmZvIGZvciB0aGlzIGluc3Ry
dWN0aW9uIHRvIHNlZSB3aGVyZSB3ZSB3aWxsIGp1bXAuIAorICAgICAgICAgICAgLy8gSWYgdGhl
cmUgaXNuJ3Qgb25lLCB0cmVhdCB0aGlzIHRocm93IGFzIGEgdGVybWluYWwuIFRoaXMgaXMgdHJ1
ZSBldmVuIGlmIHdlIGhhdmUgYSBmaW5hbGx5CisgICAgICAgICAgICAvLyBibG9jayBiZWNhdXNl
IHRoZSBmaW5hbGx5IGJsb2NrIHdpbGwgY3JlYXRlIGl0cyBvd24gY2F0Y2gsIHdoaWNoIHdpbGwg
Z2VuZXJhdGUgYSBIYW5kbGVySW5mby4KKyAgICAgICAgICAgIGlmIChpc1Rocm93KG9wY29kZUlE
KSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0
aCA9PSBibG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZzZXQoKSArIGJsb2NrLT50b3RhbEJ5dGVjb2Rl
TGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJs
b2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICAg
ICAgICAgIGZhbGxzVGhyb3VnaCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghaGFuZGxl
cikgeworICAgICAgICAgICAgICAgICAgICBsaW5rQmxvY2tzKGJsb2NrLCBleGl0KTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2Nrcy5zaXplKCk7IGkrKykgeworICAg
ICAgICAgICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG90aGVyQmxvY2sgPSBiYXNpY0Js
b2Nrc1tpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXItPnRhcmdldCA9
PSBvdGhlckJsb2NrLT5sZWFkZXJCeXRlY29kZU9mZnNldCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQmxvY2tzKGJsb2NrLCBvdGhlckJsb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJ
ZiB3ZSBmb3VuZCBhIGJyYW5jaCwgbGluayB0byB0aGUgYmxvY2socykgdGhhdCB3ZSBqdW1wIHRv
LgorICAgICAgICAgICAgaWYgKGlzQnJhbmNoKG9wY29kZUlEKSkgeworICAgICAgICAgICAgICAg
IEFTU0VSVChieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCA9PSBibG9jay0+bGVhZGVyQnl0
ZWNvZGVPZmZzZXQoKSArIGJsb2NrLT50b3RhbEJ5dGVjb2RlTGVuZ3RoKCkpOworICAgICAgICAg
ICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgMT4gYnl0ZWNvZGVPZmZzZXRzSnVtcGVkVG87CisgICAg
ICAgICAgICAgICAgZmluZEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBi
eXRlY29kZU9mZnNldCwgYnl0ZWNvZGVPZmZzZXRzSnVtcGVkVG8pOworCisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2tzLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogb3RoZXJCbG9jayA9IGJhc2lj
QmxvY2tzW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGVPZmZzZXRz
SnVtcGVkVG8uY29udGFpbnMob3RoZXJCbG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZzZXQoKSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQmxvY2tzKGJsb2NrLCBvdGhlckJsb2NrKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaXNVbmNvbmRpdGlvbmFsQnJh
bmNoKG9wY29kZUlEKSkKKyAgICAgICAgICAgICAgICAgICAgZmFsbHNUaHJvdWdoID0gZmFsc2U7
CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ5
dGVjb2RlT2Zmc2V0ICs9IG9wY29kZUxlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElm
IHdlIGZhbGwgdGhyb3VnaCB0aGVuIGxpbmsgdG8gdGhlIG5leHQgYmxvY2sgaW4gcHJvZ3JhbSBv
cmRlci4KKyAgICAgICAgaWYgKGZhbGxzVGhyb3VnaCkgeworICAgICAgICAgICAgQVNTRVJUKGkg
KyAxIDwgYmFzaWNCbG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9j
ayogbmV4dEJsb2NrID0gYmFzaWNCbG9ja3NbaSArIDFdLmdldCgpOworICAgICAgICAgICAgbGlu
a0Jsb2NrcyhibG9jaywgbmV4dEJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJhc2lj
QmxvY2tzLmFwcGVuZChhZG9wdFJlZihleGl0KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJh
c2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgQnl0ZWNvZGVCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgQnl0ZWNv
ZGVCYXNpY0Jsb2NrX2gKKworI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKKwor
dHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBGYXN0Qml0VmVjdG9yLCBXVEY6OkludEhhc2g8dW5z
aWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPiA+IEJ5
dGVjb2RlVG9CaXRtYXBNYXA7CisKK2NsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jayA6IHB1YmxpYyBS
ZWZDb3VudGVkPEJ5dGVjb2RlQmFzaWNCbG9jaz4geworcHVibGljOgorICAgIGVudW0gU3BlY2lh
bEJsb2NrVHlwZSB7IEVudHJ5QmxvY2ssIEV4aXRCbG9jayB9OworICAgIEJ5dGVjb2RlQmFzaWNC
bG9jayh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBCeXRlY29kZUJhc2lj
QmxvY2soU3BlY2lhbEJsb2NrVHlwZSk7CisKKyAgICBib29sIGlzRW50cnlCbG9jaygpIHsgcmV0
dXJuICFtX2xlYWRlckJ5dGVjb2RlT2Zmc2V0ICYmICFtX3RvdGFsQnl0ZWNvZGVMZW5ndGg7IH0K
KyAgICBib29sIGlzRXhpdEJsb2NrKCkgeyByZXR1cm4gIW1fbGVhZGVyQnl0ZWNvZGVPZmZzZXQg
ICYmIG1fdG90YWxCeXRlY29kZUxlbmd0aCA9PSBVSU5UX01BWDsgfQorCisgICAgdW5zaWduZWQg
bGVhZGVyQnl0ZWNvZGVPZmZzZXQoKSB7IHJldHVybiBtX2xlYWRlckJ5dGVjb2RlT2Zmc2V0OyB9
CisgICAgdW5zaWduZWQgdG90YWxCeXRlY29kZUxlbmd0aCgpIHsgcmV0dXJuIG1fdG90YWxCeXRl
Y29kZUxlbmd0aDsgfQorCisgICAgVmVjdG9yPHVuc2lnbmVkPiYgYnl0ZWNvZGVPZmZzZXRzKCkg
eyByZXR1cm4gbV9ieXRlY29kZU9mZnNldHM7IH0KKyAgICB2b2lkIGFkZEJ5dGVjb2RlTGVuZ3Ro
KHVuc2lnbmVkKTsKKworICAgIHZvaWQgYWRkUHJlZGVjZXNzb3IoQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBibG9jaykgeyBtX3ByZWRlY2Vzc29ycy5hcHBlbmQoYmxvY2spOyB9CisgICAgdm9pZCBhZGRT
dWNjZXNzb3IoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaykgeyBtX3N1Y2Nlc3NvcnMuYXBwZW5k
KGJsb2NrKTsgfQorCisgICAgVmVjdG9yPEJ5dGVjb2RlQmFzaWNCbG9jayo+JiBwcmVkZWNlc3Nv
cnMoKSB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQorICAgIFZlY3RvcjxCeXRlY29kZUJhc2lj
QmxvY2sqPiYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCisgICAgRmFz
dEJpdFZlY3RvciYgaW4oKSB7IHJldHVybiBtX2luOyB9CisgICAgRmFzdEJpdFZlY3RvciYgb3V0
KCkgeyByZXR1cm4gbV9vdXQ7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2xlYWRlckJ5
dGVjb2RlT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fdG90YWxCeXRlY29kZUxlbmd0aDsKKworICAg
IFZlY3Rvcjx1bnNpZ25lZD4gbV9ieXRlY29kZU9mZnNldHM7CisKKyAgICBWZWN0b3I8Qnl0ZWNv
ZGVCYXNpY0Jsb2NrKj4gbV9wcmVkZWNlc3NvcnM7CisgICAgVmVjdG9yPEJ5dGVjb2RlQmFzaWNC
bG9jayo+IG1fc3VjY2Vzc29yczsKKworICAgIEZhc3RCaXRWZWN0b3IgbV9pbjsKKyAgICBGYXN0
Qml0VmVjdG9yIG1fb3V0OworfTsKKwordm9pZCBjb21wdXRlQnl0ZWNvZGVCYXNpY0Jsb2NrcyhD
b2RlQmxvY2sqLCBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiYpOworCitpbmxp
bmUgQnl0ZWNvZGVCYXNpY0Jsb2NrOjpCeXRlY29kZUJhc2ljQmxvY2sodW5zaWduZWQgc3RhcnQs
IHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IG1fbGVhZGVyQnl0ZWNvZGVPZmZzZXQoc3RhcnQpCisg
ICAgLCBtX3RvdGFsQnl0ZWNvZGVMZW5ndGgobGVuZ3RoKQoreworICAgIG1fYnl0ZWNvZGVPZmZz
ZXRzLmFwcGVuZChtX2xlYWRlckJ5dGVjb2RlT2Zmc2V0KTsKK30KKworaW5saW5lIEJ5dGVjb2Rl
QmFzaWNCbG9jazo6Qnl0ZWNvZGVCYXNpY0Jsb2NrKEJ5dGVjb2RlQmFzaWNCbG9jazo6U3BlY2lh
bEJsb2NrVHlwZSBibG9ja1R5cGUpCisgICAgOiBtX2xlYWRlckJ5dGVjb2RlT2Zmc2V0KDApCisg
ICAgLCBtX3RvdGFsQnl0ZWNvZGVMZW5ndGgoYmxvY2tUeXBlID09IEJ5dGVjb2RlQmFzaWNCbG9j
azo6RW50cnlCbG9jayA/IDAgOiBVSU5UX01BWCkKK3sKK30KKworaW5saW5lIHZvaWQgQnl0ZWNv
ZGVCYXNpY0Jsb2NrOjphZGRCeXRlY29kZUxlbmd0aCh1bnNpZ25lZCBieXRlY29kZUxlbmd0aCkK
K3sKKyAgICBtX2J5dGVjb2RlT2Zmc2V0cy5hcHBlbmQobV9sZWFkZXJCeXRlY29kZU9mZnNldCAr
IG1fdG90YWxCeXRlY29kZUxlbmd0aCk7CisgICAgbV90b3RhbEJ5dGVjb2RlTGVuZ3RoICs9IGJ5
dGVjb2RlTGVuZ3RoOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ5dGVj
b2RlQmFzaWNCbG9ja19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzE0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgor
CisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fY29kZUJsb2Nr
KGNvZGVCbG9jaykKKyAgICAsIG1fY29tcHV0ZWQoZmFsc2UpCit7CisgICAgQVNTRVJUKG1fY29k
ZUJsb2NrKTsKK30KKworQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMoY29uc3QgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBvdGhlcikKKyAgICA6IG1f
Y29kZUJsb2NrKG90aGVyLm1fY29kZUJsb2NrKQorICAgICwgbV9iYXNpY0Jsb2NrcyhvdGhlci5t
X2Jhc2ljQmxvY2tzKQorICAgICwgbV9jb21wdXRlZChvdGhlci5tX2NvbXB1dGVkKQoreworfQor
CitzdGF0aWMgaW50IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCit7CisgICAgaWYgKCFjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPmNhcHR1cmVDb3VudCgp
OworfQorCitzdGF0aWMgaW50IGNhcHR1cmVTdGFydChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sK
KyAgICBpZiAoIWNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCk7Cit9CisK
K3N0YXRpYyBpbnQgY2FwdHVyZUVuZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBpZiAo
IWNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOworfQorCitzdGF0aWMgYm9v
bCBpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50IG9w
ZXJhbmQpCit7CisgICAgcmV0dXJuICFjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KG9wZXJhbmQpIC8vIERvbid0IGNhcmUgYWJvdXQgY29uc3RhbnRzLgorICAgICAgICAmJiBvcGVy
YW5kID49IDAgLy8gRG9uJ3QgY2FyZSBhYm91dCBhcmd1bWVudHMuCisgICAgICAgICYmICghbnVt
YmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhjb2RlQmxvY2spIC8vIElmIHdlIGhhdmUgbm8gY2FwdHVy
ZWQgdmFyaWFibGVzLCB3ZSdyZSBnb29kIHRvIGdvLgorICAgICAgICB8fCAob3BlcmFuZCA8IGNh
cHR1cmVTdGFydChjb2RlQmxvY2spIC8vIElmIHdlIGhhdmUgY2FwdHVyZWQgdmFyaWFibGVzIGJ1
dCB0aGUgb3BlcmFuZCBpcyBvdXRzaWRlIG9mIHRoZSBjYXB0dXJlZCByYW5nZSwgd2UncmUgZ29v
ZCB0byBnby4KKyAgICAgICAgfHwgb3BlcmFuZCA+PSBjYXB0dXJlRW5kKGNvZGVCbG9jaykpKTsK
K30KKworc3RhdGljIHZvaWQgc2V0Rm9yT3BlcmFuZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgRmFz
dEJpdFZlY3RvciYgYml0cywgaW50IG9wZXJhbmQpCit7CisgICAgQVNTRVJUKGlzVmFsaWRSZWdp
c3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgb3BlcmFuZCkpOworICAgIGlmIChvcGVyYW5kIDwg
Y2FwdHVyZVN0YXJ0KGNvZGVCbG9jaykpCisgICAgICAgIGJpdHMuc2V0KG9wZXJhbmQpOworICAg
IGVsc2UKKyAgICAgICAgYml0cy5zZXQob3BlcmFuZCAtIG51bWJlck9mQ2FwdHVyZWRWYXJpYWJs
ZXMoY29kZUJsb2NrKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVP
ZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0
Qml0VmVjdG9yJiB1c2VzKQoreworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVC
bG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0Jl
Z2luID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CisgICAg
T3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24t
PnUub3Bjb2RlKTsKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgLy8gTm8gdXNlcy4KKyAg
ICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAg
IGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2Fz
ZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgIGNhc2Ugb3BfcG9wX3Njb3BlOgorICAgIGNhc2Ugb3Bf
am5lcV9wdHI6CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgY2FzZSBvcF9sb29wX2hp
bnQ6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgorICAgIGNhc2Ug
b3BfaW5pdF9sYXp5X3JlZzoKKyAgICBjYXNlIG9wX2dldF9jYWxsZWU6CisgICAgY2FzZSBvcF9l
bnRlcjoKKyAgICBjYXNlIG9wX2NhdGNoOgorICAgICAgICByZXR1cm47CisgICAgLy8gRmlyc3Qg
YXJndW1lbnQuCisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNlIG9wX2NyZWF0ZV9hY3Rp
dmF0aW9uOiAKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90b190
aGlzOgorICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0aXZhdGlvbjoKKyAgICBjYXNlIG9wX3Byb2Zp
bGVfd2lsbF9jYWxsOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9kaWRfY2FsbDoKKyAgICBjYXNlIG9w
X3Rocm93OgorICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgIGNhc2Ugb3BfZW5kOgor
ICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6
CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNl
IG9wX2RlYzoKKyAgICBjYXNlIG9wX2luYzogeworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVy
Rm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQorICAgICAg
ICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBh
cmd1bWVudHMuCisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgY2FzZSBvcF9yZXRfb2JqZWN0
X29yX3RoaXM6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6Cisg
ICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bf
am5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJl
cToKKyAgICBjYXNlIG9wX2psZXNzOiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JM
aXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpCisgICAgICAgICAg
ICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIC8vIEZpcnN0LCBzZWNvbmQsIGFuZCB0aGlyZCBhcmd1bWVudHMuCisgICAgY2Fz
ZSBvcF9kZWxfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogeworICAgICAgICBpZiAo
aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZl
bmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBz
ZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
KyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2Nr
LCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIC8vIEZpcnN0IGFuZCB0aGlyZCBhcmd1bWVudHMuCisgICAgY2FzZSBvcF9wdXRfYnlf
aW5kZXg6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmVwbGFjZToKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF90cmFuc2l0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0
OgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9saW5lOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgorICAgIGNhc2Ugb3BfcHV0
X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfcHV0X2J5
X2lkX2dlbmVyaWM6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6CisgICAgY2Fz
ZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKKyAgICAgICAgaWYg
KGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2
ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAg
c2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRmlyc3QsIHRoaXJkLCBhbmQgZm91cnRo
IGFyZ3VtZW50cy4KKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyOiB7CisgICAgICAgIGlm
IChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxp
dmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKKyAgICAgICAgICAg
IHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQp
OworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxv
Y2ssIHVzZXMsIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgLy8gU2Vjb25kIGFyZ3VtZW50LgorICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29u
c3Rfbm9wOgorICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6CisgICAgY2FzZSBvcF9wdXNo
X25hbWVfc2NvcGU6CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICBjYXNlIG9wX3Rv
X3ByaW1pdGl2ZToKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICBjYXNlIG9wX2dldF9ieV9p
ZF9vdXRfb2ZfbGluZToKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgorICAgIGNhc2Ugb3Bf
Z2V0X2J5X2lkX3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWluOgorICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkX2dldHRlcl9zZWxmOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9w
cm90bzoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hhaW46CisgICAgY2FzZSBvcF9n
ZXRfYnlfaWRfY3VzdG9tX3NlbGY6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3Byb3Rv
OgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9jaGFpbjoKKyAgICBjYXNlIG9wX2dldF9i
eV9pZF9nZW5lcmljOgorICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKKyAgICBjYXNlIG9w
X2dldF9zdHJpbmdfbGVuZ3RoOgorICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19sZW5ndGg6Cisg
ICAgY2FzZSBvcF90eXBlb2Y6CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgY2FzZSBv
cF9pc19ib29sZWFuOgorICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgIGNhc2Ugb3BfaXNfc3Ry
aW5nOgorICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgIGNhc2Ugb3BfaXNfZnVuY3Rpb246Cisg
ICAgY2FzZSBvcF90b19udW1iZXI6CisgICAgY2FzZSBvcF9uZWdhdGU6CisgICAgY2FzZSBvcF9u
ZXFfbnVsbDoKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgY2FzZSBvcF9ub3Q6CisgICAgY2Fz
ZSBvcF9tb3Y6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgIGNhc2Ugb3Bf
Y3JlYXRlX3RoaXM6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9w
ZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIC8vIFNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnRzLgorICAg
IGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92YWw6Cisg
ICAgY2FzZSBvcF9pbjoKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgY2FzZSBvcF9jaGVj
a19oYXNfaW5zdGFuY2U6CisgICAgY2FzZSBvcF9hZGQ6CisgICAgY2FzZSBvcF9tdWw6CisgICAg
Y2FzZSBvcF9kaXY6CisgICAgY2FzZSBvcF9tb2Q6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2Fz
ZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6CisgICAgY2FzZSBvcF91cnNoaWZ0Ogor
ICAgIGNhc2Ugb3BfYml0YW5kOgorICAgIGNhc2Ugb3BfYml0eG9yOgorICAgIGNhc2Ugb3BfYml0
b3I6CisgICAgY2FzZSBvcF9sZXNzOgorICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgIGNhc2Ugb3Bf
Z3JlYXRlcjoKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICBjYXNlIG9wX25zdHJpY3RlcToK
KyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgIGNhc2Ugb3BfbmVxOgorICAgIGNhc2Ugb3BfZXE6
IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxp
ZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQp
KQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gU2Vjb25kLCB0
aGlyZCwgYW5kIGZvdXJ0aCBhcmd1bWVudHMuCisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Cisg
ICAgY2FzZSBvcF9nZXRfcG5hbWVzOiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JM
aXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCisgICAgICAgICAg
ICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxp
ZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQp
KQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9u
WzRdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gU2Vjb25kLCB0
aGlyZCwgZm91cnRoLCBhbmQgZmlmdGggYXJndW1lbnRzLgorICAgIGNhc2Ugb3BfbmV4dF9wbmFt
ZTogeworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBp
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2Rl
QmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgIGlmIChpc1Zh
bGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNz
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZv
ck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOworICAg
ICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlv
bls1XS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVz
ZXMsIGluc3RydWN0aW9uWzVdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgLy8gU2Vjb25kLCB0aGlyZCwgZm91cnRoLCBmaWZ0aCwgYW5kIHNpeHRoIGFyZ3VtZW50cy4g
CisgICAgY2FzZSBvcF9nZXRfYnlfcG5hbWU6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKKyAgICAg
ICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChj
b2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgIGlmIChp
c1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1
Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVu
ZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNl
dEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpOwor
ICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVj
dGlvbls2XS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ss
IHVzZXMsIGluc3RydWN0aW9uWzZdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgLy8gVGhpcmQgYXJndW1lbnQuCisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAg
IGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7CisgICAgICAg
IGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywg
aW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAv
LyBWYXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGNhc2Ugb3BfbmV3X2FycmF5Ogor
ICAgIGNhc2Ugb3Bfc3RyY2F0OiB7CisgICAgICAgIGludCBiYXNlID0gaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOworICAgICAgICBpbnQgY291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAg
aWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgYmFzZSArIGkpKQorICAg
ICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBiYXNlICsgaSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBDcmF6eSBzdHVmZiBmb3Ig
Y2FsbHMuCisgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6Cisg
ICAgY2FzZSBvcF9jYWxsOiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVz
cyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRG
b3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAg
ICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICBp
bnQgcmVnaXN0ZXJPZmZzZXQgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisgICAgICAgIGlu
dCBsYXN0QXJnID0gcmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNl
dCgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHsKKyAgICAg
ICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGxhc3RBcmcg
LSBpKSkKKyAgICAgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgbGFz
dEFyZyAtIGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gU3Bl
Y2lhbCBzdHVmZiBmb3IgdGVhciBvZmYgYXJndW1lbnRzLgorICAgIGNhc2Ugb3BfdGVhcl9vZmZf
YXJndW1lbnRzOiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2Rl
QmxvY2ssIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVy
YW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAg
aWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgdW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKQorICAgICAgICAgICAgc2V0
Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihp
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZv
ckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKKyAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgY29t
cHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIGRlZnMpCit7CisgICAgSW50ZXJwcmV0ZXIq
IGludGVycHJldGVyID0gY29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRlcjsKKyAgICBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2lu
KCk7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJmluc3RydWN0aW9uc0JlZ2luW2J5
dGVjb2RlT2Zmc2V0XTsKKyAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5nZXRP
cGNvZGVJRChpbnN0cnVjdGlvbi0+dS5vcGNvZGUpOworICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsK
KyAgICAvLyBUaGVzZSBkb24ndCBkZWZpbmUgYW55dGhpbmcuCisgICAgY2FzZSBvcF9pbml0X2ds
b2JhbF9jb25zdDoKKyAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0X25vcDoKKyAgICBjYXNl
IG9wX3B1c2hfbmFtZV9zY29wZToKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICBj
YXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3BvcF9zY29wZToKKyAgICBjYXNlIG9w
X2VuZDoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfd2lsbF9jYWxsOgorICAgIGNhc2Ugb3BfcHJvZmls
ZV9kaWRfY2FsbDoKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGlj
X2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBv
cF9yZXRfb2JqZWN0X29yX3RoaXM6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9qdHJ1
ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNhc2Ug
b3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbGVzczoK
KyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9w
X2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToK
KyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNlIG9wX3N3
aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZDoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZToKKyAgICBjYXNlIG9wX3B1
dF9ieV9pZF9yZXBsYWNlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb246CisgICAg
Y2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfYnlf
aWRfdHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRf
dHJhbnNpdGlvbl9ub3JtYWw6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3Jt
YWxfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfZ2VuZXJpYzoKKyAgICBjYXNl
IG9wX3B1dF9nZXR0ZXJfc2V0dGVyOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNl
IG9wX3B1dF9ieV9pbmRleDoKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICBjYXNlIG9wX2Rl
bF9ieV92YWw6CisgICAgICAgIHJldHVybjsKKyAgICAvLyBUaGVzZSBhbGwgaGF2ZSBhIHNpbmds
ZSBkZXN0aW5hdGlvbiBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LgorICAgIGNhc2Ugb3BfbmV4dF9w
bmFtZToKKyAgICBjYXNlIG9wX2dldF9wbmFtZXM6CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3Bl
OgorICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0aXZhdGlvbjoK
KyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZToKKyAgICBjYXNlIG9wX2NhdGNoOgorICAgIGNhc2Ug
b3BfY3JlYXRlX3RoaXM6CisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgY2FzZSBvcF9uZXdf
YXJyYXlfYnVmZmVyOgorICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICBjYXNl
IG9wX25ld19yZWdleHA6CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNlIG9wX25ld19m
dW5jX2V4cDoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX2dldF9mcm9t
X3Njb3BlOgorICAgIGNhc2Ugb3BfY2FsbDoKKyAgICBjYXNlIG9wX2NhbGxfZXZhbDoKKyAgICBj
YXNlIG9wX2NvbnN0cnVjdDoKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICBjYXNlIG9wX2dl
dF9ieV9pZF9vdXRfb2ZfbGluZToKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgorICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWluOgorICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9zZWxmOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dl
dHRlcl9wcm90bzoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hhaW46CisgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3NlbGY6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9t
X3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9jaGFpbjoKKyAgICBjYXNlIG9w
X2dldF9ieV9pZF9nZW5lcmljOgorICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKKyAgICBj
YXNlIG9wX2dldF9zdHJpbmdfbGVuZ3RoOgorICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNl
OgorICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWw6CisgICAg
Y2FzZSBvcF9nZXRfYXJndW1lbnRfYnlfdmFsOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3BuYW1lOgor
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19sZW5ndGg6CisgICAgY2FzZSBvcF90eXBlb2Y6Cisg
ICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgorICAgIGNh
c2Ugb3BfaXNfbnVtYmVyOgorICAgIGNhc2Ugb3BfaXNfc3RyaW5nOgorICAgIGNhc2Ugb3BfaXNf
b2JqZWN0OgorICAgIGNhc2Ugb3BfaXNfZnVuY3Rpb246CisgICAgY2FzZSBvcF9pbjoKKyAgICBj
YXNlIG9wX3RvX251bWJlcjoKKyAgICBjYXNlIG9wX25lZ2F0ZToKKyAgICBjYXNlIG9wX2FkZDoK
KyAgICBjYXNlIG9wX211bDoKKyAgICBjYXNlIG9wX2RpdjoKKyAgICBjYXNlIG9wX21vZDoKKyAg
ICBjYXNlIG9wX3N1YjoKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBjYXNlIG9wX3JzaGlmdDoK
KyAgICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgY2FzZSBvcF9iaXRhbmQ6CisgICAgY2FzZSBvcF9i
aXR4b3I6CisgICAgY2FzZSBvcF9iaXRvcjoKKyAgICBjYXNlIG9wX2luYzoKKyAgICBjYXNlIG9w
X2RlYzoKKyAgICBjYXNlIG9wX2VxOgorICAgIGNhc2Ugb3BfbmVxOgorICAgIGNhc2Ugb3Bfc3Ry
aWN0ZXE6CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9sZXNzOgorICAgIGNh
c2Ugb3BfbGVzc2VxOgorICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2dyZWF0ZXJl
cToKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICBjYXNl
IG9wX25vdDoKKyAgICBjYXNlIG9wX21vdjoKKyAgICBjYXNlIG9wX25ld19vYmplY3Q6CisgICAg
Y2FzZSBvcF90b190aGlzOgorICAgIGNhc2Ugb3BfZ2V0X2NhbGxlZToKKyAgICBjYXNlIG9wX2lu
aXRfbGF6eV9yZWc6CisgICAgY2FzZSBvcF9jcmVhdGVfYWN0aXZhdGlvbjoKKyAgICBjYXNlIG9w
X2NyZWF0ZV9hcmd1bWVudHM6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVu
ZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNl
dEZvck9wZXJhbmQoY29kZUJsb2NrLCBkZWZzLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfdGVhcl9vZmZfYXJndW1lbnRzOiB7
CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCAtIDEpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2Rl
QmxvY2ssIGRlZnMsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCAtIDEpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2Ugb3BfZW50ZXI6IHsKKyAgICAgICAgZGVmcy5zZXRBbGwoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBCeXRlY29kZUJhc2lj
QmxvY2sqIGZpbmRCYXNpY0Jsb2NrV2l0aExlYWRlck9mZnNldChWZWN0b3I8UmVmUHRyPEJ5dGVj
b2RlQmFzaWNCbG9jaz4gPiYgYmFzaWNCbG9ja3MsIHVuc2lnbmVkIGxlYWRlck9mZnNldCkKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9ja3Muc2l6ZSgpOyBpKyspIHsK
KyAgICAgICAgaWYgKGxlYWRlck9mZnNldCA9PSBiYXNpY0Jsb2Nrc1tpXS0+bGVhZGVyQnl0ZWNv
ZGVPZmZzZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBiYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKKyAg
ICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBCeXRlY29kZUJhc2ljQmxvY2sqIGZpbmRC
YXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxv
Y2s+ID4mIGJhc2ljQmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9ja3Muc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IGJhc2ljQmxvY2tzW2ldLmdldCgpOworICAgICAg
ICBpZiAoYnl0ZWNvZGVPZmZzZXQgPj0gYmxvY2stPmxlYWRlckJ5dGVjb2RlT2Zmc2V0KCkgJiYg
Ynl0ZWNvZGVPZmZzZXQgPCBibG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZzZXQoKSArIGJsb2NrLT50
b3RhbEJ5dGVjb2RlTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgfQor
ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5
dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUJhc2ljQmxvY2sqIGJs
b2NrLCBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiYgYmFzaWNCbG9ja3MsIHVu
c2lnbmVkIHRhcmdldE9mZnNldCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KQoreworICAgIEFTU0VS
VCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOworICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9j
aygpKTsKKworICAgIEZhc3RCaXRWZWN0b3Igb3V0ID0gYmxvY2stPm91dCgpOworICAgIEhhbmRs
ZXJJbmZvKiBoYW5kbGVyID0gMDsKKworICAgIEZhc3RCaXRWZWN0b3IgdXNlczsKKyAgICBGYXN0
Qml0VmVjdG9yIGRlZnM7CisgICAgdXNlcy5yZXNpemUob3V0Lm51bUJpdHMoKSk7CisgICAgZGVm
cy5yZXNpemUob3V0Lm51bUJpdHMoKSk7CisKKyAgICBmb3IgKGludCBpID0gYmxvY2stPmJ5dGVj
b2RlT2Zmc2V0cygpLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0cygpW2ldOworICAgICAgICBp
ZiAodGFyZ2V0T2Zmc2V0ID4gYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICB1c2VzLmNsZWFyQWxsKCk7CisgICAgICAgIGRlZnMuY2xlYXJBbGwoKTsKKworICAg
ICAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZz
ZXQsIHVzZXMpOworICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9j
aywgYnl0ZWNvZGVPZmZzZXQsIGRlZnMpOworCisgICAgICAgIG91dC5leGNsdWRlKGRlZnMpOwor
ICAgICAgICBvdXQubWVyZ2UodXNlcyk7CisKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBleGNl
cHRpb24gaGFuZGxlciwgd2Ugd2FudCB0aGUgbGl2ZS1pbiB2YXJpYWJsZXMgb2YgdGhlIAorICAg
ICAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9jayB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbGl2
ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgYnl0ZWNvZGUuCisgICAgICAgIGlmICgoaGFuZGxlciA9
IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkpIHsK
KyAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogaGFuZGxlckJsb2NrID0gZmluZEJhc2lj
QmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGJhc2ljQmxvY2tzLCBoYW5kbGVyLT50YXJnZXQpOworICAg
ICAgICAgICAgQVNTRVJUKGhhbmRsZXJCbG9jayk7CisgICAgICAgICAgICBvdXQubWVyZ2UoaGFu
ZGxlckJsb2NrLT5pbigpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlc3VsdC5zZXQob3V0
KTsKK30KKworc3RhdGljIHZvaWQgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaywgVmVjdG9yPFJlZlB0cjxC
eXRlY29kZUJhc2ljQmxvY2s+ID4mIGJhc2ljQmxvY2tzKQoreworICAgIGlmIChibG9jay0+aXNF
eGl0QmxvY2soKSB8fCBibG9jay0+aXNFbnRyeUJsb2NrKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYmxvY2ss
IGJhc2ljQmxvY2tzLCBibG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZzZXQoKSwgYmxvY2stPmluKCkp
OworfQorCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6cnVuTGl2ZW5lc3NGaXhwb2lu
dCgpCit7CisgICAgQVNTRVJUKCFtX2NvbXB1dGVkKTsKKyAgICBVbmxpbmtlZENvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZlZhcmlhYmxlcyA9IHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZh
cnMgKyAKKyAgICAgICAgdW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIC0g
bnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhtX2NvZGVCbG9jayk7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9iYXNpY0Jsb2Nrcy5zaXplKCk7IGkrKykgeworICAgICAgICBCeXRl
Y29kZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9iYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKKyAgICAgICAg
YmxvY2stPmluKCkucmVzaXplKG51bWJlck9mVmFyaWFibGVzKTsKKyAgICAgICAgYmxvY2stPm91
dCgpLnJlc2l6ZShudW1iZXJPZlZhcmlhYmxlcyk7CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2Vk
OworICAgIG1fYmFzaWNCbG9ja3MubGFzdCgpLT5pbigpLmNsZWFyQWxsKCk7CisgICAgbV9iYXNp
Y0Jsb2Nrcy5sYXN0KCktPm91dCgpLmNsZWFyQWxsKCk7CisgICAgRmFzdEJpdFZlY3RvciBuZXdP
dXQ7CisgICAgbmV3T3V0LnJlc2l6ZShtX2Jhc2ljQmxvY2tzLmxhc3QoKS0+b3V0KCkubnVtQml0
cygpKTsKKyAgICBkbyB7CisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChp
bnQgaSA9IG1fYmFzaWNCbG9ja3Muc2l6ZSgpIC0gMjsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAg
ICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jhc2ljQmxvY2tzW2ldLmdldCgpOwor
ICAgICAgICAgICAgbmV3T3V0LmNsZWFyQWxsKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgYmxvY2stPnN1Y2Nlc3NvcnMoKS5zaXplKCk7IGorKykKKyAgICAgICAgICAg
ICAgICBuZXdPdXQubWVyZ2UoYmxvY2stPnN1Y2Nlc3NvcnMoKVtqXS0+aW4oKSk7CisgICAgICAg
ICAgICBib29sIG91dERpZENoYW5nZSA9IGJsb2NrLT5vdXQoKS5zZXRBbmRDaGVjayhuZXdPdXQp
OworICAgICAgICAgICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhtX2NvZGVCbG9jaywg
YmxvY2ssIG1fYmFzaWNCbG9ja3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBvdXREaWRDaGFu
Z2U7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKK30KKwordm9pZCBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0Zvck5vbkNhcHR1cmVkVmFyc0F0Qnl0
ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHJlc3Vs
dCkKK3sKKyAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZmluZEJhc2ljQmxvY2tGb3JC
eXRlY29kZU9mZnNldChtX2Jhc2ljQmxvY2tzLCBieXRlY29kZU9mZnNldCk7CisgICAgQVNTRVJU
KGJsb2NrKTsKKyAgICBBU1NFUlQoIWJsb2NrLT5pc0VudHJ5QmxvY2soKSk7CisgICAgQVNTRVJU
KCFibG9jay0+aXNFeGl0QmxvY2soKSk7CisgICAgcmVzdWx0LnJlc2l6ZShibG9jay0+b3V0KCku
bnVtQml0cygpKTsKKyAgICBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KG1f
Y29kZUJsb2NrLCBibG9jaywgbV9iYXNpY0Jsb2NrcywgYnl0ZWNvZGVPZmZzZXQsIHJlc3VsdCk7
Cit9CisKK2Jvb2wgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpvcGVyYW5kSXNMaXZlQXRCeXRl
Y29kZU9mZnNldChpbnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAg
aW50IG51bUNhcHR1cmVkVmFycyA9IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9jb2RlQmxv
Y2spOworICAgIEFTU0VSVChtX2NvbXB1dGVkKTsKKyAgICBpZiAob3BlcmFuZCAtIG51bUNhcHR1
cmVkVmFycyA8IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIEZhc3RCaXRWZWN0b3IgcmVz
dWx0OworICAgIGdldExpdmVuZXNzSW5mb0Zvck5vbkNhcHR1cmVkVmFyc0F0Qnl0ZWNvZGVPZmZz
ZXQoYnl0ZWNvZGVPZmZzZXQsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQob3BlcmFu
ZCAtIG51bUNhcHR1cmVkVmFycyk7Cit9CisKK0Zhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0KQoreworICAgIEZhc3RCaXRWZWN0b3IgdGVtcDsKKyAgICBGYXN0Qml0VmVjdG9y
IHJlc3VsdDsKKworICAgIGdldExpdmVuZXNzSW5mb0Zvck5vbkNhcHR1cmVkVmFyc0F0Qnl0ZWNv
ZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIHRlbXApOworCisgICAgdW5zaWduZWQgbnVtQ2FwdHVy
ZWRWYXJzID0gbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhtX2NvZGVCbG9jayk7CisgICAgcmVz
dWx0LnJlc2l6ZSh0ZW1wLm51bUJpdHMoKSArIG51bUNhcHR1cmVkVmFycyk7CisgICAgZm9yIChp
bnQgaSA9IGNhcHR1cmVTdGFydChtX2NvZGVCbG9jayk7IGkgPCBjYXB0dXJlRW5kKG1fY29kZUJs
b2NrKTsgaSsrKQorICAgICAgICByZXN1bHQuc2V0KGkpOworCisgICAgaW50IHRlbXBMZW5ndGgg
PSB0ZW1wLm51bUJpdHMoKTsKKyAgICBBU1NFUlQodGVtcExlbmd0aCA+PSAwKTsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHRlbXBMZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoIXRlbXAuZ2V0
KGkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFudW1DYXB0dXJlZFZh
cnMpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXQoaSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpIDwgY2FwdHVyZVN0YXJ0KG1fY29kZUJsb2NrKSkK
KyAgICAgICAgICAgIHJlc3VsdC5zZXQoaSk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBy
ZXN1bHQuc2V0KG51bUNhcHR1cmVkVmFycyArIGkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMoKQorewor
ICAgIEFTU0VSVChtX2NvbXB1dGVkKTsKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBt
X2NvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uc0JlZ2luID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmFzaWNCbG9ja3Muc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmFzaWNCbG9ja3NbaV0uZ2V0KCk7Cisg
ICAgICAgIGRhdGFMb2dGKCJcbkJ5dGVjb2RlIGJhc2ljIGJsb2NrICV1OiAlcCAob2Zmc2V0OiAl
dSwgbGVuZ3RoOiAldSlcbiIsIGksIGJsb2NrLCBibG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZzZXQo
KSwgYmxvY2stPnRvdGFsQnl0ZWNvZGVMZW5ndGgoKSk7CisgICAgICAgIGRhdGFMb2dGKCJQcmVk
ZWNlc3NvcnM6ICIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgYmxvY2stPnBy
ZWRlY2Vzc29ycygpLnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxv
Y2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29ycygpW2pdOworICAgICAgICAgICAg
ZGF0YUxvZ0YoIiVwICIsIHByZWRlY2Vzc29yKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9n
RigiXG4iKTsKKyAgICAgICAgZGF0YUxvZ0YoIlN1Y2Nlc3NvcnM6ICIpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSAwOyBqIDwgYmxvY2stPnN1Y2Nlc3NvcnMoKS5zaXplKCk7IGorKykgewor
ICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vz
c29ycygpW2pdOworICAgICAgICAgICAgZGF0YUxvZ0YoIiVwICIsIHN1Y2Nlc3Nvcik7CisgICAg
ICAgIH0KKyAgICAgICAgZGF0YUxvZ0YoIlxuIik7CisgICAgICAgIGlmIChibG9jay0+aXNFbnRy
eUJsb2NrKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dGKCJFbnRyeSBibG9jayAlcFxuIiwgYmxv
Y2spOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJsb2Nr
LT5pc0V4aXRCbG9jaygpKSB7CisgICAgICAgICAgICBkYXRhTG9nRigiRXhpdCBibG9jazogJXBc
biIsIGJsb2NrKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGZv
ciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZzZXQo
KTsgYnl0ZWNvZGVPZmZzZXQgPCBibG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZzZXQoKSArIGJsb2Nr
LT50b3RhbEJ5dGVjb2RlTGVuZ3RoKCk7KSB7CisgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gJmluc3RydWN0aW9uc0JlZ2luW2J5dGVjb2RlT2Zmc2V0
XTsKKworICAgICAgICAgICAgZGF0YUxvZ0YoIkxpdmUgdmFyaWFibGVzOiAiKTsKKyAgICAgICAg
ICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUJlZm9yZSA9IGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsg
aiA8IGxpdmVCZWZvcmUubnVtQml0cygpOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAobGl2
ZUJlZm9yZS5nZXQoaikpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIldSAiLCBqKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFMb2dGKCJcbiIpOworICAgICAgICAgICAg
bV9jb2RlQmxvY2stPmR1bXBCeXRlY29kZShXVEY6OmRhdGFGaWxlKCksIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBpbnN0cnVjdGlvbnNCZWdpbiwgY3VycmVudElu
c3RydWN0aW9uKTsKKworICAgICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2Rl
KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9wY29kZUxlbmd0aCA9IG9wY29kZUxlbmd0aHNbb3Bj
b2RlSURdOworICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gb3Bjb2RlTGVuZ3RoOworICAg
ICAgICB9CisKKyAgICAgICAgZGF0YUxvZ0YoIkxpdmUgdmFyaWFibGVzOiAiKTsKKyAgICAgICAg
RmFzdEJpdFZlY3RvciBsaXZlQWZ0ZXIgPSBibG9jay0+b3V0KCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCBsaXZlQWZ0ZXIubnVtQml0cygpOyBqKyspIHsKKyAgICAgICAgICAg
IGlmIChsaXZlQWZ0ZXIuZ2V0KGopKQorICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIldSAiLCBq
KTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nRigiXG4iKTsKKyAgICB9Cit9CisKK3ZvaWQg
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlKCkKK3sKKyAgICBpZiAobV9jb21wdXRl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29tcHV0ZUJ5dGVjb2RlQmFzaWNCbG9ja3MobV9j
b2RlQmxvY2ssIG1fYmFzaWNCbG9ja3MpOworICAgIEFTU0VSVChtX2Jhc2ljQmxvY2tzLnNpemUo
KSk7CisgICAgcnVuTGl2ZW5lc3NGaXhwb2ludCgpOworICAgIG1fY29tcHV0ZWQgPSB0cnVlOwor
CisgICAgaWYgKE9wdGlvbnM6OmR1bXBCeXRlY29kZUxpdmVuZXNzUmVzdWx0cygpKQorICAgICAg
ICBkdW1wUmVzdWx0cygpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzX2gKKyNkZWZp
bmUgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzX2gKKworI2luY2x1ZGUgIkJ5dGVjb2RlQmFzaWNC
bG9jay5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBDb2RlQmxvY2s7CisKK2NsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyB7CitwdWJs
aWM6CisgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzKENvZGVCbG9jayopOworICAgIEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcyhjb25zdCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMmKTsKKwor
ICAgIGJvb2wgb3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9wZXJhbmQsIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworCisgICAgYm9vbCBoYXNC
ZWVuQ29tcHV0ZWQoKSB7IHJldHVybiBtX2NvbXB1dGVkOyB9CisgICAgdm9pZCBjb21wdXRlKCk7
CisgICAgdm9pZCBjb21wdXRlSWZOZWNlc3NhcnkoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY29t
cHV0ZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvbXB1dGUoKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCBydW5MaXZlbmVzc0ZpeHBvaW50KCk7CisgICAgdm9pZCBkdW1w
UmVzdWx0cygpOworCisgICAgdm9pZCBnZXRMaXZlbmVzc0luZm9Gb3JOb25DYXB0dXJlZFZhcnNB
dEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJik7
CisKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIFZlY3RvcjxSZWZQdHI8Qnl0ZWNv
ZGVCYXNpY0Jsb2NrPiA+IG1fYmFzaWNCbG9ja3M7CisKKyAgICBib29sIG1fY29tcHV0ZWQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkocmV2aXNpb24gMTUzNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OTksNiArMTQ5OSw3IEBAIENvZGVC
bG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAsIG1fb3B0aW1pemF0aW9u
RGVsYXlDb3VudGVyKDApCiAgICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCiAg
ICAgLCBtX2hhc2gob3RoZXIubV9oYXNoKQorICAgICwgbV9saXZlbmVzc0FuYWx5c2lzKG90aGVy
Lm1fbGl2ZW5lc3NBbmFseXNpcykKICNpZiBFTkFCTEUoSklUKQogICAgICwgbV9jYXBhYmlsaXR5
TGV2ZWxTdGF0ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkKICNlbmRpZgpAQCAtMTUzOSw2
ICsxNTQwLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAg
ICwgbV9vc3JFeGl0Q291bnRlcigwKQogICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIo
MCkKICAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKKyAgICAsIG1fbGl2ZW5l
c3NBbmFseXNpcyh0aGlzKQogI2lmIEVOQUJMRShKSVQpCiAgICAgLCBtX2NhcGFiaWxpdHlMZXZl
bFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KQogI2VuZGlmCkBAIC0xODQxLDYgKzE4
NDMsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAKICAgICBp
ZiAoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcygpKQogICAgICAgICBkdW1wQnl0ZWNv
ZGUoKTsKKwogICAgIG1fdm0tPmZpbmlzaGVkQ29tcGlsaW5nKHRoaXMpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTM3
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKICNp
bmNsdWRlICJCeVZhbEluZm8uaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCisj
aW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtJ
bmZvLmgiCiAjaW5jbHVkZSAiQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIKICNp
bmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCkBAIC05Miw2ICs5Myw3IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIGludCBtaXNzaW5nVGhpc09iamUKIAogY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPENvZGVCbG9jaz4sIHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxp
emVyLCBwdWJsaWMgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKICAg
ICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiBwdWJsaWM6CkBAIC03MDgsNiArNzEwLDggQEAgcHVibGljOgogCiAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luKTsKIAorICAgIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpcygpIHsgcmV0dXJuIG1fbGl2ZW5lc3NBbmFseXNp
czsgfQorCiAgICAgLy8gSnVtcCBUYWJsZXMKIAogICAgIHNpemVfdCBudW1iZXJPZlN3aXRjaEp1
bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9zd2l0
Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7IH0KQEAgLTExMDYsNiArMTExMCw4IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgbXV0YWJsZSBDb2RlQmxvY2tIYXNoIG1faGFzaDsKIAorICAgIEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcyBtX2xpdmVuZXNzQW5hbHlzaXM7CisKICAgICBzdHJ1Y3QgUmFyZURh
dGEgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBU
YXJnZXRzLmNwcAkocmV2aXNpb24gMTUzNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDY2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCit0ZW1wbGF0ZSA8c2l6ZV90IHZlY3RvclNpemU+
CitzdGF0aWMgdm9pZCBnZXRKdW1wVGFyZ2V0c0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayog
Y29kZUJsb2NrLCBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIsIEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbnNCZWdpbiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIFZlY3Rvcjx1bnNpZ25lZCwgdmVj
dG9yU2l6ZT4mIG91dCkKK3sKKyAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5n
ZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF0udS5vcGNvZGUpOwor
ICAgIEluc3RydWN0aW9uKiBjdXJyZW50ID0gaW5zdHJ1Y3Rpb25zQmVnaW4gKyBieXRlY29kZU9m
ZnNldDsKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgY2FzZSBvcF9qbXA6CisgICAgICAg
IG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzFdLnUub3BlcmFuZCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAg
Y2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICAgICAgb3V0LmFw
cGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbMl0udS5vcGVyYW5kKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ug
b3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJl
cToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ug
b3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgICAgIG91dC5hcHBl
bmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzNdLnUub3BlcmFuZCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOiB7Cisg
ICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZShjdXJyZW50WzFdLnUub3BlcmFuZCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRhYmxl
LmJyYW5jaE9mZnNldHMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgb3V0LmFwcGVuZChieXRl
Y29kZU9mZnNldCArIHRhYmxlLmJyYW5jaE9mZnNldHNbaV0pOworICAgICAgICBvdXQuYXBwZW5k
KGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFsyXS51Lm9wZXJhbmQpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOiB7CisgICAgICAgIFN0cmluZ0p1bXBU
YWJsZSYgdGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShjdXJyZW50WzFd
LnUub3BlcmFuZCk7CisgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6
Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5iZWdpbigpOworICAgICAgICBTdHJp
bmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS5vZmZz
ZXRUYWJsZS5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAg
ICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgaXRlci0+dmFsdWUuYnJhbmNoT2Zm
c2V0KTsKKyAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbMl0udS5v
cGVyYW5kKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3BfZ2V0X3BuYW1lczoK
KyAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbNV0udS5vcGVyYW5k
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9uZXh0X3BuYW1lOgorICAgICAgICBvdXQu
YXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFs2XS51Lm9wZXJhbmQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIG9wX2NoZWNrX2hhc19pbnN0YW5jZToKKyAgICAgICAgb3V0LmFwcGVu
ZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbNF0udS5vcGVyYW5kKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZz
ZXQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKIHZvaWQgY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyhDb2RlQmxvY2sqIGNvZGVCbG9j
aywgVmVjdG9yPHVuc2lnbmVkLCAzMj4mIG91dCkKIHsKICAgICBBU1NFUlQob3V0LmlzRW1wdHko
KSk7CkBAIC00NSw2MCArMTA1LDcgQEAgdm9pZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKENv
ZGVCbG9jawogICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsg
Ynl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50OykgewogICAgICAgICBPcGNvZGVJRCBv
cGNvZGVJRCA9IGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNCZWdpbltieXRl
Y29kZU9mZnNldF0udS5vcGNvZGUpOwotICAgICAgICBJbnN0cnVjdGlvbiogY3VycmVudCA9IGlu
c3RydWN0aW9uc0JlZ2luICsgYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgICAgIHN3aXRjaCAob3Bjb2Rl
SUQpIHsKLSAgICAgICAgY2FzZSBvcF9qbXA6Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVj
b2RlT2Zmc2V0ICsgY3VycmVudFsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2Ugb3BfanRydWU6Ci0gICAgICAgIGNhc2Ugb3BfamZhbHNlOgotICAgICAgICBj
YXNlIG9wX2plcV9udWxsOgotICAgICAgICBjYXNlIG9wX2puZXFfbnVsbDoKLSAgICAgICAgICAg
IG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzJdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbmVxX3B0cjoKLSAgICAgICAgY2FzZSBv
cF9qbGVzczoKLSAgICAgICAgY2FzZSBvcF9qbGVzc2VxOgotICAgICAgICBjYXNlIG9wX2pncmVh
dGVyOgotICAgICAgICBjYXNlIG9wX2pncmVhdGVyZXE6Ci0gICAgICAgIGNhc2Ugb3Bfam5sZXNz
OgotICAgICAgICBjYXNlIG9wX2pubGVzc2VxOgotICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcjoK
LSAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKLSAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0
ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgotICAgICAgICBjYXNlIG9wX3N3aXRjaF9jaGFy
OiB7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIHRhYmxlID0gY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUoY3VycmVudFsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gdGFibGUuYnJhbmNoT2Zmc2V0cy5zaXplKCk7IGktLTspCi0gICAgICAgICAgICAg
ICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIHRhYmxlLmJyYW5jaE9mZnNldHNbaV0pOwot
ICAgICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbMl0udS5vcGVy
YW5kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3dp
dGNoX3N0cmluZzogewotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IGNvZGVC
bG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGN1cnJlbnRbMV0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ZXIg
PSB0YWJsZS5vZmZzZXRUYWJsZS5iZWdpbigpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxl
OjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUub2Zmc2V0VGFibGUuZW5k
KCk7Ci0gICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAg
ICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0
KTsKLSAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzJdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X2dldF9wbmFtZXM6Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3Vy
cmVudFs1XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3Bf
bmV4dF9wbmFtZToKLSAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJy
ZW50WzZdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9j
aGVja19oYXNfaW5zdGFuY2U6Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0
ICsgY3VycmVudFs0XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2Ugb3BfbG9vcF9oaW50OgotICAgICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9CisgICAgICAgIGdldEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQoY29k
ZUJsb2NrLCBpbnRlcnByZXRlciwgaW5zdHJ1Y3Rpb25zQmVnaW4sIGJ5dGVjb2RlT2Zmc2V0LCBv
dXQpOwogICAgICAgICBieXRlY29kZU9mZnNldCArPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsK
ICAgICB9CiAgICAgCkBAIC0xMTgsNSArMTI1LDEyIEBAIHZvaWQgY29tcHV0ZVByZWNpc2VKdW1w
VGFyZ2V0cyhDb2RlQmxvY2sKICAgICBvdXQucmVzaXplKHRvSW5kZXgpOwogfQogCit2b2lkIGZp
bmRKdW1wVGFyZ2V0c0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgVmVjdG9yPHVuc2lnbmVkLCAxPiYgb3V0KQoreworICAgIElu
dGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7Cisg
ICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5iZWdpbigpOworICAgIGdldEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJs
b2NrLCBpbnRlcnByZXRlciwgaW5zdHJ1Y3Rpb25zQmVnaW4sIGJ5dGVjb2RlT2Zmc2V0LCBvdXQp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuaAkocmV2aXNpb24gMTUzNzIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdm9p
ZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKENvZGVCbG9jayosIFZlY3Rvcjx1bnNpZ25lZCwg
MzI+JiBvdXQpOwordm9pZCBmaW5kSnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldChDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgVmVjdG9yPHVuc2lnbmVkLCAxPiYgb3V0KTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCShyZXZpc2lvbiAxNTM3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsOCBAQCBuYW1lc3BhY2UgeyAKIHN0YXRp
YyBjb25zdCBzaXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICogTUI7IC8vIEFib3V0IDEuNVggdGhl
IGF2ZXJhZ2Ugd2VicGFnZS4KIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxIZWFwU2l6ZSA9IDEg
KiBNQjsgLy8gTWF0Y2hlcyB0aGUgRmFzdE1hbGxvYyBwZXItdGhyZWFkIGNhY2hlLgogCisjZGVm
aW5lIEVOQUJMRV9HQ19MT0dHSU5HIDEKKwogI2lmIEVOQUJMRShHQ19MT0dHSU5HKQogI2lmIENP
TVBJTEVSKENMQU5HKQogI2RlZmluZSBERUZJTkVfR0NfTE9HR0lOR19HTE9CQUwodHlwZSwgbmFt
ZSwgYXJndW1lbnRzKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SlNTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0pTU3RhY2suY3BwCShyZXZpc2lvbiAxNTM3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDEw
IEBACiAjaW5jbHVkZSAiSlNTdGFjay5oIgogI2luY2x1ZGUgIkpTU3RhY2tJbmxpbmVzLmgiCiAK
KyNpbmNsdWRlICJDYWxsRnJhbWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9v
dHMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC05OCw3ICsxMDAsNjQgQEAgdm9pZCBKU1N0
YWNrOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDbwogCiB2b2lkIEpTU3RhY2s6OmdhdGhlckNv
bnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSklU
U3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJs
b2NrcykKIHsKLSAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZ2V0VG9wT2ZTdGFj
aygpLCBqaXRTdHViUm91dGluZXMsIGRmZ0NvZGVCbG9ja3MpOworICAgIGlmICghT3B0aW9uczo6
dXNlQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzRm9yQ29uc2VydmF0aXZlU2NhbigpKSB7CisgICAg
ICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBnZXRUb3BPZlN0YWNrKCksIGppdFN0
dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBDYWxsRnJhbWUqIGZyYW1lID0gbV90b3BDYWxsRnJhbWU7CisgICAgaWYgKGZyYW1lIDwgYmVn
aW4oKSkKKyAgICAgICAgcmV0dXJuOworICAgIENhbGxGcmFtZSogbGFzdEZyYW1lID0gMDsKKyAg
ICB2b2lkKiBiZWdpbiA9IHRoaXMtPmJlZ2luKCk7CisgICAgZm9yIChDYWxsRnJhbWUqIGZyYW1l
ID0gbV90b3BDYWxsRnJhbWU7IGZyYW1lID49IGJlZ2luOyBmcmFtZSA9IChDYWxsRnJhbWUqKSgo
c2l6ZV90KWZyYW1lLT5jYWxsZXJGcmFtZSgpICYgKHNpemVfdCl+MHgxKSkgeworICAgICAgICAv
LyBTY2FuIENhbGxGcmFtZSBzbG90cy4gV2UgZG9uJ3QgbmVlZCB0byBzY2FuIHRoZSBDYWxsZXJG
cmFtZSBvciB0aGUgQXJndW1lbnRDb3VudCwgc28gd2Ugc3RhcnQgZnJvbSB0aGUgQ2FsbGVlLgor
ICAgICAgICBSZWdpc3RlciogcmVncyA9IGZyYW1lLT5yZWdpc3RlcnMoKTsKKyAgICAgICAgY29u
c2VydmF0aXZlUm9vdHMuYWRkKCZyZWdzW0pTU3RhY2s6OkNhbGxlZV0sIHJlZ3MsIGppdFN0dWJS
b3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisKKyAgICAgICAgLy8gU2NhbiBhcmd1bWVudHMuCisg
ICAgICAgIGlmIChmcmFtZSA+IGJlZ2luKSB7CisgICAgICAgICAgICBpbnQgdGhpc09mZnNldCA9
IC0oSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIDEpOworICAgICAgICAgICAgaW50IGFy
Z0NvdW50ID0gZnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCk7CisgICAgICAgICAg
ICBjb25zZXJ2YXRpdmVSb290cy5hZGQoJnJlZ3NbdGhpc09mZnNldCAtIChhcmdDb3VudCAtIDEp
XSwgJnJlZ3NbdGhpc09mZnNldCArIDFdKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNjYW4g
bGl2ZSByZWdpc3RlcnMuCisgICAgICAgIEpTQzo6Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBmcmFt
ZS0+Y29kZUJsb2NrKCk7CisgICAgICAgIGlmICghY29kZUJsb2NrIHx8IGNvZGVCbG9jay0+aml0
VHlwZSgpID4gSklUQ29kZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgICAgIGlmIChsYXN0RnJh
bWUpCisgICAgICAgICAgICAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKHJlZ3MsIGxhc3RGcmFt
ZS0+cmVnaXN0ZXJzKCkgLSBDYWxsRnJhbWVIZWFkZXJTaXplLCBqaXRTdHViUm91dGluZXMsIGRm
Z0NvZGVCbG9ja3MpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbnNlcnZh
dGl2ZVJvb3RzLmFkZChyZWdzLCBnZXRUb3BPZlN0YWNrKCksIGppdFN0dWJSb3V0aW5lcywgZGZn
Q29kZUJsb2Nrcyk7CisgICAgICAgICAgICBsYXN0RnJhbWUgPSBmcmFtZTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQ7
CisgICAgICAgIGlmIChmcmFtZS0+aGFzTG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpIHsKKyAg
ICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gZnJhbWUtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNl
dCgpOworICAgICAgICAgICAgLy8gRklYTUU6IEluIHRoZSBMTEludCBhbmQgYmFzZWxpbmUgSklU
LCBpZiB3ZSB3ZXJlIHRoZSBsYXN0IGZyYW1lIGJlZm9yZSB0aGUgR0MgCisgICAgICAgICAgICAv
LyB3YXMgdHJpZ2dlcmVkIHRoZW4gd2UgaGF2ZSB0aGlzIGR1bWIgb2ZmLWJ5LW9uZSBhZGRpdGlv
biB0byB0aGUgUEMuCisgICAgICAgICAgICBpZiAoIWxhc3RGcmFtZSkKKyAgICAgICAgICAgICAg
ICBieXRlY29kZU9mZnNldCAtPSAxOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJ5dGVj
b2RlT2Zmc2V0ID0gZnJhbWUtPmJ5dGVjb2RlT2Zmc2V0RnJvbUNvZGVPcmlnaW5JbmRleCgpOwor
CisgICAgICAgIGNvZGVCbG9jay0+bGl2ZW5lc3NBbmFseXNpcygpLmNvbXB1dGVJZk5lY2Vzc2Fy
eSgpOworICAgICAgICBGYXN0Qml0VmVjdG9yIGxpdmVuZXNzSW5mbyA9IGNvZGVCbG9jay0+bGl2
ZW5lc3NBbmFseXNpcygpLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGl2ZW5lc3NJbmZvLm51
bUJpdHMoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAobGFzdEZyYW1lICYmICZyZWdzW2ldID49
IGxhc3RGcmFtZS0+cmVnaXN0ZXJzKCkgLSAoQ2FsbEZyYW1lSGVhZGVyU2l6ZSArIGxhc3RGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIGlmICghbGl2ZW5lc3NJbmZvLmdldChpKSkgeworICAgICAgICAg
ICAgICAgIGlmIChsYXN0RnJhbWUgJiYgcmVnc1tpXS5qc1ZhbHVlKCkuaXNDZWxsKCkpCisgICAg
ICAgICAgICAgICAgICAgIHJlZ3NbaV0gPSBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc2VydmF0aXZlUm9vdHMu
YWRkKCZyZWdzW2ldLCAmcmVnc1tpICsgMV0pOworICAgICAgICB9CisgICAgICAgIGxhc3RGcmFt
ZSA9IGZyYW1lOworICAgIH0KIH0KIAogdm9pZCBKU1N0YWNrOjpyZWxlYXNlRXhjZXNzQ2FwYWNp
dHkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJl
dmlzaW9uIDE1MzcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBPcHRpb25zOjppbml0
aWFsaXplKCkKICNpZiAhRU5BQkxFKFlBUlJfSklUKQogICAgIHVzZVJlZ0V4cEpJVCgpID0gZmFs
c2U7CiAjZW5kaWYKLSAgICAKKwogICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3aGVyZSBuZWVkZWQg
YW5kIG1ha2UgY29ycmVjdGlvbnMgdG8gdGhlIG9wdGlvbnM6CiAgICAgQVNTRVJUKHRocmVzaG9s
ZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkgPj0gdGhyZXNob2xkRm9yT3B0aW1pemVBZnRl
cldhcm1VcCgpKTsKICAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgp
ID49IHRocmVzaG9sZEZvck9wdGltaXplU29vbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE1MzcyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsNyBA
QCB0eXBlZGVmIE9wdGlvblJhbmdlIG9wdGlvblJhbmdlOwogICAgIHYoYm9vbCwgZm9yY2VERkdD
b2RlQmxvY2tMaXZlbmVzcywgZmFsc2UpIFwKICAgICBcCiAgICAgdihib29sLCBkdW1wR2VuZXJh
dGVkQnl0ZWNvZGVzLCBmYWxzZSkgXAorICAgIHYoYm9vbCwgZHVtcEJ5dGVjb2RlTGl2ZW5lc3NS
ZXN1bHRzLCBmYWxzZSkgXAogICAgIFwKICAgICAvKiBzaG93RGlzYXNzZW1ibHkgaW1wbGllcyBz
aG93REZHRGlzYXNzZW1ibHkuICovIFwKICAgICB2KGJvb2wsIHNob3dEaXNhc3NlbWJseSwgZmFs
c2UpIFwKQEAgLTE5Miw2ICsxOTMsNyBAQCB0eXBlZGVmIE9wdGlvblJhbmdlIG9wdGlvblJhbmdl
OwogICAgIHYoYm9vbCwgZm9yY2VXZWFrUmFuZG9tU2VlZCwgZmFsc2UpIFwKICAgICB2KHVuc2ln
bmVkLCBmb3JjZWRXZWFrUmFuZG9tU2VlZCwgMCkgXAogICAgIFwKKyAgICB2KGJvb2wsIHVzZUJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0ZvckNvbnNlcnZhdGl2ZVNjYW4sIGZhbHNlKSBcCiAgICAg
dihib29sLCB1c2Vab21iaWVNb2RlLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgb2JqZWN0c0FyZUlt
bW9ydGFsLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgc2hvd09iamVjdFN0YXRpc3RpY3MsIGZhbHNl
KSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208295</attachid>
            <date>2013-08-07 13:17:45 -0700</date>
            <delta_ts>2013-08-07 13:41:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118546-20130807131746.patch</filename>
            <type>text/plain</type>
            <size>75806</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzNzk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBA
QAorMjAxMy0wOC0wMiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvZGVCbG9ja3Mgc2hvdWxkIGJlIGFibGUgdG8gZGV0ZXJtaW5lIGJ5dGVjb2Rl
IGxpdmVuZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTg1NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHdpbGwgc2ltcGxpZnkgc29tZSB0aGluZ3MgaW4gdGhlIERGRyByZWxhdGVkIHRvIE9T
UiBleGl0cyBhbmQgZGV0ZXJtaW5pbmcgCisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIHZhcmlhYmxl
cyBhcmUgbGl2ZSBhdCB3aGljaCBwb2ludHMgZHVyaW5nIGV4ZWN1dGlvbi4gSXQgd2lsbAorICAg
ICAgICBhbHNvIGJlIHVzZWZ1bCBmb3IgbWFraW5nIG91ciBjb25zZXJ2YXRpdmUgR0Mgc2NhbiBt
b3JlIHByZWNpc2UuIEN1cnJlbnRseSBpdCAKKyAgICAgICAgZG9lc24ndCBwcm9wZXJseSBhY2Nv
dW50IGZvciBsaXZlbmVzcyB3aGlsZSB0aGUgREZHIGlzIHJ1bm5pbmcsIHNvIGl0IHdpbGwgYmUg
CisgICAgICAgIG9mZiBieSBkZWZhdWx0IGJlaGluZyBhIHJ1bnRpbWUgT3B0aW9ucyBmbGFnLgor
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6aXNCcmFuY2gpOiBVc2VkIHRvIGRldGVybWluZSB0aGUgZW5kIG9mIGJhc2ljIGJsb2Nr
cy4KKyAgICAgICAgKEpTQzo6aXNVbmNvbmRpdGlvbmFsQnJhbmNoKTogVXNlZCB0byBkZXRlcm1p
bmUgd2hlbiBhIGJyYW5jaCBhdCB0aGUgZW5kIG9mIGEgCisgICAgICAgIGJhc2ljIGJsb2NrIGNh
bid0IHBvc3NpYmx5IGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBiYXNpYyBibG9jayBpbiBwcm9n
cmFtIG9yZGVyLgorICAgICAgICAoSlNDOjppc1Rlcm1pbmFsKTogQWxzbyB1c2VkIHRvIGRldGVj
dCB0aGUgZW5kIG9mIGEgYmxvY2suCisgICAgICAgIChKU0M6OmlzVGhyb3cpOgorICAgICAgICAo
SlNDOjppc0p1bXBUYXJnZXQpOiBVc2VkIHRvIGNvcnJlY3RseSBzZXBhcmF0ZSBiYXNpYyBibG9j
a3MuIEFueSBqdW1wIGRlc3RpbmF0aW9uIAorICAgICAgICBtdXN0IGJlIHRoZSBoZWFkIG9mIGl0
cyBvd24gYmFzaWMgYmxvY2suCisgICAgICAgIChKU0M6OmxpbmtCbG9ja3MpOiBMaW5rcyB0d28g
YmxvY2tzIHRvZ2V0aGVyIGluIGEgYmktZGlyZWNpdG9uYWwgZmFzaGlvbi4KKyAgICAgICAgKEpT
Qzo6Y29tcHV0ZUJ5dGVjb2RlQmFzaWNCbG9ja3MpOiBDcmVhdGVzIGEgc2V0IG9mIGJhc2ljIGJs
b2NrcyBnaXZlbiBhIHBhcnRpY3VsYXIgCisgICAgICAgIENvZGVCbG9jayBhbmQgbGlua3MgdGhl
bSB0b2dldGhlci4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlQmFzaWNCbG9jazo6aXNFbnRyeUJsb2NrKTogRW50
cnkgYmxvY2tzIGFyZSBhIHNwZWNpYWwgYmFzaWMgYmxvY2tzIAorICAgICAgICB0aGF0IGluZGlj
YXRlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUJhc2ljQmxvY2s6OmlzRXhpdEJsb2NrKTogRXhpdCBibG9ja3MgYXJlIGEgc3BlY2lhbCBiYXNp
YyBibG9jayB0aGF0IAorICAgICAgICBhbGwgYmxvY2tzIHRoYXQgZXhpdCB0aGUgZnVuY3Rpb24g
aGF2ZSBhcyBhIHN1Y2Nlc3Nvci4gRW50cnkgYW5kIGV4aXQgYmxvY2tzIGFsbG93cyAKKyAgICAg
ICAgdGhlIHZhcmlvdXMgY29kZSBwYXRocyB0byBiZSBtb3JlIHJlZ3VsYXIuCisgICAgICAgIChK
U0M6OkJ5dGVjb2RlQmFzaWNCbG9jazo6bGVhZGVyQnl0ZWNvZGVPZmZzZXQpOiBUaGUgbGVhZGVy
IGJ5dGVjb2RlIG9mZnNldCBpcyB0aGUgCisgICAgICAgIGJ5dGVjb2RlIG9mZnNldCBvZiB0aGUg
Zmlyc3QgaW5zdHJ1Y3Rpb24gaW4gdGhlIGJsb2NrLgorICAgICAgICAoSlNDOjpCeXRlY29kZUJh
c2ljQmxvY2s6OnRvdGFsQnl0ZWNvZGVMZW5ndGgpOiBUaGUgdG90YWwgbGVuZ3RoIG9mIGFsbCB0
aGUgYnl0ZWNvZGVzIAorICAgICAgICBpbiB0aGlzIGJsb2NrLgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUJhc2ljQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0cyk6IFRoZSBieXRlY29kZSBvZmZzZXRzIGlu
IHRoaXMgcGFydGljdWxhciAKKyAgICAgICAgYmFzaWMgYmxvY2suIFRoaXMgVmVjdG9yIGFsbG93
cyB1cyB0byBpdGVyYXRlIG92ZXIgdGhlIGJ5dGVjb2RlcyBpbiByZXZlcnNlIG9yZGVyIAorICAg
ICAgICB3aGljaCB3b3VsZG4ndCBiZSBwb3NzaWJsZSBub3JtYWxseSBzaW5jZSB0aGV5IGFyZSBv
ZiB2YXJpYWJsZSBzaXplLgorICAgICAgICAoSlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6OmFkZFBy
ZWRlY2Vzc29yKTogTGlua3MgYSBibG9jayB0byBhIHNwZWNpZmllZCBwcmVkZWNlc3Nvci4gCisg
ICAgICAgIE9ubHkgY3JlYXRlcyBvbmUgZGlyZWN0aW9uIG9mIHRoZSBsaW5rLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6OmFkZFN1Y2Nlc3Nvcik6IFNhbWUgYXMgYWRkUHJlZGVj
ZXNzb3IsIGJ1dCBmb3Igc3VjY2Vzc29ycy4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Js
b2NrOjpwcmVkZWNlc3NvcnMpOiBHZXR0ZXIgZm9yIHByZWRlY2Vzc29ycy4KKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKTogR2V0dGVyIGZvciBzdWNjZXNzb3Jz
LgorICAgICAgICAoSlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6OmluKTogR2V0dGVyIGZvciB0aGUg
bGl2ZW5lc3MgaW5mbyBhdCB0aGUgaGVhZCBvZiB0aGUgYmxvY2suCisgICAgICAgIChKU0M6OkJ5
dGVjb2RlQmFzaWNCbG9jazo6b3V0KTogR2V0dGVyIGZvciB0aGUgbGl2ZW5lc3MgaW5mbyBhdCAg
dGhlIHRhaWwgb2YgdGhlIGJsb2NrLgorICAgICAgICAoSlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6
OkJ5dGVjb2RlQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlQmFzaWNCbG9jazo6
YWRkQnl0ZWNvZGVMZW5ndGgpOiBXaGVuIGNyZWF0aW5nIGJhc2ljIGJsb2NrcyB3ZSBjYWxsIAor
ICAgICAgICB0aGlzIGZ1bmN0aW9uIHdoZW4gd2Ugd2FudCB0byBhZGQgdGhlIG5leHQgYnl0ZWNv
ZGUgaW4gcHJvZ3JhbSBvcmRlciB0byB0aGlzIGJsb2NrLgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyk6CisgICAgICAgIChK
U0M6Om51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMpOiBDb252ZW5pZW5jZSB3cmFwcGVyLiBSZXR1
cm5zIHRoZQorICAgICAgICBudW1iZXIgb2YgY2FwdHVyZWQgdmFyaWFibGVzIGZvciBhIHBhcnRp
Y3VsYXIgQ29kZUJsb2NrLCBvciAwIGlmIAorICAgICAgICB0aGUgQ29kZUJsb2NrIGhhcyBubyBT
eW1ib2xUYWJsZS4KKyAgICAgICAgKEpTQzo6Y2FwdHVyZVN0YXJ0KTogRGl0dG8sIGJ1dCBmb3Ig
Y2FwdHVyZVN0YXJ0KCkuCisgICAgICAgIChKU0M6OmNhcHR1cmVFbmQpOiBEaXR0bywgYnV0IGZv
ciBjYXB0dXJlRW5kKCkuCisgICAgICAgIChKU0M6OmlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNz
KTogUmV0dXJucyB0cnVlIGlmIHRoZSBsaXZlbmVzcyBhbmFseXNpcyBzaG91bGQgCisgICAgICAg
IHRyYWNrIHRoZSBsaXZlbmVzcyBvZiBhIHBhcnRpY3VsYXIgb3BlcmFuZC4gV2UgaWdub3JlIGNv
bnN0YW50cywgYXJndW1lbnRzLCBhbmQgCisgICAgICAgIGNhcHR1cmVkIHZhcmlhYmxlcy4gV2Ug
aWdub3JlIGFyZ3VtZW50cyBiZWNhdXNlIHRoZXkncmUgbGl2ZSBmb3IgdGhlIGR1cmF0aW9uIG9m
IAorICAgICAgICBhIGZ1bmN0aW9uIGNhbGwuIFdlIGlnbm9yZSBjYXB0dXJlZCB2YXJpYWJsZXMg
YmVjYXVzZSB3ZSBhbHNvIHRyZWF0IHRoZW0gYXMgbGl2ZSAKKyAgICAgICAgZm9yIHRoZSBkdXJh
dGlvbiBvZiB0aGUgZnVuY3Rpb24uIFRoaXMgY291bGQgcHJvYmFibHkgYmUgaW1wcm92ZWQgdG8g
YmUgbW9yZSBwcmVjaXNlLCAKKyAgICAgICAgYnV0IGl0IGRpZG4ndCBzZWVtIHdvcnRoIGl0IGZv
ciBub3cuCisgICAgICAgIChKU0M6OnNldEZvck9wZXJhbmQpOiBDb252ZW5pZW5jZSB3cmFwcGVy
IHRoYXQgc2V0cyB0aGUgYml0IGluIHRoZSBwcm92aWRlZCBiaXQgCisgICAgICAgIHZlY3RvciBm
b3IgdGhlIHByb3ZpZGVkIG9wZXJhbmQuIEl0IGhhbmRsZXMgc2tpcHBpbmcgb3ZlciBjYXB0dXJl
ZCB2YXJpYWJsZXMuCisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQp
OiBDb21wdXRlcyB3aGljaCBvcGVyYW5kcyBhcmUgdXNlZCBieSBhIHBhcnRpY3VsYXIgYnl0ZWNv
ZGUuCisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOiBDb21wdXRl
cyB3aGljaCBvcGVyYW5kcyBhcmUgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgCisgICAgICAgIGJ5
dGVjb2RlLiBUeXBpY2FsbHkgdGhpcyBpcyBqdXN0IHRoZSBsZWZ0LW1vc3Qgb3BlcmFuZC4KKyAg
ICAgICAgKEpTQzo6ZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KTogCisgICAgICAgIChK
U0M6OmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQpOiBTY2FucyBvdmVyIGJhc2ljIGJs
b2NrcyB0byBmaW5kIHRoZSBibG9jayAKKyAgICAgICAgd2hpY2ggY29udGFpbnMgYSBwYXJ0aWN1
bGFyIGJ5dGVjb2RlIG9mZnNldC4KKyAgICAgICAgKEpTQzo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NG
b3JCeXRlY29kZU9mZnNldCk6IENvbXB1dGVzIGJsb2NrLWxvY2FsIGxpdmVuZXNzIGZyb20gdGhl
IAorICAgICAgICBib3R0b20gb2YgdGhlIGJsb2NrIHVudGlsIGEgc3BlY2lmaWVkIGJ5dGVjb2Rl
IG9mZnNldCBpcyByZWFjaGVkLiAKKyAgICAgICAgKEpTQzo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NG
b3JCbG9jayk6IENvbXB1dGVzIGxpdmVuZXNzIGZvciB0aGUgZW50aXJlIGJsb2NrIGFuZCAKKyAg
ICAgICAgc3RvcmVzIHRoZSByZXN1bHRpbmcgbGl2ZW5lc3MgYXQgdGhlIGhlYWQuCisgICAgICAg
IChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6cnVuTGl2ZW5lc3NGaXhwb2ludCk6IFJ1
bnMgYmFja3dhcmQgZmxvdyBsaXZlbmVzcyAKKyAgICAgICAgYW5hbHlzaXMgdG8gZml4cG9pbnQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZv
Rm9yTm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldCk6IAorICAgICAgICBTbG93IHBhdGgg
dG8gZ2V0IGxpdmVuZXNzIGluZm8gZm9yIG5vbi1jYXB0dXJlZCwgbm9uLWFyZ3VtZW50IHZhcmlh
YmxlLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6Om9wZXJhbmRJc0xp
dmVBdEJ5dGVjb2RlT2Zmc2V0KTogCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCk6IFJldHVybnMgdGhlIGxpdmVu
ZXNzIAorICAgICAgICBpbmZvIGZvciBib3RoIGNhcHR1cmVkIGFuZCBub24tY2FwdHVyZWQgdmFy
cyBhdCBhIHBhcnRpY3VsYXIgYnl0ZWNvZGUgb2Zmc2V0LgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKTogRHVtcHMgdGhlIG91dHB1dCBvZiB0aGUg
bGl2ZW5lc3MgYW5hbHlzaXMuIAorICAgICAgICBDb250cm9sbGVkIGJ5IG5ldyBmbGFnIGluIE9w
dGlvbnMuaC8uY3BwLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNv
bXB1dGUpOiBDcmVhdGVzIGJ5dGVjb2RlIGJhc2ljIGJsb2NrcyBhbmQgcnVucyAKKyAgICAgICAg
ZnVsbCBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6aGFzQmVlbkNvbXB1dGVkKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzOjpjb21wdXRlSWZOZWNlc3NhcnkpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaXZlbmVzc0Fu
YWx5c2lzKToKKyAgICAgICAgKiBieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwOiBSZWZh
Y3RvcmVkIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBqdW1wIHRhcmdldHMgZm9yIAorICAgICAgICBh
IHBhcnRpY3VsYXIgYnl0ZWNvZGUgb2Zmc2V0IGZvciB1c2UgZHVyaW5nIGJ5dGVjb2RlIGJhc2lj
IGJsb2NrIGNvbnN0cnVjdGlvbi4KKyAgICAgICAgKEpTQzo6Z2V0SnVtcFRhcmdldHNGb3JCeXRl
Y29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMpOgor
ICAgICAgICAoSlNDOjpmaW5kSnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAg
ICogYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIv
SlNTdGFjay5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJv
b3RzKTogQ2hhbmdlZCB0byB1c2UgdGhlIGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lzIAorICAg
ICAgICBkdXJpbmcgY29uc2VydmF0aXZlIHN0YWNrIHNjYW5uaW5nLiBFbmFibGVkIGJ5IGZsYWcg
aW4gT3B0aW9ucy5oLy5jcHAuCisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAg
ICAgKEpTQzo6T3B0aW9uczo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25z
Lmg6CisKIDIwMTMtMDgtMDcgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNv
bT4KIAogICAgICAgICAzMi1iaXQgY29kZSBnZW4gZm9yIFR5cGVPZiBkb2Vzbid0IHByb3Blcmx5
IHVwZGF0ZSB0aGUgQWJzdHJhY3RJbnRlcnByZXRlciBzdGF0ZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTUzNzk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw4IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAKICAgICBieXRlY29kZS9BcnJheUFsbG9jYXRpb25Q
cm9maWxlLmNwcAogICAgIGJ5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAKKyAgICBieXRlY29kZS9C
eXRlY29kZUJhc2ljQmxvY2suY3BwCisgICAgYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmNwcAogICAgIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKICAgICBieXRlY29kZS9DYWxs
TGlua1N0YXR1cy5jcHAKICAgICBieXRlY29kZS9Db2RlQmxvY2suY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTUzNzk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkK
QEAgLTk0LDYgKzk0LDEwIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAorICAgIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQkocmV2aXNpb24gMTUzNzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Rh
cmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDggQEAgU09VUkNFUyArPSBcCiAg
ICAgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBcCiAgICAgYnl0ZWNvZGUv
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgXAogICAgIGJ5dGVjb2RlL0FycmF5UHJvZmlsZS5j
cHAgXAorICAgIGJ5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgXAorICAgIGJ5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAogICAgIGJ5dGVjb2RlL0NhbGxMaW5rSW5m
by5jcHAgXAogICAgIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcCBcCiAgICAgYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2oJKHJldmlzaW9uIDE1Mzc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI5
Niw2ICsyOTYsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxBcnJheVByb2ZpbGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAiIC8+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNw
cCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua0luZm8u
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5rU3Rh
dHVzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb2RlQmxv
Y2suY3BwIiAvPg0KQEAgLTU4Niw2ICs1ODgsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEFycmF5UHJvZmlsZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5VmFsSW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlQmFzaWNCbG9jay5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIiAvPg0K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5rSW5mby5oIiAvPg0K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5rU3RhdHVzLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbFJldHVybk9mZnNldFRv
Qnl0ZWNvZGVPZmZzZXQuaCIgLz4NCkBAIC05NTcsNCArOTYxLDQgQEAKICAgPEltcG9ydEdyb3Vw
IExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4NCiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFy
Z2V0c1BhdGgpXEJ1aWxkQ3VzdG9taXphdGlvbnNcbWFzbS50YXJnZXRzIiAvPg0KICAgPC9JbXBv
cnRHcm91cD4NCi08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9q
ZWN0Pg0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
LmZpbHRlcnMJKHJldmlzaW9uIDE1Mzc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2lu
ZyBjb3B5KQpAQCAtMTA4LDYgKzEwOCwxMiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcQXJyYXlQcm9maWxlLmNwcCI+DQogICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmls
dGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxCeXRlY29kZUJhc2ljQmxvY2suY3BwIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9G
aWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0
ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtJbmZvLmNwcCI+DQogICAgICAgPEZpbHRlcj5ieXRlY29k
ZTwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCkBAIC05MTQsNiArOTIwLDEyIEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeVZhbEluZm8uaCI+DQogICAgICAgPEZp
bHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZUJhc2ljQmxvY2suaCI+DQorICAgICAgPEZp
bHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCI+DQorICAg
ICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua0luZm8uaCI+DQogICAgICAgPEZp
bHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCkBAIC0yMDIxLDQgKzIw
MzMsNCBAQAogICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCiAgICAgPC9NQVNNPg0KICAgPC9J
dGVtR3JvdXA+DQotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJv
amVjdD4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUzNzk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwMzAsNiArMTAzMCwxMCBAQAogCQlDMkVB
RDJGQzE0RjAyNDk4MDBBNEIxNTkgLyogQ29waWVkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkVBRDJGQjE0RjAyNDk4MDBBNEIxNTkg
LyogQ29waWVkQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQzJGMEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVE
YXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMy
RjBGMkQwMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi87IH07CiAJ
CUMyRkM5QkQzMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkM5QkQyMTY2NDRERkIw
MDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMkZDQUUxMDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0
ZWNvZGVCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2su
Y3BwICovOyB9OworCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Js
b2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZD
QUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggKi87IH07CisJCUMy
RkNBRTEyMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEUxN0E5
QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgKi87IH07CisJCUMy
RkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBGMTdBOUMy
NEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLzsgfTsKIAkJQzJGRTE4
QTQxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZFMThBMzE2QkFFQzQwMDBBRjMwNjEg
LyogU3RydWN0dXJlUmFyZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlEREY3QUJENDExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
REY3QUJEMjExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4RjcwRTU1NTc3
NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNT
dHJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMjExOCw2ICsyMTIyLDEwIEBACiAJCUMyRUFEMkZCMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3Bp
ZWRBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29waWVkQWxs
b2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRjBGMkQwMTZCQUVFRTkw
MDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyRkM5QkQyMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29waWVkQmxvY2tJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAv
KiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUJhc2ljQmxvY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDMkZDQUUwRjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkZFMThBMzE2QkFFQzQw
MDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3RydWN0dXJlUmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRl
Q29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZUNvbnZl
cnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0MjAsNiArMzQyOCwxMCBA
QAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUMyRkNBRTBDMTdBOUMyNEUwMDM0Qzcz
NSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovLAorCQkJCUMyRkNBRTBEMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLywKKwkJCQlDMkZDQUUwRTE3QTlDMjRFMDAz
NEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLywKKwkJCQlDMkZDQUUwRjE3
QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8sCiAJCQkJMEY4
MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwICovLAog
CQkJCTBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmgg
Ki8sCiAJCQkJMEY2Mzk0NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgKi8s
CkBAIC0zNTMzLDYgKzM1NDUsNyBAQAogCQkJCUE3QThBRjM3MTdBREI1RjMwMDVBQjE3NCAvKiBB
cnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NTE1
RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY2Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTcwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5UHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyNDBFMTZGQzhBMDBCMzQ0NjAgLyogQXJy
YXlQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTQwMzgsNiArNDA1MSw3IEBACiAJ
CQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBT
dHJpbmdPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyRkNBRTEzMTdBOUMyNEUwMDM0Qzcz
NSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDZBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNTI2MEUxNkZDQTcwMEIzNDQ2MCAvKiBTdHJpbmdQcm90b3R5cGUubHV0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDJFMzEzQjEzNEZGMEE2MDBBRkFEQjUgLyogU3Ryb25nLmggaW4g
SGVhZGVycyAqLywKQEAgLTQ0ODcsNiArNDUwMSw3IEBACiAJCQkJMTQ3RjM5QzQxMDdFQzM3NjAw
NDI3QTQ4IC8qIERhdGVDb252ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM1
MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQzJGQ0FFMTIxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyog
RGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzMTM1NjUwRjMwMkZBMzAwM0RGRDNB
IC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBE
RENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC00NzUyLDYgKzQ3NjcsNyBAQAogCQkJCTBGRjcyOUIyMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9m
aWxlckRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBG
NUJBMyAvKiBQcm9maWxlck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCNDE2
NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlDMkZDQUUxMDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9T
UkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8q
IFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3
MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Js
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJ5
dGVjb2RlQmFzaWNCbG9jay5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAi
UHJlY2lzZUp1bXBUYXJnZXRzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgYm9vbCBp
c0JyYW5jaChPcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Cisg
ICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToK
KyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ug
b3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6Cisg
ICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBv
cF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoK
KyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBj
YXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNl
IG9wX2dldF9wbmFtZXM6CisgICAgY2FzZSBvcF9uZXh0X3BuYW1lOgorICAgIGNhc2Ugb3BfY2hl
Y2tfaGFzX2luc3RhbmNlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc1VuY29uZGl0aW9u
YWxCcmFuY2goT3Bjb2RlSUQgb3Bjb2RlSUQpCit7CisgICAgc3dpdGNoIChvcGNvZGVJRCkgewor
ICAgIGNhc2Ugb3Bfam1wOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc1Rlcm1pbmFsKE9w
Y29kZUlEIG9wY29kZUlEKQoreworICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICBjYXNlIG9w
X3JldDoKKyAgICBjYXNlIG9wX3JldF9vYmplY3Rfb3JfdGhpczoKKyAgICBjYXNlIG9wX2VuZDoK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworc3RhdGljIGJvb2wgaXNUaHJvdyhPcGNvZGVJRCBvcGNvZGVJRCkKK3sK
KyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9w
X3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljIGJvb2wgaXNKdW1wVGFy
Z2V0KE9wY29kZUlEIG9wY29kZUlELCBWZWN0b3I8dW5zaWduZWQsIDMyPiYganVtcFRhcmdldHMs
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYXRj
aCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
anVtcFRhcmdldHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGJ5dGVjb2RlT2Zmc2V0ID09
IGp1bXBUYXJnZXRzW2ldKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgbGlua0Jsb2NrcyhCeXRlY29kZUJhc2ljQmxv
Y2sqIHByZWRlY2Vzc29yLCBCeXRlY29kZUJhc2ljQmxvY2sqIHN1Y2Nlc3NvcikKK3sKKyAgICBw
cmVkZWNlc3Nvci0+YWRkU3VjY2Vzc29yKHN1Y2Nlc3Nvcik7CisgICAgc3VjY2Vzc29yLT5hZGRQ
cmVkZWNlc3NvcihwcmVkZWNlc3Nvcik7Cit9CisKK3ZvaWQgY29tcHV0ZUJ5dGVjb2RlQmFzaWNC
bG9ja3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Js
b2NrPiA+JiBiYXNpY0Jsb2NrcykKK3sKKyAgICBWZWN0b3I8dW5zaWduZWQsIDMyPiBqdW1wVGFy
Z2V0czsKKyAgICBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKGNvZGVCbG9jaywganVtcFRhcmdl
dHMpOworCisgICAgLy8gQ3JlYXRlIHRoZSBlbnRyeSBhbmQgZXhpdCBiYXNpYyBibG9ja3MuCisg
ICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBlbnRyeSA9IG5ldyBCeXRlY29kZUJhc2ljQmxvY2soQnl0
ZWNvZGVCYXNpY0Jsb2NrOjpFbnRyeUJsb2NrKTsKKyAgICBiYXNpY0Jsb2Nrcy5hcHBlbmQoYWRv
cHRSZWYoZW50cnkpKTsKKyAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGV4aXQgPSBuZXcgQnl0ZWNv
ZGVCYXNpY0Jsb2NrKEJ5dGVjb2RlQmFzaWNCbG9jazo6RXhpdEJsb2NrKTsKKworICAgIC8vIEZp
bmQgYmFzaWMgYmxvY2sgYm91bmRhcmllcy4KKyAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGN1cnJl
bnQgPSBuZXcgQnl0ZWNvZGVCYXNpY0Jsb2NrKDAsIDApOworICAgIGxpbmtCbG9ja3MoZW50cnks
IGN1cnJlbnQpOworICAgIGJhc2ljQmxvY2tzLmFwcGVuZChhZG9wdFJlZihjdXJyZW50KSk7CisK
KyAgICBib29sIG5leHRJbnN0cnVjdGlvbklzTGVhZGVyID0gZmFsc2U7CisKKyAgICBJbnRlcnBy
ZXRlciogaW50ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPnZtKCktPmludGVycHJldGVyOworICAgIElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
YmVnaW4oKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7
IGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25Db3VudDspIHsKKyAgICAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0
ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKTsKKyAgICAgICAgdW5zaWduZWQgb3Bjb2RlTGVuZ3RoID0g
b3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CisKKyAgICAgICAgYm9vbCBjcmVhdGVkQmxvY2sgPSBm
YWxzZTsKKyAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgYnl0ZWNvZGUgaXMgYSBqdW1wIHRhcmdl
dCwgdGhlbiBpdCdzIHRoZSBsZWFkZXIgb2YgaXRzIG93biBiYXNpYyBibG9jay4KKyAgICAgICAg
aWYgKGlzSnVtcFRhcmdldChvcGNvZGVJRCwganVtcFRhcmdldHMsIGJ5dGVjb2RlT2Zmc2V0KSB8
fCBuZXh0SW5zdHJ1Y3Rpb25Jc0xlYWRlcikgeworICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Js
b2NrKiBibG9jayA9IG5ldyBCeXRlY29kZUJhc2ljQmxvY2soYnl0ZWNvZGVPZmZzZXQsIG9wY29k
ZUxlbmd0aCk7CisgICAgICAgICAgICBiYXNpY0Jsb2Nrcy5hcHBlbmQoYWRvcHRSZWYoYmxvY2sp
KTsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBibG9jazsKKyAgICAgICAgICAgIGNyZWF0ZWRCbG9j
ayA9IHRydWU7CisgICAgICAgICAgICBuZXh0SW5zdHJ1Y3Rpb25Jc0xlYWRlciA9IGZhbHNlOwor
ICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gb3Bjb2RlTGVuZ3RoOworICAgICAgICB9CisK
KyAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgYnl0ZWNvZGUgaXMgYSBicmFuY2ggb3IgYSByZXR1
cm4sIHRoZW4gdGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgdGhlIGxlYWRlciBvZiBpdHMgb3duIGJh
c2ljIGJsb2NrLgorICAgICAgICBpZiAoaXNCcmFuY2gob3Bjb2RlSUQpIHx8IGlzVGVybWluYWwo
b3Bjb2RlSUQpIHx8IGlzVGhyb3cob3Bjb2RlSUQpKQorICAgICAgICAgICAgbmV4dEluc3RydWN0
aW9uSXNMZWFkZXIgPSB0cnVlOworCisgICAgICAgIGlmIChjcmVhdGVkQmxvY2spCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBPdGhlcndpc2UsIGp1c3QgYWRkIHRvIHRoZSBs
ZW5ndGggb2YgdGhlIGN1cnJlbnQgYmxvY2suCisgICAgICAgIGN1cnJlbnQtPmFkZEJ5dGVjb2Rl
TGVuZ3RoKG9wY29kZUxlbmd0aCk7CisgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IG9wY29kZUxl
bmd0aDsKKyAgICB9CisKKyAgICAvLyBMaW5rIGJhc2ljIGJsb2NrcyB0b2dldGhlci4KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9ja3Muc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IGJhc2ljQmxvY2tzW2ldLmdldCgpOworCisg
ICAgICAgIGlmIChibG9jay0+aXNFbnRyeUJsb2NrKCkgfHwgYmxvY2stPmlzRXhpdEJsb2NrKCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBib29sIGZhbGxzVGhyb3VnaCA9IHRy
dWU7IAorICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmxlYWRl
ckJ5dGVjb2RlT2Zmc2V0KCk7IGJ5dGVjb2RlT2Zmc2V0IDwgYmxvY2stPmxlYWRlckJ5dGVjb2Rl
T2Zmc2V0KCkgKyBibG9jay0+dG90YWxCeXRlY29kZUxlbmd0aCgpOykgeworICAgICAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc0JlZ2lu
W2J5dGVjb2RlT2Zmc2V0XTsKKyAgICAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJw
cmV0ZXItPmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi51Lm9wY29kZSk7CisgICAgICAg
ICAgICB1bnNpZ25lZCBvcGNvZGVMZW5ndGggPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsKKyAg
ICAgICAgICAgIC8vIElmIHdlIGZvdW5kIGEgdGVybWluYWwgYnl0ZWNvZGUsIGxpbmsgdG8gdGhl
IGV4aXQgYmxvY2suCisgICAgICAgICAgICBpZiAoaXNUZXJtaW5hbChvcGNvZGVJRCkpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgKyBvcGNvZGVMZW5ndGggPT0gYmxv
Y2stPmxlYWRlckJ5dGVjb2RlT2Zmc2V0KCkgKyBibG9jay0+dG90YWxCeXRlY29kZUxlbmd0aCgp
KTsKKyAgICAgICAgICAgICAgICBsaW5rQmxvY2tzKGJsb2NrLCBleGl0KTsKKyAgICAgICAgICAg
ICAgICBmYWxsc1Rocm91Z2ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQgYSB0aHJvdywgZ2V0IHRoZSBI
YW5kbGVySW5mbyBmb3IgdGhpcyBpbnN0cnVjdGlvbiB0byBzZWUgd2hlcmUgd2Ugd2lsbCBqdW1w
LiAKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzbid0IG9uZSwgdHJlYXQgdGhpcyB0aHJvdyBh
cyBhIHRlcm1pbmFsLiBUaGlzIGlzIHRydWUgZXZlbiBpZiB3ZSBoYXZlIGEgZmluYWxseQorICAg
ICAgICAgICAgLy8gYmxvY2sgYmVjYXVzZSB0aGUgZmluYWxseSBibG9jayB3aWxsIGNyZWF0ZSBp
dHMgb3duIGNhdGNoLCB3aGljaCB3aWxsIGdlbmVyYXRlIGEgSGFuZGxlckluZm8uCisgICAgICAg
ICAgICBpZiAoaXNUaHJvdyhvcGNvZGVJRCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYnl0
ZWNvZGVPZmZzZXQgKyBvcGNvZGVMZW5ndGggPT0gYmxvY2stPmxlYWRlckJ5dGVjb2RlT2Zmc2V0
KCkgKyBibG9jay0+dG90YWxCeXRlY29kZUxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBIYW5k
bGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBmYWxsc1Rocm91Z2ggPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlua0Js
b2NrcyhibG9jaywgZXhpdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNC
bG9ja3Muc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Js
b2NrKiBvdGhlckJsb2NrID0gYmFzaWNCbG9ja3NbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChoYW5kbGVyLT50YXJnZXQgPT0gb3RoZXJCbG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZz
ZXQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0Jsb2NrcyhibG9jaywgb3RoZXJC
bG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQgYSBicmFuY2gsIGxpbmsgdG8gdGhl
IGJsb2NrKHMpIHRoYXQgd2UganVtcCB0by4KKyAgICAgICAgICAgIGlmIChpc0JyYW5jaChvcGNv
ZGVJRCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgKyBvcGNvZGVM
ZW5ndGggPT0gYmxvY2stPmxlYWRlckJ5dGVjb2RlT2Zmc2V0KCkgKyBibG9jay0+dG90YWxCeXRl
Y29kZUxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQsIDE+IGJ5dGVj
b2RlT2Zmc2V0c0p1bXBlZFRvOworICAgICAgICAgICAgICAgIGZpbmRKdW1wVGFyZ2V0c0ZvckJ5
dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQsIGJ5dGVjb2RlT2Zmc2V0c0p1
bXBlZFRvKTsKKworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNp
Y0Jsb2Nrcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBCeXRlY29kZUJhc2lj
QmxvY2sqIG90aGVyQmxvY2sgPSBiYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGJ5dGVjb2RlT2Zmc2V0c0p1bXBlZFRvLmNvbnRhaW5zKG90aGVyQmxvY2stPmxl
YWRlckJ5dGVjb2RlT2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbGlua0Jsb2Nr
cyhibG9jaywgb3RoZXJCbG9jayk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgaWYgKGlzVW5jb25kaXRpb25hbEJyYW5jaChvcGNvZGVJRCkpCisgICAgICAgICAgICAgICAg
ICAgIGZhbGxzVGhyb3VnaCA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBieXRlY29kZU9mZnNldCArPSBvcGNvZGVMZW5ndGg7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBJZiB3ZSBmYWxsIHRocm91Z2ggdGhlbiBsaW5rIHRvIHRo
ZSBuZXh0IGJsb2NrIGluIHByb2dyYW0gb3JkZXIuCisgICAgICAgIGlmIChmYWxsc1Rocm91Z2gp
IHsKKyAgICAgICAgICAgIEFTU0VSVChpICsgMSA8IGJhc2ljQmxvY2tzLnNpemUoKSk7CisgICAg
ICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG5leHRCbG9jayA9IGJhc2ljQmxvY2tzW2kgKyAx
XS5nZXQoKTsKKyAgICAgICAgICAgIGxpbmtCbG9ja3MoYmxvY2ssIG5leHRCbG9jayk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBiYXNpY0Jsb2Nrcy5hcHBlbmQoYWRvcHRSZWYoZXhpdCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJ5dGVjb2RlQmFz
aWNCbG9ja19oCisjZGVmaW5lIEJ5dGVjb2RlQmFzaWNCbG9ja19oCisKKyNpbmNsdWRlIDx3dGYv
RmFzdEJpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBDb2RlQmxvY2s7CisKK3R5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgRmFzdEJp
dFZlY3RvciwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czx1bnNpZ25lZD4gPiBCeXRlY29kZVRvQml0bWFwTWFwOworCitjbGFzcyBCeXRl
Y29kZUJhc2ljQmxvY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxCeXRlY29kZUJhc2ljQmxvY2s+IHsK
K3B1YmxpYzoKKyAgICBlbnVtIFNwZWNpYWxCbG9ja1R5cGUgeyBFbnRyeUJsb2NrLCBFeGl0Qmxv
Y2sgfTsKKyAgICBCeXRlY29kZUJhc2ljQmxvY2sodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKFNwZWNpYWxCbG9ja1R5cGUpOworCisgICAg
Ym9vbCBpc0VudHJ5QmxvY2soKSB7IHJldHVybiAhbV9sZWFkZXJCeXRlY29kZU9mZnNldCAmJiAh
bV90b3RhbEJ5dGVjb2RlTGVuZ3RoOyB9CisgICAgYm9vbCBpc0V4aXRCbG9jaygpIHsgcmV0dXJu
IG1fbGVhZGVyQnl0ZWNvZGVPZmZzZXQgPT0gVUlOVF9NQVggJiYgbV90b3RhbEJ5dGVjb2RlTGVu
Z3RoID09IFVJTlRfTUFYOyB9CisKKyAgICB1bnNpZ25lZCBsZWFkZXJCeXRlY29kZU9mZnNldCgp
IHsgcmV0dXJuIG1fbGVhZGVyQnl0ZWNvZGVPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCB0b3RhbEJ5
dGVjb2RlTGVuZ3RoKCkgeyByZXR1cm4gbV90b3RhbEJ5dGVjb2RlTGVuZ3RoOyB9CisKKyAgICBW
ZWN0b3I8dW5zaWduZWQ+JiBieXRlY29kZU9mZnNldHMoKSB7IHJldHVybiBtX2J5dGVjb2RlT2Zm
c2V0czsgfQorICAgIHZvaWQgYWRkQnl0ZWNvZGVMZW5ndGgodW5zaWduZWQpOworCisgICAgdm9p
ZCBhZGRQcmVkZWNlc3NvcihCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrKSB7IG1fcHJlZGVjZXNz
b3JzLmFwcGVuZChibG9jayk7IH0KKyAgICB2b2lkIGFkZFN1Y2Nlc3NvcihCeXRlY29kZUJhc2lj
QmxvY2sqIGJsb2NrKSB7IG1fc3VjY2Vzc29ycy5hcHBlbmQoYmxvY2spOyB9CisKKyAgICBWZWN0
b3I8Qnl0ZWNvZGVCYXNpY0Jsb2NrKj4mIHByZWRlY2Vzc29ycygpIHsgcmV0dXJuIG1fcHJlZGVj
ZXNzb3JzOyB9CisgICAgVmVjdG9yPEJ5dGVjb2RlQmFzaWNCbG9jayo+JiBzdWNjZXNzb3JzKCkg
eyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisKKyAgICBGYXN0Qml0VmVjdG9yJiBpbigpIHsgcmV0
dXJuIG1faW47IH0KKyAgICBGYXN0Qml0VmVjdG9yJiBvdXQoKSB7IHJldHVybiBtX291dDsgfQor
Citwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fbGVhZGVyQnl0ZWNvZGVPZmZzZXQ7CisgICAgdW5z
aWduZWQgbV90b3RhbEJ5dGVjb2RlTGVuZ3RoOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2J5
dGVjb2RlT2Zmc2V0czsKKworICAgIFZlY3RvcjxCeXRlY29kZUJhc2ljQmxvY2sqPiBtX3ByZWRl
Y2Vzc29yczsKKyAgICBWZWN0b3I8Qnl0ZWNvZGVCYXNpY0Jsb2NrKj4gbV9zdWNjZXNzb3JzOwor
CisgICAgRmFzdEJpdFZlY3RvciBtX2luOworICAgIEZhc3RCaXRWZWN0b3IgbV9vdXQ7Cit9Owor
Cit2b2lkIGNvbXB1dGVCeXRlY29kZUJhc2ljQmxvY2tzKENvZGVCbG9jayosIFZlY3RvcjxSZWZQ
dHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiA+Jik7CisKK2lubGluZSBCeXRlY29kZUJhc2ljQmxvY2s6
OkJ5dGVjb2RlQmFzaWNCbG9jayh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKQorICAg
IDogbV9sZWFkZXJCeXRlY29kZU9mZnNldChzdGFydCkKKyAgICAsIG1fdG90YWxCeXRlY29kZUxl
bmd0aChsZW5ndGgpCit7CisgICAgbV9ieXRlY29kZU9mZnNldHMuYXBwZW5kKG1fbGVhZGVyQnl0
ZWNvZGVPZmZzZXQpOworfQorCitpbmxpbmUgQnl0ZWNvZGVCYXNpY0Jsb2NrOjpCeXRlY29kZUJh
c2ljQmxvY2soQnl0ZWNvZGVCYXNpY0Jsb2NrOjpTcGVjaWFsQmxvY2tUeXBlIGJsb2NrVHlwZSkK
KyAgICA6IG1fbGVhZGVyQnl0ZWNvZGVPZmZzZXQoYmxvY2tUeXBlID09IEJ5dGVjb2RlQmFzaWNC
bG9jazo6RW50cnlCbG9jayA/IDAgOiBVSU5UX01BWCkKKyAgICAsIG1fdG90YWxCeXRlY29kZUxl
bmd0aChibG9ja1R5cGUgPT0gQnl0ZWNvZGVCYXNpY0Jsb2NrOjpFbnRyeUJsb2NrID8gMCA6IFVJ
TlRfTUFYKQoreworfQorCitpbmxpbmUgdm9pZCBCeXRlY29kZUJhc2ljQmxvY2s6OmFkZEJ5dGVj
b2RlTGVuZ3RoKHVuc2lnbmVkIGJ5dGVjb2RlTGVuZ3RoKQoreworICAgIG1fYnl0ZWNvZGVPZmZz
ZXRzLmFwcGVuZChtX2xlYWRlckJ5dGVjb2RlT2Zmc2V0ICsgbV90b3RhbEJ5dGVjb2RlTGVuZ3Ro
KTsKKyAgICBtX3RvdGFsQnl0ZWNvZGVMZW5ndGggKz0gYnl0ZWNvZGVMZW5ndGg7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnl0ZWNvZGVCYXNpY0Jsb2NrX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3MzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzKENvZGVC
bG9jayogY29kZUJsb2NrKQorICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICwgbV9j
b21wdXRlZChmYWxzZSkKK3sKKyAgICBBU1NFUlQobV9jb2RlQmxvY2spOworfQorCitCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhjb25zdCBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMmIG90aGVyKQorICAgIDogbV9jb2RlQmxvY2sob3RoZXIubV9jb2Rl
QmxvY2spCisgICAgLCBtX2Jhc2ljQmxvY2tzKG90aGVyLm1fYmFzaWNCbG9ja3MpCisgICAgLCBt
X2NvbXB1dGVkKG90aGVyLm1fY29tcHV0ZWQpCit7Cit9CisKK3N0YXRpYyBpbnQgbnVtYmVyT2ZD
YXB0dXJlZFZhcmlhYmxlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBpZiAoIWNvZGVC
bG9jay0+c3ltYm9sVGFibGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvZGVC
bG9jay0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50KCk7Cit9CisKK3N0YXRpYyBpbnQgY2Fw
dHVyZVN0YXJ0KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmICghY29kZUJsb2NrLT5z
eW1ib2xUYWJsZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY29kZUJsb2NrLT5z
eW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKTsKK30KKworc3RhdGljIGludCBjYXB0dXJlRW5k
KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJs
ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJs
ZSgpLT5jYXB0dXJlRW5kKCk7Cit9CisKK3N0YXRpYyBib29sIGlzVmFsaWRSZWdpc3RlckZvckxp
dmVuZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBpbnQgb3BlcmFuZCkKK3sKKyAgICByZXR1cm4g
IWNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgob3BlcmFuZCkgLy8gRG9uJ3QgY2Fy
ZSBhYm91dCBjb25zdGFudHMuCisgICAgICAgICYmIG9wZXJhbmQgPj0gMCAvLyBEb24ndCBjYXJl
IGFib3V0IGFyZ3VtZW50cy4KKyAgICAgICAgJiYgKCFudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVz
KGNvZGVCbG9jaykgLy8gSWYgd2UgaGF2ZSBubyBjYXB0dXJlZCB2YXJpYWJsZXMsIHdlJ3JlIGdv
b2QgdG8gZ28uCisgICAgICAgICAgICB8fCAob3BlcmFuZCA8IGNhcHR1cmVTdGFydChjb2RlQmxv
Y2spIHx8IChvcGVyYW5kID49IGNhcHR1cmVFbmQoY29kZUJsb2NrKSkpKTsKK30KKworc3RhdGlj
IHZvaWQgc2V0Rm9yT3BlcmFuZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgRmFzdEJpdFZlY3RvciYg
Yml0cywgaW50IG9wZXJhbmQpCit7CisgICAgQVNTRVJUKGlzVmFsaWRSZWdpc3RlckZvckxpdmVu
ZXNzKGNvZGVCbG9jaywgb3BlcmFuZCkpOworICAgIGlmIChvcGVyYW5kIDwgY2FwdHVyZVN0YXJ0
KGNvZGVCbG9jaykpCisgICAgICAgIGJpdHMuc2V0KG9wZXJhbmQpOworICAgIGVsc2UKKyAgICAg
ICAgYml0cy5zZXQob3BlcmFuZCAtIG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMoY29kZUJsb2Nr
KSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiB1
c2VzKQoreworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+dm0oKS0+
aW50ZXJwcmV0ZXI7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CisgICAgT3Bjb2RlSUQgb3Bj
b2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsK
KyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgLy8gTm8gdXNlcy4KKyAgICBjYXNlIG9wX25l
d19yZWdleHA6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgIGNhc2Ugb3BfdGhy
b3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9yZXNvbHZl
X3Njb3BlOgorICAgIGNhc2Ugb3BfcG9wX3Njb3BlOgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6Cisg
ICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2Fz
ZSBvcF9qbXA6CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgorICAgIGNhc2Ugb3BfaW5pdF9sYXp5
X3JlZzoKKyAgICBjYXNlIG9wX2dldF9jYWxsZWU6CisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICBj
YXNlIG9wX2NhdGNoOgorICAgICAgICByZXR1cm47CisgICAgLy8gRmlyc3QgYXJndW1lbnQuCisg
ICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNlIG9wX2NyZWF0ZV9hY3RpdmF0aW9uOiAKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90b190aGlzOgorICAgIGNh
c2Ugb3BfdGVhcl9vZmZfYWN0aXZhdGlvbjoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfd2lsbF9jYWxs
OgorICAgIGNhc2Ugb3BfcHJvZmlsZV9kaWRfY2FsbDoKKyAgICBjYXNlIG9wX3Rocm93OgorICAg
IGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3Bf
cmV0OgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBv
cF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2RlYzoKKyAg
ICBjYXNlIG9wX2luYzogeworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mo
Y29kZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9y
T3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhcmd1bWVudHMuCisg
ICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgY2FzZSBvcF9yZXRfb2JqZWN0X29yX3RoaXM6Cisg
ICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9q
Z3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6Cisg
ICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNl
IG9wX2psZXNzOiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2Rl
QmxvY2ssIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVy
YW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAg
aWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBp
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8v
IEZpcnN0LCBzZWNvbmQsIGFuZCB0aGlyZCBhcmd1bWVudHMuCisgICAgY2FzZSBvcF9kZWxfYnlf
dmFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogeworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lz
dGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQorICAg
ICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCk7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxv
Y2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5k
KGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgaWYg
KGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEZp
cnN0IGFuZCB0aGlyZCBhcmd1bWVudHMuCisgICAgY2FzZSBvcF9wdXRfYnlfaW5kZXg6CisgICAg
Y2FzZSBvcF9wdXRfYnlfaWRfcmVwbGFjZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0
aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgorICAgIGNhc2Ug
b3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9saW5lOgorICAgIGNhc2Ugb3Bf
cHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5z
aXRpb25fbm9ybWFsX291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX2dlbmVyaWM6
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlf
aWQ6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdp
c3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkKKyAg
ICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJs
b2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFu
ZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgLy8gRmlyc3QsIHRoaXJkLCBhbmQgZm91cnRoIGFyZ3VtZW50cy4K
KyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyOiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVn
aXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpCisg
ICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJh
bmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICBp
ZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls0XS51
Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGlu
c3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8g
U2Vjb25kIGFyZ3VtZW50LgorICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wOgorICAg
IGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6CisgICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6
CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZToK
KyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9vdXRfb2ZfbGlu
ZToKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3By
b3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWluOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X2dldHRlcl9zZWxmOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9wcm90bzoKKyAgICBj
YXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hhaW46CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3Vz
dG9tX3NlbGY6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3Byb3RvOgorICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkX2N1c3RvbV9jaGFpbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9nZW5lcmlj
OgorICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKKyAgICBjYXNlIG9wX2dldF9zdHJpbmdf
bGVuZ3RoOgorICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19sZW5ndGg6CisgICAgY2FzZSBvcF90
eXBlb2Y6CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgY2FzZSBvcF9pc19ib29sZWFu
OgorICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgIGNhc2Ugb3BfaXNfc3RyaW5nOgorICAgIGNh
c2Ugb3BfaXNfb2JqZWN0OgorICAgIGNhc2Ugb3BfaXNfZnVuY3Rpb246CisgICAgY2FzZSBvcF90
b19udW1iZXI6CisgICAgY2FzZSBvcF9uZWdhdGU6CisgICAgY2FzZSBvcF9uZXFfbnVsbDoKKyAg
ICBjYXNlIG9wX2VxX251bGw6CisgICAgY2FzZSBvcF9ub3Q6CisgICAgY2FzZSBvcF9tb3Y6Cisg
ICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6
IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIC8vIFNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnRzLgorICAgIGNhc2Ugb3BfZ2V0
X2J5X3ZhbDoKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92YWw6CisgICAgY2FzZSBvcF9p
bjoKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFu
Y2U6CisgICAgY2FzZSBvcF9hZGQ6CisgICAgY2FzZSBvcF9tdWw6CisgICAgY2FzZSBvcF9kaXY6
CisgICAgY2FzZSBvcF9tb2Q6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9sc2hpZnQ6
CisgICAgY2FzZSBvcF9yc2hpZnQ6CisgICAgY2FzZSBvcF91cnNoaWZ0OgorICAgIGNhc2Ugb3Bf
Yml0YW5kOgorICAgIGNhc2Ugb3BfYml0eG9yOgorICAgIGNhc2Ugb3BfYml0b3I6CisgICAgY2Fz
ZSBvcF9sZXNzOgorICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAg
ICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICBjYXNlIG9w
X3N0cmljdGVxOgorICAgIGNhc2Ugb3BfbmVxOgorICAgIGNhc2Ugb3BfZXE6IHsKKyAgICAgICAg
aWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBp
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9y
TGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQorICAgICAgICAg
ICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gU2Vjb25kLCB0aGlyZCwgYW5kIGZv
dXJ0aCBhcmd1bWVudHMuCisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF9n
ZXRfcG5hbWVzOiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2Rl
QmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVy
YW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAg
aWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBp
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9y
TGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKQorICAgICAgICAg
ICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzRdLnUub3BlcmFu
ZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gU2Vjb25kLCB0aGlyZCwgZm91cnRo
LCBhbmQgZmlmdGggYXJndW1lbnRzLgorICAgIGNhc2Ugb3BfbmV4dF9wbmFtZTogeworICAgICAg
ICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMs
IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJG
b3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpCisgICAgICAg
ICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29k
ZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNW
YWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls1XS51Lm9wZXJh
bmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0
aW9uWzVdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gU2Vjb25k
LCB0aGlyZCwgZm91cnRoLCBmaWZ0aCwgYW5kIHNpeHRoIGFyZ3VtZW50cy4gCisgICAgY2FzZSBv
cF9nZXRfYnlfcG5hbWU6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNz
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZv
ck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAg
ICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVz
ZXMsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0
ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkpCisgICAg
ICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQo
Y29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpOworICAgICAgICBpZiAo
aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls2XS51Lm9w
ZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3Ry
dWN0aW9uWzZdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gVGhp
cmQgYXJndW1lbnQuCisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3Bfc3dp
dGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7CisgICAgICAgIGlmIChpc1ZhbGlk
UmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkp
CisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBWYXJpYWJsZSBu
dW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGNhc2Ugb3BfbmV3X2FycmF5OgorICAgIGNhc2Ugb3Bf
c3RyY2F0OiB7CisgICAgICAgIGludCBiYXNlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwor
ICAgICAgICBpbnQgY291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgYmFzZSArIGkpKQorICAgICAgICAgICAgICAg
IHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBiYXNlICsgaSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBDcmF6eSBzdHVmZiBmb3IgY2FsbHMuCisgICAg
Y2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgY2FzZSBvcF9j
YWxsOiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ss
IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNv
ZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgaW50IGFy
Z0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICBpbnQgcmVnaXN0ZXJP
ZmZzZXQgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBsYXN0QXJnID0g
cmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChp
c1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGxhc3RBcmcgLSBpKSkKKyAgICAg
ICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgbGFzdEFyZyAtIGkpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gU3BlY2lhbCBzdHVmZiBm
b3IgdGVhciBvZmYgYXJndW1lbnRzLgorICAgIGNhc2Ugb3BfdGVhcl9vZmZfYXJndW1lbnRzOiB7
CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9j
aywgdXNlcywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVy
KGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChj
b2RlQmxvY2ssIHVzZXMsIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihpbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9w
ZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgY29tcHV0ZURlZnNGb3JC
eXRlY29kZU9mZnNldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQsIEZhc3RCaXRWZWN0b3ImIGRlZnMpCit7CisgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVy
ID0gY29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRlcjsKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJmluc3RydWN0aW9uc0JlZ2luW2J5dGVjb2RlT2Zmc2V0
XTsKKyAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0
cnVjdGlvbi0+dS5vcGNvZGUpOworICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAvLyBUaGVz
ZSBkb24ndCBkZWZpbmUgYW55dGhpbmcuCisgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoK
KyAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0X25vcDoKKyAgICBjYXNlIG9wX3B1c2hfbmFt
ZV9zY29wZToKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKKyAgICBjYXNlIG9wX3B1dF90
b19zY29wZToKKyAgICBjYXNlIG9wX3BvcF9zY29wZToKKyAgICBjYXNlIG9wX2VuZDoKKyAgICBj
YXNlIG9wX3Byb2ZpbGVfd2lsbF9jYWxsOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9kaWRfY2FsbDoK
KyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAg
IGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9yZXRfb2JqZWN0
X29yX3RoaXM6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNl
IG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxs
OgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9w
X2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6
CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9w
X2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfbG9vcF9o
aW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgor
ICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXBs
YWNlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb246CisgICAgY2FzZSBvcF9wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlv
bl9kaXJlY3Rfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9u
b3JtYWw6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xp
bmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfZ2VuZXJpYzoKKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfc2V0dGVyOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX3B1dF9ieV9p
bmRleDoKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6Cisg
ICAgICAgIHJldHVybjsKKyAgICAvLyBUaGVzZSBhbGwgaGF2ZSBhIHNpbmdsZSBkZXN0aW5hdGlv
biBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LgorICAgIGNhc2Ugb3BfbmV4dF9wbmFtZToKKyAgICBj
YXNlIG9wX2dldF9wbmFtZXM6CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0aXZhdGlvbjoKKyAgICBjYXNlIG9w
X3RvX3ByaW1pdGl2ZToKKyAgICBjYXNlIG9wX2NhdGNoOgorICAgIGNhc2Ugb3BfY3JlYXRlX3Ro
aXM6CisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICBjYXNlIG9wX25ld19yZWdl
eHA6CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNlIG9wX25ld19mdW5jX2V4cDoKKyAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAg
IGNhc2Ugb3BfY2FsbDoKKyAgICBjYXNlIG9wX2NhbGxfZXZhbDoKKyAgICBjYXNlIG9wX2NvbnN0
cnVjdDoKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9vdXRf
b2ZfbGluZToKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgorICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkX3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWluOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX2dldHRlcl9zZWxmOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9wcm90bzoK
KyAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hhaW46CisgICAgY2FzZSBvcF9nZXRfYnlf
aWRfY3VzdG9tX3NlbGY6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3Byb3RvOgorICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9jaGFpbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9n
ZW5lcmljOgorICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKKyAgICBjYXNlIG9wX2dldF9z
dHJpbmdfbGVuZ3RoOgorICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNlOgorICAgIGNhc2Ug
b3BfaW5zdGFuY2VvZjoKKyAgICBjYXNlIG9wX2dldF9ieV92YWw6CisgICAgY2FzZSBvcF9nZXRf
YXJndW1lbnRfYnlfdmFsOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3BuYW1lOgorICAgIGNhc2Ugb3Bf
Z2V0X2FyZ3VtZW50c19sZW5ndGg6CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgY2FzZSBvcF9p
c191bmRlZmluZWQ6CisgICAgY2FzZSBvcF9pc19ib29sZWFuOgorICAgIGNhc2Ugb3BfaXNfbnVt
YmVyOgorICAgIGNhc2Ugb3BfaXNfc3RyaW5nOgorICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAg
IGNhc2Ugb3BfaXNfZnVuY3Rpb246CisgICAgY2FzZSBvcF9pbjoKKyAgICBjYXNlIG9wX3RvX251
bWJlcjoKKyAgICBjYXNlIG9wX25lZ2F0ZToKKyAgICBjYXNlIG9wX2FkZDoKKyAgICBjYXNlIG9w
X211bDoKKyAgICBjYXNlIG9wX2RpdjoKKyAgICBjYXNlIG9wX21vZDoKKyAgICBjYXNlIG9wX3N1
YjoKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBjYXNlIG9wX3JzaGlmdDoKKyAgICBjYXNlIG9w
X3Vyc2hpZnQ6CisgICAgY2FzZSBvcF9iaXRhbmQ6CisgICAgY2FzZSBvcF9iaXR4b3I6CisgICAg
Y2FzZSBvcF9iaXRvcjoKKyAgICBjYXNlIG9wX2luYzoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBj
YXNlIG9wX2VxOgorICAgIGNhc2Ugb3BfbmVxOgorICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAg
Y2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9sZXNzOgorICAgIGNhc2Ugb3BfbGVzc2Vx
OgorICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICBjYXNl
IG9wX25lcV9udWxsOgorICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICBjYXNlIG9wX25vdDoKKyAg
ICBjYXNlIG9wX21vdjoKKyAgICBjYXNlIG9wX25ld19vYmplY3Q6CisgICAgY2FzZSBvcF90b190
aGlzOgorICAgIGNhc2Ugb3BfZ2V0X2NhbGxlZToKKyAgICBjYXNlIG9wX2luaXRfbGF6eV9yZWc6
CisgICAgY2FzZSBvcF9jcmVhdGVfYWN0aXZhdGlvbjoKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1
bWVudHM6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQo
Y29kZUJsb2NrLCBkZWZzLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2Ugb3BfdGVhcl9vZmZfYXJndW1lbnRzOiB7CisgICAgICAgIGlm
IChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCAtIDEpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIGRlZnMs
IGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCAtIDEpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2Ugb3BfZW50ZXI6IHsKKyAgICAgICAgZGVmcy5zZXRBbGwoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBnZXRMZWFkZXJPZmZzZXRG
b3JCYXNpY0Jsb2NrKFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+KiBiYXNpY0Jsb2NrKQorewor
ICAgIHJldHVybiAoKmJhc2ljQmxvY2spLT5sZWFkZXJCeXRlY29kZU9mZnNldCgpOworfQorCitz
dGF0aWMgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBmaW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQo
VmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+ID4mIGJhc2ljQmxvY2tzLCB1bnNpZ25l
ZCBsZWFkZXJPZmZzZXQpCit7CisgICAgcmV0dXJuICgqdHJ5QmluYXJ5U2VhcmNoPFJlZlB0cjxC
eXRlY29kZUJhc2ljQmxvY2s+LCB1bnNpZ25lZD4oYmFzaWNCbG9ja3MsIGJhc2ljQmxvY2tzLnNp
emUoKSwgbGVhZGVyT2Zmc2V0LCBnZXRMZWFkZXJPZmZzZXRGb3JCYXNpY0Jsb2NrKSkuZ2V0KCk7
Cit9CisKK3N0YXRpYyBib29sIGJsb2NrQ29udGFpbnNCeXRlY29kZU9mZnNldChCeXRlY29kZUJh
c2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICB1bnNpZ25l
ZCBsZWFkZXJPZmZzZXQgPSBibG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZzZXQoKTsKKyAgICByZXR1
cm4gYnl0ZWNvZGVPZmZzZXQgPj0gbGVhZGVyT2Zmc2V0ICYmIGJ5dGVjb2RlT2Zmc2V0IDwgbGVh
ZGVyT2Zmc2V0ICsgYmxvY2stPnRvdGFsQnl0ZWNvZGVMZW5ndGgoKTsKK30KKworc3RhdGljIEJ5
dGVjb2RlQmFzaWNCbG9jayogZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8
UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiYgYmFzaWNCbG9ja3MsIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0KQoreworLyoKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9j
a3Muc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGJsb2NrQ29udGFpbnNCeXRlY29kZU9mZnNl
dChiYXNpY0Jsb2Nrc1tpXS5nZXQoKSwgYnl0ZWNvZGVPZmZzZXQpKQorICAgICAgICAgICAgcmV0
dXJuIGJhc2ljQmxvY2tzW2ldLmdldCgpOworICAgIH0KKyAgICByZXR1cm4gMDsKKyovCisgICAg
UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4qIGJhc2ljQmxvY2sgPSBhcHByb3hpbWF0ZUJpbmFy
eVNlYXJjaDxSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiwgdW5zaWduZWQ+KAorICAgICAgICBi
YXNpY0Jsb2NrcywgYmFzaWNCbG9ja3Muc2l6ZSgpLCBieXRlY29kZU9mZnNldCwgZ2V0TGVhZGVy
T2Zmc2V0Rm9yQmFzaWNCbG9jayk7CisgICAgLy8gV2UgZm91bmQgdGhlIGJsb2NrIHdlIHdlcmUg
bG9va2luZyBmb3IuCisgICAgaWYgKGJsb2NrQ29udGFpbnNCeXRlY29kZU9mZnNldCgoKmJhc2lj
QmxvY2spLmdldCgpLCBieXRlY29kZU9mZnNldCkpCisgICAgICAgIHJldHVybiAoKmJhc2ljQmxv
Y2spLmdldCgpOworCisgICAgLy8gQmFzaWMgYmxvY2sgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIHJl
dHVybmVkIGJsb2NrLgorICAgIGlmIChieXRlY29kZU9mZnNldCA8ICgqYmFzaWNCbG9jayktPmxl
YWRlckJ5dGVjb2RlT2Zmc2V0KCkpIHsKKyAgICAgICAgQVNTRVJUKGJhc2ljQmxvY2sgLSAxID49
IGJhc2ljQmxvY2tzLmRhdGEoKSk7CisgICAgICAgIEFTU0VSVChibG9ja0NvbnRhaW5zQnl0ZWNv
ZGVPZmZzZXQoYmFzaWNCbG9ja1stMV0uZ2V0KCksIGJ5dGVjb2RlT2Zmc2V0KSk7CisgICAgICAg
IHJldHVybiBiYXNpY0Jsb2NrWy0xXS5nZXQoKTsKKyAgICB9CisKKyAgICAvLyBCYXNpYyBibG9j
ayBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIHJldHVybmVkIGJsb2NrLgorICAgIEFTU0VSVCgmYmFz
aWNCbG9ja1sxXSA8PSAmYmFzaWNCbG9ja3MubGFzdCgpKTsKKyAgICBBU1NFUlQoYmxvY2tDb250
YWluc0J5dGVjb2RlT2Zmc2V0KGJhc2ljQmxvY2tbMV0uZ2V0KCksIGJ5dGVjb2RlT2Zmc2V0KSk7
CisgICAgcmV0dXJuIGJhc2ljQmxvY2tbMV0uZ2V0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1
dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5
dGVjb2RlQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2Nr
PiA+JiBiYXNpY0Jsb2NrcywgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiBy
ZXN1bHQpCit7CisgICAgQVNTRVJUKCFibG9jay0+aXNFeGl0QmxvY2soKSk7CisgICAgQVNTRVJU
KCFibG9jay0+aXNFbnRyeUJsb2NrKCkpOworCisgICAgRmFzdEJpdFZlY3RvciBvdXQgPSBibG9j
ay0+b3V0KCk7CisgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSAwOworCisgICAgRmFzdEJpdFZl
Y3RvciB1c2VzOworICAgIEZhc3RCaXRWZWN0b3IgZGVmczsKKyAgICB1c2VzLnJlc2l6ZShvdXQu
bnVtQml0cygpKTsKKyAgICBkZWZzLnJlc2l6ZShvdXQubnVtQml0cygpKTsKKworICAgIGZvciAo
aW50IGkgPSBibG9jay0+Ynl0ZWNvZGVPZmZzZXRzKCkuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0p
IHsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+Ynl0ZWNvZGVPZmZz
ZXRzKClbaV07CisgICAgICAgIGlmICh0YXJnZXRPZmZzZXQgPiBieXRlY29kZU9mZnNldCkKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHVzZXMuY2xlYXJBbGwoKTsKKyAgICAgICAgZGVm
cy5jbGVhckFsbCgpOworCisgICAgICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoY29k
ZUJsb2NrLCBieXRlY29kZU9mZnNldCwgdXNlcyk7CisgICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0
ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgZGVmcyk7CisKKyAgICAgICAg
b3V0LmV4Y2x1ZGUoZGVmcyk7CisgICAgICAgIG91dC5tZXJnZSh1c2VzKTsKKworICAgICAgICAv
LyBJZiB3ZSBoYXZlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCB3ZSB3YW50IHRoZSBsaXZlLWluIHZh
cmlhYmxlcyBvZiB0aGUgCisgICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGVyIGJsb2NrIHRvIGJl
IGluY2x1ZGVkIGluIHRoZSBsaXZlLWluIG9mIHRoaXMgcGFydGljdWxhciBieXRlY29kZS4KKyAg
ICAgICAgaWYgKChoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQpKSkgeworICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBoYW5k
bGVyQmxvY2sgPSBmaW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoYmFzaWNCbG9ja3MsIGhh
bmRsZXItPnRhcmdldCk7CisgICAgICAgICAgICBBU1NFUlQoaGFuZGxlckJsb2NrKTsKKyAgICAg
ICAgICAgIG91dC5tZXJnZShoYW5kbGVyQmxvY2stPmluKCkpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmVzdWx0LnNldChvdXQpOworfQorCitzdGF0aWMgdm9pZCBjb21wdXRlTG9jYWxMaXZl
bmVzc0ZvckJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUJhc2ljQmxvY2sqIGJs
b2NrLCBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiYgYmFzaWNCbG9ja3MpCit7
CisgICAgaWYgKGJsb2NrLT5pc0V4aXRCbG9jaygpIHx8IGJsb2NrLT5pc0VudHJ5QmxvY2soKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZz
ZXQoY29kZUJsb2NrLCBibG9jaywgYmFzaWNCbG9ja3MsIGJsb2NrLT5sZWFkZXJCeXRlY29kZU9m
ZnNldCgpLCBibG9jay0+aW4oKSk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
OjpydW5MaXZlbmVzc0ZpeHBvaW50KCkKK3sKKyAgICBBU1NFUlQoIW1fY29tcHV0ZWQpOworICAg
IFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IG1fY29kZUJsb2NrLT51bmxp
bmtlZENvZGVCbG9jaygpOworICAgIHVuc2lnbmVkIG51bWJlck9mVmFyaWFibGVzID0gdW5saW5r
ZWRDb2RlQmxvY2stPm1fbnVtVmFycyArIAorICAgICAgICB1bmxpbmtlZENvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnMgLSBudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVzKG1fY29kZUJsb2Nr
KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Jhc2ljQmxvY2tzLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jhc2ljQmxvY2tz
W2ldLmdldCgpOworICAgICAgICBibG9jay0+aW4oKS5yZXNpemUobnVtYmVyT2ZWYXJpYWJsZXMp
OworICAgICAgICBibG9jay0+b3V0KCkucmVzaXplKG51bWJlck9mVmFyaWFibGVzKTsKKyAgICB9
CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgbV9iYXNpY0Jsb2Nrcy5sYXN0KCktPmluKCkuY2xl
YXJBbGwoKTsKKyAgICBtX2Jhc2ljQmxvY2tzLmxhc3QoKS0+b3V0KCkuY2xlYXJBbGwoKTsKKyAg
ICBGYXN0Qml0VmVjdG9yIG5ld091dDsKKyAgICBuZXdPdXQucmVzaXplKG1fYmFzaWNCbG9ja3Mu
bGFzdCgpLT5vdXQoKS5udW1CaXRzKCkpOworICAgIGRvIHsKKyAgICAgICAgY2hhbmdlZCA9IGZh
bHNlOworICAgICAgICBmb3IgKGludCBpID0gbV9iYXNpY0Jsb2Nrcy5zaXplKCkgLSAyOyBpID49
IDA7IGktLSkgeworICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmFz
aWNCbG9ja3NbaV0uZ2V0KCk7CisgICAgICAgICAgICBuZXdPdXQuY2xlYXJBbGwoKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBibG9jay0+c3VjY2Vzc29ycygpLnNpemUo
KTsgaisrKQorICAgICAgICAgICAgICAgIG5ld091dC5tZXJnZShibG9jay0+c3VjY2Vzc29ycygp
W2pdLT5pbigpKTsKKyAgICAgICAgICAgIGJvb2wgb3V0RGlkQ2hhbmdlID0gYmxvY2stPm91dCgp
LnNldEFuZENoZWNrKG5ld091dCk7CisgICAgICAgICAgICBjb21wdXRlTG9jYWxMaXZlbmVzc0Zv
ckJsb2NrKG1fY29kZUJsb2NrLCBibG9jaywgbV9iYXNpY0Jsb2Nrcyk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG91dERpZENoYW5nZTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQp
OworfQorCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvRm9y
Tm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwg
RmFzdEJpdFZlY3RvciYgcmVzdWx0KQoreworICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sg
PSBmaW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fYmFzaWNCbG9ja3MsIGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICBBU1NFUlQoYmxvY2spOworICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlC
bG9jaygpKTsKKyAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9jaygpKTsKKyAgICByZXN1bHQu
cmVzaXplKGJsb2NrLT5vdXQoKS5udW1CaXRzKCkpOworICAgIGNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9yQnl0ZWNvZGVPZmZzZXQobV9jb2RlQmxvY2ssIGJsb2NrLCBtX2Jhc2ljQmxvY2tzLCBieXRl
Y29kZU9mZnNldCwgcmVzdWx0KTsKK30KKworYm9vbCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6
Om9wZXJhbmRJc0xpdmVBdEJ5dGVjb2RlT2Zmc2V0KGludCBvcGVyYW5kLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCkKK3sKKyAgICBpbnQgbnVtQ2FwdHVyZWRWYXJzID0gbnVtYmVyT2ZDYXB0dXJl
ZFZhcmlhYmxlcyhtX2NvZGVCbG9jayk7CisgICAgQVNTRVJUKG1fY29tcHV0ZWQpOworICAgIGlm
IChvcGVyYW5kIC0gbnVtQ2FwdHVyZWRWYXJzIDwgMCkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgRmFzdEJpdFZlY3RvciByZXN1bHQ7CisgICAgZ2V0TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVy
ZWRWYXJzQXRCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgcmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0LmdldChvcGVyYW5kIC0gbnVtQ2FwdHVyZWRWYXJzKTsKK30KKworRmFzdEJpdFZl
Y3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVP
ZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgRmFzdEJpdFZlY3RvciB0ZW1w
OworICAgIEZhc3RCaXRWZWN0b3IgcmVzdWx0OworCisgICAgZ2V0TGl2ZW5lc3NJbmZvRm9yTm9u
Q2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgdGVtcCk7CisKKyAg
ICB1bnNpZ25lZCBudW1DYXB0dXJlZFZhcnMgPSBudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVzKG1f
Y29kZUJsb2NrKTsKKyAgICByZXN1bHQucmVzaXplKHRlbXAubnVtQml0cygpICsgbnVtQ2FwdHVy
ZWRWYXJzKTsKKyAgICBmb3IgKGludCBpID0gY2FwdHVyZVN0YXJ0KG1fY29kZUJsb2NrKTsgaSA8
IGNhcHR1cmVFbmQobV9jb2RlQmxvY2spOyBpKyspCisgICAgICAgIHJlc3VsdC5zZXQoaSk7CisK
KyAgICBpbnQgdGVtcExlbmd0aCA9IHRlbXAubnVtQml0cygpOworICAgIEFTU0VSVCh0ZW1wTGVu
Z3RoID49IDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVtcExlbmd0aDsgaSsrKSB7Cisg
ICAgICAgIGlmICghdGVtcC5nZXQoaSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBpZiAoIW51bUNhcHR1cmVkVmFycykgeworICAgICAgICAgICAgcmVzdWx0LnNldChpKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGkgPCBjYXB0dXJl
U3RhcnQobV9jb2RlQmxvY2spKQorICAgICAgICAgICAgcmVzdWx0LnNldChpKTsKKyAgICAgICAg
ZWxzZSAKKyAgICAgICAgICAgIHJlc3VsdC5zZXQobnVtQ2FwdHVyZWRWYXJzICsgaSk7CisgICAg
fQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
OjpkdW1wUmVzdWx0cygpCit7CisgICAgQVNTRVJUKG1fY29tcHV0ZWQpOworICAgIEludGVycHJl
dGVyKiBpbnRlcnByZXRlciA9IG1fY29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRlcjsKKyAgICBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYmVnaW4oKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9iYXNpY0Jsb2Nrcy5z
aXplKCk7IGkrKykgeworICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9iYXNp
Y0Jsb2Nrc1tpXS5nZXQoKTsKKyAgICAgICAgZGF0YUxvZ0YoIlxuQnl0ZWNvZGUgYmFzaWMgYmxv
Y2sgJXU6ICVwIChvZmZzZXQ6ICV1LCBsZW5ndGg6ICV1KVxuIiwgaSwgYmxvY2ssIGJsb2NrLT5s
ZWFkZXJCeXRlY29kZU9mZnNldCgpLCBibG9jay0+dG90YWxCeXRlY29kZUxlbmd0aCgpKTsKKyAg
ICAgICAgZGF0YUxvZ0YoIlByZWRlY2Vzc29yczogIik7CisgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDA7IGogPCBibG9jay0+cHJlZGVjZXNzb3JzKCkuc2l6ZSgpOyBqKyspIHsKKyAgICAgICAg
ICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3Jz
KClbal07CisgICAgICAgICAgICBkYXRhTG9nRigiJXAgIiwgcHJlZGVjZXNzb3IpOworICAgICAg
ICB9CisgICAgICAgIGRhdGFMb2dGKCJcbiIpOworICAgICAgICBkYXRhTG9nRigiU3VjY2Vzc29y
czogIik7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBibG9jay0+c3VjY2Vzc29y
cygpLnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIHN1Y2Nl
c3NvciA9IGJsb2NrLT5zdWNjZXNzb3JzKClbal07CisgICAgICAgICAgICBkYXRhTG9nRigiJXAg
Iiwgc3VjY2Vzc29yKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nRigiXG4iKTsKKyAgICAg
ICAgaWYgKGJsb2NrLT5pc0VudHJ5QmxvY2soKSkgeworICAgICAgICAgICAgZGF0YUxvZ0YoIkVu
dHJ5IGJsb2NrICVwXG4iLCBibG9jayk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoYmxvY2stPmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgIGRhdGFM
b2dGKCJFeGl0IGJsb2NrOiAlcFxuIiwgYmxvY2spOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5s
ZWFkZXJCeXRlY29kZU9mZnNldCgpOyBieXRlY29kZU9mZnNldCA8IGJsb2NrLT5sZWFkZXJCeXRl
Y29kZU9mZnNldCgpICsgYmxvY2stPnRvdGFsQnl0ZWNvZGVMZW5ndGgoKTspIHsKKyAgICAgICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25z
QmVnaW5bYnl0ZWNvZGVPZmZzZXRdOworCisgICAgICAgICAgICBkYXRhTG9nRigiTGl2ZSB2YXJp
YWJsZXM6ICIpOworICAgICAgICAgICAgRmFzdEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbGl2ZUJlZm9yZS5udW1CaXRzKCk7IGorKykgeworICAg
ICAgICAgICAgICAgIGlmIChsaXZlQmVmb3JlLmdldChqKSkKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIiV1ICIsIGopOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZ0Yo
IlxuIik7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZp
bGUoKSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIGluc3RydWN0
aW9uc0JlZ2luLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworCisgICAgICAgICAgICBPcGNvZGVJRCBv
cGNvZGVJRCA9IGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNCZWdpbltieXRl
Y29kZU9mZnNldF0udS5vcGNvZGUpOworICAgICAgICAgICAgdW5zaWduZWQgb3Bjb2RlTGVuZ3Ro
ID0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CisgICAgICAgICAgICBieXRlY29kZU9mZnNldCAr
PSBvcGNvZGVMZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICBkYXRhTG9nRigiTGl2ZSB2YXJp
YWJsZXM6ICIpOworICAgICAgICBGYXN0Qml0VmVjdG9yIGxpdmVBZnRlciA9IGJsb2NrLT5vdXQo
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGxpdmVBZnRlci5udW1CaXRzKCk7
IGorKykgeworICAgICAgICAgICAgaWYgKGxpdmVBZnRlci5nZXQoaikpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIiV1ICIsIGopOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dGKCJcbiIp
OworICAgIH0KK30KKwordm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGUoKQor
eworICAgIGlmIChtX2NvbXB1dGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBjb21wdXRlQnl0
ZWNvZGVCYXNpY0Jsb2NrcyhtX2NvZGVCbG9jaywgbV9iYXNpY0Jsb2Nrcyk7CisgICAgQVNTRVJU
KG1fYmFzaWNCbG9ja3Muc2l6ZSgpKTsKKyAgICBydW5MaXZlbmVzc0ZpeHBvaW50KCk7CisgICAg
bV9jb21wdXRlZCA9IHRydWU7CisKKyAgICBpZiAoT3B0aW9uczo6ZHVtcEJ5dGVjb2RlTGl2ZW5l
c3NSZXN1bHRzKCkpCisgICAgICAgIGR1bXBSZXN1bHRzKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXNfaAorI2RlZmluZSBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNfaAorCisjaW5j
bHVkZSAiQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKKworY2xhc3MgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzIHsKK3B1YmxpYzoKKyAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMoQ29k
ZUJsb2NrKik7CisgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzKGNvbnN0IEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcyYpOworCisgICAgYm9vbCBvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9mZnNl
dChpbnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEZhc3RCaXRWZWN0
b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCk7CisKKyAgICBib29sIGhhc0JlZW5Db21wdXRlZCgpIHsgcmV0dXJuIG1fY29tcHV0ZWQ7IH0K
KyAgICB2b2lkIGNvbXB1dGUoKTsKKyAgICB2b2lkIGNvbXB1dGVJZk5lY2Vzc2FyeSgpCisgICAg
eworICAgICAgICBpZiAobV9jb21wdXRlZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y29tcHV0ZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHJ1bkxpdmVuZXNzRml4cG9p
bnQoKTsKKyAgICB2b2lkIGR1bXBSZXN1bHRzKCk7CisKKyAgICB2b2lkIGdldExpdmVuZXNzSW5m
b0Zvck5vbkNhcHR1cmVkVmFyc0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQsIEZhc3RCaXRWZWN0b3ImKTsKKworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAg
VmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+ID4gbV9iYXNpY0Jsb2NrczsKKworICAg
IGJvb2wgbV9jb21wdXRlZDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTM3OTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5
OSw2ICsxNDk5LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAog
ICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKICAgICAsIG1fcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIoMCkKICAgICAsIG1faGFzaChvdGhlci5tX2hhc2gpCisgICAgLCBtX2xp
dmVuZXNzQW5hbHlzaXMob3RoZXIubV9saXZlbmVzc0FuYWx5c2lzKQogI2lmIEVOQUJMRShKSVQp
CiAgICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0
KQogI2VuZGlmCkBAIC0xNTM5LDYgKzE1NDAsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3Jp
cHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX29zckV4aXRDb3VudGVyKDApCiAgICAgLCBtX29wdGlt
aXphdGlvbkRlbGF5Q291bnRlcigwKQogICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRl
cigwKQorICAgICwgbV9saXZlbmVzc0FuYWx5c2lzKHRoaXMpCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCiAj
ZW5kaWYKQEAgLTE4NDEsNiArMTg0Myw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4
ZWN1dGFibGUqIG8KIAogICAgIGlmIChPcHRpb25zOjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkp
CiAgICAgICAgIGR1bXBCeXRlY29kZSgpOworCiAgICAgbV92bS0+ZmluaXNoZWRDb21waWxpbmco
dGhpcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDE1Mzc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgogI2luY2x1ZGUgIkJ5dGVj
b2RlQ29udmVudGlvbnMuaCIKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIK
ICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9C
eXRlY29kZU9mZnNldC5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKQEAgLTkyLDYgKzkz
LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdUaGlzT2JqZQogCiBjbGFzcyBD
b2RlQmxvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29kZUJsb2NrPiwgcHVibGlj
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIsIHB1YmxpYyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOwogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIHB1YmxpYzoKQEAgLTcwOCw2ICs3MTAsOCBAQCBwdWJs
aWM6CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0Rm9yKENvZGVPcmlnaW4pOwog
CisgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBsaXZlbmVzc0FuYWx5c2lzKCkgeyByZXR1
cm4gbV9saXZlbmVzc0FuYWx5c2lzOyB9CisKICAgICAvLyBKdW1wIFRhYmxlcwogCiAgICAgc2l6
ZV90IG51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEg
PyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQpAQCAtMTEwNiw2
ICsxMTEwLDggQEAgcHJpdmF0ZToKICAgICAKICAgICBtdXRhYmxlIENvZGVCbG9ja0hhc2ggbV9o
YXNoOwogCisgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIG1fbGl2ZW5lc3NBbmFseXNpczsK
KwogICAgIHN0cnVjdCBSYXJlRGF0YSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogICAgIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVj
aXNlSnVtcFRhcmdldHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwCShyZXZpc2lvbiAxNTM3OTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNjYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3RlbXBsYXRl
IDxzaXplX3QgdmVjdG9yU2l6ZT4KK3N0YXRpYyB2b2lkIGdldEp1bXBUYXJnZXRzRm9yQnl0ZWNv
ZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEludGVycHJldGVyKiBpbnRlcnByZXRlciwg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwg
VmVjdG9yPHVuc2lnbmVkLCB2ZWN0b3JTaXplPiYgb3V0KQoreworICAgIE9wY29kZUlEIG9wY29k
ZUlEID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uc0JlZ2luW2J5dGVjb2Rl
T2Zmc2V0XS51Lm9wY29kZSk7CisgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnQgPSBpbnN0cnVjdGlv
bnNCZWdpbiArIGJ5dGVjb2RlT2Zmc2V0OworICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICBj
YXNlIG9wX2ptcDoKKyAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRb
MV0udS5vcGVyYW5kKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBj
YXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9u
dWxsOgorICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFsyXS51Lm9w
ZXJhbmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgIGNhc2Ug
b3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6Cisg
ICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bf
am5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJl
cToKKyAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbM10udS5vcGVy
YW5kKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ug
b3Bfc3dpdGNoX2NoYXI6IHsKKyAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9IGNvZGVC
bG9jay0+c3dpdGNoSnVtcFRhYmxlKGN1cnJlbnRbMV0udS5vcGVyYW5kKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gdGFibGUuYnJhbmNoT2Zmc2V0cy5zaXplKCk7IGktLTspCisgICAgICAg
ICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgdGFibGUuYnJhbmNoT2Zmc2V0c1tpXSk7
CisgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzJdLnUub3BlcmFu
ZCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6IHsK
KyAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNo
SnVtcFRhYmxlKGN1cnJlbnRbMV0udS5vcGVyYW5kKTsKKyAgICAgICAgU3RyaW5nSnVtcFRhYmxl
OjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLm9mZnNldFRhYmxlLmJl
Z2luKCk7CisgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJh
dG9yIGVuZCA9IHRhYmxlLm9mZnNldFRhYmxlLmVuZCgpOworICAgICAgICBmb3IgKDsgaXRlciAh
PSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBp
dGVyLT52YWx1ZS5icmFuY2hPZmZzZXQpOworICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zm
c2V0ICsgY3VycmVudFsyXS51Lm9wZXJhbmQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBvcF9nZXRfcG5hbWVzOgorICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsg
Y3VycmVudFs1XS51Lm9wZXJhbmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX25leHRf
cG5hbWU6CisgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzZdLnUu
b3BlcmFuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNl
OgorICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFs0XS51Lm9wZXJh
bmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICAgICAgb3V0
LmFwcGVuZChieXRlY29kZU9mZnNldCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKwogdm9pZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRz
KENvZGVCbG9jayogY29kZUJsb2NrLCBWZWN0b3I8dW5zaWduZWQsIDMyPiYgb3V0KQogewogICAg
IEFTU0VSVChvdXQuaXNFbXB0eSgpKTsKQEAgLTQ1LDYwICsxMDUsNyBAQCB2b2lkIGNvbXB1dGVQ
cmVjaXNlSnVtcFRhcmdldHMoQ29kZUJsb2NrCiAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3Vu
dCA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9uQ291bnQ7KSB7
CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGlu
c3RydWN0aW9uc0JlZ2luW2J5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSk7Ci0gICAgICAgIEluc3Ry
dWN0aW9uKiBjdXJyZW50ID0gaW5zdHJ1Y3Rpb25zQmVnaW4gKyBieXRlY29kZU9mZnNldDsKLSAg
ICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBjYXNlIG9wX2ptcDoKLSAgICAgICAg
ICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qdHJ1ZToKLSAgICAgICAgY2FzZSBv
cF9qZmFsc2U6Ci0gICAgICAgIGNhc2Ugb3BfamVxX251bGw6Ci0gICAgICAgIGNhc2Ugb3Bfam5l
cV9udWxsOgotICAgICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRb
Ml0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIG9wX2puZXFf
cHRyOgotICAgICAgICBjYXNlIG9wX2psZXNzOgotICAgICAgICBjYXNlIG9wX2psZXNzZXE6Ci0g
ICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6Ci0gICAgICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKLSAg
ICAgICAgY2FzZSBvcF9qbmxlc3M6Ci0gICAgICAgIGNhc2Ugb3Bfam5sZXNzZXE6Ci0gICAgICAg
IGNhc2Ugb3Bfam5ncmVhdGVyOgotICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgotICAgICAg
ICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbM10udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIG9wX3N3aXRjaF9pbW06Ci0gICAgICAg
IGNhc2Ugb3Bfc3dpdGNoX2NoYXI6IHsKLSAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFi
bGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShjdXJyZW50WzFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0YWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKTsg
aS0tOykKLSAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgdGFibGUu
YnJhbmNoT2Zmc2V0c1tpXSk7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0
ICsgY3VycmVudFsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOiB7Ci0gICAgICAgICAgICBTdHJpbmdKdW1w
VGFibGUmIHRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoY3VycmVudFsx
XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRU
YWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLm9mZnNldFRhYmxlLmJlZ2luKCk7Ci0gICAgICAg
ICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBlbmQgPSB0
YWJsZS5vZmZzZXRUYWJsZS5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsg
KytpdGVyKQotICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBpdGVy
LT52YWx1ZS5icmFuY2hPZmZzZXQpOwotICAgICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9m
ZnNldCArIGN1cnJlbnRbMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X3BuYW1lczoKLSAgICAgICAgICAgIG91dC5hcHBlbmQo
Ynl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzVdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBvcF9uZXh0X3BuYW1lOgotICAgICAgICAgICAgb3V0LmFwcGVuZChi
eXRlY29kZU9mZnNldCArIGN1cnJlbnRbNl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIG9wX2NoZWNrX2hhc19pbnN0YW5jZToKLSAgICAgICAgICAgIG91dC5h
cHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzRdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9sb29wX2hpbnQ6Ci0gICAgICAgICAgICBvdXQuYXBw
ZW5kKGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZ2V0SnVtcFRhcmdldHNG
b3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGludGVycHJldGVyLCBpbnN0cnVjdGlvbnNCZWdp
biwgYnl0ZWNvZGVPZmZzZXQsIG91dCk7CiAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IG9wY29k
ZUxlbmd0aHNbb3Bjb2RlSURdOwogICAgIH0KICAgICAKQEAgLTExOCw1ICsxMjUsMTIgQEAgdm9p
ZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKENvZGVCbG9jawogICAgIG91dC5yZXNpemUodG9J
bmRleCk7CiB9CiAKK3ZvaWQgZmluZEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBWZWN0b3I8dW5zaWduZWQs
IDE+JiBvdXQpCit7CisgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gY29kZUJsb2NrLT52
bSgpLT5pbnRlcnByZXRlcjsKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgZ2V0SnVtcFRhcmdldHNGb3JC
eXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGludGVycHJldGVyLCBpbnN0cnVjdGlvbnNCZWdpbiwg
Ynl0ZWNvZGVPZmZzZXQsIG91dCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0
cy5oCShyZXZpc2lvbiAxNTM3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHJlY2lzZUp1bXBUYXJnZXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiB2b2lkIGNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMoQ29kZUJsb2Nr
KiwgVmVjdG9yPHVuc2lnbmVkLCAzMj4mIG91dCk7Cit2b2lkIGZpbmRKdW1wVGFyZ2V0c0ZvckJ5
dGVjb2RlT2Zmc2V0KENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBWZWN0b3I8
dW5zaWduZWQsIDE+JiBvdXQpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1Mzc5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw4IEBA
IG5hbWVzcGFjZSB7IAogc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZUhlYXBTaXplID0gMzIgKiBN
QjsgLy8gQWJvdXQgMS41WCB0aGUgYXZlcmFnZSB3ZWJwYWdlLgogc3RhdGljIGNvbnN0IHNpemVf
dCBzbWFsbEhlYXBTaXplID0gMSAqIE1COyAvLyBNYXRjaGVzIHRoZSBGYXN0TWFsbG9jIHBlci10
aHJlYWQgY2FjaGUuCiAKKyNkZWZpbmUgRU5BQkxFX0dDX0xPR0dJTkcgMQorCiAjaWYgRU5BQkxF
KEdDX0xPR0dJTkcpCiAjaWYgQ09NUElMRVIoQ0xBTkcpCiAjZGVmaW5lIERFRklORV9HQ19MT0dH
SU5HX0dMT0JBTCh0eXBlLCBuYW1lLCBhcmd1bWVudHMpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAJKHJldmlzaW9uIDE1Mzc5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsOCArMzAsMTAgQEAKICNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAi
SlNTdGFja0lubGluZXMuaCIKIAorI2luY2x1ZGUgIkNhbGxGcmFtZUlubGluZXMuaCIKICNpbmNs
dWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5j
bHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTk4LDcg
KzEwMCw2NCBAQCB2b2lkIEpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvCiAKIHZv
aWQgSlNTdGFjazo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNv
bnNlcnZhdGl2ZVJvb3RzLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBERkdD
b2RlQmxvY2tzJiBkZmdDb2RlQmxvY2tzKQogewotICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChi
ZWdpbigpLCBnZXRUb3BPZlN0YWNrKCksIGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7
CisgICAgaWYgKCFPcHRpb25zOjp1c2VCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNGb3JDb25zZXJ2
YXRpdmVTY2FuKCkpIHsKKyAgICAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGdl
dFRvcE9mU3RhY2soKSwgaml0U3R1YlJvdXRpbmVzLCBkZmdDb2RlQmxvY2tzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIENhbGxGcmFtZSogZnJhbWUgPSBtX3RvcENhbGxGcmFtZTsK
KyAgICBpZiAoZnJhbWUgPCBiZWdpbigpKQorICAgICAgICByZXR1cm47CisgICAgQ2FsbEZyYW1l
KiBsYXN0RnJhbWUgPSAwOworICAgIHZvaWQqIGJlZ2luID0gdGhpcy0+YmVnaW4oKTsKKyAgICBm
b3IgKENhbGxGcmFtZSogZnJhbWUgPSBtX3RvcENhbGxGcmFtZTsgZnJhbWUgPj0gYmVnaW47IGZy
YW1lID0gKENhbGxGcmFtZSopKChzaXplX3QpZnJhbWUtPmNhbGxlckZyYW1lKCkgJiAoc2l6ZV90
KX4weDEpKSB7CisgICAgICAgIC8vIFNjYW4gQ2FsbEZyYW1lIHNsb3RzLiBXZSBkb24ndCBuZWVk
IHRvIHNjYW4gdGhlIENhbGxlckZyYW1lIG9yIHRoZSBBcmd1bWVudENvdW50LCBzbyB3ZSBzdGFy
dCBmcm9tIHRoZSBDYWxsZWUuCisgICAgICAgIFJlZ2lzdGVyKiByZWdzID0gZnJhbWUtPnJlZ2lz
dGVycygpOworICAgICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoJnJlZ3NbSlNTdGFjazo6Q2Fs
bGVlXSwgcmVncywgaml0U3R1YlJvdXRpbmVzLCBkZmdDb2RlQmxvY2tzKTsKKworICAgICAgICAv
LyBTY2FuIGFyZ3VtZW50cy4KKyAgICAgICAgaWYgKGZyYW1lID4gYmVnaW4pIHsKKyAgICAgICAg
ICAgIGludCB0aGlzT2Zmc2V0ID0gLShKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgMSk7
CisgICAgICAgICAgICBpbnQgYXJnQ291bnQgPSBmcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKTsKKyAgICAgICAgICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZCgmcmVnc1t0aGlzT2Zm
c2V0IC0gKGFyZ0NvdW50IC0gMSldLCAmcmVnc1t0aGlzT2Zmc2V0ICsgMV0pOworICAgICAgICB9
CisKKyAgICAgICAgLy8gU2NhbiBsaXZlIHJlZ2lzdGVycy4KKyAgICAgICAgSlNDOjpDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICAgICAgaWYgKCFjb2RlQmxv
Y2sgfHwgY29kZUJsb2NrLT5qaXRUeXBlKCkgPiBKSVRDb2RlOjpCYXNlbGluZUpJVCkgeworICAg
ICAgICAgICAgaWYgKGxhc3RGcmFtZSkKKyAgICAgICAgICAgICAgICBjb25zZXJ2YXRpdmVSb290
cy5hZGQocmVncywgbGFzdEZyYW1lLT5yZWdpc3RlcnMoKSAtIENhbGxGcmFtZUhlYWRlclNpemUs
IGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKHJlZ3MsIGdldFRvcE9mU3RhY2soKSwg
aml0U3R1YlJvdXRpbmVzLCBkZmdDb2RlQmxvY2tzKTsKKyAgICAgICAgICAgIGxhc3RGcmFtZSA9
IGZyYW1lOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICB1bnNp
Z25lZCBieXRlY29kZU9mZnNldDsKKyAgICAgICAgaWYgKGZyYW1lLT5oYXNMb2NhdGlvbkFzQnl0
ZWNvZGVPZmZzZXQoKSkgeworICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBmcmFtZS0+bG9j
YXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7CisgICAgICAgICAgICAvLyBGSVhNRTogSW4gdGhlIExM
SW50IGFuZCBiYXNlbGluZSBKSVQsIGlmIHdlIHdlcmUgdGhlIGxhc3QgZnJhbWUgYmVmb3JlIHRo
ZSBHQyAKKyAgICAgICAgICAgIC8vIHdhcyB0cmlnZ2VyZWQgdGhlbiB3ZSBoYXZlIHRoaXMgZHVt
YiBvZmYtYnktb25lIGFkZGl0aW9uIHRvIHRoZSBQQy4KKyAgICAgICAgICAgIGlmICghbGFzdEZy
YW1lKQorICAgICAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0IC09IDE7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBmcmFtZS0+Ynl0ZWNvZGVPZmZzZXRGcm9t
Q29kZU9yaWdpbkluZGV4KCk7CisKKyAgICAgICAgY29kZUJsb2NrLT5saXZlbmVzc0FuYWx5c2lz
KCkuY29tcHV0ZUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZW5lc3NJ
bmZvID0gY29kZUJsb2NrLT5saXZlbmVzc0FuYWx5c2lzKCkuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsaXZlbmVzc0luZm8ubnVtQml0cygpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChsYXN0
RnJhbWUgJiYgJnJlZ3NbaV0gPj0gbGFzdEZyYW1lLT5yZWdpc3RlcnMoKSAtIChDYWxsRnJhbWVI
ZWFkZXJTaXplICsgbGFzdEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKCFsaXZlbmVzc0luZm8u
Z2V0KGkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxhc3RGcmFtZSAmJiByZWdzW2ldLmpzVmFs
dWUoKS5pc0NlbGwoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVnc1tpXSA9IGpzVW5kZWZpbmVk
KCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjb25zZXJ2YXRpdmVSb290cy5hZGQoJnJlZ3NbaV0sICZyZWdzW2kgKyAxXSk7CisgICAgICAg
IH0KKyAgICAgICAgbGFzdEZyYW1lID0gZnJhbWU7CisgICAgfQogfQogCiB2b2lkIEpTU3RhY2s6
OnJlbGVhc2VFeGNlc3NDYXBhY2l0eSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNTM3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDcgQEAgdHlwZWRl
ZiBPcHRpb25SYW5nZSBvcHRpb25SYW5nZTsKICAgICB2KGJvb2wsIGZvcmNlREZHQ29kZUJsb2Nr
TGl2ZW5lc3MsIGZhbHNlKSBcCiAgICAgXAogICAgIHYoYm9vbCwgZHVtcEdlbmVyYXRlZEJ5dGVj
b2RlcywgZmFsc2UpIFwKKyAgICB2KGJvb2wsIGR1bXBCeXRlY29kZUxpdmVuZXNzUmVzdWx0cywg
ZmFsc2UpIFwKICAgICBcCiAgICAgLyogc2hvd0Rpc2Fzc2VtYmx5IGltcGxpZXMgc2hvd0RGR0Rp
c2Fzc2VtYmx5LiAqLyBcCiAgICAgdihib29sLCBzaG93RGlzYXNzZW1ibHksIGZhbHNlKSBcCkBA
IC0xOTIsNiArMTkzLDcgQEAgdHlwZWRlZiBPcHRpb25SYW5nZSBvcHRpb25SYW5nZTsKICAgICB2
KGJvb2wsIGZvcmNlV2Vha1JhbmRvbVNlZWQsIGZhbHNlKSBcCiAgICAgdih1bnNpZ25lZCwgZm9y
Y2VkV2Vha1JhbmRvbVNlZWQsIDApIFwKICAgICBcCisgICAgdihib29sLCB1c2VCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXNGb3JDb25zZXJ2YXRpdmVTY2FuLCBmYWxzZSkgXAogICAgIHYoYm9vbCwg
dXNlWm9tYmllTW9kZSwgZmFsc2UpIFwKICAgICB2KGJvb2wsIG9iamVjdHNBcmVJbW1vcnRhbCwg
ZmFsc2UpIFwKICAgICB2KGJvb2wsIHNob3dPYmplY3RTdGF0aXN0aWNzLCBmYWxzZSkgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208296</attachid>
            <date>2013-08-07 13:41:20 -0700</date>
            <delta_ts>2013-11-12 12:01:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118546-20130807134121.patch</filename>
            <type>text/plain</type>
            <size>76220</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzNzk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBA
QAorMjAxMy0wOC0wMiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvZGVCbG9ja3Mgc2hvdWxkIGJlIGFibGUgdG8gZGV0ZXJtaW5lIGJ5dGVjb2Rl
IGxpdmVuZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTg1NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHdpbGwgc2ltcGxpZnkgc29tZSB0aGluZ3MgaW4gdGhlIERGRyByZWxhdGVkIHRvIE9T
UiBleGl0cyBhbmQgZGV0ZXJtaW5pbmcgCisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIHZhcmlhYmxl
cyBhcmUgbGl2ZSBhdCB3aGljaCBwb2ludHMgZHVyaW5nIGV4ZWN1dGlvbi4gSXQgd2lsbAorICAg
ICAgICBhbHNvIGJlIHVzZWZ1bCBmb3IgbWFraW5nIG91ciBjb25zZXJ2YXRpdmUgR0Mgc2NhbiBt
b3JlIHByZWNpc2UuIEN1cnJlbnRseSBpdCAKKyAgICAgICAgZG9lc24ndCBwcm9wZXJseSBhY2Nv
dW50IGZvciBsaXZlbmVzcyB3aGlsZSB0aGUgREZHIGlzIHJ1bm5pbmcsIHNvIGl0IHdpbGwgYmUg
CisgICAgICAgIG9mZiBieSBkZWZhdWx0IGJlaGluZyBhIHJ1bnRpbWUgT3B0aW9ucyBmbGFnLgor
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6aXNCcmFuY2gpOiBVc2VkIHRvIGRldGVybWluZSB0aGUgZW5kIG9mIGJhc2ljIGJsb2Nr
cy4KKyAgICAgICAgKEpTQzo6aXNVbmNvbmRpdGlvbmFsQnJhbmNoKTogVXNlZCB0byBkZXRlcm1p
bmUgd2hlbiBhIGJyYW5jaCBhdCB0aGUgZW5kIG9mIGEgCisgICAgICAgIGJhc2ljIGJsb2NrIGNh
bid0IHBvc3NpYmx5IGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBiYXNpYyBibG9jayBpbiBwcm9n
cmFtIG9yZGVyLgorICAgICAgICAoSlNDOjppc1Rlcm1pbmFsKTogQWxzbyB1c2VkIHRvIGRldGVj
dCB0aGUgZW5kIG9mIGEgYmxvY2suCisgICAgICAgIChKU0M6OmlzVGhyb3cpOgorICAgICAgICAo
SlNDOjppc0p1bXBUYXJnZXQpOiBVc2VkIHRvIGNvcnJlY3RseSBzZXBhcmF0ZSBiYXNpYyBibG9j
a3MuIEFueSBqdW1wIGRlc3RpbmF0aW9uIAorICAgICAgICBtdXN0IGJlIHRoZSBoZWFkIG9mIGl0
cyBvd24gYmFzaWMgYmxvY2suCisgICAgICAgIChKU0M6OmxpbmtCbG9ja3MpOiBMaW5rcyB0d28g
YmxvY2tzIHRvZ2V0aGVyIGluIGEgYmktZGlyZWNpdG9uYWwgZmFzaGlvbi4KKyAgICAgICAgKEpT
Qzo6Y29tcHV0ZUJ5dGVjb2RlQmFzaWNCbG9ja3MpOiBDcmVhdGVzIGEgc2V0IG9mIGJhc2ljIGJs
b2NrcyBnaXZlbiBhIHBhcnRpY3VsYXIgCisgICAgICAgIENvZGVCbG9jayBhbmQgbGlua3MgdGhl
bSB0b2dldGhlci4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlQmFzaWNCbG9jazo6aXNFbnRyeUJsb2NrKTogRW50
cnkgYmxvY2tzIGFyZSBhIHNwZWNpYWwgYmFzaWMgYmxvY2tzIAorICAgICAgICB0aGF0IGluZGlj
YXRlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUJhc2ljQmxvY2s6OmlzRXhpdEJsb2NrKTogRXhpdCBibG9ja3MgYXJlIGEgc3BlY2lhbCBiYXNp
YyBibG9jayB0aGF0IAorICAgICAgICBhbGwgYmxvY2tzIHRoYXQgZXhpdCB0aGUgZnVuY3Rpb24g
aGF2ZSBhcyBhIHN1Y2Nlc3Nvci4gRW50cnkgYW5kIGV4aXQgYmxvY2tzIGFsbG93cyAKKyAgICAg
ICAgdGhlIHZhcmlvdXMgY29kZSBwYXRocyB0byBiZSBtb3JlIHJlZ3VsYXIuCisgICAgICAgIChK
U0M6OkJ5dGVjb2RlQmFzaWNCbG9jazo6bGVhZGVyQnl0ZWNvZGVPZmZzZXQpOiBUaGUgbGVhZGVy
IGJ5dGVjb2RlIG9mZnNldCBpcyB0aGUgCisgICAgICAgIGJ5dGVjb2RlIG9mZnNldCBvZiB0aGUg
Zmlyc3QgaW5zdHJ1Y3Rpb24gaW4gdGhlIGJsb2NrLgorICAgICAgICAoSlNDOjpCeXRlY29kZUJh
c2ljQmxvY2s6OnRvdGFsQnl0ZWNvZGVMZW5ndGgpOiBUaGUgdG90YWwgbGVuZ3RoIG9mIGFsbCB0
aGUgYnl0ZWNvZGVzIAorICAgICAgICBpbiB0aGlzIGJsb2NrLgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUJhc2ljQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0cyk6IFRoZSBieXRlY29kZSBvZmZzZXRzIGlu
IHRoaXMgcGFydGljdWxhciAKKyAgICAgICAgYmFzaWMgYmxvY2suIFRoaXMgVmVjdG9yIGFsbG93
cyB1cyB0byBpdGVyYXRlIG92ZXIgdGhlIGJ5dGVjb2RlcyBpbiByZXZlcnNlIG9yZGVyIAorICAg
ICAgICB3aGljaCB3b3VsZG4ndCBiZSBwb3NzaWJsZSBub3JtYWxseSBzaW5jZSB0aGV5IGFyZSBv
ZiB2YXJpYWJsZSBzaXplLgorICAgICAgICAoSlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6OmFkZFBy
ZWRlY2Vzc29yKTogTGlua3MgYSBibG9jayB0byBhIHNwZWNpZmllZCBwcmVkZWNlc3Nvci4gCisg
ICAgICAgIE9ubHkgY3JlYXRlcyBvbmUgZGlyZWN0aW9uIG9mIHRoZSBsaW5rLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6OmFkZFN1Y2Nlc3Nvcik6IFNhbWUgYXMgYWRkUHJlZGVj
ZXNzb3IsIGJ1dCBmb3Igc3VjY2Vzc29ycy4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Js
b2NrOjpwcmVkZWNlc3NvcnMpOiBHZXR0ZXIgZm9yIHByZWRlY2Vzc29ycy4KKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKTogR2V0dGVyIGZvciBzdWNjZXNzb3Jz
LgorICAgICAgICAoSlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6OmluKTogR2V0dGVyIGZvciB0aGUg
bGl2ZW5lc3MgaW5mbyBhdCB0aGUgaGVhZCBvZiB0aGUgYmxvY2suCisgICAgICAgIChKU0M6OkJ5
dGVjb2RlQmFzaWNCbG9jazo6b3V0KTogR2V0dGVyIGZvciB0aGUgbGl2ZW5lc3MgaW5mbyBhdCAg
dGhlIHRhaWwgb2YgdGhlIGJsb2NrLgorICAgICAgICAoSlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6
OkJ5dGVjb2RlQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlQmFzaWNCbG9jazo6
YWRkQnl0ZWNvZGVMZW5ndGgpOiBXaGVuIGNyZWF0aW5nIGJhc2ljIGJsb2NrcyB3ZSBjYWxsIAor
ICAgICAgICB0aGlzIGZ1bmN0aW9uIHdoZW4gd2Ugd2FudCB0byBhZGQgdGhlIG5leHQgYnl0ZWNv
ZGUgaW4gcHJvZ3JhbSBvcmRlciB0byB0aGlzIGJsb2NrLgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyk6CisgICAgICAgIChK
U0M6Om51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMpOiBDb252ZW5pZW5jZSB3cmFwcGVyLiBSZXR1
cm5zIHRoZQorICAgICAgICBudW1iZXIgb2YgY2FwdHVyZWQgdmFyaWFibGVzIGZvciBhIHBhcnRp
Y3VsYXIgQ29kZUJsb2NrLCBvciAwIGlmIAorICAgICAgICB0aGUgQ29kZUJsb2NrIGhhcyBubyBT
eW1ib2xUYWJsZS4KKyAgICAgICAgKEpTQzo6Y2FwdHVyZVN0YXJ0KTogRGl0dG8sIGJ1dCBmb3Ig
Y2FwdHVyZVN0YXJ0KCkuCisgICAgICAgIChKU0M6OmNhcHR1cmVFbmQpOiBEaXR0bywgYnV0IGZv
ciBjYXB0dXJlRW5kKCkuCisgICAgICAgIChKU0M6OmlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNz
KTogUmV0dXJucyB0cnVlIGlmIHRoZSBsaXZlbmVzcyBhbmFseXNpcyBzaG91bGQgCisgICAgICAg
IHRyYWNrIHRoZSBsaXZlbmVzcyBvZiBhIHBhcnRpY3VsYXIgb3BlcmFuZC4gV2UgaWdub3JlIGNv
bnN0YW50cywgYXJndW1lbnRzLCBhbmQgCisgICAgICAgIGNhcHR1cmVkIHZhcmlhYmxlcy4gV2Ug
aWdub3JlIGFyZ3VtZW50cyBiZWNhdXNlIHRoZXkncmUgbGl2ZSBmb3IgdGhlIGR1cmF0aW9uIG9m
IAorICAgICAgICBhIGZ1bmN0aW9uIGNhbGwuIFdlIGlnbm9yZSBjYXB0dXJlZCB2YXJpYWJsZXMg
YmVjYXVzZSB3ZSBhbHNvIHRyZWF0IHRoZW0gYXMgbGl2ZSAKKyAgICAgICAgZm9yIHRoZSBkdXJh
dGlvbiBvZiB0aGUgZnVuY3Rpb24uIFRoaXMgY291bGQgcHJvYmFibHkgYmUgaW1wcm92ZWQgdG8g
YmUgbW9yZSBwcmVjaXNlLCAKKyAgICAgICAgYnV0IGl0IGRpZG4ndCBzZWVtIHdvcnRoIGl0IGZv
ciBub3cuCisgICAgICAgIChKU0M6OnNldEZvck9wZXJhbmQpOiBDb252ZW5pZW5jZSB3cmFwcGVy
IHRoYXQgc2V0cyB0aGUgYml0IGluIHRoZSBwcm92aWRlZCBiaXQgCisgICAgICAgIHZlY3RvciBm
b3IgdGhlIHByb3ZpZGVkIG9wZXJhbmQuIEl0IGhhbmRsZXMgc2tpcHBpbmcgb3ZlciBjYXB0dXJl
ZCB2YXJpYWJsZXMuCisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQp
OiBDb21wdXRlcyB3aGljaCBvcGVyYW5kcyBhcmUgdXNlZCBieSBhIHBhcnRpY3VsYXIgYnl0ZWNv
ZGUuCisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOiBDb21wdXRl
cyB3aGljaCBvcGVyYW5kcyBhcmUgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgCisgICAgICAgIGJ5
dGVjb2RlLiBUeXBpY2FsbHkgdGhpcyBpcyBqdXN0IHRoZSBsZWZ0LW1vc3Qgb3BlcmFuZC4KKyAg
ICAgICAgKEpTQzo6ZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KTogCisgICAgICAgIChK
U0M6OmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQpOiBTY2FucyBvdmVyIGJhc2ljIGJs
b2NrcyB0byBmaW5kIHRoZSBibG9jayAKKyAgICAgICAgd2hpY2ggY29udGFpbnMgYSBwYXJ0aWN1
bGFyIGJ5dGVjb2RlIG9mZnNldC4KKyAgICAgICAgKEpTQzo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NG
b3JCeXRlY29kZU9mZnNldCk6IENvbXB1dGVzIGJsb2NrLWxvY2FsIGxpdmVuZXNzIGZyb20gdGhl
IAorICAgICAgICBib3R0b20gb2YgdGhlIGJsb2NrIHVudGlsIGEgc3BlY2lmaWVkIGJ5dGVjb2Rl
IG9mZnNldCBpcyByZWFjaGVkLiAKKyAgICAgICAgKEpTQzo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NG
b3JCbG9jayk6IENvbXB1dGVzIGxpdmVuZXNzIGZvciB0aGUgZW50aXJlIGJsb2NrIGFuZCAKKyAg
ICAgICAgc3RvcmVzIHRoZSByZXN1bHRpbmcgbGl2ZW5lc3MgYXQgdGhlIGhlYWQuCisgICAgICAg
IChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6cnVuTGl2ZW5lc3NGaXhwb2ludCk6IFJ1
bnMgYmFja3dhcmQgZmxvdyBsaXZlbmVzcyAKKyAgICAgICAgYW5hbHlzaXMgdG8gZml4cG9pbnQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZv
Rm9yTm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldCk6IAorICAgICAgICBTbG93IHBhdGgg
dG8gZ2V0IGxpdmVuZXNzIGluZm8gZm9yIG5vbi1jYXB0dXJlZCwgbm9uLWFyZ3VtZW50IHZhcmlh
YmxlLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6Om9wZXJhbmRJc0xp
dmVBdEJ5dGVjb2RlT2Zmc2V0KTogCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCk6IFJldHVybnMgdGhlIGxpdmVu
ZXNzIAorICAgICAgICBpbmZvIGZvciBib3RoIGNhcHR1cmVkIGFuZCBub24tY2FwdHVyZWQgdmFy
cyBhdCBhIHBhcnRpY3VsYXIgYnl0ZWNvZGUgb2Zmc2V0LgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKTogRHVtcHMgdGhlIG91dHB1dCBvZiB0aGUg
bGl2ZW5lc3MgYW5hbHlzaXMuIAorICAgICAgICBDb250cm9sbGVkIGJ5IG5ldyBmbGFnIGluIE9w
dGlvbnMuaC8uY3BwLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNv
bXB1dGUpOiBDcmVhdGVzIGJ5dGVjb2RlIGJhc2ljIGJsb2NrcyBhbmQgcnVucyAKKyAgICAgICAg
ZnVsbCBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6aGFzQmVlbkNvbXB1dGVkKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzOjpjb21wdXRlSWZOZWNlc3NhcnkpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaXZlbmVzc0Fu
YWx5c2lzKToKKyAgICAgICAgKiBieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwOiBSZWZh
Y3RvcmVkIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBqdW1wIHRhcmdldHMgZm9yIAorICAgICAgICBh
IHBhcnRpY3VsYXIgYnl0ZWNvZGUgb2Zmc2V0IGZvciB1c2UgZHVyaW5nIGJ5dGVjb2RlIGJhc2lj
IGJsb2NrIGNvbnN0cnVjdGlvbi4KKyAgICAgICAgKEpTQzo6Z2V0SnVtcFRhcmdldHNGb3JCeXRl
Y29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMpOgor
ICAgICAgICAoSlNDOjpmaW5kSnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAg
ICogYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIv
SlNTdGFjay5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJv
b3RzKTogQ2hhbmdlZCB0byB1c2UgdGhlIGJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lzIAorICAg
ICAgICBkdXJpbmcgY29uc2VydmF0aXZlIHN0YWNrIHNjYW5uaW5nLiBFbmFibGVkIGJ5IGZsYWcg
aW4gT3B0aW9ucy5oLy5jcHAuCisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAg
ICAgKEpTQzo6T3B0aW9uczo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25z
Lmg6CisKIDIwMTMtMDgtMDcgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNv
bT4KIAogICAgICAgICAzMi1iaXQgY29kZSBnZW4gZm9yIFR5cGVPZiBkb2Vzbid0IHByb3Blcmx5
IHVwZGF0ZSB0aGUgQWJzdHJhY3RJbnRlcnByZXRlciBzdGF0ZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTUzNzk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw4IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAKICAgICBieXRlY29kZS9BcnJheUFsbG9jYXRpb25Q
cm9maWxlLmNwcAogICAgIGJ5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAKKyAgICBieXRlY29kZS9C
eXRlY29kZUJhc2ljQmxvY2suY3BwCisgICAgYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmNwcAogICAgIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKICAgICBieXRlY29kZS9DYWxs
TGlua1N0YXR1cy5jcHAKICAgICBieXRlY29kZS9Db2RlQmxvY2suY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTUzNzk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkK
QEAgLTk0LDYgKzk0LDEwIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAorICAgIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQkocmV2aXNpb24gMTUzNzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Rh
cmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDggQEAgU09VUkNFUyArPSBcCiAg
ICAgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBcCiAgICAgYnl0ZWNvZGUv
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgXAogICAgIGJ5dGVjb2RlL0FycmF5UHJvZmlsZS5j
cHAgXAorICAgIGJ5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgXAorICAgIGJ5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgXAogICAgIGJ5dGVjb2RlL0NhbGxMaW5rSW5m
by5jcHAgXAogICAgIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcCBcCiAgICAgYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2oJKHJldmlzaW9uIDE1Mzc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI5
Niw2ICsyOTYsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxBcnJheVByb2ZpbGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAiIC8+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNw
cCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua0luZm8u
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5rU3Rh
dHVzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb2RlQmxv
Y2suY3BwIiAvPg0KQEAgLTU4Niw2ICs1ODgsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEFycmF5UHJvZmlsZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5VmFsSW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlQmFzaWNCbG9jay5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIiAvPg0K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5rSW5mby5oIiAvPg0K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5rU3RhdHVzLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbFJldHVybk9mZnNldFRv
Qnl0ZWNvZGVPZmZzZXQuaCIgLz4NCkBAIC05NTcsNCArOTYxLDQgQEAKICAgPEltcG9ydEdyb3Vw
IExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4NCiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFy
Z2V0c1BhdGgpXEJ1aWxkQ3VzdG9taXphdGlvbnNcbWFzbS50YXJnZXRzIiAvPg0KICAgPC9JbXBv
cnRHcm91cD4NCi08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9q
ZWN0Pg0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
LmZpbHRlcnMJKHJldmlzaW9uIDE1Mzc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2lu
ZyBjb3B5KQpAQCAtMTA4LDYgKzEwOCwxMiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcQXJyYXlQcm9maWxlLmNwcCI+DQogICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmls
dGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxCeXRlY29kZUJhc2ljQmxvY2suY3BwIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9G
aWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0
ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtJbmZvLmNwcCI+DQogICAgICAgPEZpbHRlcj5ieXRlY29k
ZTwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCkBAIC05MTQsNiArOTIwLDEyIEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeVZhbEluZm8uaCI+DQogICAgICAgPEZp
bHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZUJhc2ljQmxvY2suaCI+DQorICAgICAgPEZp
bHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCI+DQorICAg
ICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua0luZm8uaCI+DQogICAgICAgPEZp
bHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCkBAIC0yMDIxLDQgKzIw
MzMsNCBAQAogICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCiAgICAgPC9NQVNNPg0KICAgPC9J
dGVtR3JvdXA+DQotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJv
amVjdD4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUzNzk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwMzAsNiArMTAzMCwxMCBAQAogCQlDMkVB
RDJGQzE0RjAyNDk4MDBBNEIxNTkgLyogQ29waWVkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkVBRDJGQjE0RjAyNDk4MDBBNEIxNTkg
LyogQ29waWVkQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQzJGMEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVE
YXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMy
RjBGMkQwMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi87IH07CiAJ
CUMyRkM5QkQzMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkM5QkQyMTY2NDRERkIw
MDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMkZDQUUxMDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0
ZWNvZGVCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2su
Y3BwICovOyB9OworCQlDMkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Js
b2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZD
QUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggKi87IH07CisJCUMy
RkNBRTEyMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEUxN0E5
QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgKi87IH07CisJCUMy
RkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBGMTdBOUMy
NEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLzsgfTsKIAkJQzJGRTE4
QTQxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZFMThBMzE2QkFFQzQwMDBBRjMwNjEg
LyogU3RydWN0dXJlUmFyZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlEREY3QUJENDExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
REY3QUJEMjExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4RjcwRTU1NTc3
NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNT
dHJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMjExOCw2ICsyMTIyLDEwIEBACiAJCUMyRUFEMkZCMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3Bp
ZWRBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29waWVkQWxs
b2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRjBGMkQwMTZCQUVFRTkw
MDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyRkM5QkQyMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29waWVkQmxvY2tJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAv
KiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzJGQ0FFMEQxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUJhc2ljQmxvY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDMkZDQUUwRjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkZFMThBMzE2QkFFQzQw
MDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3RydWN0dXJlUmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRl
Q29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZUNvbnZl
cnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0MjAsNiArMzQyOCwxMCBA
QAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUMyRkNBRTBDMTdBOUMyNEUwMDM0Qzcz
NSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovLAorCQkJCUMyRkNBRTBEMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suaCAqLywKKwkJCQlDMkZDQUUwRTE3QTlDMjRFMDAz
NEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLywKKwkJCQlDMkZDQUUwRjE3
QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8sCiAJCQkJMEY4
MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwICovLAog
CQkJCTBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmgg
Ki8sCiAJCQkJMEY2Mzk0NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgKi8s
CkBAIC0zNTMzLDYgKzM1NDUsNyBAQAogCQkJCUE3QThBRjM3MTdBREI1RjMwMDVBQjE3NCAvKiBB
cnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NTE1
RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY2Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTcwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5UHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyNDBFMTZGQzhBMDBCMzQ0NjAgLyogQXJy
YXlQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTQwMzgsNiArNDA1MSw3IEBACiAJ
CQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBT
dHJpbmdPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyRkNBRTEzMTdBOUMyNEUwMDM0Qzcz
NSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDZBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNTI2MEUxNkZDQTcwMEIzNDQ2MCAvKiBTdHJpbmdQcm90b3R5cGUubHV0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDJFMzEzQjEzNEZGMEE2MDBBRkFEQjUgLyogU3Ryb25nLmggaW4g
SGVhZGVycyAqLywKQEAgLTQ0ODcsNiArNDUwMSw3IEBACiAJCQkJMTQ3RjM5QzQxMDdFQzM3NjAw
NDI3QTQ4IC8qIERhdGVDb252ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM1
MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQzJGQ0FFMTIxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyog
RGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzMTM1NjUwRjMwMkZBMzAwM0RGRDNB
IC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBE
RENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC00NzUyLDYgKzQ3NjcsNyBAQAogCQkJCTBGRjcyOUIyMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9m
aWxlckRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBG
NUJBMyAvKiBQcm9maWxlck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCNDE2
NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlDMkZDQUUxMDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9T
UkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8q
IFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3
MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Js
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJ5
dGVjb2RlQmFzaWNCbG9jay5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAi
UHJlY2lzZUp1bXBUYXJnZXRzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgYm9vbCBp
c0JyYW5jaChPcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Cisg
ICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToK
KyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ug
b3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9qbGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6Cisg
ICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBv
cF9qbmxlc3M6CisgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoK
KyAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBj
YXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNl
IG9wX2dldF9wbmFtZXM6CisgICAgY2FzZSBvcF9uZXh0X3BuYW1lOgorICAgIGNhc2Ugb3BfY2hl
Y2tfaGFzX2luc3RhbmNlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc1VuY29uZGl0aW9u
YWxCcmFuY2goT3Bjb2RlSUQgb3Bjb2RlSUQpCit7CisgICAgc3dpdGNoIChvcGNvZGVJRCkgewor
ICAgIGNhc2Ugb3Bfam1wOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc1Rlcm1pbmFsKE9w
Y29kZUlEIG9wY29kZUlEKQoreworICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICBjYXNlIG9w
X3JldDoKKyAgICBjYXNlIG9wX3JldF9vYmplY3Rfb3JfdGhpczoKKyAgICBjYXNlIG9wX2VuZDoK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworc3RhdGljIGJvb2wgaXNUaHJvdyhPcGNvZGVJRCBvcGNvZGVJRCkKK3sK
KyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNlIG9w
X3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljIGJvb2wgaXNKdW1wVGFy
Z2V0KE9wY29kZUlEIG9wY29kZUlELCBWZWN0b3I8dW5zaWduZWQsIDMyPiYganVtcFRhcmdldHMs
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYXRj
aCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
anVtcFRhcmdldHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGJ5dGVjb2RlT2Zmc2V0ID09
IGp1bXBUYXJnZXRzW2ldKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgbGlua0Jsb2NrcyhCeXRlY29kZUJhc2ljQmxv
Y2sqIHByZWRlY2Vzc29yLCBCeXRlY29kZUJhc2ljQmxvY2sqIHN1Y2Nlc3NvcikKK3sKKyAgICBw
cmVkZWNlc3Nvci0+YWRkU3VjY2Vzc29yKHN1Y2Nlc3Nvcik7CisgICAgc3VjY2Vzc29yLT5hZGRQ
cmVkZWNlc3NvcihwcmVkZWNlc3Nvcik7Cit9CisKK3ZvaWQgY29tcHV0ZUJ5dGVjb2RlQmFzaWNC
bG9ja3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Js
b2NrPiA+JiBiYXNpY0Jsb2NrcykKK3sKKyAgICBWZWN0b3I8dW5zaWduZWQsIDMyPiBqdW1wVGFy
Z2V0czsKKyAgICBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKGNvZGVCbG9jaywganVtcFRhcmdl
dHMpOworCisgICAgLy8gQ3JlYXRlIHRoZSBlbnRyeSBhbmQgZXhpdCBiYXNpYyBibG9ja3MuCisg
ICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBlbnRyeSA9IG5ldyBCeXRlY29kZUJhc2ljQmxvY2soQnl0
ZWNvZGVCYXNpY0Jsb2NrOjpFbnRyeUJsb2NrKTsKKyAgICBiYXNpY0Jsb2Nrcy5hcHBlbmQoYWRv
cHRSZWYoZW50cnkpKTsKKyAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGV4aXQgPSBuZXcgQnl0ZWNv
ZGVCYXNpY0Jsb2NrKEJ5dGVjb2RlQmFzaWNCbG9jazo6RXhpdEJsb2NrKTsKKworICAgIC8vIEZp
bmQgYmFzaWMgYmxvY2sgYm91bmRhcmllcy4KKyAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGN1cnJl
bnQgPSBuZXcgQnl0ZWNvZGVCYXNpY0Jsb2NrKDAsIDApOworICAgIGxpbmtCbG9ja3MoZW50cnks
IGN1cnJlbnQpOworICAgIGJhc2ljQmxvY2tzLmFwcGVuZChhZG9wdFJlZihjdXJyZW50KSk7CisK
KyAgICBib29sIG5leHRJbnN0cnVjdGlvbklzTGVhZGVyID0gZmFsc2U7CisKKyAgICBJbnRlcnBy
ZXRlciogaW50ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPnZtKCktPmludGVycHJldGVyOworICAgIElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
YmVnaW4oKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7
IGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25Db3VudDspIHsKKyAgICAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0
ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKTsKKyAgICAgICAgdW5zaWduZWQgb3Bjb2RlTGVuZ3RoID0g
b3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CisKKyAgICAgICAgYm9vbCBjcmVhdGVkQmxvY2sgPSBm
YWxzZTsKKyAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgYnl0ZWNvZGUgaXMgYSBqdW1wIHRhcmdl
dCwgdGhlbiBpdCdzIHRoZSBsZWFkZXIgb2YgaXRzIG93biBiYXNpYyBibG9jay4KKyAgICAgICAg
aWYgKGlzSnVtcFRhcmdldChvcGNvZGVJRCwganVtcFRhcmdldHMsIGJ5dGVjb2RlT2Zmc2V0KSB8
fCBuZXh0SW5zdHJ1Y3Rpb25Jc0xlYWRlcikgeworICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Js
b2NrKiBibG9jayA9IG5ldyBCeXRlY29kZUJhc2ljQmxvY2soYnl0ZWNvZGVPZmZzZXQsIG9wY29k
ZUxlbmd0aCk7CisgICAgICAgICAgICBiYXNpY0Jsb2Nrcy5hcHBlbmQoYWRvcHRSZWYoYmxvY2sp
KTsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBibG9jazsKKyAgICAgICAgICAgIGNyZWF0ZWRCbG9j
ayA9IHRydWU7CisgICAgICAgICAgICBuZXh0SW5zdHJ1Y3Rpb25Jc0xlYWRlciA9IGZhbHNlOwor
ICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gb3Bjb2RlTGVuZ3RoOworICAgICAgICB9CisK
KyAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgYnl0ZWNvZGUgaXMgYSBicmFuY2ggb3IgYSByZXR1
cm4sIHRoZW4gdGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgdGhlIGxlYWRlciBvZiBpdHMgb3duIGJh
c2ljIGJsb2NrLgorICAgICAgICBpZiAoaXNCcmFuY2gob3Bjb2RlSUQpIHx8IGlzVGVybWluYWwo
b3Bjb2RlSUQpIHx8IGlzVGhyb3cob3Bjb2RlSUQpKQorICAgICAgICAgICAgbmV4dEluc3RydWN0
aW9uSXNMZWFkZXIgPSB0cnVlOworCisgICAgICAgIGlmIChjcmVhdGVkQmxvY2spCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBPdGhlcndpc2UsIGp1c3QgYWRkIHRvIHRoZSBs
ZW5ndGggb2YgdGhlIGN1cnJlbnQgYmxvY2suCisgICAgICAgIGN1cnJlbnQtPmFkZEJ5dGVjb2Rl
TGVuZ3RoKG9wY29kZUxlbmd0aCk7CisgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IG9wY29kZUxl
bmd0aDsKKyAgICB9CisKKyAgICAvLyBMaW5rIGJhc2ljIGJsb2NrcyB0b2dldGhlci4KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9ja3Muc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IGJhc2ljQmxvY2tzW2ldLmdldCgpOworCisg
ICAgICAgIGlmIChibG9jay0+aXNFbnRyeUJsb2NrKCkgfHwgYmxvY2stPmlzRXhpdEJsb2NrKCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBib29sIGZhbGxzVGhyb3VnaCA9IHRy
dWU7IAorICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmxlYWRl
ckJ5dGVjb2RlT2Zmc2V0KCk7IGJ5dGVjb2RlT2Zmc2V0IDwgYmxvY2stPmxlYWRlckJ5dGVjb2Rl
T2Zmc2V0KCkgKyBibG9jay0+dG90YWxCeXRlY29kZUxlbmd0aCgpOykgeworICAgICAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc0JlZ2lu
W2J5dGVjb2RlT2Zmc2V0XTsKKyAgICAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJw
cmV0ZXItPmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi51Lm9wY29kZSk7CisgICAgICAg
ICAgICB1bnNpZ25lZCBvcGNvZGVMZW5ndGggPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsKKyAg
ICAgICAgICAgIC8vIElmIHdlIGZvdW5kIGEgdGVybWluYWwgYnl0ZWNvZGUsIGxpbmsgdG8gdGhl
IGV4aXQgYmxvY2suCisgICAgICAgICAgICBpZiAoaXNUZXJtaW5hbChvcGNvZGVJRCkpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgKyBvcGNvZGVMZW5ndGggPT0gYmxv
Y2stPmxlYWRlckJ5dGVjb2RlT2Zmc2V0KCkgKyBibG9jay0+dG90YWxCeXRlY29kZUxlbmd0aCgp
KTsKKyAgICAgICAgICAgICAgICBsaW5rQmxvY2tzKGJsb2NrLCBleGl0KTsKKyAgICAgICAgICAg
ICAgICBmYWxsc1Rocm91Z2ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQgYSB0aHJvdywgZ2V0IHRoZSBI
YW5kbGVySW5mbyBmb3IgdGhpcyBpbnN0cnVjdGlvbiB0byBzZWUgd2hlcmUgd2Ugd2lsbCBqdW1w
LiAKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzbid0IG9uZSwgdHJlYXQgdGhpcyB0aHJvdyBh
cyBhIHRlcm1pbmFsLiBUaGlzIGlzIHRydWUgZXZlbiBpZiB3ZSBoYXZlIGEgZmluYWxseQorICAg
ICAgICAgICAgLy8gYmxvY2sgYmVjYXVzZSB0aGUgZmluYWxseSBibG9jayB3aWxsIGNyZWF0ZSBp
dHMgb3duIGNhdGNoLCB3aGljaCB3aWxsIGdlbmVyYXRlIGEgSGFuZGxlckluZm8uCisgICAgICAg
ICAgICBpZiAoaXNUaHJvdyhvcGNvZGVJRCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYnl0
ZWNvZGVPZmZzZXQgKyBvcGNvZGVMZW5ndGggPT0gYmxvY2stPmxlYWRlckJ5dGVjb2RlT2Zmc2V0
KCkgKyBibG9jay0+dG90YWxCeXRlY29kZUxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBIYW5k
bGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBmYWxsc1Rocm91Z2ggPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlua0Js
b2NrcyhibG9jaywgZXhpdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNC
bG9ja3Muc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Js
b2NrKiBvdGhlckJsb2NrID0gYmFzaWNCbG9ja3NbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChoYW5kbGVyLT50YXJnZXQgPT0gb3RoZXJCbG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZz
ZXQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0Jsb2NrcyhibG9jaywgb3RoZXJC
bG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQgYSBicmFuY2gsIGxpbmsgdG8gdGhl
IGJsb2NrKHMpIHRoYXQgd2UganVtcCB0by4KKyAgICAgICAgICAgIGlmIChpc0JyYW5jaChvcGNv
ZGVJRCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgKyBvcGNvZGVM
ZW5ndGggPT0gYmxvY2stPmxlYWRlckJ5dGVjb2RlT2Zmc2V0KCkgKyBibG9jay0+dG90YWxCeXRl
Y29kZUxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQsIDE+IGJ5dGVj
b2RlT2Zmc2V0c0p1bXBlZFRvOworICAgICAgICAgICAgICAgIGZpbmRKdW1wVGFyZ2V0c0ZvckJ5
dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQsIGJ5dGVjb2RlT2Zmc2V0c0p1
bXBlZFRvKTsKKworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNp
Y0Jsb2Nrcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBCeXRlY29kZUJhc2lj
QmxvY2sqIG90aGVyQmxvY2sgPSBiYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGJ5dGVjb2RlT2Zmc2V0c0p1bXBlZFRvLmNvbnRhaW5zKG90aGVyQmxvY2stPmxl
YWRlckJ5dGVjb2RlT2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbGlua0Jsb2Nr
cyhibG9jaywgb3RoZXJCbG9jayk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgaWYgKGlzVW5jb25kaXRpb25hbEJyYW5jaChvcGNvZGVJRCkpCisgICAgICAgICAgICAgICAg
ICAgIGZhbGxzVGhyb3VnaCA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBieXRlY29kZU9mZnNldCArPSBvcGNvZGVMZW5ndGg7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBJZiB3ZSBmYWxsIHRocm91Z2ggdGhlbiBsaW5rIHRvIHRo
ZSBuZXh0IGJsb2NrIGluIHByb2dyYW0gb3JkZXIuCisgICAgICAgIGlmIChmYWxsc1Rocm91Z2gp
IHsKKyAgICAgICAgICAgIEFTU0VSVChpICsgMSA8IGJhc2ljQmxvY2tzLnNpemUoKSk7CisgICAg
ICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG5leHRCbG9jayA9IGJhc2ljQmxvY2tzW2kgKyAx
XS5nZXQoKTsKKyAgICAgICAgICAgIGxpbmtCbG9ja3MoYmxvY2ssIG5leHRCbG9jayk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBiYXNpY0Jsb2Nrcy5hcHBlbmQoYWRvcHRSZWYoZXhpdCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJ5dGVjb2RlQmFz
aWNCbG9ja19oCisjZGVmaW5lIEJ5dGVjb2RlQmFzaWNCbG9ja19oCisKKyNpbmNsdWRlIDxsaW1p
dHMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CisKK3R5cGVkZWYgSGFz
aE1hcDx1bnNpZ25lZCwgRmFzdEJpdFZlY3RvciwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwgV1RG
OjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4gPiBCeXRlY29kZVRvQml0
bWFwTWFwOworCitjbGFzcyBCeXRlY29kZUJhc2ljQmxvY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxC
eXRlY29kZUJhc2ljQmxvY2s+IHsKK3B1YmxpYzoKKyAgICBlbnVtIFNwZWNpYWxCbG9ja1R5cGUg
eyBFbnRyeUJsb2NrLCBFeGl0QmxvY2sgfTsKKyAgICBCeXRlY29kZUJhc2ljQmxvY2sodW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKFNwZWNp
YWxCbG9ja1R5cGUpOworCisgICAgYm9vbCBpc0VudHJ5QmxvY2soKSB7IHJldHVybiAhbV9sZWFk
ZXJCeXRlY29kZU9mZnNldCAmJiAhbV90b3RhbEJ5dGVjb2RlTGVuZ3RoOyB9CisgICAgYm9vbCBp
c0V4aXRCbG9jaygpIHsgcmV0dXJuIG1fbGVhZGVyQnl0ZWNvZGVPZmZzZXQgPT0gVUlOVF9NQVgg
JiYgbV90b3RhbEJ5dGVjb2RlTGVuZ3RoID09IFVJTlRfTUFYOyB9CisKKyAgICB1bnNpZ25lZCBs
ZWFkZXJCeXRlY29kZU9mZnNldCgpIHsgcmV0dXJuIG1fbGVhZGVyQnl0ZWNvZGVPZmZzZXQ7IH0K
KyAgICB1bnNpZ25lZCB0b3RhbEJ5dGVjb2RlTGVuZ3RoKCkgeyByZXR1cm4gbV90b3RhbEJ5dGVj
b2RlTGVuZ3RoOyB9CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+JiBieXRlY29kZU9mZnNldHMoKSB7
IHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0czsgfQorICAgIHZvaWQgYWRkQnl0ZWNvZGVMZW5ndGgo
dW5zaWduZWQpOworCisgICAgdm9pZCBhZGRQcmVkZWNlc3NvcihCeXRlY29kZUJhc2ljQmxvY2sq
IGJsb2NrKSB7IG1fcHJlZGVjZXNzb3JzLmFwcGVuZChibG9jayk7IH0KKyAgICB2b2lkIGFkZFN1
Y2Nlc3NvcihCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrKSB7IG1fc3VjY2Vzc29ycy5hcHBlbmQo
YmxvY2spOyB9CisKKyAgICBWZWN0b3I8Qnl0ZWNvZGVCYXNpY0Jsb2NrKj4mIHByZWRlY2Vzc29y
cygpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisgICAgVmVjdG9yPEJ5dGVjb2RlQmFzaWNC
bG9jayo+JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisKKyAgICBGYXN0
Qml0VmVjdG9yJiBpbigpIHsgcmV0dXJuIG1faW47IH0KKyAgICBGYXN0Qml0VmVjdG9yJiBvdXQo
KSB7IHJldHVybiBtX291dDsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fbGVhZGVyQnl0
ZWNvZGVPZmZzZXQ7CisgICAgdW5zaWduZWQgbV90b3RhbEJ5dGVjb2RlTGVuZ3RoOworCisgICAg
VmVjdG9yPHVuc2lnbmVkPiBtX2J5dGVjb2RlT2Zmc2V0czsKKworICAgIFZlY3RvcjxCeXRlY29k
ZUJhc2ljQmxvY2sqPiBtX3ByZWRlY2Vzc29yczsKKyAgICBWZWN0b3I8Qnl0ZWNvZGVCYXNpY0Js
b2NrKj4gbV9zdWNjZXNzb3JzOworCisgICAgRmFzdEJpdFZlY3RvciBtX2luOworICAgIEZhc3RC
aXRWZWN0b3IgbV9vdXQ7Cit9OworCit2b2lkIGNvbXB1dGVCeXRlY29kZUJhc2ljQmxvY2tzKENv
ZGVCbG9jayosIFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiA+Jik7CisKK2lubGlu
ZSBCeXRlY29kZUJhc2ljQmxvY2s6OkJ5dGVjb2RlQmFzaWNCbG9jayh1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgbGVuZ3RoKQorICAgIDogbV9sZWFkZXJCeXRlY29kZU9mZnNldChzdGFydCkKKyAg
ICAsIG1fdG90YWxCeXRlY29kZUxlbmd0aChsZW5ndGgpCit7CisgICAgbV9ieXRlY29kZU9mZnNl
dHMuYXBwZW5kKG1fbGVhZGVyQnl0ZWNvZGVPZmZzZXQpOworfQorCitpbmxpbmUgQnl0ZWNvZGVC
YXNpY0Jsb2NrOjpCeXRlY29kZUJhc2ljQmxvY2soQnl0ZWNvZGVCYXNpY0Jsb2NrOjpTcGVjaWFs
QmxvY2tUeXBlIGJsb2NrVHlwZSkKKyAgICA6IG1fbGVhZGVyQnl0ZWNvZGVPZmZzZXQoYmxvY2tU
eXBlID09IEJ5dGVjb2RlQmFzaWNCbG9jazo6RW50cnlCbG9jayA/IDAgOiBVSU5UX01BWCkKKyAg
ICAsIG1fdG90YWxCeXRlY29kZUxlbmd0aChibG9ja1R5cGUgPT0gQnl0ZWNvZGVCYXNpY0Jsb2Nr
OjpFbnRyeUJsb2NrID8gMCA6IFVJTlRfTUFYKQoreworfQorCitpbmxpbmUgdm9pZCBCeXRlY29k
ZUJhc2ljQmxvY2s6OmFkZEJ5dGVjb2RlTGVuZ3RoKHVuc2lnbmVkIGJ5dGVjb2RlTGVuZ3RoKQor
eworICAgIG1fYnl0ZWNvZGVPZmZzZXRzLmFwcGVuZChtX2xlYWRlckJ5dGVjb2RlT2Zmc2V0ICsg
bV90b3RhbEJ5dGVjb2RlTGVuZ3RoKTsKKyAgICBtX3RvdGFsQnl0ZWNvZGVMZW5ndGggKz0gYnl0
ZWNvZGVMZW5ndGg7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnl0ZWNv
ZGVCYXNpY0Jsb2NrX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisK
KyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzKENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIDogbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQorICAgICwgbV9jb21wdXRlZChmYWxzZSkKK3sKKyAgICBBU1NFUlQobV9jb2Rl
QmxvY2spOworfQorCitCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcyhjb25zdCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMmIG90aGVyKQorICAgIDogbV9j
b2RlQmxvY2sob3RoZXIubV9jb2RlQmxvY2spCisgICAgLCBtX2Jhc2ljQmxvY2tzKG90aGVyLm1f
YmFzaWNCbG9ja3MpCisgICAgLCBtX2NvbXB1dGVkKG90aGVyLm1fY29tcHV0ZWQpCit7Cit9CisK
K3N0YXRpYyBpbnQgbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3sKKyAgICBpZiAoIWNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+Y2FwdHVyZUNvdW50KCk7
Cit9CisKK3N0YXRpYyBpbnQgY2FwdHVyZVN0YXJ0KENvZGVCbG9jayogY29kZUJsb2NrKQorewor
ICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJlU3RhcnQoKTsKK30KKwor
c3RhdGljIGludCBjYXB0dXJlRW5kKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmICgh
Y29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
Y29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7Cit9CisKK3N0YXRpYyBib29s
IGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBpbnQgb3Bl
cmFuZCkKK3sKKyAgICByZXR1cm4gIWNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
b3BlcmFuZCkgLy8gRG9uJ3QgY2FyZSBhYm91dCBjb25zdGFudHMuCisgICAgICAgICYmIG9wZXJh
bmQgPj0gMCAvLyBEb24ndCBjYXJlIGFib3V0IGFyZ3VtZW50cy4KKyAgICAgICAgJiYgKCFudW1i
ZXJPZkNhcHR1cmVkVmFyaWFibGVzKGNvZGVCbG9jaykgLy8gSWYgd2UgaGF2ZSBubyBjYXB0dXJl
ZCB2YXJpYWJsZXMsIHdlJ3JlIGdvb2QgdG8gZ28uCisgICAgICAgICAgICB8fCAob3BlcmFuZCA8
IGNhcHR1cmVTdGFydChjb2RlQmxvY2spIHx8IChvcGVyYW5kID49IGNhcHR1cmVFbmQoY29kZUJs
b2NrKSkpKTsKK30KKworc3RhdGljIHZvaWQgc2V0Rm9yT3BlcmFuZChDb2RlQmxvY2sqIGNvZGVC
bG9jaywgRmFzdEJpdFZlY3RvciYgYml0cywgaW50IG9wZXJhbmQpCit7CisgICAgQVNTRVJUKGlz
VmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgb3BlcmFuZCkpOworICAgIGlmIChv
cGVyYW5kIDwgY2FwdHVyZVN0YXJ0KGNvZGVCbG9jaykpCisgICAgICAgIGJpdHMuc2V0KG9wZXJh
bmQpOworICAgIGVsc2UKKyAgICAgICAgYml0cy5zZXQob3BlcmFuZCAtIG51bWJlck9mQ2FwdHVy
ZWRWYXJpYWJsZXMoY29kZUJsb2NrKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVVc2VzRm9y
Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0LCBGYXN0Qml0VmVjdG9yJiB1c2VzKQoreworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRl
ciA9IGNvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uc0JlZ2luID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNl
dF07CisgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5z
dHJ1Y3Rpb24tPnUub3Bjb2RlKTsKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgLy8gTm8g
dXNlcy4KKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVm
ZmVyOgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6
CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgIGNhc2Ugb3BfcG9wX3Njb3BlOgorICAg
IGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgY2FzZSBv
cF9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0Ogor
ICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoKKyAgICBjYXNlIG9wX2dldF9jYWxsZWU6CisgICAg
Y2FzZSBvcF9lbnRlcjoKKyAgICBjYXNlIG9wX2NhdGNoOgorICAgICAgICByZXR1cm47CisgICAg
Ly8gRmlyc3QgYXJndW1lbnQuCisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNlIG9wX2Ny
ZWF0ZV9hY3RpdmF0aW9uOiAKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CisgICAgY2Fz
ZSBvcF90b190aGlzOgorICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0aXZhdGlvbjoKKyAgICBjYXNl
IG9wX3Byb2ZpbGVfd2lsbF9jYWxsOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9kaWRfY2FsbDoKKyAg
ICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgIGNhc2Ug
b3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBv
cF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoK
KyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX2luYzogeworICAgICAgICBpZiAoaXNWYWxp
ZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
KQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRmlyc3QgYW5k
IHNlY29uZCBhcmd1bWVudHMuCisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgY2FzZSBvcF9y
ZXRfb2JqZWN0X29yX3RoaXM6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3Bfamdy
ZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAg
IGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9q
bmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2psZXNzOiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVn
aXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpCisg
ICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJh
bmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIC8vIEZpcnN0LCBzZWNvbmQsIGFuZCB0aGlyZCBhcmd1bWVudHMu
CisgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogeworICAg
ICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVz
ZXMsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0
ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCisgICAg
ICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQo
Y29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIC8vIEZpcnN0IGFuZCB0aGlyZCBhcmd1bWVudHMuCisgICAgY2FzZSBv
cF9wdXRfYnlfaW5kZXg6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmVwbGFjZToKKyAgICBjYXNl
IG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRp
b25fZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9v
Zl9saW5lOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgorICAgIGNh
c2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOgorICAgIGNhc2Ug
b3BfcHV0X2J5X2lkX2dlbmVyaWM6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6
CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKKyAg
ICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1
c2VzLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lz
dGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQorICAg
ICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRmlyc3QsIHRoaXJkLCBh
bmQgZm91cnRoIGFyZ3VtZW50cy4KKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyOiB7Cisg
ICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywg
dXNlcywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdp
c3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKKyAg
ICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJs
b2NrLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFu
ZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgLy8gU2Vjb25kIGFyZ3VtZW50LgorICAgIGNhc2Ugb3BfaW5pdF9n
bG9iYWxfY29uc3Rfbm9wOgorICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6CisgICAgY2Fz
ZSBvcF9wdXNoX25hbWVfc2NvcGU6CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICBj
YXNlIG9wX3RvX3ByaW1pdGl2ZToKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICBjYXNlIG9w
X2dldF9ieV9pZF9vdXRfb2ZfbGluZToKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgorICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWluOgor
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9zZWxmOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X2dldHRlcl9wcm90bzoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hhaW46CisgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3NlbGY6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3Vz
dG9tX3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9jaGFpbjoKKyAgICBjYXNl
IG9wX2dldF9ieV9pZF9nZW5lcmljOgorICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKKyAg
ICBjYXNlIG9wX2dldF9zdHJpbmdfbGVuZ3RoOgorICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19s
ZW5ndGg6CisgICAgY2FzZSBvcF90eXBlb2Y6CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6Cisg
ICAgY2FzZSBvcF9pc19ib29sZWFuOgorICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgIGNhc2Ug
b3BfaXNfc3RyaW5nOgorICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgorICAgIGNhc2Ugb3BfaXNfZnVu
Y3Rpb246CisgICAgY2FzZSBvcF90b19udW1iZXI6CisgICAgY2FzZSBvcF9uZWdhdGU6CisgICAg
Y2FzZSBvcF9uZXFfbnVsbDoKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgY2FzZSBvcF9ub3Q6
CisgICAgY2FzZSBvcF9tb3Y6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAg
IGNhc2Ugb3BfY3JlYXRlX3RoaXM6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxp
dmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKKyAgICAgICAgICAg
IHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFNlY29uZCBhbmQgdGhpcmQgYXJndW1l
bnRzLgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9i
eV92YWw6CisgICAgY2FzZSBvcF9pbjoKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgY2Fz
ZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6CisgICAgY2FzZSBvcF9hZGQ6CisgICAgY2FzZSBvcF9t
dWw6CisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBvcF9tb2Q6CisgICAgY2FzZSBvcF9zdWI6
CisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6CisgICAgY2FzZSBvcF91
cnNoaWZ0OgorICAgIGNhc2Ugb3BfYml0YW5kOgorICAgIGNhc2Ugb3BfYml0eG9yOgorICAgIGNh
c2Ugb3BfYml0b3I6CisgICAgY2FzZSBvcF9sZXNzOgorICAgIGNhc2Ugb3BfbGVzc2VxOgorICAg
IGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICBjYXNlIG9wX25z
dHJpY3RlcToKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgIGNhc2Ugb3BfbmVxOgorICAgIGNh
c2Ugb3BfZXE6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJh
bmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICBp
ZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGlu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8g
U2Vjb25kLCB0aGlyZCwgYW5kIGZvdXJ0aCBhcmd1bWVudHMuCisgICAgY2FzZSBvcF9jYWxsX3Zh
cmFyZ3M6CisgICAgY2FzZSBvcF9nZXRfcG5hbWVzOiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVn
aXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCisg
ICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJh
bmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICBp
ZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls0XS51
Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGlu
c3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8g
U2Vjb25kLCB0aGlyZCwgZm91cnRoLCBhbmQgZmlmdGggYXJndW1lbnRzLgorICAgIGNhc2Ugb3Bf
bmV4dF9wbmFtZTogeworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29k
ZUJsb2NrLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3Bl
cmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAg
IGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywg
aW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZv
ckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSkKKyAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJh
bmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBp
bnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2Rl
QmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzVdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgLy8gU2Vjb25kLCB0aGlyZCwgZm91cnRoLCBmaWZ0aCwgYW5kIHNpeHRoIGFy
Z3VtZW50cy4gCisgICAgY2FzZSBvcF9nZXRfYnlfcG5hbWU6IHsKKyAgICAgICAgaWYgKGlzVmFs
aWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mo
Y29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9y
T3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAg
ICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9u
WzRdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNl
cywgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kKSkKKyAgICAg
ICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvbls1XS51Lm9w
ZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChj
b2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzZdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgLy8gVGhpcmQgYXJndW1lbnQuCisgICAgY2FzZSBvcF9zd2l0Y2hfc3Ry
aW5nOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7
CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9j
aywgdXNlcywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAvLyBWYXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGNhc2Ugb3BfbmV3
X2FycmF5OgorICAgIGNhc2Ugb3Bfc3RyY2F0OiB7CisgICAgICAgIGludCBiYXNlID0gaW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgICAgICBpbnQgY291bnQgPSBpbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAg
ICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgYmFzZSAr
IGkpKQorICAgICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBiYXNl
ICsgaSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBDcmF6eSBz
dHVmZiBmb3IgY2FsbHMuCisgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgY2FzZSBvcF9jYWxs
X2V2YWw6CisgICAgY2FzZSBvcF9jYWxsOiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJG
b3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCisgICAgICAg
ICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKKyAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
ICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Cisg
ICAgICAgIGludCBsYXN0QXJnID0gcmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKysp
IHsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ss
IGxhc3RBcmcgLSBpKSkKKyAgICAgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywg
dXNlcywgbGFzdEFyZyAtIGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgLy8gU3BlY2lhbCBzdHVmZiBmb3IgdGVhciBvZmYgYXJndW1lbnRzLgorICAgIGNhc2Ugb3Bf
dGVhcl9vZmZfYXJndW1lbnRzOiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZl
bmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBz
ZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
KyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgdW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKQorICAgICAg
ICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIHVubW9kaWZpZWRBcmd1bWVudHNS
ZWdpc3RlcihpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkK
KyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIH0KK30KKworc3RhdGlj
IHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIGRlZnMpCit7CisgICAgSW50
ZXJwcmV0ZXIqIGludGVycHJldGVyID0gY29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRlcjsKKyAg
ICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmJlZ2luKCk7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJmluc3RydWN0aW9u
c0JlZ2luW2J5dGVjb2RlT2Zmc2V0XTsKKyAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJl
dGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbi0+dS5vcGNvZGUpOworICAgIHN3aXRjaCAob3Bj
b2RlSUQpIHsKKyAgICAvLyBUaGVzZSBkb24ndCBkZWZpbmUgYW55dGhpbmcuCisgICAgY2FzZSBv
cF9pbml0X2dsb2JhbF9jb25zdDoKKyAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0X25vcDoK
KyAgICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29w
ZToKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3BvcF9zY29wZToKKyAg
ICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfd2lsbF9jYWxsOgorICAgIGNhc2Ug
b3BfcHJvZmlsZV9kaWRfY2FsbDoKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhy
b3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9yZXQ6Cisg
ICAgY2FzZSBvcF9yZXRfb2JqZWN0X29yX3RoaXM6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2Fz
ZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgor
ICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBv
cF9qbGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAg
ICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBvcF9q
bmxlc3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRlcmVx
OgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBj
YXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNl
IG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZToKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZF9yZXBsYWNlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRp
b246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgY2FzZSBv
cF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9w
dXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNp
dGlvbl9ub3JtYWxfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfZ2VuZXJpYzoK
KyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDoK
KyAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDoKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICBj
YXNlIG9wX2RlbF9ieV92YWw6CisgICAgICAgIHJldHVybjsKKyAgICAvLyBUaGVzZSBhbGwgaGF2
ZSBhIHNpbmdsZSBkZXN0aW5hdGlvbiBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LgorICAgIGNhc2Ug
b3BfbmV4dF9wbmFtZToKKyAgICBjYXNlIG9wX2dldF9wbmFtZXM6CisgICAgY2FzZSBvcF9yZXNv
bHZlX3Njb3BlOgorICAgIGNhc2Ugb3Bfc3RyY2F0OgorICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0
aXZhdGlvbjoKKyAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZToKKyAgICBjYXNlIG9wX2NhdGNoOgor
ICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgY2Fz
ZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToK
KyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNl
IG9wX25ld19mdW5jX2V4cDoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9w
X2dldF9mcm9tX3Njb3BlOgorICAgIGNhc2Ugb3BfY2FsbDoKKyAgICBjYXNlIG9wX2NhbGxfZXZh
bDoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICBj
YXNlIG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZToKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxm
OgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2No
YWluOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9zZWxmOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX2dldHRlcl9wcm90bzoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hhaW46
CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3NlbGY6CisgICAgY2FzZSBvcF9nZXRfYnlf
aWRfY3VzdG9tX3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9jaGFpbjoKKyAg
ICBjYXNlIG9wX2dldF9ieV9pZF9nZW5lcmljOgorICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0
aDoKKyAgICBjYXNlIG9wX2dldF9zdHJpbmdfbGVuZ3RoOgorICAgIGNhc2Ugb3BfY2hlY2tfaGFz
X2luc3RhbmNlOgorICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjoKKyAgICBjYXNlIG9wX2dldF9ieV92
YWw6CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRfYnlfdmFsOgorICAgIGNhc2Ugb3BfZ2V0X2J5
X3BuYW1lOgorICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19sZW5ndGg6CisgICAgY2FzZSBvcF90
eXBlb2Y6CisgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CisgICAgY2FzZSBvcF9pc19ib29sZWFu
OgorICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgorICAgIGNhc2Ugb3BfaXNfc3RyaW5nOgorICAgIGNh
c2Ugb3BfaXNfb2JqZWN0OgorICAgIGNhc2Ugb3BfaXNfZnVuY3Rpb246CisgICAgY2FzZSBvcF9p
bjoKKyAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICBjYXNlIG9wX25lZ2F0ZToKKyAgICBjYXNl
IG9wX2FkZDoKKyAgICBjYXNlIG9wX211bDoKKyAgICBjYXNlIG9wX2RpdjoKKyAgICBjYXNlIG9w
X21vZDoKKyAgICBjYXNlIG9wX3N1YjoKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBjYXNlIG9w
X3JzaGlmdDoKKyAgICBjYXNlIG9wX3Vyc2hpZnQ6CisgICAgY2FzZSBvcF9iaXRhbmQ6CisgICAg
Y2FzZSBvcF9iaXR4b3I6CisgICAgY2FzZSBvcF9iaXRvcjoKKyAgICBjYXNlIG9wX2luYzoKKyAg
ICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX2VxOgorICAgIGNhc2Ugb3BfbmVxOgorICAgIGNh
c2Ugb3Bfc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9sZXNz
OgorICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICBjYXNlIG9w
X2dyZWF0ZXJlcToKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgIGNhc2Ugb3BfZXFfbnVsbDoK
KyAgICBjYXNlIG9wX25vdDoKKyAgICBjYXNlIG9wX21vdjoKKyAgICBjYXNlIG9wX25ld19vYmpl
Y3Q6CisgICAgY2FzZSBvcF90b190aGlzOgorICAgIGNhc2Ugb3BfZ2V0X2NhbGxlZToKKyAgICBj
YXNlIG9wX2luaXRfbGF6eV9yZWc6CisgICAgY2FzZSBvcF9jcmVhdGVfYWN0aXZhdGlvbjoKKyAg
ICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkKKyAgICAg
ICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCBkZWZzLCBpbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfdGVhcl9vZmZfYXJn
dW1lbnRzOiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxv
Y2ssIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCAtIDEpKQorICAgICAgICAgICAgc2V0Rm9yT3Bl
cmFuZChjb2RlQmxvY2ssIGRlZnMsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCAtIDEpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfZW50ZXI6IHsKKyAgICAgICAgZGVmcy5z
ZXRBbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB1bnNp
Z25lZCBnZXRMZWFkZXJPZmZzZXRGb3JCYXNpY0Jsb2NrKFJlZlB0cjxCeXRlY29kZUJhc2ljQmxv
Y2s+KiBiYXNpY0Jsb2NrKQoreworICAgIHJldHVybiAoKmJhc2ljQmxvY2spLT5sZWFkZXJCeXRl
Y29kZU9mZnNldCgpOworfQorCitzdGF0aWMgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBmaW5kQmFzaWNC
bG9ja1dpdGhMZWFkZXJPZmZzZXQoVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+ID4m
IGJhc2ljQmxvY2tzLCB1bnNpZ25lZCBsZWFkZXJPZmZzZXQpCit7CisgICAgcmV0dXJuICgqdHJ5
QmluYXJ5U2VhcmNoPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+LCB1bnNpZ25lZD4oYmFzaWNC
bG9ja3MsIGJhc2ljQmxvY2tzLnNpemUoKSwgbGVhZGVyT2Zmc2V0LCBnZXRMZWFkZXJPZmZzZXRG
b3JCYXNpY0Jsb2NrKSkuZ2V0KCk7Cit9CisKK3N0YXRpYyBib29sIGJsb2NrQ29udGFpbnNCeXRl
Y29kZU9mZnNldChCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCkKK3sKKyAgICB1bnNpZ25lZCBsZWFkZXJPZmZzZXQgPSBibG9jay0+bGVhZGVyQnl0ZWNv
ZGVPZmZzZXQoKTsKKyAgICByZXR1cm4gYnl0ZWNvZGVPZmZzZXQgPj0gbGVhZGVyT2Zmc2V0ICYm
IGJ5dGVjb2RlT2Zmc2V0IDwgbGVhZGVyT2Zmc2V0ICsgYmxvY2stPnRvdGFsQnl0ZWNvZGVMZW5n
dGgoKTsKK30KKworc3RhdGljIEJ5dGVjb2RlQmFzaWNCbG9jayogZmluZEJhc2ljQmxvY2tGb3JC
eXRlY29kZU9mZnNldChWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiYgYmFzaWNC
bG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworLyoKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYmFzaWNCbG9ja3Muc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGJsb2Nr
Q29udGFpbnNCeXRlY29kZU9mZnNldChiYXNpY0Jsb2Nrc1tpXS5nZXQoKSwgYnl0ZWNvZGVPZmZz
ZXQpKQorICAgICAgICAgICAgcmV0dXJuIGJhc2ljQmxvY2tzW2ldLmdldCgpOworICAgIH0KKyAg
ICByZXR1cm4gMDsKKyovCisgICAgUmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4qIGJhc2ljQmxv
Y2sgPSBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaDxSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiwg
dW5zaWduZWQ+KAorICAgICAgICBiYXNpY0Jsb2NrcywgYmFzaWNCbG9ja3Muc2l6ZSgpLCBieXRl
Y29kZU9mZnNldCwgZ2V0TGVhZGVyT2Zmc2V0Rm9yQmFzaWNCbG9jayk7CisgICAgLy8gV2UgZm91
bmQgdGhlIGJsb2NrIHdlIHdlcmUgbG9va2luZyBmb3IuCisgICAgaWYgKGJsb2NrQ29udGFpbnNC
eXRlY29kZU9mZnNldCgoKmJhc2ljQmxvY2spLmdldCgpLCBieXRlY29kZU9mZnNldCkpCisgICAg
ICAgIHJldHVybiAoKmJhc2ljQmxvY2spLmdldCgpOworCisgICAgLy8gQmFzaWMgYmxvY2sgaXMg
dG8gdGhlIGxlZnQgb2YgdGhlIHJldHVybmVkIGJsb2NrLgorICAgIGlmIChieXRlY29kZU9mZnNl
dCA8ICgqYmFzaWNCbG9jayktPmxlYWRlckJ5dGVjb2RlT2Zmc2V0KCkpIHsKKyAgICAgICAgQVNT
RVJUKGJhc2ljQmxvY2sgLSAxID49IGJhc2ljQmxvY2tzLmRhdGEoKSk7CisgICAgICAgIEFTU0VS
VChibG9ja0NvbnRhaW5zQnl0ZWNvZGVPZmZzZXQoYmFzaWNCbG9ja1stMV0uZ2V0KCksIGJ5dGVj
b2RlT2Zmc2V0KSk7CisgICAgICAgIHJldHVybiBiYXNpY0Jsb2NrWy0xXS5nZXQoKTsKKyAgICB9
CisKKyAgICAvLyBCYXNpYyBibG9jayBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIHJldHVybmVkIGJs
b2NrLgorICAgIEFTU0VSVCgmYmFzaWNCbG9ja1sxXSA8PSAmYmFzaWNCbG9ja3MubGFzdCgpKTsK
KyAgICBBU1NFUlQoYmxvY2tDb250YWluc0J5dGVjb2RlT2Zmc2V0KGJhc2ljQmxvY2tbMV0uZ2V0
KCksIGJ5dGVjb2RlT2Zmc2V0KSk7CisgICAgcmV0dXJuIGJhc2ljQmxvY2tbMV0uZ2V0KCk7Cit9
CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxSZWZQ
dHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiA+JiBiYXNpY0Jsb2NrcywgdW5zaWduZWQgdGFyZ2V0T2Zm
c2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCit7CisgICAgQVNTRVJUKCFibG9jay0+aXNFeGl0
QmxvY2soKSk7CisgICAgQVNTRVJUKCFibG9jay0+aXNFbnRyeUJsb2NrKCkpOworCisgICAgRmFz
dEJpdFZlY3RvciBvdXQgPSBibG9jay0+b3V0KCk7CisgICAgSGFuZGxlckluZm8qIGhhbmRsZXIg
PSAwOworCisgICAgRmFzdEJpdFZlY3RvciB1c2VzOworICAgIEZhc3RCaXRWZWN0b3IgZGVmczsK
KyAgICB1c2VzLnJlc2l6ZShvdXQubnVtQml0cygpKTsKKyAgICBkZWZzLnJlc2l6ZShvdXQubnVt
Qml0cygpKTsKKworICAgIGZvciAoaW50IGkgPSBibG9jay0+Ynl0ZWNvZGVPZmZzZXRzKCkuc2l6
ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQg
PSBibG9jay0+Ynl0ZWNvZGVPZmZzZXRzKClbaV07CisgICAgICAgIGlmICh0YXJnZXRPZmZzZXQg
PiBieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHVzZXMuY2xl
YXJBbGwoKTsKKyAgICAgICAgZGVmcy5jbGVhckFsbCgpOworCisgICAgICAgIGNvbXB1dGVVc2Vz
Rm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgdXNlcyk7CisgICAg
ICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNl
dCwgZGVmcyk7CisKKyAgICAgICAgb3V0LmV4Y2x1ZGUoZGVmcyk7CisgICAgICAgIG91dC5tZXJn
ZSh1c2VzKTsKKworICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCB3
ZSB3YW50IHRoZSBsaXZlLWluIHZhcmlhYmxlcyBvZiB0aGUgCisgICAgICAgIC8vIGV4Y2VwdGlv
biBoYW5kbGVyIGJsb2NrIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBsaXZlLWluIG9mIHRoaXMgcGFy
dGljdWxhciBieXRlY29kZS4KKyAgICAgICAgaWYgKChoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5k
bGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSkgeworICAgICAgICAgICAgQnl0
ZWNvZGVCYXNpY0Jsb2NrKiBoYW5kbGVyQmxvY2sgPSBmaW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJP
ZmZzZXQoYmFzaWNCbG9ja3MsIGhhbmRsZXItPnRhcmdldCk7CisgICAgICAgICAgICBBU1NFUlQo
aGFuZGxlckJsb2NrKTsKKyAgICAgICAgICAgIG91dC5tZXJnZShoYW5kbGVyQmxvY2stPmluKCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0LnNldChvdXQpOworfQorCitzdGF0aWMg
dm9pZCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBC
eXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrLCBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9j
az4gPiYgYmFzaWNCbG9ja3MpCit7CisgICAgaWYgKGJsb2NrLT5pc0V4aXRCbG9jaygpIHx8IGJs
b2NrLT5pc0VudHJ5QmxvY2soKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvbXB1dGVMb2NhbExp
dmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBibG9jaywgYmFzaWNCbG9ja3MsIGJs
b2NrLT5sZWFkZXJCeXRlY29kZU9mZnNldCgpLCBibG9jay0+aW4oKSk7Cit9CisKK3ZvaWQgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpydW5MaXZlbmVzc0ZpeHBvaW50KCkKK3sKKyAgICBBU1NF
UlQoIW1fY29tcHV0ZWQpOworICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9j
ayA9IG1fY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgIHVuc2lnbmVkIG51bWJl
ck9mVmFyaWFibGVzID0gdW5saW5rZWRDb2RlQmxvY2stPm1fbnVtVmFycyArIAorICAgICAgICB1
bmxpbmtlZENvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgLSBudW1iZXJPZkNhcHR1cmVk
VmFyaWFibGVzKG1fY29kZUJsb2NrKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2Jhc2ljQmxvY2tzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayog
YmxvY2sgPSBtX2Jhc2ljQmxvY2tzW2ldLmdldCgpOworICAgICAgICBibG9jay0+aW4oKS5yZXNp
emUobnVtYmVyT2ZWYXJpYWJsZXMpOworICAgICAgICBibG9jay0+b3V0KCkucmVzaXplKG51bWJl
ck9mVmFyaWFibGVzKTsKKyAgICB9CisKKyAgICBib29sIGNoYW5nZWQ7CisgICAgbV9iYXNpY0Js
b2Nrcy5sYXN0KCktPmluKCkuY2xlYXJBbGwoKTsKKyAgICBtX2Jhc2ljQmxvY2tzLmxhc3QoKS0+
b3V0KCkuY2xlYXJBbGwoKTsKKyAgICBGYXN0Qml0VmVjdG9yIG5ld091dDsKKyAgICBuZXdPdXQu
cmVzaXplKG1fYmFzaWNCbG9ja3MubGFzdCgpLT5vdXQoKS5udW1CaXRzKCkpOworICAgIGRvIHsK
KyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKGludCBpID0gbV9iYXNpY0Js
b2Nrcy5zaXplKCkgLSAyOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgQnl0ZWNvZGVCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fYmFzaWNCbG9ja3NbaV0uZ2V0KCk7CisgICAgICAgICAgICBuZXdP
dXQuY2xlYXJBbGwoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBibG9j
ay0+c3VjY2Vzc29ycygpLnNpemUoKTsgaisrKQorICAgICAgICAgICAgICAgIG5ld091dC5tZXJn
ZShibG9jay0+c3VjY2Vzc29ycygpW2pdLT5pbigpKTsKKyAgICAgICAgICAgIGJvb2wgb3V0RGlk
Q2hhbmdlID0gYmxvY2stPm91dCgpLnNldEFuZENoZWNrKG5ld091dCk7CisgICAgICAgICAgICBj
b21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKG1fY29kZUJsb2NrLCBibG9jaywgbV9iYXNpY0Js
b2Nrcyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG91dERpZENoYW5nZTsKKyAgICAgICAgfQor
ICAgIH0gd2hpbGUgKGNoYW5nZWQpOworfQorCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
czo6Z2V0TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldCh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KQoreworICAgIEJ5dGVj
b2RlQmFzaWNCbG9jayogYmxvY2sgPSBmaW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1f
YmFzaWNCbG9ja3MsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBBU1NFUlQoYmxvY2spOworICAgIEFT
U0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygpKTsKKyAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRC
bG9jaygpKTsKKyAgICByZXN1bHQucmVzaXplKGJsb2NrLT5vdXQoKS5udW1CaXRzKCkpOworICAg
IGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQobV9jb2RlQmxvY2ssIGJsb2Nr
LCBtX2Jhc2ljQmxvY2tzLCBieXRlY29kZU9mZnNldCwgcmVzdWx0KTsKK30KKworYm9vbCBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM6Om9wZXJhbmRJc0xpdmVBdEJ5dGVjb2RlT2Zmc2V0KGludCBv
cGVyYW5kLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBpbnQgbnVtQ2FwdHVyZWRW
YXJzID0gbnVtYmVyT2ZDYXB0dXJlZFZhcmlhYmxlcyhtX2NvZGVCbG9jayk7CisgICAgQVNTRVJU
KG1fY29tcHV0ZWQpOworICAgIGlmIChvcGVyYW5kIC0gbnVtQ2FwdHVyZWRWYXJzIDwgMCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgRmFzdEJpdFZlY3RvciByZXN1bHQ7CisgICAgZ2V0TGl2
ZW5lc3NJbmZvRm9yTm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNl
dCwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LmdldChvcGVyYW5kIC0gbnVtQ2FwdHVyZWRW
YXJzKTsKK30KKworRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExp
dmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7Cisg
ICAgRmFzdEJpdFZlY3RvciB0ZW1wOworICAgIEZhc3RCaXRWZWN0b3IgcmVzdWx0OworCisgICAg
Z2V0TGl2ZW5lc3NJbmZvRm9yTm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCwgdGVtcCk7CisKKyAgICB1bnNpZ25lZCBudW1DYXB0dXJlZFZhcnMgPSBudW1iZXJP
ZkNhcHR1cmVkVmFyaWFibGVzKG1fY29kZUJsb2NrKTsKKyAgICByZXN1bHQucmVzaXplKHRlbXAu
bnVtQml0cygpICsgbnVtQ2FwdHVyZWRWYXJzKTsKKyAgICBmb3IgKGludCBpID0gY2FwdHVyZVN0
YXJ0KG1fY29kZUJsb2NrKTsgaSA8IGNhcHR1cmVFbmQobV9jb2RlQmxvY2spOyBpKyspCisgICAg
ICAgIHJlc3VsdC5zZXQoaSk7CisKKyAgICBpbnQgdGVtcExlbmd0aCA9IHRlbXAubnVtQml0cygp
OworICAgIEFTU0VSVCh0ZW1wTGVuZ3RoID49IDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
dGVtcExlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmICghdGVtcC5nZXQoaSkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBpZiAoIW51bUNhcHR1cmVkVmFycykgeworICAgICAgICAg
ICAgcmVzdWx0LnNldChpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGkgPCBjYXB0dXJlU3RhcnQobV9jb2RlQmxvY2spKQorICAgICAgICAgICAgcmVz
dWx0LnNldChpKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHJlc3VsdC5zZXQobnVtQ2Fw
dHVyZWRWYXJzICsgaSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cygpCit7CisgICAgQVNTRVJUKG1fY29t
cHV0ZWQpOworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fY29kZUJsb2NrLT52bSgp
LT5pbnRlcnByZXRlcjsKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9iYXNpY0Jsb2Nrcy5zaXplKCk7IGkrKykgeworICAgICAgICBCeXRlY29kZUJhc2lj
QmxvY2sqIGJsb2NrID0gbV9iYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKKyAgICAgICAgZGF0YUxvZ0Yo
IlxuQnl0ZWNvZGUgYmFzaWMgYmxvY2sgJXU6ICVwIChvZmZzZXQ6ICV1LCBsZW5ndGg6ICV1KVxu
IiwgaSwgYmxvY2ssIGJsb2NrLT5sZWFkZXJCeXRlY29kZU9mZnNldCgpLCBibG9jay0+dG90YWxC
eXRlY29kZUxlbmd0aCgpKTsKKyAgICAgICAgZGF0YUxvZ0YoIlByZWRlY2Vzc29yczogIik7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBibG9jay0+cHJlZGVjZXNzb3JzKCkuc2l6
ZSgpOyBqKyspIHsKKyAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogcHJlZGVjZXNzb3Ig
PSBibG9jay0+cHJlZGVjZXNzb3JzKClbal07CisgICAgICAgICAgICBkYXRhTG9nRigiJXAgIiwg
cHJlZGVjZXNzb3IpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dGKCJcbiIpOworICAgICAg
ICBkYXRhTG9nRigiU3VjY2Vzc29yczogIik7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IGogPCBibG9jay0+c3VjY2Vzc29ycygpLnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICBCeXRl
Y29kZUJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3JzKClbal07CisgICAg
ICAgICAgICBkYXRhTG9nRigiJXAgIiwgc3VjY2Vzc29yKTsKKyAgICAgICAgfQorICAgICAgICBk
YXRhTG9nRigiXG4iKTsKKyAgICAgICAgaWYgKGJsb2NrLT5pc0VudHJ5QmxvY2soKSkgeworICAg
ICAgICAgICAgZGF0YUxvZ0YoIkVudHJ5IGJsb2NrICVwXG4iLCBibG9jayk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmxvY2stPmlzRXhpdEJsb2NrKCkp
IHsKKyAgICAgICAgICAgIGRhdGFMb2dGKCJFeGl0IGJsb2NrOiAlcFxuIiwgYmxvY2spOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCA9IGJsb2NrLT5sZWFkZXJCeXRlY29kZU9mZnNldCgpOyBieXRlY29kZU9mZnNl
dCA8IGJsb2NrLT5sZWFkZXJCeXRlY29kZU9mZnNldCgpICsgYmxvY2stPnRvdGFsQnl0ZWNvZGVM
ZW5ndGgoKTspIHsKKyAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRdOworCisgICAgICAgICAg
ICBkYXRhTG9nRigiTGl2ZSB2YXJpYWJsZXM6ICIpOworICAgICAgICAgICAgRmFzdEJpdFZlY3Rv
ciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChieXRlY29kZU9m
ZnNldCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbGl2ZUJlZm9yZS5u
dW1CaXRzKCk7IGorKykgeworICAgICAgICAgICAgICAgIGlmIChsaXZlQmVmb3JlLmdldChqKSkK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiV1ICIsIGopOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+ZHVt
cEJ5dGVjb2RlKFdURjo6ZGF0YUZpbGUoKSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCksIGluc3RydWN0aW9uc0JlZ2luLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworCisg
ICAgICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5nZXRPcGNvZGVJRChp
bnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF0udS5vcGNvZGUpOworICAgICAgICAgICAg
dW5zaWduZWQgb3Bjb2RlTGVuZ3RoID0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CisgICAgICAg
ICAgICBieXRlY29kZU9mZnNldCArPSBvcGNvZGVMZW5ndGg7CisgICAgICAgIH0KKworICAgICAg
ICBkYXRhTG9nRigiTGl2ZSB2YXJpYWJsZXM6ICIpOworICAgICAgICBGYXN0Qml0VmVjdG9yIGxp
dmVBZnRlciA9IGJsb2NrLT5vdXQoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IGxpdmVBZnRlci5udW1CaXRzKCk7IGorKykgeworICAgICAgICAgICAgaWYgKGxpdmVBZnRlci5n
ZXQoaikpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiV1ICIsIGopOworICAgICAgICB9Cisg
ICAgICAgIGRhdGFMb2dGKCJcbiIpOworICAgIH0KK30KKwordm9pZCBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM6OmNvbXB1dGUoKQoreworICAgIGlmIChtX2NvbXB1dGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBjb21wdXRlQnl0ZWNvZGVCYXNpY0Jsb2NrcyhtX2NvZGVCbG9jaywgbV9iYXNp
Y0Jsb2Nrcyk7CisgICAgQVNTRVJUKG1fYmFzaWNCbG9ja3Muc2l6ZSgpKTsKKyAgICBydW5MaXZl
bmVzc0ZpeHBvaW50KCk7CisgICAgbV9jb21wdXRlZCA9IHRydWU7CisKKyAgICBpZiAoT3B0aW9u
czo6ZHVtcEJ5dGVjb2RlTGl2ZW5lc3NSZXN1bHRzKCkpCisgICAgICAgIGR1bXBSZXN1bHRzKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNfaAorI2RlZmluZSBCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXNfaAorCisjaW5jbHVkZSAiQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiCisjaW5jbHVk
ZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsK
KworY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIHsKK3B1YmxpYzoKKyAgICBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKik7CisgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzKGNvbnN0IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYpOworCisgICAgYm9vbCBvcGVyYW5k
SXNMaXZlQXRCeXRlY29kZU9mZnNldChpbnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpOworICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh1
bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisKKyAgICBib29sIGhhc0JlZW5Db21wdXRlZCgpIHsg
cmV0dXJuIG1fY29tcHV0ZWQ7IH0KKyAgICB2b2lkIGNvbXB1dGUoKTsKKyAgICB2b2lkIGNvbXB1
dGVJZk5lY2Vzc2FyeSgpCisgICAgeworICAgICAgICBpZiAobV9jb21wdXRlZCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY29tcHV0ZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2
b2lkIHJ1bkxpdmVuZXNzRml4cG9pbnQoKTsKKyAgICB2b2lkIGR1bXBSZXN1bHRzKCk7CisKKyAg
ICB2b2lkIGdldExpdmVuZXNzSW5mb0Zvck5vbkNhcHR1cmVkVmFyc0F0Qnl0ZWNvZGVPZmZzZXQo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImKTsKKworICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7CisgICAgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+ID4g
bV9iYXNpY0Jsb2NrczsKKworICAgIGJvb2wgbV9jb21wdXRlZDsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAx
NTM3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ5OSw2ICsxNDk5LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2so
Q29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkK
ICAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKICAgICAsIG1faGFzaChvdGhl
ci5tX2hhc2gpCisgICAgLCBtX2xpdmVuZXNzQW5hbHlzaXMob3RoZXIubV9saXZlbmVzc0FuYWx5
c2lzKQogI2lmIEVOQUJMRShKSVQpCiAgICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6
Q2FwYWJpbGl0eUxldmVsTm90U2V0KQogI2VuZGlmCkBAIC0xNTM5LDYgKzE1NDAsNyBAQCBDb2Rl
QmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX29zckV4aXRDb3Vu
dGVyKDApCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQogICAgICwgbV9yZW9w
dGltaXphdGlvblJldHJ5Q291bnRlcigwKQorICAgICwgbV9saXZlbmVzc0FuYWx5c2lzKHRoaXMp
CiAjaWYgRU5BQkxFKEpJVCkKICAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBh
YmlsaXR5TGV2ZWxOb3RTZXQpCiAjZW5kaWYKQEAgLTE4NDEsNiArMTg0Myw3IEBAIENvZGVCbG9j
azo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAogICAgIGlmIChPcHRpb25zOjpkdW1w
R2VuZXJhdGVkQnl0ZWNvZGVzKCkpCiAgICAgICAgIGR1bXBCeXRlY29kZSgpOworCiAgICAgbV92
bS0+ZmluaXNoZWRDb21waWxpbmcodGhpcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1Mzc5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5VmFsSW5m
by5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKKyNpbmNsdWRlICJCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNsdWRl
ICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
a0hhc2guaCIKQEAgLTkyLDYgKzkzLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3Np
bmdUaGlzT2JqZQogCiBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8Q29kZUJsb2NrPiwgcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIsIHB1YmxpYyBXZWFr
UmVmZXJlbmNlSGFydmVzdGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBm
cmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogICAgIGZyaWVuZCBjbGFzcyBK
SVQ7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIHB1YmxpYzoKQEAg
LTcwOCw2ICs3MTAsOCBAQCBwdWJsaWM6CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0Rm9yKENvZGVPcmlnaW4pOwogCisgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBsaXZl
bmVzc0FuYWx5c2lzKCkgeyByZXR1cm4gbV9saXZlbmVzc0FuYWx5c2lzOyB9CisKICAgICAvLyBK
dW1wIFRhYmxlcwogCiAgICAgc2l6ZV90IG51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2l6
ZSgpIDogMDsgfQpAQCAtMTEwNiw2ICsxMTEwLDggQEAgcHJpdmF0ZToKICAgICAKICAgICBtdXRh
YmxlIENvZGVCbG9ja0hhc2ggbV9oYXNoOwogCisgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
IG1fbGl2ZW5lc3NBbmFseXNpczsKKwogICAgIHN0cnVjdCBSYXJlRGF0YSB7CiAgICAgICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwCShyZXZp
c2lvbiAxNTM3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1
bXBUYXJnZXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNjYgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK3RlbXBsYXRlIDxzaXplX3QgdmVjdG9yU2l6ZT4KK3N0YXRpYyB2b2lkIGdl
dEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEludGVy
cHJldGVyKiBpbnRlcnByZXRlciwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luLCB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgVmVjdG9yPHVuc2lnbmVkLCB2ZWN0b3JTaXplPiYgb3V0KQor
eworICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3Ry
dWN0aW9uc0JlZ2luW2J5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSk7CisgICAgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnQgPSBpbnN0cnVjdGlvbnNCZWdpbiArIGJ5dGVjb2RlT2Zmc2V0OworICAgIHN3aXRj
aCAob3Bjb2RlSUQpIHsKKyAgICBjYXNlIG9wX2ptcDoKKyAgICAgICAgb3V0LmFwcGVuZChieXRl
Y29kZU9mZnNldCArIGN1cnJlbnRbMV0udS5vcGVyYW5kKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxs
OgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zm
c2V0ICsgY3VycmVudFsyXS51Lm9wZXJhbmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9w
X2puZXFfcHRyOgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAg
IGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bf
am5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6Cisg
ICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNl
dCArIGN1cnJlbnRbM10udS5vcGVyYW5kKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9z
d2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6IHsKKyAgICAgICAgU2ltcGxlSnVt
cFRhYmxlJiB0YWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGN1cnJlbnRbMV0udS5v
cGVyYW5kKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGFibGUuYnJhbmNoT2Zmc2V0cy5z
aXplKCk7IGktLTspCisgICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgdGFi
bGUuYnJhbmNoT2Zmc2V0c1tpXSk7CisgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQg
KyBjdXJyZW50WzJdLnUub3BlcmFuZCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IG9wX3N3aXRjaF9zdHJpbmc6IHsKKyAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IGNv
ZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGN1cnJlbnRbMV0udS5vcGVyYW5kKTsKKyAg
ICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgaXRlciA9
IHRhYmxlLm9mZnNldFRhYmxlLmJlZ2luKCk7CisgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3Ry
aW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLm9mZnNldFRhYmxlLmVuZCgpOwor
ICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgIG91dC5hcHBl
bmQoYnl0ZWNvZGVPZmZzZXQgKyBpdGVyLT52YWx1ZS5icmFuY2hPZmZzZXQpOworICAgICAgICBv
dXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFsyXS51Lm9wZXJhbmQpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBvcF9nZXRfcG5hbWVzOgorICAgICAgICBvdXQuYXBw
ZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFs1XS51Lm9wZXJhbmQpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIG9wX25leHRfcG5hbWU6CisgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVP
ZmZzZXQgKyBjdXJyZW50WzZdLnUub3BlcmFuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
b3BfY2hlY2tfaGFzX2luc3RhbmNlOgorICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0
ICsgY3VycmVudFs0XS51Lm9wZXJhbmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2xv
b3BfaGludDoKKyAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogdm9pZCBjb21w
dXRlUHJlY2lzZUp1bXBUYXJnZXRzKENvZGVCbG9jayogY29kZUJsb2NrLCBWZWN0b3I8dW5zaWdu
ZWQsIDMyPiYgb3V0KQogewogICAgIEFTU0VSVChvdXQuaXNFbXB0eSgpKTsKQEAgLTQ1LDYwICsx
MDUsNyBAQCB2b2lkIGNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMoQ29kZUJsb2NrCiAgICAgdW5z
aWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
OwogICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8
IGluc3RydWN0aW9uQ291bnQ7KSB7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJw
cmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uc0JlZ2luW2J5dGVjb2RlT2Zmc2V0XS51Lm9w
Y29kZSk7Ci0gICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50ID0gaW5zdHJ1Y3Rpb25zQmVnaW4g
KyBieXRlY29kZU9mZnNldDsKLSAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBj
YXNlIG9wX2ptcDoKLSAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJy
ZW50WzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9q
dHJ1ZToKLSAgICAgICAgY2FzZSBvcF9qZmFsc2U6Ci0gICAgICAgIGNhc2Ugb3BfamVxX251bGw6
Ci0gICAgICAgIGNhc2Ugb3Bfam5lcV9udWxsOgotICAgICAgICAgICAgb3V0LmFwcGVuZChieXRl
Y29kZU9mZnNldCArIGN1cnJlbnRbMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIG9wX2puZXFfcHRyOgotICAgICAgICBjYXNlIG9wX2psZXNzOgotICAgICAg
ICBjYXNlIG9wX2psZXNzZXE6Ci0gICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6Ci0gICAgICAgIGNh
c2Ugb3BfamdyZWF0ZXJlcToKLSAgICAgICAgY2FzZSBvcF9qbmxlc3M6Ci0gICAgICAgIGNhc2Ug
b3Bfam5sZXNzZXE6Ci0gICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgotICAgICAgICBjYXNlIG9w
X2puZ3JlYXRlcmVxOgotICAgICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1
cnJlbnRbM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIG9w
X3N3aXRjaF9pbW06Ci0gICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6IHsKLSAgICAgICAgICAg
IFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShjdXJy
ZW50WzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0YWJsZS5i
cmFuY2hPZmZzZXRzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKGJ5
dGVjb2RlT2Zmc2V0ICsgdGFibGUuYnJhbmNoT2Zmc2V0c1tpXSk7Ci0gICAgICAgICAgICBvdXQu
YXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFsyXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOiB7Ci0g
ICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0
Y2hKdW1wVGFibGUoY3VycmVudFsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgU3RyaW5nSnVt
cFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLm9mZnNldFRh
YmxlLmJlZ2luKCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRh
YmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS5vZmZzZXRUYWJsZS5lbmQoKTsKLSAgICAgICAgICAg
IGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAgICAgIG91dC5hcHBlbmQo
Ynl0ZWNvZGVPZmZzZXQgKyBpdGVyLT52YWx1ZS5icmFuY2hPZmZzZXQpOwotICAgICAgICAgICAg
b3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbMl0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X3BuYW1lczoKLSAg
ICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzVdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9uZXh0X3BuYW1lOgotICAg
ICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbNl0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIG9wX2NoZWNrX2hhc19pbnN0YW5j
ZToKLSAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzRdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9sb29wX2hpbnQ6
Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAg
ICAgICAgZ2V0SnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGludGVycHJl
dGVyLCBpbnN0cnVjdGlvbnNCZWdpbiwgYnl0ZWNvZGVPZmZzZXQsIG91dCk7CiAgICAgICAgIGJ5
dGVjb2RlT2Zmc2V0ICs9IG9wY29kZUxlbmd0aHNbb3Bjb2RlSURdOwogICAgIH0KICAgICAKQEAg
LTExOCw1ICsxMjUsMTIgQEAgdm9pZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKENvZGVCbG9j
awogICAgIG91dC5yZXNpemUodG9JbmRleCk7CiB9CiAKK3ZvaWQgZmluZEp1bXBUYXJnZXRzRm9y
Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0LCBWZWN0b3I8dW5zaWduZWQsIDE+JiBvdXQpCit7CisgICAgSW50ZXJwcmV0ZXIqIGludGVy
cHJldGVyID0gY29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRlcjsKKyAgICBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7Cisg
ICAgZ2V0SnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGludGVycHJldGVy
LCBpbnN0cnVjdGlvbnNCZWdpbiwgYnl0ZWNvZGVPZmZzZXQsIG91dCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lz
ZUp1bXBUYXJnZXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5oCShyZXZpc2lvbiAxNTM3OTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIGNvbXB1dGVQcmVjaXNl
SnVtcFRhcmdldHMoQ29kZUJsb2NrKiwgVmVjdG9yPHVuc2lnbmVkLCAzMj4mIG91dCk7Cit2b2lk
IGZpbmRKdW1wVGFyZ2V0c0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayosIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0LCBWZWN0b3I8dW5zaWduZWQsIDE+JiBvdXQpOwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1
Mzc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw2ICs1NCw4IEBAIG5hbWVzcGFjZSB7IAogc3RhdGljIGNvbnN0IHNpemVfdCBs
YXJnZUhlYXBTaXplID0gMzIgKiBNQjsgLy8gQWJvdXQgMS41WCB0aGUgYXZlcmFnZSB3ZWJwYWdl
Lgogc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbEhlYXBTaXplID0gMSAqIE1COyAvLyBNYXRjaGVz
IHRoZSBGYXN0TWFsbG9jIHBlci10aHJlYWQgY2FjaGUuCiAKKyNkZWZpbmUgRU5BQkxFX0dDX0xP
R0dJTkcgMQorCiAjaWYgRU5BQkxFKEdDX0xPR0dJTkcpCiAjaWYgQ09NUElMRVIoQ0xBTkcpCiAj
ZGVmaW5lIERFRklORV9HQ19MT0dHSU5HX0dMT0JBTCh0eXBlLCBuYW1lLCBhcmd1bWVudHMpIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAJ
KHJldmlzaW9uIDE1Mzc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9K
U1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsMTAgQEAKICNpbmNsdWRlICJK
U1N0YWNrLmgiCiAjaW5jbHVkZSAiSlNTdGFja0lubGluZXMuaCIKIAorI2luY2x1ZGUgIkNhbGxG
cmFtZUlubGluZXMuaCIKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogI2luY2x1ZGUg
IkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTk4LDcgKzEwMCw2NCBAQCB2b2lkIEpTU3RhY2s6OmdhdGhlckNvbnNl
cnZhdGl2ZVJvb3RzKENvCiAKIHZvaWQgSlNTdGFjazo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMo
Q29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLCBKSVRTdHViUm91dGluZVNldCYg
aml0U3R1YlJvdXRpbmVzLCBERkdDb2RlQmxvY2tzJiBkZmdDb2RlQmxvY2tzKQogewotICAgIGNv
bnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBnZXRUb3BPZlN0YWNrKCksIGppdFN0dWJSb3V0
aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgaWYgKCFPcHRpb25zOjp1c2VCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXNGb3JDb25zZXJ2YXRpdmVTY2FuKCkpIHsKKyAgICAgICAgY29uc2VydmF0aXZl
Um9vdHMuYWRkKGJlZ2luKCksIGdldFRvcE9mU3RhY2soKSwgaml0U3R1YlJvdXRpbmVzLCBkZmdD
b2RlQmxvY2tzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENhbGxGcmFtZSogZnJh
bWUgPSBtX3RvcENhbGxGcmFtZTsKKyAgICBpZiAoZnJhbWUgPCBiZWdpbigpKQorICAgICAgICBy
ZXR1cm47CisgICAgQ2FsbEZyYW1lKiBsYXN0RnJhbWUgPSAwOworICAgIHZvaWQqIGJlZ2luID0g
dGhpcy0+YmVnaW4oKTsKKyAgICBmb3IgKENhbGxGcmFtZSogZnJhbWUgPSBtX3RvcENhbGxGcmFt
ZTsgZnJhbWUgPj0gYmVnaW47IGZyYW1lID0gKENhbGxGcmFtZSopKChzaXplX3QpZnJhbWUtPmNh
bGxlckZyYW1lKCkgJiAoc2l6ZV90KX4weDEpKSB7CisgICAgICAgIC8vIFNjYW4gQ2FsbEZyYW1l
IHNsb3RzLiBXZSBkb24ndCBuZWVkIHRvIHNjYW4gdGhlIENhbGxlckZyYW1lIG9yIHRoZSBBcmd1
bWVudENvdW50LCBzbyB3ZSBzdGFydCBmcm9tIHRoZSBDYWxsZWUuCisgICAgICAgIFJlZ2lzdGVy
KiByZWdzID0gZnJhbWUtPnJlZ2lzdGVycygpOworICAgICAgICBjb25zZXJ2YXRpdmVSb290cy5h
ZGQoJnJlZ3NbSlNTdGFjazo6Q2FsbGVlXSwgcmVncywgaml0U3R1YlJvdXRpbmVzLCBkZmdDb2Rl
QmxvY2tzKTsKKworICAgICAgICAvLyBTY2FuIGFyZ3VtZW50cy4KKyAgICAgICAgaWYgKGZyYW1l
ID4gYmVnaW4pIHsKKyAgICAgICAgICAgIGludCB0aGlzT2Zmc2V0ID0gLShKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplICsgMSk7CisgICAgICAgICAgICBpbnQgYXJnQ291bnQgPSBmcmFtZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKTsKKyAgICAgICAgICAgIGNvbnNlcnZhdGl2ZVJv
b3RzLmFkZCgmcmVnc1t0aGlzT2Zmc2V0IC0gKGFyZ0NvdW50IC0gMSldLCAmcmVnc1t0aGlzT2Zm
c2V0ICsgMV0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2NhbiBsaXZlIHJlZ2lzdGVycy4K
KyAgICAgICAgSlNDOjpDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGZyYW1lLT5jb2RlQmxvY2soKTsK
KyAgICAgICAgaWYgKCFjb2RlQmxvY2sgfHwgY29kZUJsb2NrLT5qaXRUeXBlKCkgPiBKSVRDb2Rl
OjpCYXNlbGluZUpJVCkgeworICAgICAgICAgICAgaWYgKGxhc3RGcmFtZSkKKyAgICAgICAgICAg
ICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQocmVncywgbGFzdEZyYW1lLT5yZWdpc3RlcnMoKSAt
IENhbGxGcmFtZUhlYWRlclNpemUsIGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKHJl
Z3MsIGdldFRvcE9mU3RhY2soKSwgaml0U3R1YlJvdXRpbmVzLCBkZmdDb2RlQmxvY2tzKTsKKyAg
ICAgICAgICAgIGxhc3RGcmFtZSA9IGZyYW1lOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldDsKKyAgICAgICAgaWYgKGZy
YW1lLT5oYXNMb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSkgeworICAgICAgICAgICAgYnl0ZWNv
ZGVPZmZzZXQgPSBmcmFtZS0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7CisgICAgICAgICAg
ICAvLyBGSVhNRTogSW4gdGhlIExMSW50IGFuZCBiYXNlbGluZSBKSVQsIGlmIHdlIHdlcmUgdGhl
IGxhc3QgZnJhbWUgYmVmb3JlIHRoZSBHQyAKKyAgICAgICAgICAgIC8vIHdhcyB0cmlnZ2VyZWQg
dGhlbiB3ZSBoYXZlIHRoaXMgZHVtYiBvZmYtYnktb25lIGFkZGl0aW9uIHRvIHRoZSBQQy4KKyAg
ICAgICAgICAgIGlmICghbGFzdEZyYW1lKQorICAgICAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0
IC09IDE7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBmcmFt
ZS0+Ynl0ZWNvZGVPZmZzZXRGcm9tQ29kZU9yaWdpbkluZGV4KCk7CisKKyAgICAgICAgY29kZUJs
b2NrLT5saXZlbmVzc0FuYWx5c2lzKCkuY29tcHV0ZUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIEZh
c3RCaXRWZWN0b3IgbGl2ZW5lc3NJbmZvID0gY29kZUJsb2NrLT5saXZlbmVzc0FuYWx5c2lzKCku
Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXZlbmVzc0luZm8ubnVtQml0cygpOyBpKyspIHsK
KyAgICAgICAgICAgIGlmIChsYXN0RnJhbWUgJiYgJnJlZ3NbaV0gPj0gbGFzdEZyYW1lLT5yZWdp
c3RlcnMoKSAtIChDYWxsRnJhbWVIZWFkZXJTaXplICsgbGFzdEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgaWYgKCFsaXZlbmVzc0luZm8uZ2V0KGkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxhc3RG
cmFtZSAmJiByZWdzW2ldLmpzVmFsdWUoKS5pc0NlbGwoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmVnc1tpXSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoJnJlZ3NbaV0sICZy
ZWdzW2kgKyAxXSk7CisgICAgICAgIH0KKyAgICAgICAgbGFzdEZyYW1lID0gZnJhbWU7CisgICAg
fQogfQogCiB2b2lkIEpTU3RhY2s6OnJlbGVhc2VFeGNlc3NDYXBhY2l0eSgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNTM3OTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk2LDYgKzk2LDcgQEAgdHlwZWRlZiBPcHRpb25SYW5nZSBvcHRpb25SYW5nZTsKICAgICB2KGJv
b2wsIGZvcmNlREZHQ29kZUJsb2NrTGl2ZW5lc3MsIGZhbHNlKSBcCiAgICAgXAogICAgIHYoYm9v
bCwgZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcywgZmFsc2UpIFwKKyAgICB2KGJvb2wsIGR1bXBCeXRl
Y29kZUxpdmVuZXNzUmVzdWx0cywgZmFsc2UpIFwKICAgICBcCiAgICAgLyogc2hvd0Rpc2Fzc2Vt
Ymx5IGltcGxpZXMgc2hvd0RGR0Rpc2Fzc2VtYmx5LiAqLyBcCiAgICAgdihib29sLCBzaG93RGlz
YXNzZW1ibHksIGZhbHNlKSBcCkBAIC0xOTIsNiArMTkzLDcgQEAgdHlwZWRlZiBPcHRpb25SYW5n
ZSBvcHRpb25SYW5nZTsKICAgICB2KGJvb2wsIGZvcmNlV2Vha1JhbmRvbVNlZWQsIGZhbHNlKSBc
CiAgICAgdih1bnNpZ25lZCwgZm9yY2VkV2Vha1JhbmRvbVNlZWQsIDApIFwKICAgICBcCisgICAg
dihib29sLCB1c2VCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNGb3JDb25zZXJ2YXRpdmVTY2FuLCBm
YWxzZSkgXAogICAgIHYoYm9vbCwgdXNlWm9tYmllTW9kZSwgZmFsc2UpIFwKICAgICB2KGJvb2ws
IG9iamVjdHNBcmVJbW1vcnRhbCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHNob3dPYmplY3RTdGF0
aXN0aWNzLCBmYWxzZSkgXApJbmRleDogU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAkocmV2aXNpb24gMTUz
Nzk3KQorKysgU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEZhc3RCaXRWZWN0b3JfaAogI2RlZmluZSBGYXN0Qml0
VmVjdG9yX2gKIAorI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25B
cnJheVB0ci5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216700</attachid>
            <date>2013-11-12 12:01:18 -0800</date>
            <delta_ts>2013-11-12 12:13:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118546-20131112120117.patch</filename>
            <type>text/plain</type>
            <size>71887</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MTMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxMy0wOC0wMiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvZGVCbG9ja3Mgc2hvdWxkIGJlIGFibGUgdG8gZGV0ZXJtaW5lIGJ5dGVjb2Rl
IGxpdmVuZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTg1NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHdpbGwgc2ltcGxpZnkgc29tZSB0aGluZ3MgaW4gdGhlIERGRyByZWxhdGVkIHRvIE9T
UiBleGl0cyBhbmQgZGV0ZXJtaW5pbmcgCisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIHZhcmlhYmxl
cyBhcmUgbGl2ZSBhdCB3aGljaCBwb2ludHMgZHVyaW5nIGV4ZWN1dGlvbi4gSXQgd2lsbAorICAg
ICAgICBhbHNvIGJlIHVzZWZ1bCBmb3IgbWFraW5nIG91ciBjb25zZXJ2YXRpdmUgR0Mgc2NhbiBt
b3JlIHByZWNpc2UuIEN1cnJlbnRseSBpdCAKKyAgICAgICAgZG9lc24ndCBwcm9wZXJseSBhY2Nv
dW50IGZvciBsaXZlbmVzcyB3aGlsZSB0aGUgREZHIGlzIHJ1bm5pbmcsIHNvIGl0IHdpbGwgYmUg
CisgICAgICAgIG9mZiBieSBkZWZhdWx0IGJlaGluZyBhIHJ1bnRpbWUgT3B0aW9ucyBmbGFnLgor
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6aXNCcmFuY2gpOiBVc2VkIHRvIGRldGVybWluZSB0aGUgZW5kIG9mIGJhc2ljIGJsb2Nr
cy4KKyAgICAgICAgKEpTQzo6aXNVbmNvbmRpdGlvbmFsQnJhbmNoKTogVXNlZCB0byBkZXRlcm1p
bmUgd2hlbiBhIGJyYW5jaCBhdCB0aGUgZW5kIG9mIGEgCisgICAgICAgIGJhc2ljIGJsb2NrIGNh
bid0IHBvc3NpYmx5IGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBiYXNpYyBibG9jayBpbiBwcm9n
cmFtIG9yZGVyLgorICAgICAgICAoSlNDOjppc1Rlcm1pbmFsKTogQWxzbyB1c2VkIHRvIGRldGVj
dCB0aGUgZW5kIG9mIGEgYmxvY2suCisgICAgICAgIChKU0M6OmlzVGhyb3cpOgorICAgICAgICAo
SlNDOjppc0p1bXBUYXJnZXQpOiBVc2VkIHRvIGNvcnJlY3RseSBzZXBhcmF0ZSBiYXNpYyBibG9j
a3MuIEFueSBqdW1wIGRlc3RpbmF0aW9uIAorICAgICAgICBtdXN0IGJlIHRoZSBoZWFkIG9mIGl0
cyBvd24gYmFzaWMgYmxvY2suCisgICAgICAgIChKU0M6OmxpbmtCbG9ja3MpOiBMaW5rcyB0d28g
YmxvY2tzIHRvZ2V0aGVyIGluIGEgYmktZGlyZWNpdG9uYWwgZmFzaGlvbi4KKyAgICAgICAgKEpT
Qzo6Y29tcHV0ZUJ5dGVjb2RlQmFzaWNCbG9ja3MpOiBDcmVhdGVzIGEgc2V0IG9mIGJhc2ljIGJs
b2NrcyBnaXZlbiBhIHBhcnRpY3VsYXIgCisgICAgICAgIENvZGVCbG9jayBhbmQgbGlua3MgdGhl
bSB0b2dldGhlci4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlQmFzaWNCbG9jazo6aXNFbnRyeUJsb2NrKTogRW50
cnkgYmxvY2tzIGFyZSBhIHNwZWNpYWwgYmFzaWMgYmxvY2tzIAorICAgICAgICB0aGF0IGluZGlj
YXRlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUJhc2ljQmxvY2s6OmlzRXhpdEJsb2NrKTogRXhpdCBibG9ja3MgYXJlIGEgc3BlY2lhbCBiYXNp
YyBibG9jayB0aGF0IAorICAgICAgICBhbGwgYmxvY2tzIHRoYXQgZXhpdCB0aGUgZnVuY3Rpb24g
aGF2ZSBhcyBhIHN1Y2Nlc3Nvci4gRW50cnkgYW5kIGV4aXQgYmxvY2tzIGFsbG93cyAKKyAgICAg
ICAgdGhlIHZhcmlvdXMgY29kZSBwYXRocyB0byBiZSBtb3JlIHJlZ3VsYXIuCisgICAgICAgIChK
U0M6OkJ5dGVjb2RlQmFzaWNCbG9jazo6bGVhZGVyQnl0ZWNvZGVPZmZzZXQpOiBUaGUgbGVhZGVy
IGJ5dGVjb2RlIG9mZnNldCBpcyB0aGUgCisgICAgICAgIGJ5dGVjb2RlIG9mZnNldCBvZiB0aGUg
Zmlyc3QgaW5zdHJ1Y3Rpb24gaW4gdGhlIGJsb2NrLgorICAgICAgICAoSlNDOjpCeXRlY29kZUJh
c2ljQmxvY2s6OnRvdGFsQnl0ZWNvZGVMZW5ndGgpOiBUaGUgdG90YWwgbGVuZ3RoIG9mIGFsbCB0
aGUgYnl0ZWNvZGVzIAorICAgICAgICBpbiB0aGlzIGJsb2NrLgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUJhc2ljQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0cyk6IFRoZSBieXRlY29kZSBvZmZzZXRzIGlu
IHRoaXMgcGFydGljdWxhciAKKyAgICAgICAgYmFzaWMgYmxvY2suIFRoaXMgVmVjdG9yIGFsbG93
cyB1cyB0byBpdGVyYXRlIG92ZXIgdGhlIGJ5dGVjb2RlcyBpbiByZXZlcnNlIG9yZGVyIAorICAg
ICAgICB3aGljaCB3b3VsZG4ndCBiZSBwb3NzaWJsZSBub3JtYWxseSBzaW5jZSB0aGV5IGFyZSBv
ZiB2YXJpYWJsZSBzaXplLgorICAgICAgICAoSlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6OmFkZFBy
ZWRlY2Vzc29yKTogTGlua3MgYSBibG9jayB0byBhIHNwZWNpZmllZCBwcmVkZWNlc3Nvci4gCisg
ICAgICAgIE9ubHkgY3JlYXRlcyBvbmUgZGlyZWN0aW9uIG9mIHRoZSBsaW5rLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6OmFkZFN1Y2Nlc3Nvcik6IFNhbWUgYXMgYWRkUHJlZGVj
ZXNzb3IsIGJ1dCBmb3Igc3VjY2Vzc29ycy4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Js
b2NrOjpwcmVkZWNlc3NvcnMpOiBHZXR0ZXIgZm9yIHByZWRlY2Vzc29ycy4KKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKTogR2V0dGVyIGZvciBzdWNjZXNzb3Jz
LgorICAgICAgICAoSlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6OmluKTogR2V0dGVyIGZvciB0aGUg
bGl2ZW5lc3MgaW5mbyBhdCB0aGUgaGVhZCBvZiB0aGUgYmxvY2suCisgICAgICAgIChKU0M6OkJ5
dGVjb2RlQmFzaWNCbG9jazo6b3V0KTogR2V0dGVyIGZvciB0aGUgbGl2ZW5lc3MgaW5mbyBhdCAg
dGhlIHRhaWwgb2YgdGhlIGJsb2NrLgorICAgICAgICAoSlNDOjpCeXRlY29kZUJhc2ljQmxvY2s6
OkJ5dGVjb2RlQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlQmFzaWNCbG9jazo6
YWRkQnl0ZWNvZGVMZW5ndGgpOiBXaGVuIGNyZWF0aW5nIGJhc2ljIGJsb2NrcyB3ZSBjYWxsIAor
ICAgICAgICB0aGlzIGZ1bmN0aW9uIHdoZW4gd2Ugd2FudCB0byBhZGQgdGhlIG5leHQgYnl0ZWNv
ZGUgaW4gcHJvZ3JhbSBvcmRlciB0byB0aGlzIGJsb2NrLgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyk6CisgICAgICAgIChK
U0M6Om51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMpOiBDb252ZW5pZW5jZSB3cmFwcGVyLiBSZXR1
cm5zIHRoZQorICAgICAgICBudW1iZXIgb2YgY2FwdHVyZWQgdmFyaWFibGVzIGZvciBhIHBhcnRp
Y3VsYXIgQ29kZUJsb2NrLCBvciAwIGlmIAorICAgICAgICB0aGUgQ29kZUJsb2NrIGhhcyBubyBT
eW1ib2xUYWJsZS4KKyAgICAgICAgKEpTQzo6Y2FwdHVyZVN0YXJ0KTogRGl0dG8sIGJ1dCBmb3Ig
Y2FwdHVyZVN0YXJ0KCkuCisgICAgICAgIChKU0M6OmNhcHR1cmVFbmQpOiBEaXR0bywgYnV0IGZv
ciBjYXB0dXJlRW5kKCkuCisgICAgICAgIChKU0M6OmlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNz
KTogUmV0dXJucyB0cnVlIGlmIHRoZSBsaXZlbmVzcyBhbmFseXNpcyBzaG91bGQgCisgICAgICAg
IHRyYWNrIHRoZSBsaXZlbmVzcyBvZiBhIHBhcnRpY3VsYXIgb3BlcmFuZC4gV2UgaWdub3JlIGNv
bnN0YW50cywgYXJndW1lbnRzLCBhbmQgCisgICAgICAgIGNhcHR1cmVkIHZhcmlhYmxlcy4gV2Ug
aWdub3JlIGFyZ3VtZW50cyBiZWNhdXNlIHRoZXkncmUgbGl2ZSBmb3IgdGhlIGR1cmF0aW9uIG9m
IAorICAgICAgICBhIGZ1bmN0aW9uIGNhbGwuIFdlIGlnbm9yZSBjYXB0dXJlZCB2YXJpYWJsZXMg
YmVjYXVzZSB3ZSBhbHNvIHRyZWF0IHRoZW0gYXMgbGl2ZSAKKyAgICAgICAgZm9yIHRoZSBkdXJh
dGlvbiBvZiB0aGUgZnVuY3Rpb24uIFRoaXMgY291bGQgcHJvYmFibHkgYmUgaW1wcm92ZWQgdG8g
YmUgbW9yZSBwcmVjaXNlLCAKKyAgICAgICAgYnV0IGl0IGRpZG4ndCBzZWVtIHdvcnRoIGl0IGZv
ciBub3cuCisgICAgICAgIChKU0M6OnNldEZvck9wZXJhbmQpOiBDb252ZW5pZW5jZSB3cmFwcGVy
IHRoYXQgc2V0cyB0aGUgYml0IGluIHRoZSBwcm92aWRlZCBiaXQgCisgICAgICAgIHZlY3RvciBm
b3IgdGhlIHByb3ZpZGVkIG9wZXJhbmQuIEl0IGhhbmRsZXMgc2tpcHBpbmcgb3ZlciBjYXB0dXJl
ZCB2YXJpYWJsZXMuCisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQp
OiBDb21wdXRlcyB3aGljaCBvcGVyYW5kcyBhcmUgdXNlZCBieSBhIHBhcnRpY3VsYXIgYnl0ZWNv
ZGUuCisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOiBDb21wdXRl
cyB3aGljaCBvcGVyYW5kcyBhcmUgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgCisgICAgICAgIGJ5
dGVjb2RlLiBUeXBpY2FsbHkgdGhpcyBpcyBqdXN0IHRoZSBsZWZ0LW1vc3Qgb3BlcmFuZC4KKyAg
ICAgICAgKEpTQzo6ZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KTogCisgICAgICAgIChK
U0M6OmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQpOiBTY2FucyBvdmVyIGJhc2ljIGJs
b2NrcyB0byBmaW5kIHRoZSBibG9jayAKKyAgICAgICAgd2hpY2ggY29udGFpbnMgYSBwYXJ0aWN1
bGFyIGJ5dGVjb2RlIG9mZnNldC4KKyAgICAgICAgKEpTQzo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NG
b3JCeXRlY29kZU9mZnNldCk6IENvbXB1dGVzIGJsb2NrLWxvY2FsIGxpdmVuZXNzIGZyb20gdGhl
IAorICAgICAgICBib3R0b20gb2YgdGhlIGJsb2NrIHVudGlsIGEgc3BlY2lmaWVkIGJ5dGVjb2Rl
IG9mZnNldCBpcyByZWFjaGVkLiAKKyAgICAgICAgKEpTQzo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NG
b3JCbG9jayk6IENvbXB1dGVzIGxpdmVuZXNzIGZvciB0aGUgZW50aXJlIGJsb2NrIGFuZCAKKyAg
ICAgICAgc3RvcmVzIHRoZSByZXN1bHRpbmcgbGl2ZW5lc3MgYXQgdGhlIGhlYWQuCisgICAgICAg
IChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6cnVuTGl2ZW5lc3NGaXhwb2ludCk6IFJ1
bnMgYmFja3dhcmQgZmxvdyBsaXZlbmVzcyAKKyAgICAgICAgYW5hbHlzaXMgdG8gZml4cG9pbnQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZv
Rm9yTm9uQ2FwdHVyZWRWYXJzQXRCeXRlY29kZU9mZnNldCk6IAorICAgICAgICBTbG93IHBhdGgg
dG8gZ2V0IGxpdmVuZXNzIGluZm8gZm9yIG5vbi1jYXB0dXJlZCwgbm9uLWFyZ3VtZW50IHZhcmlh
YmxlLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6Om9wZXJhbmRJc0xp
dmVBdEJ5dGVjb2RlT2Zmc2V0KTogCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCk6IFJldHVybnMgdGhlIGxpdmVu
ZXNzIAorICAgICAgICBpbmZvIGZvciBib3RoIGNhcHR1cmVkIGFuZCBub24tY2FwdHVyZWQgdmFy
cyBhdCBhIHBhcnRpY3VsYXIgYnl0ZWNvZGUgb2Zmc2V0LgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKTogRHVtcHMgdGhlIG91dHB1dCBvZiB0aGUg
bGl2ZW5lc3MgYW5hbHlzaXMuIAorICAgICAgICBDb250cm9sbGVkIGJ5IG5ldyBmbGFnIGluIE9w
dGlvbnMuaC8uY3BwLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNv
bXB1dGUpOiBDcmVhdGVzIGJ5dGVjb2RlIGJhc2ljIGJsb2NrcyBhbmQgcnVucyAKKyAgICAgICAg
ZnVsbCBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6aGFzQmVlbkNvbXB1dGVkKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzOjpjb21wdXRlSWZOZWNlc3NhcnkpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaXZlbmVzc0Fu
YWx5c2lzKToKKyAgICAgICAgKiBieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwOiBSZWZh
Y3RvcmVkIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBqdW1wIHRhcmdldHMgZm9yIAorICAgICAgICBh
IHBhcnRpY3VsYXIgYnl0ZWNvZGUgb2Zmc2V0IGZvciB1c2UgZHVyaW5nIGJ5dGVjb2RlIGJhc2lj
IGJsb2NrIGNvbnN0cnVjdGlvbi4KKyAgICAgICAgKEpTQzo6Z2V0SnVtcFRhcmdldHNGb3JCeXRl
Y29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMpOgor
ICAgICAgICAoSlNDOjpmaW5kSnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAg
ICogYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmg6CisgICAgICAgICogcnVudGltZS9PcHRp
b25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5pdGlhbGl6ZSk6CisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmg6CisKIDIwMTMtMTEtMTEgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBw
bGUuY29tPgogCiAgICAgICAgIFtpT1NdIERlZmluZSBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTU5MTMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00
Niw2ICs0Niw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAKICAgICBieXRlY29kZS9B
cnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcAogICAgIGJ5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAK
KyAgICBieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwCisgICAgYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAogICAgIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKICAg
ICBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKICAgICBieXRlY29kZS9Db2RlQmxvY2suY3Bw
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNp
b24gMTU5MTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsMTAgQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oIFwKKyAgICBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCBcCisgICAgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oIFwKKyAgICBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBc
CisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVDb252ZW50
aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTU5MTMx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk2LDYgKzI5Niw4IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcTWFjcm9Bc3NlbWJsZXJYODZDb21tb24u
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEFycmF5QWxsb2Nh
dGlvblByb2ZpbGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XEFycmF5UHJvZmlsZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5rSW5mby5jcHAiIC8+DQogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtTdGF0dXMuY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVCbG9jay5jcHAiIC8+DQpAQCAtNzQx
LDYgKzc0Myw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxBcnJheUFs
bG9jYXRpb25Qcm9maWxlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcQXJyYXlQcm9maWxlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcQnlWYWxJbmZvLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
Qnl0ZWNvZGVCYXNpY0Jsb2NrLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtJbmZvLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtTdGF0dXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIiAv
Pg0KQEAgLTEzMjQsNCArMTMyOCw0IEBACiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9u
VGFyZ2V0cyI+DQogICAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxCdWlsZEN1
c3RvbWl6YXRpb25zXG1hc20udGFyZ2V0cyIgLz4NCiAgIDwvSW1wb3J0R3JvdXA+DQotPC9Qcm9q
ZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4NCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lv
biAxNTkxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2
ICsxMDgsMTIgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEFycmF5UHJv
ZmlsZS5jcHAiPg0KICAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCiAgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVCYXNp
Y0Jsb2NrLmNwcCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0Ns
Q29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuY3BwIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENh
bGxMaW5rSW5mby5jcHAiPg0KICAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCiAgICAg
PC9DbENvbXBpbGU+DQpAQCAtMTM2NCw2ICsxMzcwLDEyIEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxCeVZhbEluZm8uaCI+DQogICAgICAgPEZpbHRlcj5ieXRlY29kZTwv
RmlsdGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxCeXRlY29kZUJhc2ljQmxvY2suaCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwv
RmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCI+DQorICAgICAgPEZpbHRlcj5ieXRl
Y29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxDYWxsTGlua0luZm8uaCI+DQogICAgICAgPEZpbHRlcj5ieXRlY29kZTwv
RmlsdGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCkBAIC0zMTA0LDQgKzMxMTYsNCBAQAogICAgICAg
PEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCiAgICAgPC9NQVNNPg0KICAgPC9JdGVtR3JvdXA+DQotPC9Q
cm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4NCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU5MTMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTEyMTYsNiArMTIxNiwxMCBAQAogCQlDMkVBRDJGQzE0RjAyNDk4MDBB
NEIxNTkgLyogQ29waWVkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMkVBRDJGQjE0RjAyNDk4MDBBNEIxNTkgLyogQ29waWVkQWxsb2Nh
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QzJGMEYyRDExNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRjBGMkQwMTZCQUVFRTkw
MDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi87IH07CiAJCUMyRkM5QkQzMTY2NDRE
RkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkM5QkQyMTY2NDRERkIwMDgxMEQzMyAvKiBDb3Bp
ZWRCbG9ja0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlDMkZDQUUxMDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2Nr
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNB
RTBDMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwICovOyB9OworCQlD
MkZDQUUxMTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwRDE3QTlDMjRFMDAz
NEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmggKi87IH07CisJCUMyRkNBRTEyMTdBOUMyNEUw
MDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8q
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgKi87IH07CisJCUMyRkNBRTEzMTdBOUMyNEUw
MDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBGMTdBOUMyNEUwMDM0QzczNSAvKiBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLzsgfTsKIAkJQzJGRTE4QTQxNkJBRUM0MDAwQUYz
MDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMkZFMThBMzE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFy
ZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlEREY3QUJENDExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEREY3QUJEMjExRjYwRUQy
MDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9w
YXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjUwMiw2ICsyNTA2
LDEwIEBACiAJCUMyRUFEMkZCMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29waWVkQWxsb2NhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRjBGMkQwMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1
Y3R1cmVSYXJlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
dHJ1Y3R1cmVSYXJlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkM5
QkQyMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29waWVkQmxvY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2lj
QmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0ZWNvZGVC
YXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJGQ0FFMEQxN0E5
QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCeXRlY29kZUJhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkZDQUUw
RjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkZFMThBMzE2QkFFQzQwMDBBRjMwNjEgLyogU3Ry
dWN0dXJlUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0
dXJlUmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjgwQUQ0
MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQwMjMsNiArNDAzMSwxMCBAQAogCQk5NjlBMDc4RjBF
RDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCUMyRkNBRTBDMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJh
c2ljQmxvY2suY3BwICovLAorCQkJCUMyRkNBRTBEMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29k
ZUJhc2ljQmxvY2suaCAqLywKKwkJCQlDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLywKKwkJCQlDMkZDQUUwRjE3QTlDMjRFMDAzNEM3MzUg
LyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8sCiAJCQkJMEY4MzM1QjQxNjM5QzFFMzAw
MTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwICovLAogCQkJCTBGODMzNUI1MTYz
OUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi8sCiAJCQkJMEY2Mzk0
NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgKi8sCkBAIC00MTYxLDYgKzQx
NzMsNyBAQAogCQkJCUE3QThBRjM3MTdBREI1RjMwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlclZpZXcu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJheUNv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3QjIg
LyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzJGQ0FFMTExN0E5QzI0
RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdC
REFFQzcxN0Y0RUExNDAwRjYxNDBDIC8qIEFycmF5SXRlcmF0b3JDb25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdCREFFQzkxN0Y0RUExNDAwRjYxNDBDIC8qIEFycmF5SXRlcmF0b3JQ
cm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDU1MTVEMDcwNTcwMDZBNTk3QyAv
KiBBcnJheVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtNDc1MSw2ICs0NzY0LDcgQEAKIAkJ
CQlBNzMwQjYxMjEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDY2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjgwRTE2RjVDRDAwQjM0NDYwIC8qIFN0
cmluZ09iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1
IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQyRTMxM0IxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9uZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtNTI4Nyw2ICs1MzAxLDcgQEAKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0MjdBNDgg
LyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzUxMDdFQzM3
NjAwNDI3QTQ4IC8qIERhdGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
NjEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlDMkZDQUUxMjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzMxMzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVi
dWdnZXJBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcw
MDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU2MDYs
NiArNTYyMSw3IEBACiAJCQkJMEZGNzI5QjIxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0
YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8q
IFByb2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMw
MDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUMy
RkNBRTEwMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4RDE2NzU0ODM3MDBGOEFCNkUgLyogUHJvZmls
ZXJPU1JFeGl0U2l0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyQjE2NzcxQzNBMDA5
Q0NCMDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJh
c2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVC
YXNpY0Jsb2NrLmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJQcmVjaXNl
SnVtcFRhcmdldHMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBib29sIGlzQnJhbmNo
KE9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICBjYXNl
IG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAgIGNh
c2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9qbmVx
X3B0cjoKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNl
IG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVz
czoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNh
c2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bf
c3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfZ2V0
X3BuYW1lczoKKyAgICBjYXNlIG9wX25leHRfcG5hbWU6CisgICAgY2FzZSBvcF9jaGVja19oYXNf
aW5zdGFuY2U6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGlzVW5jb25kaXRpb25hbEJyYW5j
aChPcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgY2Fz
ZSBvcF9qbXA6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGlzVGVybWluYWwoT3Bjb2RlSUQg
b3Bjb2RlSUQpCit7CisgICAgc3dpdGNoIChvcGNvZGVJRCkgeworICAgIGNhc2Ugb3BfcmV0Ogor
ICAgIGNhc2Ugb3BfcmV0X29iamVjdF9vcl90aGlzOgorICAgIGNhc2Ugb3BfZW5kOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitzdGF0aWMgYm9vbCBpc1Rocm93KE9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHN3
aXRjaCAob3Bjb2RlSUQpIHsKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfdGhyb3df
c3RhdGljX2Vycm9yOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc0p1bXBUYXJnZXQoT3Bj
b2RlSUQgb3Bjb2RlSUQsIFZlY3Rvcjx1bnNpZ25lZCwgMzI+JiBqdW1wVGFyZ2V0cywgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgaWYgKG9wY29kZUlEID09IG9wX2NhdGNoKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqdW1wVGFy
Z2V0cy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoYnl0ZWNvZGVPZmZzZXQgPT0ganVtcFRh
cmdldHNbaV0pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzdGF0aWMgdm9pZCBsaW5rQmxvY2tzKEJ5dGVjb2RlQmFzaWNCbG9jayogcHJl
ZGVjZXNzb3IsIEJ5dGVjb2RlQmFzaWNCbG9jayogc3VjY2Vzc29yKQoreworICAgIHByZWRlY2Vz
c29yLT5hZGRTdWNjZXNzb3Ioc3VjY2Vzc29yKTsKKyAgICBzdWNjZXNzb3ItPmFkZFByZWRlY2Vz
c29yKHByZWRlY2Vzc29yKTsKK30KKwordm9pZCBjb21wdXRlQnl0ZWNvZGVCYXNpY0Jsb2NrcyhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+ID4m
IGJhc2ljQmxvY2tzKQoreworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMzI+IGp1bXBUYXJnZXRzOwor
ICAgIGNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMoY29kZUJsb2NrLCBqdW1wVGFyZ2V0cyk7CisK
KyAgICAvLyBDcmVhdGUgdGhlIGVudHJ5IGFuZCBleGl0IGJhc2ljIGJsb2Nrcy4KKyAgICBCeXRl
Y29kZUJhc2ljQmxvY2sqIGVudHJ5ID0gbmV3IEJ5dGVjb2RlQmFzaWNCbG9jayhCeXRlY29kZUJh
c2ljQmxvY2s6OkVudHJ5QmxvY2spOworICAgIGJhc2ljQmxvY2tzLmFwcGVuZChhZG9wdFJlZihl
bnRyeSkpOworICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogZXhpdCA9IG5ldyBCeXRlY29kZUJhc2lj
QmxvY2soQnl0ZWNvZGVCYXNpY0Jsb2NrOjpFeGl0QmxvY2spOworCisgICAgLy8gRmluZCBiYXNp
YyBibG9jayBib3VuZGFyaWVzLgorICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogY3VycmVudCA9IG5l
dyBCeXRlY29kZUJhc2ljQmxvY2soMCwgMCk7CisgICAgbGlua0Jsb2NrcyhlbnRyeSwgY3VycmVu
dCk7CisgICAgYmFzaWNCbG9ja3MuYXBwZW5kKGFkb3B0UmVmKGN1cnJlbnQpKTsKKworICAgIGJv
b2wgbmV4dEluc3RydWN0aW9uSXNMZWFkZXIgPSBmYWxzZTsKKworICAgIEludGVycHJldGVyKiBp
bnRlcnByZXRlciA9IGNvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7CisgICAgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uc0JlZ2luID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigp
OworICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNv
ZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50OykgeworICAgICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9m
ZnNldF0udS5vcGNvZGUpOworICAgICAgICB1bnNpZ25lZCBvcGNvZGVMZW5ndGggPSBvcGNvZGVM
ZW5ndGhzW29wY29kZUlEXTsKKworICAgICAgICBib29sIGNyZWF0ZWRCbG9jayA9IGZhbHNlOwor
ICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBieXRlY29kZSBpcyBhIGp1bXAgdGFyZ2V0LCB0aGVu
IGl0J3MgdGhlIGxlYWRlciBvZiBpdHMgb3duIGJhc2ljIGJsb2NrLgorICAgICAgICBpZiAoaXNK
dW1wVGFyZ2V0KG9wY29kZUlELCBqdW1wVGFyZ2V0cywgYnl0ZWNvZGVPZmZzZXQpIHx8IG5leHRJ
bnN0cnVjdGlvbklzTGVhZGVyKSB7CisgICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJs
b2NrID0gbmV3IEJ5dGVjb2RlQmFzaWNCbG9jayhieXRlY29kZU9mZnNldCwgb3Bjb2RlTGVuZ3Ro
KTsKKyAgICAgICAgICAgIGJhc2ljQmxvY2tzLmFwcGVuZChhZG9wdFJlZihibG9jaykpOworICAg
ICAgICAgICAgY3VycmVudCA9IGJsb2NrOworICAgICAgICAgICAgY3JlYXRlZEJsb2NrID0gdHJ1
ZTsKKyAgICAgICAgICAgIG5leHRJbnN0cnVjdGlvbklzTGVhZGVyID0gZmFsc2U7CisgICAgICAg
ICAgICBieXRlY29kZU9mZnNldCArPSBvcGNvZGVMZW5ndGg7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBJZiB0aGUgY3VycmVudCBieXRlY29kZSBpcyBhIGJyYW5jaCBvciBhIHJldHVybiwgdGhl
biB0aGUgbmV4dCBpbnN0cnVjdGlvbiBpcyB0aGUgbGVhZGVyIG9mIGl0cyBvd24gYmFzaWMgYmxv
Y2suCisgICAgICAgIGlmIChpc0JyYW5jaChvcGNvZGVJRCkgfHwgaXNUZXJtaW5hbChvcGNvZGVJ
RCkgfHwgaXNUaHJvdyhvcGNvZGVJRCkpCisgICAgICAgICAgICBuZXh0SW5zdHJ1Y3Rpb25Jc0xl
YWRlciA9IHRydWU7CisKKyAgICAgICAgaWYgKGNyZWF0ZWRCbG9jaykKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIC8vIE90aGVyd2lzZSwganVzdCBhZGQgdG8gdGhlIGxlbmd0aCBv
ZiB0aGUgY3VycmVudCBibG9jay4KKyAgICAgICAgY3VycmVudC0+YWRkQnl0ZWNvZGVMZW5ndGgo
b3Bjb2RlTGVuZ3RoKTsKKyAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gb3Bjb2RlTGVuZ3RoOwor
ICAgIH0KKworICAgIC8vIExpbmsgYmFzaWMgYmxvY2tzIHRvZ2V0aGVyLgorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2Nrcy5zaXplKCk7IGkrKykgeworICAgICAgICBCeXRl
Y29kZUJhc2ljQmxvY2sqIGJsb2NrID0gYmFzaWNCbG9ja3NbaV0uZ2V0KCk7CisKKyAgICAgICAg
aWYgKGJsb2NrLT5pc0VudHJ5QmxvY2soKSB8fCBibG9jay0+aXNFeGl0QmxvY2soKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGJvb2wgZmFsbHNUaHJvdWdoID0gdHJ1ZTsgCisg
ICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+bGVhZGVyQnl0ZWNv
ZGVPZmZzZXQoKTsgYnl0ZWNvZGVPZmZzZXQgPCBibG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZzZXQo
KSArIGJsb2NrLT50b3RhbEJ5dGVjb2RlTGVuZ3RoKCk7KSB7CisgICAgICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNv
ZGVPZmZzZXRdOworICAgICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+
Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLnUub3Bjb2RlKTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIG9wY29kZUxlbmd0aCA9IG9wY29kZUxlbmd0aHNbb3Bjb2RlSURdOworICAgICAgICAg
ICAgLy8gSWYgd2UgZm91bmQgYSB0ZXJtaW5hbCBieXRlY29kZSwgbGluayB0byB0aGUgZXhpdCBi
bG9jay4KKyAgICAgICAgICAgIGlmIChpc1Rlcm1pbmFsKG9wY29kZUlEKSkgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCA9PSBibG9jay0+bGVh
ZGVyQnl0ZWNvZGVPZmZzZXQoKSArIGJsb2NrLT50b3RhbEJ5dGVjb2RlTGVuZ3RoKCkpOworICAg
ICAgICAgICAgICAgIGxpbmtCbG9ja3MoYmxvY2ssIGV4aXQpOworICAgICAgICAgICAgICAgIGZh
bGxzVGhyb3VnaCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIHRocm93LCBnZXQgdGhlIEhhbmRsZXJJ
bmZvIGZvciB0aGlzIGluc3RydWN0aW9uIHRvIHNlZSB3aGVyZSB3ZSB3aWxsIGp1bXAuIAorICAg
ICAgICAgICAgLy8gSWYgdGhlcmUgaXNuJ3Qgb25lLCB0cmVhdCB0aGlzIHRocm93IGFzIGEgdGVy
bWluYWwuIFRoaXMgaXMgdHJ1ZSBldmVuIGlmIHdlIGhhdmUgYSBmaW5hbGx5CisgICAgICAgICAg
ICAvLyBibG9jayBiZWNhdXNlIHRoZSBmaW5hbGx5IGJsb2NrIHdpbGwgY3JlYXRlIGl0cyBvd24g
Y2F0Y2gsIHdoaWNoIHdpbGwgZ2VuZXJhdGUgYSBIYW5kbGVySW5mby4KKyAgICAgICAgICAgIGlm
IChpc1Rocm93KG9wY29kZUlEKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZU9m
ZnNldCArIG9wY29kZUxlbmd0aCA9PSBibG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZzZXQoKSArIGJs
b2NrLT50b3RhbEJ5dGVjb2RlTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZv
KiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQpOworICAgICAgICAgICAgICAgIGZhbGxzVGhyb3VnaCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIGlmICghaGFuZGxlcikgeworICAgICAgICAgICAgICAgICAgICBsaW5rQmxvY2tzKGJs
b2NrLCBleGl0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2Nrcy5z
aXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIG90
aGVyQmxvY2sgPSBiYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGhhbmRsZXItPnRhcmdldCA9PSBvdGhlckJsb2NrLT5sZWFkZXJCeXRlY29kZU9mZnNldCgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQmxvY2tzKGJsb2NrLCBvdGhlckJsb2NrKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIGJyYW5jaCwgbGluayB0byB0aGUgYmxvY2so
cykgdGhhdCB3ZSBqdW1wIHRvLgorICAgICAgICAgICAgaWYgKGlzQnJhbmNoKG9wY29kZUlEKSkg
eworICAgICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCA9
PSBibG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZzZXQoKSArIGJsb2NrLT50b3RhbEJ5dGVjb2RlTGVu
Z3RoKCkpOworICAgICAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgMT4gYnl0ZWNvZGVPZmZz
ZXRzSnVtcGVkVG87CisgICAgICAgICAgICAgICAgZmluZEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVP
ZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgYnl0ZWNvZGVPZmZzZXRzSnVtcGVkVG8p
OworCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2tz
LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayog
b3RoZXJCbG9jayA9IGJhc2ljQmxvY2tzW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoYnl0ZWNvZGVPZmZzZXRzSnVtcGVkVG8uY29udGFpbnMob3RoZXJCbG9jay0+bGVhZGVyQnl0
ZWNvZGVPZmZzZXQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQmxvY2tzKGJsb2Nr
LCBvdGhlckJsb2NrKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
aXNVbmNvbmRpdGlvbmFsQnJhbmNoKG9wY29kZUlEKSkKKyAgICAgICAgICAgICAgICAgICAgZmFs
bHNUaHJvdWdoID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IG9wY29kZUxlbmd0aDsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIElmIHdlIGZhbGwgdGhyb3VnaCB0aGVuIGxpbmsgdG8gdGhlIG5leHQg
YmxvY2sgaW4gcHJvZ3JhbSBvcmRlci4KKyAgICAgICAgaWYgKGZhbGxzVGhyb3VnaCkgeworICAg
ICAgICAgICAgQVNTRVJUKGkgKyAxIDwgYmFzaWNCbG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgICAg
IEJ5dGVjb2RlQmFzaWNCbG9jayogbmV4dEJsb2NrID0gYmFzaWNCbG9ja3NbaSArIDFdLmdldCgp
OworICAgICAgICAgICAgbGlua0Jsb2NrcyhibG9jaywgbmV4dEJsb2NrKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGJhc2ljQmxvY2tzLmFwcGVuZChhZG9wdFJlZihleGl0KSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQnl0ZWNvZGVCYXNpY0Jsb2Nr
X2gKKyNkZWZpbmUgQnl0ZWNvZGVCYXNpY0Jsb2NrX2gKKworI2luY2x1ZGUgPGxpbWl0cy5oPgor
I2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKKwordHlwZWRlZiBIYXNoTWFwPHVu
c2lnbmVkLCBGYXN0Qml0VmVjdG9yLCBXVEY6OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPiA+IEJ5dGVjb2RlVG9CaXRtYXBNYXA7
CisKK2NsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jayA6IHB1YmxpYyBSZWZDb3VudGVkPEJ5dGVjb2Rl
QmFzaWNCbG9jaz4geworcHVibGljOgorICAgIGVudW0gU3BlY2lhbEJsb2NrVHlwZSB7IEVudHJ5
QmxvY2ssIEV4aXRCbG9jayB9OworICAgIEJ5dGVjb2RlQmFzaWNCbG9jayh1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBCeXRlY29kZUJhc2ljQmxvY2soU3BlY2lhbEJsb2Nr
VHlwZSk7CisKKyAgICBib29sIGlzRW50cnlCbG9jaygpIHsgcmV0dXJuICFtX2xlYWRlckJ5dGVj
b2RlT2Zmc2V0ICYmICFtX3RvdGFsQnl0ZWNvZGVMZW5ndGg7IH0KKyAgICBib29sIGlzRXhpdEJs
b2NrKCkgeyByZXR1cm4gbV9sZWFkZXJCeXRlY29kZU9mZnNldCA9PSBVSU5UX01BWCAmJiBtX3Rv
dGFsQnl0ZWNvZGVMZW5ndGggPT0gVUlOVF9NQVg7IH0KKworICAgIHVuc2lnbmVkIGxlYWRlckJ5
dGVjb2RlT2Zmc2V0KCkgeyByZXR1cm4gbV9sZWFkZXJCeXRlY29kZU9mZnNldDsgfQorICAgIHVu
c2lnbmVkIHRvdGFsQnl0ZWNvZGVMZW5ndGgoKSB7IHJldHVybiBtX3RvdGFsQnl0ZWNvZGVMZW5n
dGg7IH0KKworICAgIFZlY3Rvcjx1bnNpZ25lZD4mIGJ5dGVjb2RlT2Zmc2V0cygpIHsgcmV0dXJu
IG1fYnl0ZWNvZGVPZmZzZXRzOyB9CisgICAgdm9pZCBhZGRCeXRlY29kZUxlbmd0aCh1bnNpZ25l
ZCk7CisKKyAgICB2b2lkIGFkZFByZWRlY2Vzc29yKEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sp
IHsgbV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2NrKTsgfQorICAgIHZvaWQgYWRkU3VjY2Vzc29y
KEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2spIHsgbV9zdWNjZXNzb3JzLmFwcGVuZChibG9jayk7
IH0KKworICAgIFZlY3RvcjxCeXRlY29kZUJhc2ljQmxvY2sqPiYgcHJlZGVjZXNzb3JzKCkgeyBy
ZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0KKyAgICBWZWN0b3I8Qnl0ZWNvZGVCYXNpY0Jsb2NrKj4m
IHN1Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKworICAgIEZhc3RCaXRWZWN0
b3ImIGluKCkgeyByZXR1cm4gbV9pbjsgfQorICAgIEZhc3RCaXRWZWN0b3ImIG91dCgpIHsgcmV0
dXJuIG1fb3V0OyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9sZWFkZXJCeXRlY29kZU9m
ZnNldDsKKyAgICB1bnNpZ25lZCBtX3RvdGFsQnl0ZWNvZGVMZW5ndGg7CisKKyAgICBWZWN0b3I8
dW5zaWduZWQ+IG1fYnl0ZWNvZGVPZmZzZXRzOworCisgICAgVmVjdG9yPEJ5dGVjb2RlQmFzaWNC
bG9jayo+IG1fcHJlZGVjZXNzb3JzOworICAgIFZlY3RvcjxCeXRlY29kZUJhc2ljQmxvY2sqPiBt
X3N1Y2Nlc3NvcnM7CisKKyAgICBGYXN0Qml0VmVjdG9yIG1faW47CisgICAgRmFzdEJpdFZlY3Rv
ciBtX291dDsKK307CisKK3ZvaWQgY29tcHV0ZUJ5dGVjb2RlQmFzaWNCbG9ja3MoQ29kZUJsb2Nr
KiwgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+ID4mKTsKKworaW5saW5lIEJ5dGVj
b2RlQmFzaWNCbG9jazo6Qnl0ZWNvZGVCYXNpY0Jsb2NrKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBsZW5ndGgpCisgICAgOiBtX2xlYWRlckJ5dGVjb2RlT2Zmc2V0KHN0YXJ0KQorICAgICwgbV90
b3RhbEJ5dGVjb2RlTGVuZ3RoKGxlbmd0aCkKK3sKKyAgICBtX2J5dGVjb2RlT2Zmc2V0cy5hcHBl
bmQobV9sZWFkZXJCeXRlY29kZU9mZnNldCk7Cit9CisKK2lubGluZSBCeXRlY29kZUJhc2ljQmxv
Y2s6OkJ5dGVjb2RlQmFzaWNCbG9jayhCeXRlY29kZUJhc2ljQmxvY2s6OlNwZWNpYWxCbG9ja1R5
cGUgYmxvY2tUeXBlKQorICAgIDogbV9sZWFkZXJCeXRlY29kZU9mZnNldChibG9ja1R5cGUgPT0g
Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpFbnRyeUJsb2NrID8gMCA6IFVJTlRfTUFYKQorICAgICwgbV90
b3RhbEJ5dGVjb2RlTGVuZ3RoKGJsb2NrVHlwZSA9PSBCeXRlY29kZUJhc2ljQmxvY2s6OkVudHJ5
QmxvY2sgPyAwIDogVUlOVF9NQVgpCit7Cit9CisKK2lubGluZSB2b2lkIEJ5dGVjb2RlQmFzaWNC
bG9jazo6YWRkQnl0ZWNvZGVMZW5ndGgodW5zaWduZWQgYnl0ZWNvZGVMZW5ndGgpCit7CisgICAg
bV9ieXRlY29kZU9mZnNldHMuYXBwZW5kKG1fbGVhZGVyQnl0ZWNvZGVPZmZzZXQgKyBtX3RvdGFs
Qnl0ZWNvZGVMZW5ndGgpOworICAgIG1fdG90YWxCeXRlY29kZUxlbmd0aCArPSBieXRlY29kZUxl
bmd0aDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCeXRlY29kZUJhc2lj
QmxvY2tfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKKworI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0cy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCisgICAgLCBtX2NvbXB1dGVkKGZhbHNlKQoreworICAgIEFTU0VSVChtX2NvZGVCbG9jayk7
Cit9CisKK0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
KGNvbnN0IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgb3RoZXIpCisgICAgOiBtX2NvZGVCbG9j
ayhvdGhlci5tX2NvZGVCbG9jaykKKyAgICAsIG1fYmFzaWNCbG9ja3Mob3RoZXIubV9iYXNpY0Js
b2NrcykKKyAgICAsIG1fY29tcHV0ZWQob3RoZXIubV9jb21wdXRlZCkKK3sKK30KKworc3RhdGlj
IGludCBudW1iZXJPZkNhcHR1cmVkVmFyaWFibGVzKENvZGVCbG9jayogY29kZUJsb2NrKQorewor
ICAgIGlmICghY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5jYXB0dXJlQ291bnQoKTsKK30KKwor
c3RhdGljIGludCBjYXB0dXJlU3RhcnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgaWYg
KCFjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpOworfQorCitzdGF0aWMg
aW50IGNhcHR1cmVFbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgaWYgKCFjb2RlQmxv
Y2stPnN5bWJvbFRhYmxlKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjb2RlQmxv
Y2stPnN5bWJvbFRhYmxlKCktPmNhcHR1cmVFbmQoKTsKK30KKworc3RhdGljIGJvb2wgaXNWYWxp
ZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGludCBvcGVyYW5kKQor
eworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnKG9wZXJhbmQpOworICAgIHJldHVybiAh
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChvcGVyYW5kKSAvLyBEb24ndCBjYXJl
IGFib3V0IGNvbnN0YW50cy4KKyAgICAgICAgJiYgdmlydHVhbFJlZy5pc0xvY2FsKCkgLy8gRG9u
J3QgY2FyZSBhYm91dCBhcmd1bWVudHMuCisgICAgICAgICYmICghbnVtYmVyT2ZDYXB0dXJlZFZh
cmlhYmxlcyhjb2RlQmxvY2spIC8vIElmIHdlIGhhdmUgbm8gY2FwdHVyZWQgdmFyaWFibGVzLCB3
ZSdyZSBnb29kIHRvIGdvLgorICAgICAgICAgICAgfHwgKHZpcnR1YWxSZWcub2Zmc2V0KCkgPiBj
YXB0dXJlU3RhcnQoY29kZUJsb2NrKSB8fCAodmlydHVhbFJlZy5vZmZzZXQoKSA8PSBjYXB0dXJl
RW5kKGNvZGVCbG9jaykpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldEZvck9wZXJhbmQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEZhc3RCaXRWZWN0b3ImIGJpdHMsIGludCBvcGVyYW5kKQoreworICAg
IEFTU0VSVChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIG9wZXJhbmQpKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKKyAgICBpZiAodmlydHVh
bFJlZy5vZmZzZXQoKSA+IGNhcHR1cmVTdGFydChjb2RlQmxvY2spKQorICAgICAgICBiaXRzLnNl
dCh2aXJ0dWFsUmVnLnRvTG9jYWwoKSk7CisgICAgZWxzZQorICAgICAgICBiaXRzLnNldCh2aXJ0
dWFsUmVnLnRvTG9jYWwoKSAtIG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMoY29kZUJsb2NrKSk7
Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiB1c2Vz
KQoreworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+dm0oKS0+aW50
ZXJwcmV0ZXI7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9
ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CisgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKKyAg
ICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgLy8gTm8gdXNlcy4KKyAgICBjYXNlIG9wX25ld19y
ZWdleHA6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgIGNhc2Ugb3BfdGhyb3df
c3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9yZXNvbHZlX3Nj
b3BlOgorICAgIGNhc2Ugb3BfcG9wX3Njb3BlOgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAg
Y2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBv
cF9qbXA6CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgorICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3Jl
ZzoKKyAgICBjYXNlIG9wX2dldF9jYWxsZWU6CisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICBjYXNl
IG9wX2NhdGNoOgorICAgICAgICByZXR1cm47CisgICAgLy8gRmlyc3QgYXJndW1lbnQuCisgICAg
Y2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNlIG9wX2NyZWF0ZV9hY3RpdmF0aW9uOiAKKyAgICBj
YXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90b190aGlzOgorICAgIGNhc2Ug
b3BfdGVhcl9vZmZfYWN0aXZhdGlvbjoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfd2lsbF9jYWxsOgor
ICAgIGNhc2Ugb3BfcHJvZmlsZV9kaWRfY2FsbDoKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNh
c2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0
OgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9q
ZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBj
YXNlIG9wX2luYzogeworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29k
ZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3Bl
cmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhcmd1bWVudHMuCisgICAg
Y2FzZSBvcF9kZWxfYnlfaWQ6CisgICAgY2FzZSBvcF9yZXRfb2JqZWN0X29yX3RoaXM6CisgICAg
Y2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3Jl
YXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAg
Y2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9w
X2psZXNzOiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxv
Y2ssIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5k
KGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgaWYg
KGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEZp
cnN0LCBzZWNvbmQsIGFuZCB0aGlyZCBhcmd1bWVudHMuCisgICAgY2FzZSBvcF9kZWxfYnlfdmFs
OgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFs
OiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGlu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVC
bG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgaWYgKGlzVmFs
aWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mo
Y29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9y
T3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRmlyc3QgYW5kIHRoaXJkIGFyZ3VtZW50cy4KKyAg
ICBjYXNlIG9wX3B1dF9ieV9pbmRleDoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9yZXBsYWNlOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRf
dHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJl
Y3Rfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmU6Cisg
ICAgY2FzZSBvcF9wdXRfYnlfaWRfZ2VuZXJpYzoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9vdXRf
b2ZfbGluZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29w
ZTogeworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBp
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2Rl
QmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgIGlmIChpc1Zh
bGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBGaXJzdCwg
dGhpcmQsIGFuZCBmb3VydGggYXJndW1lbnRzLgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0
ZXI6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29k
ZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNW
YWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVz
cyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRG
b3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBTZWNvbmQgYXJndW1lbnQuCisgICAgY2FzZSBv
cF9pbml0X2dsb2JhbF9jb25zdF9ub3A6CisgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoK
KyAgICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKKyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3Bl
OgorICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Nl
bGY6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86CisgICAgY2FzZSBvcF9nZXRfYnlfaWRf
Y2hhaW46CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3NlbGY6CisgICAgY2FzZSBvcF9n
ZXRfYnlfaWRfZ2V0dGVyX3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9jaGFp
bjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fc2VsZjoKKyAgICBjYXNlIG9wX2dldF9i
eV9pZF9jdXN0b21fcHJvdG86CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX2NoYWluOgor
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dlbmVyaWM6CisgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVu
Z3RoOgorICAgIGNhc2Ugb3BfZ2V0X3N0cmluZ19sZW5ndGg6CisgICAgY2FzZSBvcF9nZXRfYXJn
dW1lbnRzX2xlbmd0aDoKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICBjYXNlIG9wX2lzX3VuZGVm
aW5lZDoKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgY2FzZSBvcF9pc19udW1iZXI6Cisg
ICAgY2FzZSBvcF9pc19zdHJpbmc6CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgY2FzZSBv
cF9pc19mdW5jdGlvbjoKKyAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICBjYXNlIG9wX25lZ2F0
ZToKKyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICBjYXNl
IG9wX25vdDoKKyAgICBjYXNlIG9wX21vdjoKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3Np
emU6CisgICAgY2FzZSBvcF9jcmVhdGVfdGhpczogeworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lz
dGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKQorICAg
ICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gU2Vjb25kIGFuZCB0aGly
ZCBhcmd1bWVudHMuCisgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgIGNhc2Ugb3BfZ2V0X2Fy
Z3VtZW50X2J5X3ZhbDoKKyAgICBjYXNlIG9wX2luOgorICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjoK
KyAgICBjYXNlIG9wX2NoZWNrX2hhc19pbnN0YW5jZToKKyAgICBjYXNlIG9wX2FkZDoKKyAgICBj
YXNlIG9wX211bDoKKyAgICBjYXNlIG9wX2RpdjoKKyAgICBjYXNlIG9wX21vZDoKKyAgICBjYXNl
IG9wX3N1YjoKKyAgICBjYXNlIG9wX2xzaGlmdDoKKyAgICBjYXNlIG9wX3JzaGlmdDoKKyAgICBj
YXNlIG9wX3Vyc2hpZnQ6CisgICAgY2FzZSBvcF9iaXRhbmQ6CisgICAgY2FzZSBvcF9iaXR4b3I6
CisgICAgY2FzZSBvcF9iaXRvcjoKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgY2FzZSBvcF9sZXNz
ZXE6CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgIGNh
c2Ugb3BfbnN0cmljdGVxOgorICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9uZXE6
CisgICAgY2FzZSBvcF9lcTogeworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5l
c3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0
Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Cisg
ICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywg
dXNlcywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAvLyBTZWNvbmQsIHRoaXJkLCBhbmQgZm91cnRoIGFyZ3VtZW50cy4KKyAgICBjYXNlIG9w
X2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX2dldF9wbmFtZXM6IHsKKyAgICAgICAgaWYgKGlz
VmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5l
c3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0
Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Cisg
ICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywg
dXNlcywgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAvLyBTZWNvbmQsIHRoaXJkLCBmb3VydGgsIGFuZCBmaWZ0aCBhcmd1bWVudHMuCisgICAg
Y2FzZSBvcF9uZXh0X3BuYW1lOiB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZl
bmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBz
ZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
KyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2Nr
LCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJl
Z2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKQor
ICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzRd
LnUub3BlcmFuZCk7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2Rl
QmxvY2ssIGluc3RydWN0aW9uWzVdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JPcGVy
YW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAvLyBTZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoLCBhbmQg
c2l4dGggYXJndW1lbnRzLiAKKyAgICBjYXNlIG9wX2dldF9ieV9wbmFtZTogeworICAgICAgICBp
ZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGlu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JM
aXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpCisgICAgICAgICAg
ICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCB1c2VzLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxp
ZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQp
KQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9u
WzVdLnUub3BlcmFuZCk7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhj
b2RlQmxvY2ssIGluc3RydWN0aW9uWzZdLnUub3BlcmFuZCkpCisgICAgICAgICAgICBzZXRGb3JP
cGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5kKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBUaGlyZCBhcmd1bWVudC4KKyAgICBjYXNlIG9wX3N3
aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRj
aF9pbW06IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQo
Y29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIC8vIFZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMuCisgICAgY2Fz
ZSBvcF9uZXdfYXJyYXk6CisgICAgY2FzZSBvcF9zdHJjYXQ6IHsKKyAgICAgICAgaW50IGJhc2Ug
PSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBjb3VudCA9IGluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KSB7CisgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2Nr
LCBiYXNlICsgaSkpCisgICAgICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVz
ZXMsIGJhc2UgKyBpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8v
IENyYXp5IHN0dWZmIGZvciBjYWxscy4KKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICBjYXNl
IG9wX2NhbGxfZXZhbDoKKyAgICBjYXNlIG9wX2NhbGw6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkK
KyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOworICAgICAgICBpbnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7CisgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZDsKKyAgICAgICAgaW50IGxhc3RBcmcgPSByZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6
dGhpc0FyZ3VtZW50T2Zmc2V0KCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnQ291
bnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNv
ZGVCbG9jaywgbGFzdEFyZyAtIGkpKQorICAgICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29k
ZUJsb2NrLCB1c2VzLCBsYXN0QXJnIC0gaSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAvLyBTcGVjaWFsIHN0dWZmIGZvciB0ZWFyIG9mZiBhcmd1bWVudHMuCisgICAg
Y2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkKKyAgICAg
ICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2Nr
LCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCkpLm9mZnNldCgpKSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29k
ZUJsb2NrLCB1c2VzLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLm9mZnNldCgpKTsKKyAgICAgICAgaWYgKGlzVmFs
aWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KSkKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIH0KK30KKworc3Rh
dGljIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIGRlZnMpCit7CisgICAg
SW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gY29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRlcjsK
KyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLmJlZ2luKCk7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJmluc3RydWN0
aW9uc0JlZ2luW2J5dGVjb2RlT2Zmc2V0XTsKKyAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVy
cHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbi0+dS5vcGNvZGUpOworICAgIHN3aXRjaCAo
b3Bjb2RlSUQpIHsKKyAgICAvLyBUaGVzZSBkb24ndCBkZWZpbmUgYW55dGhpbmcuCisgICAgY2Fz
ZSBvcF9pbml0X2dsb2JhbF9jb25zdDoKKyAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0X25v
cDoKKyAgICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKKyAgICBjYXNlIG9wX3B1c2hfd2l0aF9z
Y29wZToKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZToKKyAgICBjYXNlIG9wX3BvcF9zY29wZToK
KyAgICBjYXNlIG9wX2VuZDoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfd2lsbF9jYWxsOgorICAgIGNh
c2Ugb3BfcHJvZmlsZV9kaWRfY2FsbDoKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3Bf
dGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9yZXQ6
CisgICAgY2FzZSBvcF9yZXRfb2JqZWN0X29yX3RoaXM6CisgICAgY2FzZSBvcF9qbXA6CisgICAg
Y2FzZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxs
OgorICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2Fz
ZSBvcF9qbGVzczoKKyAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgY2FzZSBvcF9qZ3JlYXRlcjoK
KyAgICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbmxlc3M6CisgICAgY2FzZSBv
cF9qbmxlc3NlcToKKyAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2puZ3JlYXRl
cmVxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAg
ICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZToKKyAg
ICBjYXNlIG9wX3B1dF9ieV9pZF9yZXBsYWNlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5z
aXRpb246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgY2Fz
ZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xpbmU6CisgICAgY2FzZSBv
cF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJh
bnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfZ2VuZXJp
YzoKKyAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0X2J5X2lu
ZGV4OgorICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgorICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKKyAg
ICAgICAgcmV0dXJuOworICAgIC8vIFRoZXNlIGFsbCBoYXZlIGEgc2luZ2xlIGRlc3RpbmF0aW9u
IGZvciB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAgY2FzZSBvcF9uZXh0X3BuYW1lOgorICAgIGNh
c2Ugb3BfZ2V0X3BuYW1lczoKKyAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAgY2FzZSBv
cF9zdHJjYXQ6CisgICAgY2FzZSBvcF90ZWFyX29mZl9hY3RpdmF0aW9uOgorICAgIGNhc2Ugb3Bf
dG9fcHJpbWl0aXZlOgorICAgIGNhc2Ugb3BfY2F0Y2g6CisgICAgY2FzZSBvcF9jcmVhdGVfdGhp
czoKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6
CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgorICAgIGNhc2Ugb3BfbmV3X3JlZ2V4
cDoKKyAgICBjYXNlIG9wX25ld19mdW5jOgorICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAg
IGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAg
Y2FzZSBvcF9jYWxsOgorICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgIGNhc2Ugb3BfY29uc3Ry
dWN0OgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX291dF9v
Zl9saW5lOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6CisgICAgY2FzZSBvcF9nZXRfYnlf
aWRfcHJvdG86CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY2hhaW46CisgICAgY2FzZSBvcF9nZXRf
YnlfaWRfZ2V0dGVyX3NlbGY6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3RvOgor
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9jaGFpbjoKKyAgICBjYXNlIG9wX2dldF9ieV9p
ZF9jdXN0b21fc2VsZjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fcHJvdG86CisgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX2NoYWluOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dl
bmVyaWM6CisgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgorICAgIGNhc2Ugb3BfZ2V0X3N0
cmluZ19sZW5ndGg6CisgICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6CisgICAgY2FzZSBv
cF9pbnN0YW5jZW9mOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX2dldF9h
cmd1bWVudF9ieV92YWw6CisgICAgY2FzZSBvcF9nZXRfYnlfcG5hbWU6CisgICAgY2FzZSBvcF9n
ZXRfYXJndW1lbnRzX2xlbmd0aDoKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICBjYXNlIG9wX2lz
X3VuZGVmaW5lZDoKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgY2FzZSBvcF9pc19udW1i
ZXI6CisgICAgY2FzZSBvcF9pc19zdHJpbmc6CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAg
Y2FzZSBvcF9pc19mdW5jdGlvbjoKKyAgICBjYXNlIG9wX2luOgorICAgIGNhc2Ugb3BfdG9fbnVt
YmVyOgorICAgIGNhc2Ugb3BfbmVnYXRlOgorICAgIGNhc2Ugb3BfYWRkOgorICAgIGNhc2Ugb3Bf
bXVsOgorICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3BfbW9kOgorICAgIGNhc2Ugb3Bfc3Vi
OgorICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OgorICAgIGNhc2Ugb3Bf
dXJzaGlmdDoKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICBjYXNlIG9wX2JpdHhvcjoKKyAgICBj
YXNlIG9wX2JpdG9yOgorICAgIGNhc2Ugb3BfaW5jOgorICAgIGNhc2Ugb3BfZGVjOgorICAgIGNh
c2Ugb3BfZXE6CisgICAgY2FzZSBvcF9uZXE6CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICBj
YXNlIG9wX25zdHJpY3RlcToKKyAgICBjYXNlIG9wX2xlc3M6CisgICAgY2FzZSBvcF9sZXNzZXE6
CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgIGNhc2Ug
b3BfbmVxX251bGw6CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgIGNhc2Ugb3Bfbm90OgorICAg
IGNhc2Ugb3BfbW92OgorICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICBjYXNlIG9wX3RvX3Ro
aXM6CisgICAgY2FzZSBvcF9nZXRfY2FsbGVlOgorICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoK
KyAgICBjYXNlIG9wX2NyZWF0ZV9hY3RpdmF0aW9uOgorICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3Vt
ZW50czogeworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChj
b2RlQmxvY2ssIGRlZnMsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6IHsKKyAgICAgICAgaWYg
KGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kIC0gMSkpCisgICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgZGVmcywg
aW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kIC0gMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBvcF9lbnRlcjogeworICAgICAgICBkZWZzLnNldEFsbCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIH0KK30KKworc3RhdGljIHVuc2lnbmVkIGdldExlYWRlck9mZnNldEZv
ckJhc2ljQmxvY2soUmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4qIGJhc2ljQmxvY2spCit7Cisg
ICAgcmV0dXJuICgqYmFzaWNCbG9jayktPmxlYWRlckJ5dGVjb2RlT2Zmc2V0KCk7Cit9CisKK3N0
YXRpYyBCeXRlY29kZUJhc2ljQmxvY2sqIGZpbmRCYXNpY0Jsb2NrV2l0aExlYWRlck9mZnNldChW
ZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gPiYgYmFzaWNCbG9ja3MsIHVuc2lnbmVk
IGxlYWRlck9mZnNldCkKK3sKKyAgICByZXR1cm4gKCp0cnlCaW5hcnlTZWFyY2g8UmVmUHRyPEJ5
dGVjb2RlQmFzaWNCbG9jaz4sIHVuc2lnbmVkPihiYXNpY0Jsb2NrcywgYmFzaWNCbG9ja3Muc2l6
ZSgpLCBsZWFkZXJPZmZzZXQsIGdldExlYWRlck9mZnNldEZvckJhc2ljQmxvY2spKS5nZXQoKTsK
K30KKworc3RhdGljIGJvb2wgYmxvY2tDb250YWluc0J5dGVjb2RlT2Zmc2V0KEJ5dGVjb2RlQmFz
aWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIHVuc2lnbmVk
IGxlYWRlck9mZnNldCA9IGJsb2NrLT5sZWFkZXJCeXRlY29kZU9mZnNldCgpOworICAgIHJldHVy
biBieXRlY29kZU9mZnNldCA+PSBsZWFkZXJPZmZzZXQgJiYgYnl0ZWNvZGVPZmZzZXQgPCBsZWFk
ZXJPZmZzZXQgKyBibG9jay0+dG90YWxCeXRlY29kZUxlbmd0aCgpOworfQorCitzdGF0aWMgQnl0
ZWNvZGVCYXNpY0Jsb2NrKiBmaW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxS
ZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiA+JiBiYXNpY0Jsb2NrcywgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpCit7CisvKgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2Nr
cy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoYmxvY2tDb250YWluc0J5dGVjb2RlT2Zmc2V0
KGJhc2ljQmxvY2tzW2ldLmdldCgpLCBieXRlY29kZU9mZnNldCkpCisgICAgICAgICAgICByZXR1
cm4gYmFzaWNCbG9ja3NbaV0uZ2V0KCk7CisgICAgfQorICAgIHJldHVybiAwOworKi8KKyAgICBS
ZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiogYmFzaWNCbG9jayA9IGFwcHJveGltYXRlQmluYXJ5
U2VhcmNoPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+LCB1bnNpZ25lZD4oCisgICAgICAgIGJh
c2ljQmxvY2tzLCBiYXNpY0Jsb2Nrcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0LCBnZXRMZWFkZXJP
ZmZzZXRGb3JCYXNpY0Jsb2NrKTsKKyAgICAvLyBXZSBmb3VuZCB0aGUgYmxvY2sgd2Ugd2VyZSBs
b29raW5nIGZvci4KKyAgICBpZiAoYmxvY2tDb250YWluc0J5dGVjb2RlT2Zmc2V0KCgqYmFzaWNC
bG9jaykuZ2V0KCksIGJ5dGVjb2RlT2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuICgqYmFzaWNCbG9j
aykuZ2V0KCk7CisKKyAgICAvLyBCYXNpYyBibG9jayBpcyB0byB0aGUgbGVmdCBvZiB0aGUgcmV0
dXJuZWQgYmxvY2suCisgICAgaWYgKGJ5dGVjb2RlT2Zmc2V0IDwgKCpiYXNpY0Jsb2NrKS0+bGVh
ZGVyQnl0ZWNvZGVPZmZzZXQoKSkgeworICAgICAgICBBU1NFUlQoYmFzaWNCbG9jayAtIDEgPj0g
YmFzaWNCbG9ja3MuZGF0YSgpKTsKKyAgICAgICAgQVNTRVJUKGJsb2NrQ29udGFpbnNCeXRlY29k
ZU9mZnNldChiYXNpY0Jsb2NrWy0xXS5nZXQoKSwgYnl0ZWNvZGVPZmZzZXQpKTsKKyAgICAgICAg
cmV0dXJuIGJhc2ljQmxvY2tbLTFdLmdldCgpOworICAgIH0KKworICAgIC8vIEJhc2ljIGJsb2Nr
IGlzIHRvIHRoZSByaWdodCBvZiB0aGUgcmV0dXJuZWQgYmxvY2suCisgICAgQVNTRVJUKCZiYXNp
Y0Jsb2NrWzFdIDw9ICZiYXNpY0Jsb2Nrcy5sYXN0KCkpOworICAgIEFTU0VSVChibG9ja0NvbnRh
aW5zQnl0ZWNvZGVPZmZzZXQoYmFzaWNCbG9ja1sxXS5nZXQoKSwgYnl0ZWNvZGVPZmZzZXQpKTsK
KyAgICByZXR1cm4gYmFzaWNCbG9ja1sxXS5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgY29tcHV0
ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0
ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaywgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+
ID4mIGJhc2ljQmxvY2tzLCB1bnNpZ25lZCB0YXJnZXRPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHJl
c3VsdCkKK3sKKyAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9jaygpKTsKKyAgICBBU1NFUlQo
IWJsb2NrLT5pc0VudHJ5QmxvY2soKSk7CisKKyAgICBGYXN0Qml0VmVjdG9yIG91dCA9IGJsb2Nr
LT5vdXQoKTsKKyAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IDA7CisKKyAgICBGYXN0Qml0VmVj
dG9yIHVzZXM7CisgICAgRmFzdEJpdFZlY3RvciBkZWZzOworICAgIHVzZXMucmVzaXplKG91dC5u
dW1CaXRzKCkpOworICAgIGRlZnMucmVzaXplKG91dC5udW1CaXRzKCkpOworCisgICAgZm9yIChp
bnQgaSA9IGJsb2NrLT5ieXRlY29kZU9mZnNldHMoKS5zaXplKCkgLSAxOyBpID49IDA7IGktLSkg
eworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5ieXRlY29kZU9mZnNl
dHMoKVtpXTsKKyAgICAgICAgaWYgKHRhcmdldE9mZnNldCA+IGJ5dGVjb2RlT2Zmc2V0KQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgdXNlcy5jbGVhckFsbCgpOworICAgICAgICBkZWZz
LmNsZWFyQWxsKCk7CisKKyAgICAgICAgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldChjb2Rl
QmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCB1c2VzKTsKKyAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRl
Y29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCBkZWZzKTsKKworICAgICAgICBv
dXQuZXhjbHVkZShkZWZzKTsKKyAgICAgICAgb3V0Lm1lcmdlKHVzZXMpOworCisgICAgICAgIC8v
IElmIHdlIGhhdmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIHdlIHdhbnQgdGhlIGxpdmUtaW4gdmFy
aWFibGVzIG9mIHRoZSAKKyAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRsZXIgYmxvY2sgdG8gYmUg
aW5jbHVkZWQgaW4gdGhlIGxpdmUtaW4gb2YgdGhpcyBwYXJ0aWN1bGFyIGJ5dGVjb2RlLgorICAg
ICAgICBpZiAoKGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChi
eXRlY29kZU9mZnNldCkpKSB7CisgICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGhhbmRs
ZXJCbG9jayA9IGZpbmRCYXNpY0Jsb2NrV2l0aExlYWRlck9mZnNldChiYXNpY0Jsb2NrcywgaGFu
ZGxlci0+dGFyZ2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChoYW5kbGVyQmxvY2spOworICAgICAg
ICAgICAgb3V0Lm1lcmdlKGhhbmRsZXJCbG9jay0+aW4oKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXN1bHQuc2V0KG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVMb2NhbExpdmVu
ZXNzRm9yQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxv
Y2ssIFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiA+JiBiYXNpY0Jsb2NrcykKK3sK
KyAgICBpZiAoYmxvY2stPmlzRXhpdEJsb2NrKCkgfHwgYmxvY2stPmlzRW50cnlCbG9jaygpKQor
ICAgICAgICByZXR1cm47CisgICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNl
dChjb2RlQmxvY2ssIGJsb2NrLCBiYXNpY0Jsb2NrcywgYmxvY2stPmxlYWRlckJ5dGVjb2RlT2Zm
c2V0KCksIGJsb2NrLT5pbigpKTsKK30KKwordm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6
OnJ1bkxpdmVuZXNzRml4cG9pbnQoKQoreworICAgIEFTU0VSVCghbV9jb21wdXRlZCk7CisgICAg
VW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkQ29kZUJsb2NrKCk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZWYXJpYWJsZXMgPSB1bmxpbmtl
ZENvZGVCbG9jay0+bV9udW1WYXJzICsgCisgICAgICAgIHVubGlua2VkQ29kZUJsb2NrLT5tX251
bUNhbGxlZVJlZ2lzdGVycyAtIG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9jb2RlQmxvY2sp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmFzaWNCbG9ja3Muc2l6ZSgpOyBp
KyspIHsKKyAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmFzaWNCbG9ja3Nb
aV0uZ2V0KCk7CisgICAgICAgIGJsb2NrLT5pbigpLnJlc2l6ZShudW1iZXJPZlZhcmlhYmxlcyk7
CisgICAgICAgIGJsb2NrLT5vdXQoKS5yZXNpemUobnVtYmVyT2ZWYXJpYWJsZXMpOworICAgIH0K
KworICAgIGJvb2wgY2hhbmdlZDsKKyAgICBtX2Jhc2ljQmxvY2tzLmxhc3QoKS0+aW4oKS5jbGVh
ckFsbCgpOworICAgIG1fYmFzaWNCbG9ja3MubGFzdCgpLT5vdXQoKS5jbGVhckFsbCgpOworICAg
IEZhc3RCaXRWZWN0b3IgbmV3T3V0OworICAgIG5ld091dC5yZXNpemUobV9iYXNpY0Jsb2Nrcy5s
YXN0KCktPm91dCgpLm51bUJpdHMoKSk7CisgICAgZG8geworICAgICAgICBjaGFuZ2VkID0gZmFs
c2U7CisgICAgICAgIGZvciAoaW50IGkgPSBtX2Jhc2ljQmxvY2tzLnNpemUoKSAtIDI7IGkgPj0g
MDsgaS0tKSB7CisgICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9iYXNp
Y0Jsb2Nrc1tpXS5nZXQoKTsKKyAgICAgICAgICAgIG5ld091dC5jbGVhckFsbCgpOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGJsb2NrLT5zdWNjZXNzb3JzKCkuc2l6ZSgp
OyBqKyspCisgICAgICAgICAgICAgICAgbmV3T3V0Lm1lcmdlKGJsb2NrLT5zdWNjZXNzb3JzKClb
al0tPmluKCkpOworICAgICAgICAgICAgYm9vbCBvdXREaWRDaGFuZ2UgPSBibG9jay0+b3V0KCku
c2V0QW5kQ2hlY2sobmV3T3V0KTsKKyAgICAgICAgICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9y
QmxvY2sobV9jb2RlQmxvY2ssIGJsb2NrLCBtX2Jhc2ljQmxvY2tzKTsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gb3V0RGlkQ2hhbmdlOworICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7
Cit9CisKK3ZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9Gb3JO
b25DYXB0dXJlZFZhcnNBdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBG
YXN0Qml0VmVjdG9yJiByZXN1bHQpCit7CisgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9
IGZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9iYXNpY0Jsb2NrcywgYnl0ZWNvZGVP
ZmZzZXQpOworICAgIEFTU0VSVChibG9jayk7CisgICAgQVNTRVJUKCFibG9jay0+aXNFbnRyeUJs
b2NrKCkpOworICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOworICAgIHJlc3VsdC5y
ZXNpemUoYmxvY2stPm91dCgpLm51bUJpdHMoKSk7CisgICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NG
b3JCeXRlY29kZU9mZnNldChtX2NvZGVCbG9jaywgYmxvY2ssIG1fYmFzaWNCbG9ja3MsIGJ5dGVj
b2RlT2Zmc2V0LCByZXN1bHQpOworfQorCitib29sIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6
b3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9wZXJhbmQsIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0KQoreworICAgIGludCBudW1DYXB0dXJlZFZhcnMgPSBudW1iZXJPZkNhcHR1cmVk
VmFyaWFibGVzKG1fY29kZUJsb2NrKTsKKyAgICBBU1NFUlQobV9jb21wdXRlZCk7CisgICAgaWYg
KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS5pc0FyZ3VtZW50KCkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChvcGVyYW5kIDw9IGNhcHR1cmVTdGFydChtX2NvZGVCbG9jaykgJiYgb3Bl
cmFuZCA+IGNhcHR1cmVFbmQobV9jb2RlQmxvY2spKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBGYXN0Qml0VmVjdG9yIHJlc3VsdDsKKyAgICBnZXRMaXZlbmVzc0luZm9Gb3JOb25DYXB0dXJl
ZFZhcnNBdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCByZXN1bHQpOworICAgIHJldHVy
biByZXN1bHQuZ2V0KG9wZXJhbmQgLSBudW1DYXB0dXJlZFZhcnMpOworfQorCitGYXN0Qml0VmVj
dG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9m
ZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBGYXN0Qml0VmVjdG9yIHRlbXA7
CisgICAgRmFzdEJpdFZlY3RvciByZXN1bHQ7CisKKyAgICBnZXRMaXZlbmVzc0luZm9Gb3JOb25D
YXB0dXJlZFZhcnNBdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCB0ZW1wKTsKKworICAg
IHVuc2lnbmVkIG51bUNhcHR1cmVkVmFycyA9IG51bWJlck9mQ2FwdHVyZWRWYXJpYWJsZXMobV9j
b2RlQmxvY2spOworICAgIGlmIChudW1DYXB0dXJlZFZhcnMpIHsKKyAgICAgICAgaW50IGZpcnN0
Q2FwdHVyZWRMb2NhbCA9IFZpcnR1YWxSZWdpc3RlcihjYXB0dXJlU3RhcnQobV9jb2RlQmxvY2sp
KS50b0xvY2FsKCk7CisgICAgICAgIHJlc3VsdC5yZXNpemUodGVtcC5udW1CaXRzKCkgKyBudW1D
YXB0dXJlZFZhcnMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQ2FwdHVy
ZWRWYXJzOyArK2kpCisgICAgICAgICAgICByZXN1bHQuc2V0KGZpcnN0Q2FwdHVyZWRMb2NhbCAr
IGkpOworICAgIH0gZWxzZQorICAgICAgICByZXN1bHQucmVzaXplKHRlbXAubnVtQml0cygpKTsK
KworICAgIGludCB0ZW1wTGVuZ3RoID0gdGVtcC5udW1CaXRzKCk7CisgICAgQVNTRVJUKHRlbXBM
ZW5ndGggPj0gMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZW1wTGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgaWYgKCF0ZW1wLmdldChpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGlmICghbnVtQ2FwdHVyZWRWYXJzKSB7CisgICAgICAgICAgICByZXN1bHQuc2V0KGkpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAodmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaSkub2Zmc2V0KCkgPiBjYXB0dXJlU3RhcnQobV9jb2RlQmxvY2spKQor
ICAgICAgICAgICAgcmVzdWx0LnNldChpKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHJl
c3VsdC5zZXQobnVtQ2FwdHVyZWRWYXJzICsgaSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cygpCit7Cisg
ICAgQVNTRVJUKG1fY29tcHV0ZWQpOworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1f
Y29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRlcjsKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b25zQmVnaW4gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9iYXNpY0Jsb2Nrcy5zaXplKCk7IGkrKykgeworICAgICAg
ICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9iYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKKyAg
ICAgICAgZGF0YUxvZ0YoIlxuQnl0ZWNvZGUgYmFzaWMgYmxvY2sgJXU6ICVwIChvZmZzZXQ6ICV1
LCBsZW5ndGg6ICV1KVxuIiwgaSwgYmxvY2ssIGJsb2NrLT5sZWFkZXJCeXRlY29kZU9mZnNldCgp
LCBibG9jay0+dG90YWxCeXRlY29kZUxlbmd0aCgpKTsKKyAgICAgICAgZGF0YUxvZ0YoIlByZWRl
Y2Vzc29yczogIik7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBibG9jay0+cHJl
ZGVjZXNzb3JzKCkuc2l6ZSgpOyBqKyspIHsKKyAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9j
ayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzKClbal07CisgICAgICAgICAgICBk
YXRhTG9nRigiJXAgIiwgcHJlZGVjZXNzb3IpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dG
KCJcbiIpOworICAgICAgICBkYXRhTG9nRigiU3VjY2Vzc29yczogIik7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDA7IGogPCBibG9jay0+c3VjY2Vzc29ycygpLnNpemUoKTsgaisrKSB7Cisg
ICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNz
b3JzKClbal07CisgICAgICAgICAgICBkYXRhTG9nRigiJXAgIiwgc3VjY2Vzc29yKTsKKyAgICAg
ICAgfQorICAgICAgICBkYXRhTG9nRigiXG4iKTsKKyAgICAgICAgaWYgKGJsb2NrLT5pc0VudHJ5
QmxvY2soKSkgeworICAgICAgICAgICAgZGF0YUxvZ0YoIkVudHJ5IGJsb2NrICVwXG4iLCBibG9j
ayk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmxvY2st
PmlzRXhpdEJsb2NrKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dGKCJFeGl0IGJsb2NrOiAlcFxu
IiwgYmxvY2spOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5sZWFkZXJCeXRlY29kZU9mZnNldCgp
OyBieXRlY29kZU9mZnNldCA8IGJsb2NrLT5sZWFkZXJCeXRlY29kZU9mZnNldCgpICsgYmxvY2st
PnRvdGFsQnl0ZWNvZGVMZW5ndGgoKTspIHsKKyAgICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRd
OworCisgICAgICAgICAgICBkYXRhTG9nRigiTGl2ZSB2YXJpYWJsZXM6ICIpOworICAgICAgICAg
ICAgRmFzdEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9m
ZnNldChieXRlY29kZU9mZnNldCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgbGl2ZUJlZm9yZS5udW1CaXRzKCk7IGorKykgeworICAgICAgICAgICAgICAgIGlmIChsaXZl
QmVmb3JlLmdldChqKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiV1ICIsIGopOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CisgICAgICAgICAgICBt
X2NvZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZpbGUoKSwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIGluc3RydWN0aW9uc0JlZ2luLCBjdXJyZW50SW5z
dHJ1Y3Rpb24pOworCisgICAgICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVy
LT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF0udS5vcGNvZGUp
OworICAgICAgICAgICAgdW5zaWduZWQgb3Bjb2RlTGVuZ3RoID0gb3Bjb2RlTGVuZ3Roc1tvcGNv
ZGVJRF07CisgICAgICAgICAgICBieXRlY29kZU9mZnNldCArPSBvcGNvZGVMZW5ndGg7CisgICAg
ICAgIH0KKworICAgICAgICBkYXRhTG9nRigiTGl2ZSB2YXJpYWJsZXM6ICIpOworICAgICAgICBG
YXN0Qml0VmVjdG9yIGxpdmVBZnRlciA9IGJsb2NrLT5vdXQoKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IGxpdmVBZnRlci5udW1CaXRzKCk7IGorKykgeworICAgICAgICAgICAg
aWYgKGxpdmVBZnRlci5nZXQoaikpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiV1ICIsIGop
OworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dGKCJcbiIpOworICAgIH0KK30KKwordm9pZCBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGUoKQoreworICAgIGlmIChtX2NvbXB1dGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBjb21wdXRlQnl0ZWNvZGVCYXNpY0Jsb2NrcyhtX2Nv
ZGVCbG9jaywgbV9iYXNpY0Jsb2Nrcyk7CisgICAgQVNTRVJUKG1fYmFzaWNCbG9ja3Muc2l6ZSgp
KTsKKyAgICBydW5MaXZlbmVzc0ZpeHBvaW50KCk7CisgICAgbV9jb21wdXRlZCA9IHRydWU7CisK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcEJ5dGVjb2RlTGl2ZW5lc3NSZXN1bHRzKCkpCisgICAgICAg
IGR1bXBSZXN1bHRzKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNfaAorI2RlZmlu
ZSBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNfaAorCisjaW5jbHVkZSAiQnl0ZWNvZGVCYXNpY0Js
b2NrLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIENvZGVCbG9jazsKKworY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIHsKK3B1Ymxp
YzoKKyAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKik7CisgICAgQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzKGNvbnN0IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYpOworCisg
ICAgYm9vbCBvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9mZnNldChpbnQgb3BlcmFuZCwgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRC
eXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisKKyAgICBib29sIGhhc0Jl
ZW5Db21wdXRlZCgpIHsgcmV0dXJuIG1fY29tcHV0ZWQ7IH0KKyAgICB2b2lkIGNvbXB1dGUoKTsK
KyAgICB2b2lkIGNvbXB1dGVJZk5lY2Vzc2FyeSgpCisgICAgeworICAgICAgICBpZiAobV9jb21w
dXRlZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY29tcHV0ZSgpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICB2b2lkIHJ1bkxpdmVuZXNzRml4cG9pbnQoKTsKKyAgICB2b2lkIGR1bXBS
ZXN1bHRzKCk7CisKKyAgICB2b2lkIGdldExpdmVuZXNzSW5mb0Zvck5vbkNhcHR1cmVkVmFyc0F0
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImKTsK
KworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgVmVjdG9yPFJlZlB0cjxCeXRlY29k
ZUJhc2ljQmxvY2s+ID4gbV9iYXNpY0Jsb2NrczsKKworICAgIGJvb2wgbV9jb21wdXRlZDsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCShyZXZpc2lvbiAxNTkxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3Miw2ICsxNTcyLDcgQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9vcHRpbWl6YXRpb25E
ZWxheUNvdW50ZXIoMCkKICAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKICAg
ICAsIG1faGFzaChvdGhlci5tX2hhc2gpCisgICAgLCBtX2xpdmVuZXNzQW5hbHlzaXMob3RoZXIu
bV9saXZlbmVzc0FuYWx5c2lzKQogI2lmIEVOQUJMRShKSVQpCiAgICAgLCBtX2NhcGFiaWxpdHlM
ZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KQogI2VuZGlmCkBAIC0xNjE3LDYg
KzE2MTgsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAg
LCBtX29zckV4aXRDb3VudGVyKDApCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigw
KQogICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQorICAgICwgbV9saXZlbmVz
c0FuYWx5c2lzKHRoaXMpCiAjaWYgRU5BQkxFKEpJVCkKICAgICAsIG1fY2FwYWJpbGl0eUxldmVs
U3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCiAjZW5kaWYKQEAgLTE5MTksNiArMTky
MSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAogICAgIGlm
IChPcHRpb25zOjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkpCiAgICAgICAgIGR1bXBCeXRlY29k
ZSgpOworCiAgICAgbV9oZWFwLT5tX2NvZGVCbG9ja3MuYWRkKHRoaXMpOwogICAgIG1faGVhcC0+
cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZihDb2RlQmxvY2spICsgbV9pbnN0cnVjdGlvbnMu
c2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTkxMzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKICNpbmNsdWRlICJCeVZhbElu
Zm8uaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5jbHVk
ZSAiQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2tIYXNoLmgiCkBAIC05NSw2ICs5Niw3IEBAIGVudW0gUmVvcHRpbWl6YXRpb25Nb2RlIHsgRG9u
dENvdW50UmVvcHQKIAogY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPENvZGVCbG9jaz4sIHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyLCBwdWJsaWMgV2Vh
a1JlZmVyZW5jZUhhcnZlc3RlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
ZnJpZW5kIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKICAgICBmcmllbmQgY2xhc3Mg
SklUOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBwdWJsaWM6CkBA
IC02NzcsNiArNjc5LDggQEAgcHVibGljOgogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdEZvcihDb2RlT3JpZ2luKTsKIAorICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2
ZW5lc3NBbmFseXNpcygpIHsgcmV0dXJuIG1fbGl2ZW5lc3NBbmFseXNpczsgfQorCiAgICAgLy8g
SnVtcCBUYWJsZXMKIAogICAgIHNpemVfdCBudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKSBjb25z
dCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNp
emUoKSA6IDA7IH0KQEAgLTEwNzMsNiArMTA3Nyw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgbXV0
YWJsZSBDb2RlQmxvY2tIYXNoIG1faGFzaDsKIAorICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cyBtX2xpdmVuZXNzQW5hbHlzaXM7CisKICAgICBzdHJ1Y3QgUmFyZURhdGEgewogICAgICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAkocmV2
aXNpb24gMTU5MTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VK
dW1wVGFyZ2V0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDY2IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCit0ZW1wbGF0ZSA8c2l6ZV90IHZlY3RvclNpemU+CitzdGF0aWMgdm9pZCBn
ZXRKdW1wVGFyZ2V0c0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCBJbnRl
cnByZXRlciogaW50ZXJwcmV0ZXIsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiwgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIFZlY3Rvcjx1bnNpZ25lZCwgdmVjdG9yU2l6ZT4mIG91dCkK
K3sKKyAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0
cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF0udS5vcGNvZGUpOworICAgIEluc3RydWN0aW9u
KiBjdXJyZW50ID0gaW5zdHJ1Y3Rpb25zQmVnaW4gKyBieXRlY29kZU9mZnNldDsKKyAgICBzd2l0
Y2ggKG9wY29kZUlEKSB7CisgICAgY2FzZSBvcF9qbXA6CisgICAgICAgIG91dC5hcHBlbmQoYnl0
ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzFdLnUub3BlcmFuZCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVs
bDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9m
ZnNldCArIGN1cnJlbnRbMl0udS5vcGVyYW5kKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cF9qbmVxX3B0cjoKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAg
ICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9w
X2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgor
ICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZz
ZXQgKyBjdXJyZW50WzNdLnUub3BlcmFuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3Bf
c3dpdGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOiB7CisgICAgICAgIFNpbXBsZUp1
bXBUYWJsZSYgdGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShjdXJyZW50WzFdLnUu
b3BlcmFuZCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRhYmxlLmJyYW5jaE9mZnNldHMu
c2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIHRh
YmxlLmJyYW5jaE9mZnNldHNbaV0pOworICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0
ICsgY3VycmVudFsyXS51Lm9wZXJhbmQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBvcF9zd2l0Y2hfc3RyaW5nOiB7CisgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgdGFibGUgPSBj
b2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShjdXJyZW50WzFdLnUub3BlcmFuZCk7Cisg
ICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ZXIg
PSB0YWJsZS5vZmZzZXRUYWJsZS5iZWdpbigpOworICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0
cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS5vZmZzZXRUYWJsZS5lbmQoKTsK
KyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICBvdXQuYXBw
ZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0KTsKKyAgICAgICAg
b3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbMl0udS5vcGVyYW5kKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ugb3BfZ2V0X3BuYW1lczoKKyAgICAgICAgb3V0LmFw
cGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbNV0udS5vcGVyYW5kKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9uZXh0X3BuYW1lOgorICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2Rl
T2Zmc2V0ICsgY3VycmVudFs2XS51Lm9wZXJhbmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IG9wX2NoZWNrX2hhc19pbnN0YW5jZToKKyAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNl
dCArIGN1cnJlbnRbNF0udS5vcGVyYW5kKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9s
b29wX2hpbnQ6CisgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIHZvaWQgY29t
cHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVmVjdG9yPHVuc2ln
bmVkLCAzMj4mIG91dCkKIHsKICAgICBBU1NFUlQob3V0LmlzRW1wdHkoKSk7CkBAIC00NSw2MCAr
MTA1LDcgQEAgdm9pZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKENvZGVCbG9jawogICAgIHVu
c2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUo
KTsKICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQg
PCBpbnN0cnVjdGlvbkNvdW50OykgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVy
cHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF0udS5v
cGNvZGUpOwotICAgICAgICBJbnN0cnVjdGlvbiogY3VycmVudCA9IGluc3RydWN0aW9uc0JlZ2lu
ICsgYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAg
Y2FzZSBvcF9qbXA6Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3Vy
cmVudFsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3Bf
anRydWU6Ci0gICAgICAgIGNhc2Ugb3BfamZhbHNlOgotICAgICAgICBjYXNlIG9wX2plcV9udWxs
OgotICAgICAgICBjYXNlIG9wX2puZXFfbnVsbDoKLSAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0
ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBvcF9qbmVxX3B0cjoKLSAgICAgICAgY2FzZSBvcF9qbGVzczoKLSAgICAg
ICAgY2FzZSBvcF9qbGVzc2VxOgotICAgICAgICBjYXNlIG9wX2pncmVhdGVyOgotICAgICAgICBj
YXNlIG9wX2pncmVhdGVyZXE6Ci0gICAgICAgIGNhc2Ugb3Bfam5sZXNzOgotICAgICAgICBjYXNl
IG9wX2pubGVzc2VxOgotICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcjoKLSAgICAgICAgY2FzZSBv
cF9qbmdyZWF0ZXJlcToKLSAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBj
dXJyZW50WzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBv
cF9zd2l0Y2hfaW1tOgotICAgICAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOiB7Ci0gICAgICAgICAg
ICBTaW1wbGVKdW1wVGFibGUmIHRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoY3Vy
cmVudFsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGFibGUu
YnJhbmNoT2Zmc2V0cy5zaXplKCk7IGktLTspCi0gICAgICAgICAgICAgICAgb3V0LmFwcGVuZChi
eXRlY29kZU9mZnNldCArIHRhYmxlLmJyYW5jaE9mZnNldHNbaV0pOwotICAgICAgICAgICAgb3V0
LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbMl0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzogewot
ICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dp
dGNoSnVtcFRhYmxlKGN1cnJlbnRbMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIFN0cmluZ0p1
bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS5vZmZzZXRU
YWJsZS5iZWdpbigpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRU
YWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUub2Zmc2V0VGFibGUuZW5kKCk7Ci0gICAgICAgICAg
ICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgICAgICBvdXQuYXBwZW5k
KGJ5dGVjb2RlT2Zmc2V0ICsgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0KTsKLSAgICAgICAgICAg
IG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzJdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9wbmFtZXM6Ci0g
ICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFs1XS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3BfbmV4dF9wbmFtZToKLSAg
ICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzZdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFu
Y2U6Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFs0XS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3BfbG9vcF9oaW50
OgotICAgICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Cisg
ICAgICAgIGdldEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBpbnRlcnBy
ZXRlciwgaW5zdHJ1Y3Rpb25zQmVnaW4sIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOwogICAgICAgICBi
eXRlY29kZU9mZnNldCArPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsKICAgICB9CiAgICAgCkBA
IC0xMTgsNSArMTI1LDEyIEBAIHZvaWQgY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyhDb2RlQmxv
Y2sKICAgICBvdXQucmVzaXplKHRvSW5kZXgpOwogfQogCit2b2lkIGZpbmRKdW1wVGFyZ2V0c0Zv
ckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCwgVmVjdG9yPHVuc2lnbmVkLCAxPiYgb3V0KQoreworICAgIEludGVycHJldGVyKiBpbnRl
cnByZXRlciA9IGNvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7CisgICAgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uc0JlZ2luID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwor
ICAgIGdldEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBpbnRlcnByZXRl
ciwgaW5zdHJ1Y3Rpb25zQmVnaW4sIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNp
c2VKdW1wVGFyZ2V0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QcmVjaXNlSnVtcFRhcmdldHMuaAkocmV2aXNpb24gMTU5MTMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBjb21wdXRlUHJlY2lz
ZUp1bXBUYXJnZXRzKENvZGVCbG9jayosIFZlY3Rvcjx1bnNpZ25lZCwgMzI+JiBvdXQpOwordm9p
ZCBmaW5kSnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqLCB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCwgVmVjdG9yPHVuc2lnbmVkLCAxPiYgb3V0KTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CShyZXZpc2lvbiAxNTkxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgT3B0aW9uczo6
aW5pdGlhbGl6ZSgpCiAjaWYgIUVOQUJMRShZQVJSX0pJVCkKICAgICB1c2VSZWdFeHBKSVQoKSA9
IGZhbHNlOwogI2VuZGlmCi0gICAgCisKICAgICAvLyBEbyByYW5nZSBjaGVja3Mgd2hlcmUgbmVl
ZGVkIGFuZCBtYWtlIGNvcnJlY3Rpb25zIHRvIHRoZSBvcHRpb25zOgogICAgIEFTU0VSVCh0aHJl
c2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXpl
QWZ0ZXJXYXJtVXAoKSk7CiAgICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJt
VXAoKSA+PSB0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNTkxMzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5
LDcgQEAgdHlwZWRlZiBPcHRpb25SYW5nZSBvcHRpb25SYW5nZTsKICAgICB2KGJvb2wsIGZvcmNl
REZHQ29kZUJsb2NrTGl2ZW5lc3MsIGZhbHNlKSBcCiAgICAgXAogICAgIHYoYm9vbCwgZHVtcEdl
bmVyYXRlZEJ5dGVjb2RlcywgZmFsc2UpIFwKKyAgICB2KGJvb2wsIGR1bXBCeXRlY29kZUxpdmVu
ZXNzUmVzdWx0cywgZmFsc2UpIFwKICAgICBcCiAgICAgLyogc2hvd0Rpc2Fzc2VtYmx5IGltcGxp
ZXMgc2hvd0RGR0Rpc2Fzc2VtYmx5LiAqLyBcCiAgICAgdihib29sLCBzaG93RGlzYXNzZW1ibHks
IGZhbHNlKSBcCg==
</data>
<flag name="review"
          id="239725"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
    <flag name="commit-queue"
          id="239726"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>